Backed out changeset 713114c0331a (bug 1938707) by developer request CLOSED TREE
[gecko.git] / js / xpconnect / tests / unit / test_js_weak_references.js
blob2603f24ee230373e057028f7b249c4c49909dc00
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2  * License, v. 2.0. If a copy of the MPL was not distributed with this
3  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 /* See https://bugzilla.mozilla.org/show_bug.cgi?id=317304 */
7 function run_test()
9   // Bug 712649: Calling getWeakReference(null) should work.
10   try {
11     var nullWeak = Cu.getWeakReference(null);
12     Assert.ok(nullWeak.get() === null);
13   } catch (e) {
14     Assert.ok(false);
15   }
17   var obj = { num: 5, str: 'foo' };
18   var weak = Cu.getWeakReference(obj);
20   Assert.ok(weak.get() === obj);
21   Assert.ok(weak.get().num == 5);
22   Assert.ok(weak.get().str == 'foo');
24   // Force garbage collection
25   Cu.forceGC();
27   // obj still references the object, so it should still be accessible via weak
28   Assert.ok(weak.get() === obj);
29   Assert.ok(weak.get().num == 5);
30   Assert.ok(weak.get().str == 'foo');
32   // Clear obj's reference to the object and force garbage collection. To make
33   // sure that there are no instances of obj stored in the registers or on the
34   // native stack and the conservative GC would not find it we force the same
35   // code paths that we used for the initial allocation.
36   obj = { num: 6, str: 'foo2' };
37   var weak2 = Cu.getWeakReference(obj);
38   Assert.ok(weak2.get() === obj);
40   Cu.forceGC();
42   // The object should have been garbage collected and so should no longer be
43   // accessible via weak
44   Assert.ok(weak.get() === null);