// Copyright (c) 2012, 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. // Test switch statement. import "package:expect/expect.dart"; class Switcher { Switcher() {} test1(val) { var x = 0; switch (val) { case 1: x = 100; break; case 2: case 3: x = 200; break; case 4: default: { x = 400; break; } } return x; } test2(val) { switch (val) { case 1: return 200; default: return 400; } } } class SwitchTest { static testMain() { Switcher s = new Switcher(); Expect.equals(100, s.test1(1)); Expect.equals(200, s.test1(2)); Expect.equals(200, s.test1(3)); Expect.equals(400, s.test1(4)); Expect.equals(400, s.test1(5)); Expect.equals(200, s.test2(1)); Expect.equals(400, s.test2(2)); } } class Enum { static const Enum e1 = const Enum(1); static const Enum e2 = const Enum(2); static const Enum e3 = const Enum(3); final int id; const Enum(this.id); } void testSwitchEnum(Enum input, int expect) { int result = null; switch (input) { case Enum.e1: result = 10; break; case Enum.e2: result = 20; break; case Enum.e3: result = 30; break; default: result = 40; } Expect.equals(expect, result); } const int ic1 = 1; const int ic2 = 2; void testSwitchIntExpression(int input, int expect) { int result = null; switch (input) { case 1 + 1: // 2 case ic1 + 2: // 3 result = 11; break; case ic2 * 2: // 4 case 1 * 5: // 5 result = 21; break; case ic1 % ic2 + 5: // 6 result = 31; break; } Expect.equals(expect, result); } void testSwitchBool(bool input, int expect) { int result = null; switch (input) { case true: result = 12; break; case false: result = 22; } Expect.equals(expect, result); } void testSwitchString(String input, int expect) { int result = null; switch (input) { case 'one': result = 1; break; case 'two': result = 2; break; } Expect.equals(expect, result); } switchConstString() { const c = 'a'; switch (c) { case 'a': return 'aa'; case 'b': return 'bb'; case 'c': return 'cc'; case 'd': return 'dd'; case 'e': return 'ee'; case 'f': return 'ff'; } } main() { SwitchTest.testMain(); testSwitchEnum(Enum.e1, 10); testSwitchEnum(Enum.e2, 20); testSwitchEnum(Enum.e3, 30); testSwitchEnum(null, 40); testSwitchIntExpression(2, 11); testSwitchIntExpression(3, 11); testSwitchIntExpression(4, 21); testSwitchIntExpression(5, 21); testSwitchIntExpression(6, 31); testSwitchIntExpression(7, null); testSwitchBool(true, 12); testSwitchBool(false, 22); testSwitchString(null, null); testSwitchString('one', 1); testSwitchString('two', 2); testSwitchString('three', null); Expect.equals('aa', switchConstString()); }