blob: ca11da951a4e9e400087f47b7127b52f301918ae [file] [log] [blame]
// Copyright (c) 2011, 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";
// Tests all statement types. Not an exhaustive test of all statement semantics.
class StatementTest {
StatementTest() {}
static testMain() {
var test = new StatementTest();
test.testIfStatement();
test.testForLoop();
test.testWhileLoops();
test.testSwitch();
test.testExceptions();
test.testBreak();
test.testContinue();
test.testFunction();
test.testReturn();
}
testIfStatement() {
// Basic if statements.
if (true) {
Expect.equals(true, true);
} else {
Expect.equals(false, true);
}
if (false) {
Expect.equals(false, true);
} else {
Expect.equals(true, true);
}
}
testForLoop() {
int count = 0, count2;
// Basic for loop.
for (int i = 0; i < 10; ++i) {
++count;
}
Expect.equals(10, count);
// For loop with no 'var'.
count2 = 0;
for (count = 0; count < 5; ++count) {
++count2;
}
Expect.equals(5, count);
Expect.equals(5, count2);
// For loop with no initializer.
count = count2 = 0;
for (; count < 10; ++count) {
++count2;
}
Expect.equals(10, count);
Expect.equals(10, count2);
// For loop with no increment.
for (count = 0; count < 5; ) {
++count;
}
Expect.equals(5, count);
// For loop with no test.
for (count = 0; ; ++count) {
if (count == 10) {
break;
}
}
Expect.equals(10, count);
// For loop with no nothing.
count = 0;
for (;;) {
if (count == 5) {
break;
}
++count;
}
Expect.equals(5, count);
}
testWhileLoops() {
// Basic while loop.
int count = 0;
while (count < 10) {
++count;
}
Expect.equals(10, count);
// Basic do loop.
count = 0;
do {
++count;
} while (count < 5);
Expect.equals(5, count);
}
testSwitch() {
// Int switch.
bool hit0, hit1, hitDefault;
for (int x = 0; x < 3; ++x) {
switch (x) {
case 0: hit0 = true; break;
case 1: hit1 = true; break;
default: hitDefault = true; break;
}
}
Expect.equals(true, hit0);
Expect.equals(true, hit1);
Expect.equals(true, hitDefault);
// String switch.
var strings = ['a', 'b', 'c'];
bool hitA, hitB;
hitDefault = false;
for (int x = 0; x < 3; ++x) {
switch (strings[x]) {
case 'a': hitA = true; break;
case 'b': hitB = true; break;
default: hitDefault = true; break;
}
}
Expect.equals(true, hitA);
Expect.equals(true, hitB);
Expect.equals(true, hitDefault);
}
testExceptions() {
// TODO(jgw): Better tests once all the exception semantics are worked out.
bool hitCatch, hitFinally;
try {
throw "foo";
} catch (e) {
Expect.equals(true, e == "foo");
hitCatch = true;
} finally {
hitFinally = true;
}
Expect.equals(true, hitCatch);
Expect.equals(true, hitFinally);
}
testBreak() {
var ints = [
[ 32, 87, 3, 589 ],
[ 12, 1076, 2000, 8 ],
[ 622, 127, 77, 955 ]
];
int i, j = 0;
bool foundIt = false;
search:
for (i = 0; i < ints.length; i++) {
for (j = 0; j < ints[i].length; j++) {
if (ints[i][j] == 12) {
foundIt = true;
break search;
}
}
}
Expect.equals(true, foundIt);
}
testContinue() {
String searchMe = "Look for a substring in me";
String substring = "sub";
bool foundIt = false;
int max = searchMe.length - substring.length;
test:
for (int i = 0; i <= max; i++) {
int n = substring.length;
int j = i;
int k = 0;
while (n-- != 0) {
if (searchMe[j++] != substring[k++]) {
continue test;
}
}
foundIt = true;
break test;
}
}
testFunction() {
int foo() {
return 42;
}
Expect.equals(42, foo());
}
void testReturn() {
if (true) {
return;
}
Expect.equals(true, false);
}
}
main() {
StatementTest.testMain();
}