Index: client/tests/client/dom/NativeGCTest.dart |
diff --git a/client/tests/client/dom/NativeGCTest.dart b/client/tests/client/dom/NativeGCTest.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..2f9e8e869a211462a7d11c2bfc0a65f2a6d81386 |
--- /dev/null |
+++ b/client/tests/client/dom/NativeGCTest.dart |
@@ -0,0 +1,32 @@ |
+#library('NativeGCTest'); |
+#import('../../../testing/unittest/unittest.dart'); |
+#import('dart:dom'); |
+ |
+main() { |
+ |
+ test('EventListener', () { |
+ final int N = 1000000; |
+ final int M = 1000; |
+ |
+ var div; |
+ for (int i = 0; i < M; ++i) { |
+ // This memory should be freed when the listener below is |
+ // collected. |
+ List l = new List(N); |
+ |
+ // Record the iteration number. |
+ l[N - 1] = i; |
+ |
+ div = document.createElement('div'); |
+ div.addEventListener('test', (_) { |
+ // Only the final iteration's listener should be invoked. |
+ // Note: the reference to l keeps the entire list alive. |
+ Expect.equals(M - 1, l[N - 1]); |
+ }, false); |
+ } |
+ |
+ final event = document.createEvent('Event'); |
+ event.initEvent('test', true, false); |
+ div.dispatchEvent(event); |
+ }); |
+} |