// 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.

/**
 * @assertion Let E be an export directive that refers to a URI via the string
 * s1. Evaluation of E proceeds as follows:
 * First,
 * • If the URI that is the value of s1 has not yet been accessed by an import
 *   or export directive in the current isolate then the contents of the URI
 *   are compiled to yield a library B.
 * • Otherwise, the contents of the URI denoted by s1 have been compiled into
 *   a library B within the current isolate.
 * Let NS0 be the exported namespace of B. Then, for each combinator clause
 * Ci, i in 1..n in E:
 * • If Ci is of the form show id1, ..., idk then let
 *   NSi = show([id1, ..., idk], NSi-1).
 * • If Ci is of the form hide id1, ..., idk then let
 *   NSi = hide([id1, ..., idk], NSi-1).
 *
 * For each entry mapping key k to declaration d in NSn an entry mapping k to
 * d is added to the exported namespace of L unless a top-level declaration
 * with the name k exists in L.
 *
 * @description Checks that the combined effect of show and hide combinators in
 * an export declaration is calculated as specified. Test imports 2 libraries
 * that declare the same names assigned to different values, but their exported
 * namespaces are filtered using show and hide combinators to avoide name
 * conflict.
 * @note Most of this is already covered by 1_Imports_A02* tests.
 * @author rodionov
 * @reviewer kaigorodov
 */
import "../../../Utils/expect.dart";

import "show_hide_t01_lib.dart";

main() {
  Expect.equals(1, foo()); // from lib2
  Expect.equals(2, bar); // from lib3
  Expect.equals(true, boo); // from lib2
  Expect.equals("static2", C.SF); // from lib3
}
