Index: samples/tests/samples/src/dartcombat/dartcombat_tests.dart |
=================================================================== |
--- samples/tests/samples/src/dartcombat/dartcombat_tests.dart (revision 3705) |
+++ samples/tests/samples/src/dartcombat/dartcombat_tests.dart (working copy) |
@@ -1,149 +0,0 @@ |
-// 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. |
- |
- |
-#library('dartcombat_tests'); |
- |
-#import('dart:html'); |
-#import('../../../../testing/unittest/unittest.dart'); |
-#import('../../../../samples/dartcombat/dartcombatlib.dart'); |
- |
-ReceivePort testPort; |
- |
-main() { |
- testPort = new ReceivePort(); |
- |
- setupUI(); |
- // add relative URL to stylesheet to the correct location. Note: The CSS is |
- // needed because the app uses a flexbox layout, which is then used to |
- // interpret UI events (mousedown/up/click). |
- var link = new Element.tag('link'); |
- link.rel = 'stylesheet'; |
- link.type = 'text/css'; |
- link.href = '../../../client/samples/dartcombat/dartcombat.css'; |
- document.head.nodes.add(link); |
- |
- asyncTest('wait until setup', 1, () { |
- int playersReady = 0; |
- testPort.receive((message, SendPort reply) { |
- if (message[0] == '_TEST:handleSetup') { |
- playersReady++; |
- if (playersReady == 2) { |
- callbackDone(); |
- } |
- } |
- }); |
- createPlayersForTest(testPort.toSendPort()); |
- }); |
- |
- |
- asyncTest('parallel shoot', 1, () { |
- // player 2 is configured to make parallel super shots towards player 1 |
- var p1OwnBoard = document.query('#p1own'); |
- |
- // add a boat of length 4 using mousedown/mousemove/mouseup |
- var startCell = p1OwnBoard.nodes[0].nodes[4].nodes[2]; |
- var endCell = p1OwnBoard.nodes[0].nodes[4].nodes[5]; |
- serialInvokeAsync([ |
- () => doMouseEvent("mousedown", startCell), |
- () => doMouseEvent("mousemove", endCell), |
- () => doMouseEvent("mouseup", endCell), |
- () { |
- // check that the boat was added: |
- var boat = p1OwnBoard.nodes[1]; |
- expect(boat.classes).equalsSet(['icons', 'boat4', 'boatdir-left']); |
- |
- // check that the boat shows as sunk in player 1's board: |
- // Note that the shoot order is respected: center, left, right, up, down, |
- // left, right again, as if they progress in parallel. |
- List<int> expectedShots = const [ |
- Constants.HIT, 3, 4, // initial shot (center) |
- Constants.HIT, 2, 4, // left |
- Constants.HIT, 4, 4, // right |
- Constants.MISS, 3, 3, // up |
- Constants.MISS, 3, 5, // down |
- Constants.MISS, 1, 4, // left |
- Constants.SUNK, 5, 4]; // right |
- _expectShotSequence(expectedShots, p1OwnBoard, 1); |
- |
- // hit the boat from the enemy side. |
- var p2EnemyBoard = document.query("#p2enemy"); |
- var hitCell = p2EnemyBoard.nodes[0].nodes[4].nodes[3]; |
- doMouseEvent("click", hitCell); |
- }]); |
- }); |
- |
- asyncTest('serial shoot', 1, () { |
- // player 1 is configured to make serial super shots towards player 2 |
- var p2OwnBoard = document.query('#p2own'); |
- |
- // add a boat of length 4 using mousedown/mousemove/mouseup |
- var startCell = p2OwnBoard.nodes[0].nodes[3].nodes[8]; |
- var endCell = p2OwnBoard.nodes[0].nodes[7].nodes[8]; |
- serialInvokeAsync([ |
- () => doMouseEvent("mousedown", startCell), |
- () => doMouseEvent("mousemove", endCell), |
- () => doMouseEvent("mouseup", endCell), |
- () { |
- // check that the boat was added: |
- var boat = p2OwnBoard.nodes[1]; |
- expect(boat.classes).equalsSet(['icons', 'boat5', 'boatdir-down']); |
- |
- // check that the boat shows as sunk in player 2's board: |
- // Note that the shoot order is respected: center, left, right, up, down |
- // sequentially. |
- List<int> expectedShots = const [ |
- Constants.HIT, 8, 4, // initial shot (center) |
- Constants.MISS, 7, 4, // left (miss - stop this direction) |
- Constants.MISS, 9, 4, // right (miss - stop this direction) |
- Constants.HIT, 8, 3, // up |
- Constants.MISS, 8, 2, // up (miss - stop this direction) |
- Constants.HIT, 8, 5, // down |
- Constants.HIT, 8, 6, // down |
- Constants.SUNK, 8, 7]; // down (sunk - done) |
- _expectShotSequence(expectedShots, p2OwnBoard, 2); |
- |
- // hit the boat from the enemy side. |
- var p1EnemyBoard = document.query("#p1enemy"); |
- var hitCell = p1EnemyBoard.nodes[0].nodes[4].nodes[8]; |
- doMouseEvent("click", hitCell); |
- }]); |
- }); |
-} |
- |
-_expectShotSequence(List<int> expectedShots, Element playerBoard, int id) { |
- int shots = 0; |
- testPort.receive((message, SendPort reply) { |
- if (message[0] == '_TEST:handleShot') { |
- expect(message[1]).equals(id); |
- expect(message[2]).equals(expectedShots[(shots * 3)]); |
- expect(message[3]).equals(expectedShots[(shots * 3) + 1]); |
- expect(message[4]).equals(expectedShots[(shots * 3) + 2]); |
- _checkNodeInfo(playerBoard.nodes[shots + 2], |
- 'icons ' + (expectedShots[shots * 3] == Constants.MISS |
- ? 'miss' : 'hit-onboat'), |
- expectedShots[(shots * 3) + 1] * 50, |
- expectedShots[(shots * 3) + 2] * 50); |
- shots++; |
- if (shots * 3 == expectedShots.length) { |
- callbackDone(); |
- } |
- } |
- }); |
-} |
- |
-_checkNodeInfo(node, className, x, y) { |
- expect(node.classes).equalsSet(className.split(' ')); |
- expect(node.style.getPropertyValue('left')).equals('${x}px'); |
- expect(node.style.getPropertyValue('top')).equals('${y}px'); |
-} |
- |
-doMouseEvent(String type, var targetCell) { |
- final point = window.webkitConvertPointFromNodeToPage(targetCell, |
- new Point(5, 5)); |
- |
- MouseEvent e = new MouseEvent(type, window, 0, 0, 0, point.x, point.y, 0, |
- relatedTarget: targetCell); |
- targetCell.on[type].dispatch(e); |
-} |