| // Copyright (c) 2014, 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. |
| |
| import 'package:expect/expect.dart'; |
| import 'package:async_helper/async_helper.dart'; |
| |
| import "global_lib.dart" deferred as lib; |
| |
| var nonDeferredGlobal = const {}; |
| |
| void main() { |
| nonDeferredGlobal = null; |
| asyncStart(); |
| lib.loadLibrary().then((_) { |
| // Ensure non-deferred globals are not reset when loading a deferred |
| // library. |
| Expect.equals(null, nonDeferredGlobal); |
| |
| Expect.equals("finalConstGlobal", lib.finalConstGlobal); |
| Expect.equals(0, lib.sideEffectCounter); |
| Expect.equals("finalNonConstGlobal", lib.finalNonConstGlobal); |
| Expect.equals(1, lib.sideEffectCounter); |
| Expect.equals("finalConstGlobal", lib.finalConstGlobal); |
| Expect.equals("finalNonConstGlobal", lib.finalNonConstGlobal); |
| Expect.equals("lazyConstGlobal", lib.lazyConstGlobal); |
| Expect.equals(1, lib.sideEffectCounter); |
| Expect.equals("lazyNonConstGlobal", lib.lazyNonConstGlobal); |
| Expect.equals(2, lib.sideEffectCounter); |
| Expect.equals("finalConstGlobal", lib.readFinalConstGlobal()); |
| Expect.equals("finalNonConstGlobal", lib.readFinalNonConstGlobal()); |
| Expect.equals("lazyConstGlobal", lib.readLazyConstGlobal()); |
| Expect.equals("lazyNonConstGlobal", lib.readLazyNonConstGlobal()); |
| |
| lib.lazyConstGlobal = "lazyConstGlobal_mutated"; |
| lib.lazyNonConstGlobal = "lazyNonConstGlobal_mutated"; |
| Expect.equals("lazyConstGlobal_mutated", lib.lazyConstGlobal); |
| Expect.equals("lazyNonConstGlobal_mutated", lib.lazyNonConstGlobal); |
| Expect.equals("lazyConstGlobal_mutated", lib.readLazyConstGlobal()); |
| Expect.equals("lazyNonConstGlobal_mutated", lib.readLazyNonConstGlobal()); |
| Expect.equals(2, lib.sideEffectCounter); |
| |
| lib.writeLazyConstGlobal("lazyConstGlobal_mutated2"); |
| lib.writeLazyNonConstGlobal("lazyNonConstGlobal_mutated2"); |
| Expect.equals("lazyConstGlobal_mutated2", lib.lazyConstGlobal); |
| Expect.equals("lazyNonConstGlobal_mutated2", lib.lazyNonConstGlobal); |
| Expect.equals("lazyConstGlobal_mutated2", lib.readLazyConstGlobal()); |
| Expect.equals("lazyNonConstGlobal_mutated2", lib.readLazyNonConstGlobal()); |
| |
| Expect.mapEquals({}, lib.lazyConstGlobal2); |
| lib.const1Global = const {'foo': 'bar'}; |
| Expect.equals(2, lib.sideEffectCounter); |
| Expect.equals(const {'foo': 'bar'}['foo'], lib.const1Global['foo']); |
| // Try loading the deferred library again, should not reset the globals. |
| lib.loadLibrary().then((_) { |
| Expect.equals(const {'foo': 'bar'}['foo'], lib.const1Global['foo']); |
| asyncEnd(); |
| }); |
| }); |
| } |