// 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 "dart:io";
import "detect_nullsafety_helper.dart";

void main() {
  // Create temporary directory.
  var tmpDir = Directory.systemTemp.createTempSync();
  var tmpDirPath = tmpDir.path;
  String sourcePath = "$tmpDirPath/strong.dart";
  String dillPath = "$tmpDirPath/strong.dill";
  String jitPath = "$tmpDirPath/strong.appjit";

  // Generate code for an isolate to run in strong mode.
  generateIsolateSource(sourcePath, "");
  generateKernel(sourcePath, dillPath);
  generateAppJIT(sourcePath, jitPath);

  try {
    // Running from Source.
    testNullSafetyMode(sourcePath, 'Strong Mode');
    // Without the enable experiment option it will be in weak mode.
    testNullSafetyMode1(sourcePath, 'Weak Mode');

    // Running from Kernel File.
    testNullSafetyMode(dillPath, 'Strong Mode');
    // Without the enable experiment option it will be inferred to strong.
    testNullSafetyMode1(dillPath, 'Strong Mode');

    // Running from app JIT File.
    testNullSafetyMode(jitPath, 'Strong Mode');
    // Without the enable experiment option it will be inferred to strong.
    testNullSafetyMode1(jitPath, 'Strong Mode');
  } finally {
    tmpDir.deleteSync(recursive: true);
  }
}
