blob: 6c3c72830cbfd11fa709a2ed3fe96013d9e58773 [file] [log] [blame]
// 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();
});
});
}