blob: 8104757d1cbed0a57a90934eefc5b3580f106523 [file] [log] [blame]
// Copyright (c) 2013, 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 "package:expect/expect.dart";
import "package:async_helper/async_helper.dart";
import 'compiler_helper.dart';
const String TEST_1 = """
class A {
var a = 42;
}
void main() {
new A().a = 54;
return new A().a;
}
""";
const String TEST_2 = """
class A {
var a = 42;
}
void main() {
return new A().a;
}
""";
const String TEST_3 = """
class A {
var a = 42;
}
void main() {
var a = new A();
return a.a + a.a;
}
""";
const String TEST_4 = """
class A {
var a = 42;
}
var list = [];
void main() {
new A().a = 54;
var a = new A();
list.add(a);
return a.a + a.a;
}
""";
const String TEST_5 = """
class A {
var a = 42;
}
var list = [];
void main() {
var a = new A();
list.add(a);
return a.a + a.a;
}
""";
const String TEST_6 = """
class A {
var a = 42;
}
var list = [new A()];
void main() {
var a = new A();
var b = list[0];
b.a = 52;
return a.a + a.a;
}
""";
const String TEST_7 = """
class A {
var a = 42;
}
var list = [new A(), new A()];
void main() {
var a = list[0];
a.a = 32;
return a.a;
}
""";
const String TEST_8 = """
class A {
var a = 42;
}
var list = [new A(), new A()];
void main() {
var a = list[0];
a.a = 32;
var b = list[1];
b.a = 42;
return a.a;
}
""";
const String TEST_9 = """
class A {
var a = 42;
}
void main() {
var a = new A();
(() => a.a = 2)();
return a.a;
}
""";
const String TEST_10 = """
class A {
var a = 42;
}
void main() {
var a = new A();
a.a = 2;
return a.a;
}
""";
const String TEST_11 = """
class A {
var a;
var b;
A(this.a);
A.bar(this.b);
foo() {
() => 42;
b.a = 2;
}
}
void main() {
var a = new A(42);
var b = new A.bar(a);
b.foo();
return a.a;
}
""";
const String TEST_12 = """
var a;
var b;
void main() {
a = 10;
b = 4;
return a - b;
}
""";
const String TEST_13 = """
var a = [1, 2];
void main() {
a[0] = 10;
a[1] = 4;
return a[0] - a[1];
}
""";
const String TEST_14 = """
var a = [1, 2];
var b = [1, 2];
void main() {
a[0] = 10;
b[0] = 4;
return a[0];
}
""";
const String TEST_15 = """
var a;
void main() {
a = 42;
if (true) {
}
return a;
}
""";
const String TEST_16 = """
var a;
void main() {
a = false;
if (main() && main()) {
a = true;
}
return a;
}
""";
const String TEST_17 = """
var a;
void main() {
if (main()) {
a = true;
} else {
a = false;
}
return a;
}
""";
const String TEST_18 = """
void main() {
var a = [42, true];
if (a[1]) {
a[0] = 1;
} else {
a[0] = 2;
}
return a[0];
}
""";
main() {
test(String code, Function f) {
asyncTest(() => compileAll(code, disableInlining: false).then((generated) {
Expect.isTrue(f(generated));
}));
}
test(TEST_1, (generated) => generated.contains('return 42'));
test(TEST_2, (generated) => generated.contains('return 42'));
test(TEST_3, (generated) => generated.contains('return 84'));
test(TEST_4, (generated) => generated.contains('return t1 + t1'));
test(TEST_5, (generated) => generated.contains('return 84'));
test(TEST_6, (generated) => generated.contains('return 84'));
test(TEST_7, (generated) => generated.contains('return 32'));
test(TEST_8, (generated) => generated.contains('return a.a'));
test(TEST_9, (generated) => generated.contains('return a.a'));
test(TEST_10, (generated) => generated.contains('return 2'));
test(TEST_11, (generated) => generated.contains('return a.a'));
test(TEST_12, (generated) => generated.contains('return 6'));
test(TEST_13, (generated) => generated.contains('return 6'));
test(TEST_14, (generated) => generated.contains('return t1[0]'));
test(TEST_15, (generated) => generated.contains('return 42'));
test(TEST_16, (generated) => generated.contains('return \$.a'));
test(TEST_17, (generated) => generated.contains('return t1'));
test(TEST_18, (generated) => generated.contains('return t1'));
}