mirror of
https://github.com/dart-lang/sdk
synced 2024-09-22 05:41:18 +00:00
8fd6d0aafd
Committed: https://code.google.com/p/dart/source/detail?r=19755 Reverted: http://code.google.com/p/dart/source/detail?r=19756 Review URL: https://codereview.chromium.org//12212016 git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@20996 260f80e4-7a28-3924-810f-c04153c831b5
212 lines
4.3 KiB
Dart
212 lines
4.3 KiB
Dart
// 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();
|
|
}
|