#1260: Updated LanguageFeatures/FinalizationRegistry/Finalizer tests.
diff --git a/LanguageFeatures/FinalizationRegistry/Finalizer/Finalizer_A01_t01.dart b/LanguageFeatures/FinalizationRegistry/Finalizer/Finalizer_A01_t01.dart
index 7612042..3b00cfc 100644
--- a/LanguageFeatures/FinalizationRegistry/Finalizer/Finalizer_A01_t01.dart
+++ b/LanguageFeatures/FinalizationRegistry/Finalizer/Finalizer_A01_t01.dart
@@ -10,31 +10,23 @@
/// and will run in that zone when called.
///
/// @description Checks that finalizer object can be created and its callback
-/// will run when attached object becomes inaccessible.
+/// will not run if attached object is still accessible.
/// @author iarkh@unipro.ru
import "../gc_utils_lib.dart";
import "../../../Utils/expect.dart";
+class A {}
int called = 0;
final Finalizer finalizer = Finalizer((_) {
called++;
});
-class A {}
-
-void test() {
+main() {
+ A a = A();
finalizer.attach(A(), null);
Expect.equals(0, called);
-}
-
-main() {
- test();
- triggerGc();
- Expect.equals(1, called);
- triggerGc();
- Expect.equals(1, called);
- triggerGc();
- Expect.equals(1, called);
+ triggerGcWithDelay();
+ Expect.equals(0, called);
}
diff --git a/LanguageFeatures/FinalizationRegistry/Finalizer/Finalizer_A01_t02.dart b/LanguageFeatures/FinalizationRegistry/Finalizer/Finalizer_A01_t02.dart
index 619f039..9067d6a 100644
--- a/LanguageFeatures/FinalizationRegistry/Finalizer/Finalizer_A01_t02.dart
+++ b/LanguageFeatures/FinalizationRegistry/Finalizer/Finalizer_A01_t02.dart
@@ -24,11 +24,6 @@
main() {
finalizer.attach(Object(), null);
- Expect.equals(0, called);
- triggerGc();
- Expect.equals(1, called);
- triggerGc();
- Expect.equals(1, called);
- triggerGc();
+ triggerGcWithDelay();
Expect.equals(1, called);
}
diff --git a/LanguageFeatures/FinalizationRegistry/Finalizer/Finalizer_A01_t03.dart b/LanguageFeatures/FinalizationRegistry/Finalizer/Finalizer_A01_t03.dart
index f2e8867..e9e6087 100644
--- a/LanguageFeatures/FinalizationRegistry/Finalizer/Finalizer_A01_t03.dart
+++ b/LanguageFeatures/FinalizationRegistry/Finalizer/Finalizer_A01_t03.dart
@@ -10,7 +10,7 @@
/// and will run in that zone when called.
///
/// @description Checks that finalizer object can be created and its callback
-/// will never run if attached object is accessible.
+/// will run when attached object becomes inaccessible.
/// @author iarkh@unipro.ru
import "../gc_utils_lib.dart";
@@ -22,23 +22,11 @@
called++;
});
-class A {}
-
main() {
- A? a = A();
- finalizer.attach(a, null);
- Expect.equals(0, called);
- triggerGc();
- Expect.equals(0, called);
- triggerGc();
- Expect.equals(0, called);
- triggerGc();
- Expect.equals(0, called);
- a = null;
- triggerGc();
- Expect.equals(1, called);
- triggerGc();
- Expect.equals(1, called);
- triggerGc();
+ Object? obj = Object();
+ finalizer.attach(obj, null);
+ print(obj);
+ obj = null;
+ triggerGcWithDelay();
Expect.equals(1, called);
}
diff --git a/LanguageFeatures/FinalizationRegistry/Finalizer/Finalizer_A01_t04.dart b/LanguageFeatures/FinalizationRegistry/Finalizer/Finalizer_A01_t04.dart
index 4ad69c9..b7a4271 100644
--- a/LanguageFeatures/FinalizationRegistry/Finalizer/Finalizer_A01_t04.dart
+++ b/LanguageFeatures/FinalizationRegistry/Finalizer/Finalizer_A01_t04.dart
@@ -22,21 +22,15 @@
called++;
});
-test(obj) {
+test() {
+ Object obj = Object();
finalizer.attach(obj, null);
+ triggerGcWithDelay();
Expect.equals(0, called);
- triggerGc();
- Expect.equals(0, called);
- print(obj);
}
main() {
- test(Object());
- Expect.isTrue(called == 0 || called == 1);
- triggerGc();
- Expect.equals(1, called);
- triggerGc();
- Expect.equals(1, called);
- triggerGc();
+ test();
+ triggerGcWithDelay();
Expect.equals(1, called);
}
diff --git a/LanguageFeatures/FinalizationRegistry/gc_utils_lib.dart b/LanguageFeatures/FinalizationRegistry/gc_utils_lib.dart
index d4f34e9..7967012 100644
--- a/LanguageFeatures/FinalizationRegistry/gc_utils_lib.dart
+++ b/LanguageFeatures/FinalizationRegistry/gc_utils_lib.dart
@@ -32,3 +32,13 @@
_triggerGC();
}
+void triggerGcWithDelay() async {
+ triggerGc();
+ await Future.delayed(Duration(milliseconds: 1));
+ triggerGc();
+ await Future.delayed(Duration(milliseconds: 1));
+ triggerGc();
+ await Future.delayed(Duration(milliseconds: 1));
+ triggerGc();
+}
+