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

// Test of import tag to library mapping.

import 'package:expect/expect.dart';
import "package:async_helper/async_helper.dart";
import 'compiler_helper.dart';

const MAIN_CODE = """
import 'library.dart';

main() {
}
""";

const LIB_CODE = """
library lib;
""";

void main() {
  var sources = <String, String>{
    'main.dart': MAIN_CODE,
    'library.dart': LIB_CODE,
  };

  asyncTest(() => compileSources(sources, (MockCompiler compiler) {
    LibraryElement mainApp =
        compiler.libraryLoader.lookupLibrary(Uri.parse('source:/main.dart'));
    LibraryElement lib =
        compiler.libraryLoader.lookupLibrary(Uri.parse('source:/library.dart'));
    Expect.isNotNull(mainApp, 'Could not find main.dart library');
    Expect.isNotNull(lib, 'Could not find library.dart library');

    ImportElement import = mainApp.imports.single;
    Expect.isNotNull(import, 'Could not find import tag in $mainApp');

    // Test that we can get from the import tag in main.dart to the
    // library element representing library.dart.
    Expect.identical(lib, import.importedLibrary);
  }));
}
