// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS d.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:scheduled_test/scheduled_test.dart';

import '../descriptor.dart' as d;
import '../test_pub.dart';
import '../serve/utils.dart';

main() {
  initConfig();
  integration("supports most dart2js command-line options", () {
    d.dir(appPath, [
      d.pubspec({
        "name": "myapp",
        "transformers": [{
          "\$dart2js": {
            "commandLineOptions": ["--enable-diagnostic-colors"],
            "checked": true,
            "minify": true,
            "verbose": true,
            "environment": {"name": "value"},
            "analyzeAll": true,
            "suppressWarnings": true,
            "suppressHints": true,
            "suppressPackageWarnings": false,
            "terse": true
          }
        }]
      }),
      d.dir("lib", [d.dir("src", [
        d.file("transformer.dart", REWRITE_TRANSFORMER)
      ])])
    ]).create();

    createLockFile('myapp', pkg: ['barback']);

    // None of these options should be rejected, either by pub or by dart2js.
    pubServe();
    requestShouldSucceed("main.dart.js", isNot(isEmpty));
    endPubServe();
  });
}
