mirror of
https://github.com/dart-lang/sdk
synced 2024-09-18 22:21:18 +00:00
9982f711db
Change-Id: Id72071d398e1d727f4bf5f073e574a701ab639f9 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/151624 Auto-Submit: Bob Nystrom <rnystrom@google.com> Commit-Queue: Srujan Gaddam <srujzs@google.com> Reviewed-by: Srujan Gaddam <srujzs@google.com>
224 lines
4.4 KiB
Dart
224 lines
4.4 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();
|
|
}
|