blob: 614a10207346e47ddd6b6e7ebc3791ad6aaf6dda [file] [log] [blame]
// Copyright (c) 2014, 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 for basic functionality.
library basic_tests;
import 'js_backend_cps_ir.dart';
const List<TestEntry> tests = const [
const TestEntry(r"""
main() {
var e = 1;
var l = [1, 2, 3];
var m = {'s': 1};
print('(' ')');
print('(${true})');
print('(${1})');
print('(${[1, 2, 3]})');
print('(${{'s': 1}})');
print('($e)');
print('($l)');
print('($m)');
}""",r"""
function() {
var l = [1, 2, 3], m = P.LinkedHashMap_LinkedHashMap$_literal(["s", 1]), value_ = C.JSArray_methods, res, v0, v1;
P.print("()");
P.print("(true)");
P.print("(1)");
if (!(typeof (res = value_.toString$0(v0 = [1, 2, 3])) === "string"))
throw H.wrapException(H.argumentErrorValue(v0));
P.print("(" + res + ")");
if (!(typeof (v1 = P.Maps_mapToString(v0 = P.LinkedHashMap_LinkedHashMap$_literal(["s", 1]))) === "string"))
throw H.wrapException(H.argumentErrorValue(v0));
P.print("(" + v1 + ")");
P.print("(1)");
if (!(typeof (res = value_.toString$0(l)) === "string"))
throw H.wrapException(H.argumentErrorValue(l));
P.print("(" + res + ")");
if (!(typeof (v0 = P.Maps_mapToString(m)) === "string"))
throw H.wrapException(H.argumentErrorValue(m));
P.print("(" + v0 + ")");
}"""),
const TestEntry("""
foo(a, [b = "b"]) { print(b); return b; }
bar(a, {b: "b", c: "c"}) { print(c); return c; }
main() {
foo(0);
foo(1, 2);
bar(3);
bar(4, b: 5);
bar(6, c: 7);
bar(8, b: 9, c: 10);
}
""",
"""
function() {
P.print("b");
P.print(2);
P.print("c");
P.print("c");
P.print(7);
P.print(10);
}"""),
const TestEntry(
"""
foo(a) {
print(a);
return a;
}
main() {
var a = 10;
var b = 1;
var t;
t = a;
a = b;
b = t;
print(a);
print(b);
print(b);
print(foo(a));
}
""",
"""
function() {
P.print(1);
P.print(10);
P.print(10);
P.print(1);
P.print(1);
}"""),
const TestEntry(
"""
foo() { print(42); return 42; }
main() { return foo(); }
""",
"""
function() {
var v0 = H.S(42);
if (typeof dartPrint == "function")
dartPrint(v0);
else if (typeof console == "object" && typeof console.log != "undefined")
console.log(v0);
else if (!(typeof window == "object")) {
if (!(typeof print == "function"))
throw "Unable to print message: " + String(v0);
print(v0);
}
return 42;
}"""),
const TestEntry("main() {}"),
const TestEntry("main() { return 42; }"),
const TestEntry("main() { return; }", """
function() {
}"""),
// Constructor invocation
const TestEntry("""
main() {
print(new Set());
print(new Set.from([1, 2, 3]));
}""", r"""
function() {
P.print(P._LinkedHashSet$(null));
P.print(P.LinkedHashSet_LinkedHashSet$from([1, 2, 3], null));
}"""),
// Call synthetic constructor.
const TestEntry("""
class C {}
main() {
print(new C());
}"""),
// Method invocation
const TestEntry("""
main() {
print(new DateTime.now().isBefore(new DateTime.now()));
}""", r"""
function() {
var v0 = H.S(Date.now() < Date.now());
if (typeof dartPrint == "function")
dartPrint(v0);
else if (typeof console == "object" && typeof console.log != "undefined")
console.log(v0);
else if (!(typeof window == "object")) {
if (!(typeof print == "function"))
throw "Unable to print message: " + String(v0);
print(v0);
}
}"""),
// Static calls
const TestEntry("""
foo() { print(42); }
main() { foo(); }
""", r"""
function() {
var v0 = H.S(42);
if (typeof dartPrint == "function")
dartPrint(v0);
else if (typeof console == "object" && typeof console.log != "undefined")
console.log(v0);
else if (!(typeof window == "object")) {
if (!(typeof print == "function"))
throw "Unable to print message: " + String(v0);
print(v0);
}
}"""),
// Static getters
const TestEntry("""
var foo = 42;
main() { print(foo); }
""", r"""
function() {
var v0 = H.S($.foo);
if (typeof dartPrint == "function")
dartPrint(v0);
else if (typeof console == "object" && typeof console.log != "undefined")
console.log(v0);
else if (!(typeof window == "object")) {
if (!(typeof print == "function"))
throw "Unable to print message: " + String(v0);
print(v0);
}
}"""),
const TestEntry("""
get foo { print(42); }
main() { foo; }
""", r"""
function() {
var v0 = H.S(42);
if (typeof dartPrint == "function")
dartPrint(v0);
else if (typeof console == "object" && typeof console.log != "undefined")
console.log(v0);
else if (!(typeof window == "object")) {
if (!(typeof print == "function"))
throw "Unable to print message: " + String(v0);
print(v0);
}
}"""),
// Static setters
const TestEntry("""
var foo = 0;
main() { print(foo = 42); }
""", r"""
function() {
var v0;
$.foo = 42;
v0 = H.S(42);
if (typeof dartPrint == "function")
dartPrint(v0);
else if (typeof console == "object" && typeof console.log != "undefined")
console.log(v0);
else if (!(typeof window == "object")) {
if (!(typeof print == "function"))
throw "Unable to print message: " + String(v0);
print(v0);
}
}"""),
const TestEntry("""
set foo(x) { print(x); }
main() { foo = 42; }
""", r"""
function() {
var v0 = H.S(42);
if (typeof dartPrint == "function")
dartPrint(v0);
else if (typeof console == "object" && typeof console.log != "undefined")
console.log(v0);
else if (!(typeof window == "object")) {
if (!(typeof print == "function"))
throw "Unable to print message: " + String(v0);
print(v0);
}
}"""),
// Assert
const TestEntry("""
foo() { print('X'); }
main() {
assert(true);
assert(false);
assert(foo());
print('Done');
}""", r"""
function() {
P.print("Done");
}""")
];
void main() {
runTests(tests);
}