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

// @dart=2.9

import 'dart:io';

import 'package:kernel/ast.dart';
import 'package:kernel/kernel.dart';
import 'package:kernel/verifier.dart';
import 'package:test/test.dart';
import 'package:vm/transformations/to_string_transformer.dart'
    show transformComponent;

import '../common_test_utils.dart';

final Uri pkgVmUri = Platform.script.resolve('../..');

runTestCase(List<String> packageUris, String expectationName) async {
  final testCasesUri =
      pkgVmUri.resolve('testcases/transformations/to_string_transformer/');
  final packagesFileUri =
      testCasesUri.resolve('.dart_tool/package_config.json');
  Component component = await compileTestCaseToKernelProgram(
      Uri.parse('package:to_string_transformer_test/main.dart'),
      packagesFileUri: packagesFileUri);

  transformComponent(component, packageUris);
  verifyComponent(component);

  final actual = kernelLibraryToString(component.mainMethod.enclosingLibrary);

  compareResultWithExpectationsFile(
      testCasesUri.resolve(expectationName), actual);
}

main() {
  group('to-string-transformer', () {
    runTestCase(['package:foo'], 'not_transformed');
    runTestCase(
        ['package:foo', 'package:to_string_transformer_test'], 'transformed');
  });
}
