diff --git a/LanguageFeatures/FinalizationRegistry/Finalizer/attach_A03_t02.dart b/LanguageFeatures/FinalizationRegistry/Finalizer/attach_A03_t02.dart deleted file mode 100644 index d3ba8f9584..0000000000 --- a/LanguageFeatures/FinalizationRegistry/Finalizer/attach_A03_t02.dart +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (c) 2022, 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. - -/// @assertion If a non-null detach value is provided, that object can be passed -/// to Finalizer.detach to remove the attachment again. -/// -/// @description Checks that nothing happens if detach token is [null]. -/// @author iarkh@unipro.ru - -import "../gc_utils_lib.dart"; -import "../../../Utils/expect.dart"; - -class A {} - -int cnt = 0; -final Finalizer finalizer = Finalizer((token) { - cnt++; -}); - -main() { - A detachToken = A(); - { - Object value = Object(); - finalizer.attach(value, "Finalization token", detach: null); - } - triggerGcWithDelay(); - Expect.equals(1, cnt); -} diff --git a/LanguageFeatures/FinalizationRegistry/Finalizer/attach_A04_t01.dart b/LanguageFeatures/FinalizationRegistry/Finalizer/attach_A04_t01.dart new file mode 100644 index 0000000000..cd0b3d9837 --- /dev/null +++ b/LanguageFeatures/FinalizationRegistry/Finalizer/attach_A04_t01.dart @@ -0,0 +1,32 @@ +// Copyright (c) 2022, 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. + +/// @assertion The value and detach arguments ... Both must be objects supported +/// as an [Expando] key. +/// +/// @description Checks that [value] must be supported as an [Expando] keys. +/// Test String. +/// @author iarkh@unipro.ru + +import "../gc_utils_lib.dart"; +import "../../../Utils/expect.dart"; + +final Finalizer finalizer = Finalizer((_) { throw "Should not reach here"; }); +Object detachToken = Object; + +main() { + Expect.throws(() { + finalizer.attach("Shouldn't work", "Finalization token", detach: detachToken); + }); + + String s = "Just a string"; + Expect.throws(() { + finalizer.attach("Shouldn't work", "Finalization token"); + }); + + dynamic d = s; + Expect.throws(() { + finalizer.attach("Shouldn't work", "Finalization token"); + }); +} diff --git a/LanguageFeatures/FinalizationRegistry/Finalizer/attach_A04_t02.dart b/LanguageFeatures/FinalizationRegistry/Finalizer/attach_A04_t02.dart new file mode 100644 index 0000000000..2a95758100 --- /dev/null +++ b/LanguageFeatures/FinalizationRegistry/Finalizer/attach_A04_t02.dart @@ -0,0 +1,37 @@ +// Copyright (c) 2022, 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. + +/// @assertion The value and detach arguments ... Both must be objects supported +/// as an [Expando] key. +/// +/// @description Checks that [value] must be supported as an [Expando] keys. +/// Test numbers. +/// @author iarkh@unipro.ru + +import "../gc_utils_lib.dart"; +import "../../../Utils/expect.dart"; + +final Finalizer finalizer = Finalizer((_) { throw "Should not reach here"; }); +Object detachToken = Object; + +main() { + Expect.throws(() { + finalizer.attach(12345, "Finalization token", detach: detachToken); + }); + + var i = 3.14; + Expect.throws(() { + finalizer.attach(i, "Finalization token"); + }); + + int j = -12934; + Expect.throws(() { + finalizer.attach(j, "Finalization token"); + }); + + dynamic d = -12.376; + Expect.throws(() { + finalizer.attach(d, "Finalization token"); + }); +} diff --git a/LanguageFeatures/FinalizationRegistry/Finalizer/attach_A04_t03.dart b/LanguageFeatures/FinalizationRegistry/Finalizer/attach_A04_t03.dart new file mode 100644 index 0000000000..92f4c080a9 --- /dev/null +++ b/LanguageFeatures/FinalizationRegistry/Finalizer/attach_A04_t03.dart @@ -0,0 +1,37 @@ +// Copyright (c) 2022, 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. + +/// @assertion The value and detach arguments ... Both must be objects supported +/// as an [Expando] key. +/// +/// @description Checks that [value] must be supported as an [Expando] keys. +/// Test booleans. +/// @author iarkh@unipro.ru + +import "../gc_utils_lib.dart"; +import "../../../Utils/expect.dart"; + +final Finalizer finalizer = Finalizer((_) { throw "Should not reach here"; }); +Object detachToken = Object; + +main() { + Expect.throws(() { + finalizer.attach(true, "Finalization token", detach: detachToken); + }); + + var b1 = false; + Expect.throws(() { + finalizer.attach(b1, "Finalization token"); + }); + + bool? b2 = true; + Expect.throws(() { + finalizer.attach(b2, "Finalization token"); + }); + + dynamic b3 = true; + Expect.throws(() { + finalizer.attach(b3, "Finalization token"); + }); +} diff --git a/LanguageFeatures/FinalizationRegistry/Finalizer/attach_A04_t04.dart b/LanguageFeatures/FinalizationRegistry/Finalizer/attach_A04_t04.dart new file mode 100644 index 0000000000..c70e5515d7 --- /dev/null +++ b/LanguageFeatures/FinalizationRegistry/Finalizer/attach_A04_t04.dart @@ -0,0 +1,22 @@ +// Copyright (c) 2022, 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. + +/// @assertion The value and detach arguments ... Both must be objects supported +/// as an [Expando] key. +/// +/// @description Checks that [value] must be supported as an [Expando] keys. +/// Test [Null]. +/// @author iarkh@unipro.ru + +import "../gc_utils_lib.dart"; +import "../../../Utils/expect.dart"; + +final Finalizer finalizer = Finalizer((_) { throw "Should not reach here"; }); + +main() { + dynamic d = null; + Expect.throws(() { + finalizer.attach(d, "Finalization token"); + }); +} diff --git a/LanguageFeatures/FinalizationRegistry/Finalizer/attach_A04_t05.dart b/LanguageFeatures/FinalizationRegistry/Finalizer/attach_A04_t05.dart new file mode 100644 index 0000000000..9097e8c5c2 --- /dev/null +++ b/LanguageFeatures/FinalizationRegistry/Finalizer/attach_A04_t05.dart @@ -0,0 +1,38 @@ +// Copyright (c) 2022, 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. + +/// @assertion The value and detach arguments ... Both must be objects supported +/// as an [Expando] key. +/// +/// @description Checks that [value] must be supported as an [Expando] keys. +/// Test Test dart:ffi pointers. +/// @author iarkh@unipro.ru + +import "dart:ffi"; +import "package:ffi/ffi.dart"; +import "../../../Utils/expect.dart"; + +final Finalizer finalizer = Finalizer((_) { throw "Should not reach here"; }); +Object detachToken = Object; + +main() { + Pointer p1 = calloc(); + try { + Expect.throws(() { + finalizer.attach(p1, "Finalization token"); + }); + } finally { + calloc.free(p1); + } + + Pointer p2 = calloc(); + try { + Expect.throws(() { + finalizer.attach(p2, "Finalization token"); + }); + } finally { + calloc.free(p2); + } + +} diff --git a/LanguageFeatures/FinalizationRegistry/Finalizer/attach_A04_t06.dart b/LanguageFeatures/FinalizationRegistry/Finalizer/attach_A04_t06.dart new file mode 100644 index 0000000000..f9d9663854 --- /dev/null +++ b/LanguageFeatures/FinalizationRegistry/Finalizer/attach_A04_t06.dart @@ -0,0 +1,33 @@ +// Copyright (c) 2022, 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. + +/// @assertion The value and detach arguments ... Both must be objects supported +/// as an [Expando] key. +/// +/// @description Checks that [value] must be supported as an [Expando] keys. +/// Test Test dart:ffi struct. +/// @author iarkh@unipro.ru + +import "dart:ffi"; +import "package:ffi/ffi.dart"; +import "../../../Utils/expect.dart"; + +final Finalizer finalizer = Finalizer((_) { throw "Should not reach here"; }); + +class S extends Struct { + @Int32() + external int x; +} + +main() { + Pointer p = calloc(); + try { + S s = p.ref; + Expect.throws(() { + finalizer.attach(p, "Finalization token"); + }); + } finally { + calloc.free(p); + } +} diff --git a/LanguageFeatures/FinalizationRegistry/Finalizer/attach_A04_t067.dart b/LanguageFeatures/FinalizationRegistry/Finalizer/attach_A04_t067.dart new file mode 100644 index 0000000000..5922a2d548 --- /dev/null +++ b/LanguageFeatures/FinalizationRegistry/Finalizer/attach_A04_t067.dart @@ -0,0 +1,35 @@ +// Copyright (c) 2022, 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. + +/// @assertion The value and detach arguments ... Both must be objects supported +/// as an [Expando] key. +/// +/// @description Checks that [value] must be supported as an [Expando] keys. +/// Test Test dart:ffi union. +/// @author iarkh@unipro.ru + +import "dart:ffi"; +import "package:ffi/ffi.dart"; +import "../../../Utils/expect.dart"; + +final Finalizer finalizer = Finalizer((_) { throw "Should not reach here"; }); + +class U extends Union { + @Int32() + external int x; + @Int16() + external int y; +} + +main() { + Pointer p = calloc(); + try { + U u = p.ref; + Expect.throws(() { + finalizer.attach(u, "Finalization token"); + }); + } finally { + calloc.free(p); + } +}