// Copyright (c) 2011, 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.

library Prefix10Test.dart;
import "library10.dart" as lib10;
import "library11.dart" as lib11;

class Prefix10Test {
  static Test1() {
    var result = 0;
    var obj = new lib10.Library10(1);
    result = obj.fld;
    Expect.equals(1, result);
    result += obj.func();
    Expect.equals(3, result);
    result += lib10.Library10.static_func();
    Expect.equals(6, result);
    result += lib10.Library10.static_fld;
    Expect.equals(10, result);
  }
  static Test2() {
    var result = 0;
    var obj = new lib11.Library11(4);
    result = obj.fld;
    Expect.equals(4, result);
    result += obj.func();
    Expect.equals(7, result);
    result += lib11.Library11.static_func();
    Expect.equals(9, result);
    result += lib11.Library11.static_fld;
    Expect.equals(10, result);
  }
  static Test3() {
    Expect.equals(10, lib10.top_level10);
    Expect.equals(20, lib10.top_level_func10());
  }
  static Test4() {
    Expect.equals(100, lib11.top_level11);
    Expect.equals(200, lib11.top_level_func11());
  }
}

main() {
  Prefix10Test.Test1();
  Prefix10Test.Test2();
  Prefix10Test.Test3();
  Prefix10Test.Test4();
}
