blob: 348194160582dca75bdc71d813271ae0866ac509 [file] [log] [blame]
// 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.7
// Test the command line options of dart2js.
import 'package:expect/expect.dart';
import 'package:compiler/src/commandline_options.dart';
import 'package:compiler/src/options.dart' show FeatureOptions, FeatureOption;
class TestFeatureOptions extends FeatureOptions {
FeatureOption sf1 = FeatureOption('sf1');
FeatureOption sf2 = FeatureOption('sf2');
FeatureOption noSf3 = FeatureOption('sf3', isNegativeFlag: true);
FeatureOption noSf4 = FeatureOption('sf4', isNegativeFlag: true);
FeatureOption cf1 = FeatureOption('cf1');
FeatureOption cf2 = FeatureOption('cf2');
FeatureOption noCf3 = FeatureOption('cf3', isNegativeFlag: true);
FeatureOption noCf4 = FeatureOption('cf4', isNegativeFlag: true);
@override
List<FeatureOption> shipping;
@override
List<FeatureOption> canary;
// Initialize feature lists.
TestFeatureOptions() {
shipping = [sf1, sf2, noSf3, noSf4];
canary = [cf1, cf2, noCf3, noCf4];
}
}
TestFeatureOptions test(List<String> flags) {
var tfo = TestFeatureOptions();
tfo.parse(flags);
return tfo;
}
void testShipping() {
var tfo = test([]);
Expect.isTrue(tfo.sf1.isEnabled);
Expect.isTrue(tfo.sf2.isEnabled);
Expect.isTrue(tfo.noSf3.isDisabled);
Expect.isTrue(tfo.noSf4.isDisabled);
Expect.isTrue(tfo.cf1.isDisabled);
Expect.isTrue(tfo.cf2.isDisabled);
Expect.isTrue(tfo.noCf3.isEnabled);
Expect.isTrue(tfo.noCf4.isEnabled);
}
void testNoShipping() {
var tfo = test([Flags.noShipping]);
Expect.isTrue(tfo.sf1.isDisabled);
Expect.isTrue(tfo.sf2.isDisabled);
Expect.isTrue(tfo.noSf3.isEnabled);
Expect.isTrue(tfo.noSf4.isEnabled);
Expect.isTrue(tfo.cf1.isDisabled);
Expect.isTrue(tfo.cf2.isDisabled);
Expect.isTrue(tfo.noCf3.isEnabled);
Expect.isTrue(tfo.noCf4.isEnabled);
}
void testCanary() {
var tfo = test([Flags.canary]);
Expect.isTrue(tfo.sf1.isEnabled);
Expect.isTrue(tfo.sf2.isEnabled);
Expect.isTrue(tfo.noSf3.isDisabled);
Expect.isTrue(tfo.noSf4.isDisabled);
Expect.isTrue(tfo.cf1.isEnabled);
Expect.isTrue(tfo.cf2.isEnabled);
Expect.isTrue(tfo.noCf3.isDisabled);
Expect.isTrue(tfo.noCf4.isDisabled);
}
void testShippingDisabled() {
var tfo = test(['--no-sf2', '--sf3']);
Expect.isTrue(tfo.sf1.isEnabled);
Expect.isTrue(tfo.sf2.isDisabled);
Expect.isTrue(tfo.noSf3.isEnabled);
Expect.isTrue(tfo.noSf4.isDisabled);
Expect.isTrue(tfo.cf1.isDisabled);
Expect.isTrue(tfo.cf2.isDisabled);
Expect.isTrue(tfo.noCf3.isEnabled);
Expect.isTrue(tfo.noCf4.isEnabled);
}
void testCanaryDisabled() {
var tfo = test([Flags.canary, '--no-sf2', '--sf3', '--no-cf1', '--cf3']);
Expect.isTrue(tfo.sf1.isEnabled);
Expect.isTrue(tfo.sf2.isDisabled);
Expect.isTrue(tfo.noSf3.isEnabled);
Expect.isTrue(tfo.noSf4.isDisabled);
Expect.isTrue(tfo.cf1.isDisabled);
Expect.isTrue(tfo.cf2.isEnabled);
Expect.isTrue(tfo.noCf3.isEnabled);
Expect.isTrue(tfo.noCf4.isDisabled);
}
void testNoShippingEnabled() {
var tfo = test([Flags.noShipping, '--sf1', '--no-sf3', '--cf2', '--no-cf3']);
Expect.isTrue(tfo.sf1.isEnabled);
Expect.isTrue(tfo.sf2.isDisabled);
Expect.isTrue(tfo.noSf3.isDisabled);
Expect.isTrue(tfo.noSf4.isEnabled);
Expect.isTrue(tfo.cf1.isDisabled);
Expect.isTrue(tfo.cf2.isEnabled);
Expect.isTrue(tfo.noCf3.isDisabled);
Expect.isTrue(tfo.noCf4.isEnabled);
}
void testNoCanaryEnabled() {
var tfo = test(['--cf1', '--no-cf3']);
Expect.isTrue(tfo.sf1.isEnabled);
Expect.isTrue(tfo.sf2.isEnabled);
Expect.isTrue(tfo.noSf3.isDisabled);
Expect.isTrue(tfo.noSf4.isDisabled);
Expect.isTrue(tfo.cf1.isEnabled);
Expect.isTrue(tfo.cf2.isDisabled);
Expect.isTrue(tfo.noCf3.isDisabled);
Expect.isTrue(tfo.noCf4.isEnabled);
}
void testFlagCollision() {
Expect.throwsArgumentError(() => test(['--cf1', '--no-cf1']));
}
void main() {
testShipping();
testNoShipping();
testCanary();
testShippingDisabled();
testCanaryDisabled();
testNoShippingEnabled();
testNoCanaryEnabled();
testNoShippingEnabled();
testFlagCollision();
}