// Copyright (c) 2020, 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:analyzer/src/error/codes.dart';
import 'package:analyzer/utilities/package_config_file_builder.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';

import '../dart/resolution/context_collection_resolution.dart';

main() {
  defineReflectiveSuite(() {
    defineReflectiveTests(ImportInternalLibraryTest);
  });
}

@reflectiveTest
class ImportInternalLibraryTest extends PubPackageResolutionTest {
  test_internal() async {
    // Note, in these error cases we may generate an UNUSED_IMPORT hint, while
    // we could prevent the hint from being generated by testing the import
    // directive for the error, this is such a minor corner case that we don't
    // think we should add the additional computation time to figure out such
    // cases.
    await assertErrorsInCode(
      '''
import 'dart:_internal';
''',
      [
        error(CompileTimeErrorCode.importInternalLibrary, 7, 16),
        error(WarningCode.unusedImport, 7, 16),
      ],
    );
  }

  test_wasm_fromJs() async {
    var packageRootPath = _newPackage('js');
    var file = newFile('$packageRootPath/lib/js.dart', '''
import 'dart:_wasm';
''');
    await resolveFile2(file);
    assertErrorsInResolvedUnit(result, [
      error(WarningCode.unusedImport, 7, 12),
    ]);
  }

  test_wasm_fromTest() async {
    await assertErrorsInCode(
      '''
import 'dart:_wasm';
''',
      [
        error(CompileTimeErrorCode.importInternalLibrary, 7, 12),
        error(WarningCode.unusedImport, 7, 12),
      ],
    );
  }

  test_wasm_fromUi() async {
    var packageRootPath = _newPackage('ui');
    var file = newFile('$packageRootPath/lib/ui.dart', '''
import 'dart:_wasm';
''');
    await resolveFile2(file);
    assertErrorsInResolvedUnit(result, [
      error(WarningCode.unusedImport, 7, 12),
    ]);
  }

  String _newPackage(String packageName) {
    var packageRootPath = '$workspaceRootPath/$packageName';
    var builder = PackageConfigFileBuilder();
    builder.add(
      name: packageName,
      rootPath: packageRootPath,
      languageVersion: testPackageLanguageVersion,
    );
    writePackageConfig(packageRootPath, builder);
    return packageRootPath;
  }
}
