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

// Tests auto-detection of null safety mode in gen_kernel tool.

import 'dart:io' show File, Platform;

import 'package:path/path.dart' as path;
import 'snapshot_test_helper.dart';

compileAndRunTest(String comment, String expectedOutput) async {
  await withTempDir((String temp) async {
    final testScriptPath = path.join(temp, 'test.dart');
    File(testScriptPath).writeAsStringSync('''
      // $comment

      void main() {
        try {
          null as int;
          print('weak mode');
        } on TypeError {
          print('strong mode');
        }
      }
    ''');

    final testDillPath = path.join(temp, 'test.dill');
    await runGenKernel('BUILD DILL FILE', [
      '--enable-experiment=non-nullable',
      '--output=$testDillPath',
      testScriptPath,
    ]);

    final result = await runBinary(
        'RUN TEST FROM DILL', Platform.executable, [testDillPath]);
    expectOutput(expectedOutput, result);
  });
}

main() async {
  await compileAndRunTest('', 'strong mode');
  await compileAndRunTest('@dart=2.7', 'weak mode');
}
