// Copyright (c) 2023, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
//
// SharedObjects=ffi_test_functions

import 'dart:ffi';

import 'package:expect/expect.dart';

import 'dylib_utils.dart';

void main() {
  testClose();
  testUnclosable();
}

void testClose() {
  final lib = dlopenPlatformSpecific("ffi_test_functions");
  lib.lookup('ReturnMaxUint8');

  lib.close();
  Expect.throwsStateError(
      () => lib.lookup('ReturnMaxUint8'), 'Illegal lookup in closed library');
  lib.close(); // Duplicate close should not crash.
}

void testUnclosable() {
  final proc = DynamicLibrary.process();
  final exec = DynamicLibrary.executable();

  Expect.throwsStateError(proc.close);
  Expect.throwsStateError(exec.close);
}
