| OLD | NEW |
| 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #import("dart:isolate"); | 5 #import("dart:isolate"); |
| 6 | 6 |
| 7 class Fields { | 7 class Fields { |
| 8 Fields(int i, int j) : fld1 = i, fld2 = j, fld5 = true {} | 8 Fields(int i, int j) : fld1 = i, fld2 = j, fld5 = true {} |
| 9 int fld1; | 9 int fld1; |
| 10 final int fld2; | 10 final int fld2; |
| (...skipping 1221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1232 class IsolateExitHandlerTest extends Isolate { | 1232 class IsolateExitHandlerTest extends Isolate { |
| 1233 static int counter; | 1233 static int counter; |
| 1234 | 1234 |
| 1235 IsolateExitHandlerTest() : super.heavy(); | 1235 IsolateExitHandlerTest() : super.heavy(); |
| 1236 | 1236 |
| 1237 static void testMain() { | 1237 static void testMain() { |
| 1238 Isolate.setExitHandler(() { | 1238 Isolate.setExitHandler(() { |
| 1239 Expect.equals(1, counter); | 1239 Expect.equals(1, counter); |
| 1240 }); | 1240 }); |
| 1241 new IsolateExitHandlerTest().spawn().then((SendPort p) { | 1241 new IsolateExitHandlerTest().spawn().then((SendPort p) { |
| 1242 p.call("bar").receive((msg, replyTo) { | 1242 p.call("bar").then((msg) { |
| 1243 counter++; | 1243 counter++; |
| 1244 }); | 1244 }); |
| 1245 }); | 1245 }); |
| 1246 } | 1246 } |
| 1247 | 1247 |
| 1248 void main() { | 1248 void main() { |
| 1249 bool encounteredException = false; | 1249 bool encounteredException = false; |
| 1250 try { | 1250 try { |
| 1251 Isolate.setExitHandler(() { | 1251 Isolate.setExitHandler(() { |
| 1252 Expect.equals(true, false); | 1252 Expect.equals(true, false); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 1274 class SpawnTest { | 1274 class SpawnTest { |
| 1275 | 1275 |
| 1276 static void testMain() { | 1276 static void testMain() { |
| 1277 spawnIsolate(); | 1277 spawnIsolate(); |
| 1278 } | 1278 } |
| 1279 | 1279 |
| 1280 static void spawnIsolate() { | 1280 static void spawnIsolate() { |
| 1281 IsolateTestFramework.waitForDone(); | 1281 IsolateTestFramework.waitForDone(); |
| 1282 SpawnedIsolate isolate = new SpawnedIsolate(); | 1282 SpawnedIsolate isolate = new SpawnedIsolate(); |
| 1283 isolate.spawn().then((SendPort port) { | 1283 isolate.spawn().then((SendPort port) { |
| 1284 port.call(42).receive((message, replyTo) { | 1284 port.call(42).then((message) { |
| 1285 Expect.equals(42, message); | 1285 Expect.equals(42, message); |
| 1286 IsolateTestFramework.done(); | 1286 IsolateTestFramework.done(); |
| 1287 }); | 1287 }); |
| 1288 }); | 1288 }); |
| 1289 } | 1289 } |
| 1290 } | 1290 } |
| 1291 | 1291 |
| 1292 class SpawnedIsolate extends Isolate { | 1292 class SpawnedIsolate extends Isolate { |
| 1293 | 1293 |
| 1294 SpawnedIsolate() : super() { } | 1294 SpawnedIsolate() : super() { } |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1332 this.port.receive((ignoredMessage, reply) { | 1332 this.port.receive((ignoredMessage, reply) { |
| 1333 reply.send(field, null); | 1333 reply.send(field, null); |
| 1334 this.port.close(); | 1334 this.port.close(); |
| 1335 IsolateTestFramework.done(); | 1335 IsolateTestFramework.done(); |
| 1336 }); | 1336 }); |
| 1337 } | 1337 } |
| 1338 | 1338 |
| 1339 static void testMain() { | 1339 static void testMain() { |
| 1340 ConstructorTest test = new ConstructorTest(); | 1340 ConstructorTest test = new ConstructorTest(); |
| 1341 test.spawn().then((SendPort port) { | 1341 test.spawn().then((SendPort port) { |
| 1342 ReceivePort reply = port.call("ignored"); | 1342 port.call("ignored").then((message) { |
| 1343 reply.receive((message, replyPort) { | |
| 1344 Expect.equals(499, message); | 1343 Expect.equals(499, message); |
| 1345 }); | 1344 }); |
| 1346 }); | 1345 }); |
| 1347 } | 1346 } |
| 1348 } | 1347 } |
| 1349 | 1348 |
| 1350 // Dart test program for testing isolate communication with | 1349 // Dart test program for testing isolate communication with |
| 1351 // simple messages. | 1350 // simple messages. |
| 1352 // ImportOptions=IsolateTestFramework | 1351 // ImportOptions=IsolateTestFramework |
| 1353 | 1352 |
| (...skipping 23 matching lines...) Expand all Loading... |
| 1377 | 1376 |
| 1378 // --------------------------------------------------------------------------- | 1377 // --------------------------------------------------------------------------- |
| 1379 // Request-reply test. | 1378 // Request-reply test. |
| 1380 // --------------------------------------------------------------------------- | 1379 // --------------------------------------------------------------------------- |
| 1381 | 1380 |
| 1382 class RequestReplyTest { | 1381 class RequestReplyTest { |
| 1383 | 1382 |
| 1384 static void test() { | 1383 static void test() { |
| 1385 testCall(); | 1384 testCall(); |
| 1386 testSend(); | 1385 testSend(); |
| 1387 testSendSingleShot(); | |
| 1388 } | 1386 } |
| 1389 | 1387 |
| 1390 static void testCall() { | 1388 static void testCall() { |
| 1391 IsolateTest.waitForDone(); | 1389 IsolateTest.waitForDone(); |
| 1392 new RequestReplyIsolate().spawn().then((SendPort port) { | 1390 new RequestReplyIsolate().spawn().then((SendPort port) { |
| 1393 port.call(42).receive((message, replyTo) { | 1391 port.call(42).then((message) { |
| 1394 Expect.equals(42 + 87, message); | 1392 Expect.equals(42 + 87, message); |
| 1395 IsolateTest.done(); | 1393 IsolateTest.done(); |
| 1396 }); | 1394 }); |
| 1397 }); | 1395 }); |
| 1398 } | 1396 } |
| 1399 | 1397 |
| 1400 static void testSend() { | 1398 static void testSend() { |
| 1401 IsolateTest.waitForDone(); | 1399 IsolateTest.waitForDone(); |
| 1402 new RequestReplyIsolate().spawn().then((SendPort port) { | 1400 new RequestReplyIsolate().spawn().then((SendPort port) { |
| 1403 ReceivePort reply = new ReceivePort(); | 1401 ReceivePort reply = new ReceivePort(); |
| 1404 port.send(99, reply.toSendPort()); | 1402 port.send(99, reply.toSendPort()); |
| 1405 reply.receive((message, replyTo) { | 1403 reply.receive((message, replyTo) { |
| 1406 Expect.equals(99 + 87, message); | 1404 Expect.equals(99 + 87, message); |
| 1407 reply.close(); | 1405 reply.close(); |
| 1408 IsolateTest.done(); | 1406 IsolateTest.done(); |
| 1409 }); | 1407 }); |
| 1410 }); | 1408 }); |
| 1411 } | 1409 } |
| 1412 | |
| 1413 static void testSendSingleShot() { | |
| 1414 IsolateTest.waitForDone(); | |
| 1415 new RequestReplyIsolate().spawn().then((SendPort port) { | |
| 1416 ReceivePort reply = new ReceivePort.singleShot(); | |
| 1417 port.send(99, reply.toSendPort()); | |
| 1418 reply.receive((message, replyTo) { | |
| 1419 Expect.equals(99 + 87, message); | |
| 1420 IsolateTest.done(); | |
| 1421 }); | |
| 1422 }); | |
| 1423 } | |
| 1424 | |
| 1425 } | 1410 } |
| 1426 | 1411 |
| 1427 | 1412 |
| 1428 class RequestReplyIsolate extends Isolate { | 1413 class RequestReplyIsolate extends Isolate { |
| 1429 | 1414 |
| 1430 RequestReplyIsolate() : super() { } | 1415 RequestReplyIsolate() : super() { } |
| 1431 | 1416 |
| 1432 void main() { | 1417 void main() { |
| 1433 this.port.receive((message, SendPort replyTo) { | 1418 this.port.receive((message, SendPort replyTo) { |
| 1434 replyTo.send(message + 87, null); | 1419 replyTo.send(message + 87, null); |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1517 | 1502 |
| 1518 static String state; | 1503 static String state; |
| 1519 | 1504 |
| 1520 static void test() { | 1505 static void test() { |
| 1521 IsolateTest.waitForDone(); | 1506 IsolateTest.waitForDone(); |
| 1522 Expect.equals(null, state); | 1507 Expect.equals(null, state); |
| 1523 state = "foo"; | 1508 state = "foo"; |
| 1524 Expect.equals("foo", state); | 1509 Expect.equals("foo", state); |
| 1525 | 1510 |
| 1526 new StaticStateIsolate().spawn().then((SendPort remote) { | 1511 new StaticStateIsolate().spawn().then((SendPort remote) { |
| 1527 remote.call("bar").receive((reply, replyTo) { | 1512 remote.call("bar").then((reply) { |
| 1528 Expect.equals("foo", state); | 1513 Expect.equals("foo", state); |
| 1529 Expect.equals(null, reply); | 1514 Expect.equals(null, reply); |
| 1530 | 1515 |
| 1531 state = "baz"; | 1516 state = "baz"; |
| 1532 remote.call("exit").receive((reply, replyTo) { | 1517 remote.call("exit").then((reply) { |
| 1533 Expect.equals("baz", state); | 1518 Expect.equals("baz", state); |
| 1534 Expect.equals("bar", reply); | 1519 Expect.equals("bar", reply); |
| 1535 IsolateTest.done(); | 1520 IsolateTest.done(); |
| 1536 }); | 1521 }); |
| 1537 }); | 1522 }); |
| 1538 }); | 1523 }); |
| 1539 } | 1524 } |
| 1540 | 1525 |
| 1541 } | 1526 } |
| 1542 | 1527 |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1583 IsolateTestFramework.waitForDone(); | 1568 IsolateTestFramework.waitForDone(); |
| 1584 new LogIsolate().spawn().then((SendPort remote) { | 1569 new LogIsolate().spawn().then((SendPort remote) { |
| 1585 | 1570 |
| 1586 remote.send(1, null); | 1571 remote.send(1, null); |
| 1587 remote.send("Hello", null); | 1572 remote.send("Hello", null); |
| 1588 remote.send("World", null); | 1573 remote.send("World", null); |
| 1589 remote.send(const [null, 1, 2, 3, 4], null); | 1574 remote.send(const [null, 1, 2, 3, 4], null); |
| 1590 remote.send(const [1, 2.0, true, false, 0xffffffffff], null); | 1575 remote.send(const [1, 2.0, true, false, 0xffffffffff], null); |
| 1591 remote.send(const ["Hello", "World", 0xffffffffff], null); | 1576 remote.send(const ["Hello", "World", 0xffffffffff], null); |
| 1592 // Shutdown the LogRunner. | 1577 // Shutdown the LogRunner. |
| 1593 remote.call(-1).receive((int message, SendPort replyTo) { | 1578 remote.call(-1).then((int message) { |
| 1594 Expect.equals(6, message); | 1579 Expect.equals(6, message); |
| 1595 }); | 1580 }); |
| 1596 IsolateTestFramework.done(); | 1581 IsolateTestFramework.done(); |
| 1597 }); | 1582 }); |
| 1598 } | 1583 } |
| 1599 } | 1584 } |
| 1600 | 1585 |
| 1601 | 1586 |
| 1602 class LogIsolate extends Isolate { | 1587 class LogIsolate extends Isolate { |
| 1603 LogIsolate() : super() { } | 1588 LogIsolate() : super() { } |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1717 } | 1702 } |
| 1718 | 1703 |
| 1719 class PingPongClient { | 1704 class PingPongClient { |
| 1720 static void test() { | 1705 static void test() { |
| 1721 IsolateTestFramework.waitForDone(); | 1706 IsolateTestFramework.waitForDone(); |
| 1722 new PingPongServer().spawn().then((SendPort remote) { | 1707 new PingPongServer().spawn().then((SendPort remote) { |
| 1723 | 1708 |
| 1724 // Send objects and receive them back. | 1709 // Send objects and receive them back. |
| 1725 for (int i = 0; i < MessageTest.elms.length; i++) { | 1710 for (int i = 0; i < MessageTest.elms.length; i++) { |
| 1726 var sentObject = MessageTest.elms[i]; | 1711 var sentObject = MessageTest.elms[i]; |
| 1727 remote.call(sentObject).receive( | 1712 remote.call(sentObject).then((var receivedObject) { |
| 1728 (var receivedObject, SendPort replyTo) { | 1713 MessageTest.VerifyObject(i, receivedObject); |
| 1729 MessageTest.VerifyObject(i, receivedObject); | 1714 }); |
| 1730 }); | |
| 1731 } | 1715 } |
| 1732 | 1716 |
| 1733 // Send recursive objects and receive them back. | 1717 // Send recursive objects and receive them back. |
| 1734 List local_list1 = ["Hello", "World", "Hello", 0xffffffffff]; | 1718 List local_list1 = ["Hello", "World", "Hello", 0xffffffffff]; |
| 1735 List local_list2 = [null, local_list1, local_list1 ]; | 1719 List local_list2 = [null, local_list1, local_list1 ]; |
| 1736 List local_list3 = [local_list2, 2.0, true, false, 0xffffffffff]; | 1720 List local_list3 = [local_list2, 2.0, true, false, 0xffffffffff]; |
| 1737 List sendObject = new List(5); | 1721 List sendObject = new List(5); |
| 1738 sendObject[0] = local_list1; | 1722 sendObject[0] = local_list1; |
| 1739 sendObject[1] = sendObject; | 1723 sendObject[1] = sendObject; |
| 1740 sendObject[2] = local_list2; | 1724 sendObject[2] = local_list2; |
| 1741 sendObject[3] = sendObject; | 1725 sendObject[3] = sendObject; |
| 1742 sendObject[4] = local_list3; | 1726 sendObject[4] = local_list3; |
| 1743 remote.call(sendObject).receive( | 1727 remote.call(sendObject).then((var replyObject) { |
| 1744 (var replyObject, SendPort replyTo) { | 1728 Expect.equals(true, sendObject is List); |
| 1745 Expect.equals(true, sendObject is List); | 1729 Expect.equals(true, replyObject is List); |
| 1746 Expect.equals(true, replyObject is List); | 1730 Expect.equals(sendObject.length, replyObject.length); |
| 1747 Expect.equals(sendObject.length, replyObject.length); | 1731 Expect.equals(true, replyObject[1] === replyObject); |
| 1748 Expect.equals(true, replyObject[1] === replyObject); | 1732 Expect.equals(true, replyObject[3] === replyObject); |
| 1749 Expect.equals(true, replyObject[3] === replyObject); | 1733 Expect.equals(true, replyObject[0] === replyObject[2][1]); |
| 1750 Expect.equals(true, replyObject[0] === replyObject[2][1]); | 1734 Expect.equals(true, replyObject[0] === replyObject[2][2]); |
| 1751 Expect.equals(true, replyObject[0] === replyObject[2][2]); | 1735 Expect.equals(true, replyObject[2] === replyObject[4][0]); |
| 1752 Expect.equals(true, replyObject[2] === replyObject[4][0]); | 1736 Expect.equals(true, replyObject[0][0] === replyObject[0][2]); |
| 1753 Expect.equals(true, replyObject[0][0] === replyObject[0][2]); | 1737 // Bigint literals are not canonicalized so do a == check. |
| 1754 // Bigint literals are not canonicalized so do a == check. | 1738 Expect.equals(true, replyObject[0][3] == replyObject[4][4]); |
| 1755 Expect.equals(true, replyObject[0][3] == replyObject[4][4]); | 1739 }); |
| 1756 }); | |
| 1757 | 1740 |
| 1758 // Shutdown the MessageServer. | 1741 // Shutdown the MessageServer. |
| 1759 remote.call(-1).receive( | 1742 remote.call(-1).then((int message) { |
| 1760 (int message, SendPort replyTo) { | 1743 Expect.equals(MessageTest.elms.length + 1, message); |
| 1761 Expect.equals(MessageTest.elms.length + 1, message); | 1744 IsolateTestFramework.done(); |
| 1762 IsolateTestFramework.done(); | 1745 }); |
| 1763 }); | |
| 1764 }); | 1746 }); |
| 1765 } | 1747 } |
| 1766 } | 1748 } |
| 1767 | 1749 |
| 1768 class PingPongServer extends Isolate { | 1750 class PingPongServer extends Isolate { |
| 1769 PingPongServer() : super() {} | 1751 PingPongServer() : super() {} |
| 1770 | 1752 |
| 1771 void main() { | 1753 void main() { |
| 1772 print("Starting server."); | 1754 print("Starting server."); |
| 1773 int count = 0; | 1755 int count = 0; |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1853 | 1835 |
| 1854 | 1836 |
| 1855 class LineProcessorClient { | 1837 class LineProcessorClient { |
| 1856 | 1838 |
| 1857 LineProcessorClient(MandelbrotState this._state, int this._id) { | 1839 LineProcessorClient(MandelbrotState this._state, int this._id) { |
| 1858 _out = new LineProcessor().spawn(); | 1840 _out = new LineProcessor().spawn(); |
| 1859 } | 1841 } |
| 1860 | 1842 |
| 1861 void processLine(int y) { | 1843 void processLine(int y) { |
| 1862 _out.then((SendPort p) { | 1844 _out.then((SendPort p) { |
| 1863 p.call(y).receive((List<int> message, SendPort replyTo) { | 1845 p.call(y).then((List<int> message) { |
| 1864 _state.notifyProcessedLine(this, y, message); | 1846 _state.notifyProcessedLine(this, y, message); |
| 1865 }); | 1847 }); |
| 1866 }); | 1848 }); |
| 1867 } | 1849 } |
| 1868 | 1850 |
| 1869 void shutdown() { | 1851 void shutdown() { |
| 1870 _out.then((SendPort p) { | 1852 _out.then((SendPort p) { |
| 1871 p.send(MandelIsolateTest.TERMINATION_MESSAGE, null); | 1853 p.send(MandelIsolateTest.TERMINATION_MESSAGE, null); |
| 1872 }); | 1854 }); |
| 1873 } | 1855 } |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1925 | 1907 |
| 1926 // Dart test program for testing that isolates are spawned. | 1908 // Dart test program for testing that isolates are spawned. |
| 1927 // ImportOptions=IsolateTestFramework | 1909 // ImportOptions=IsolateTestFramework |
| 1928 | 1910 |
| 1929 class IsolateNegativeTest extends Isolate { | 1911 class IsolateNegativeTest extends Isolate { |
| 1930 IsolateNegativeTest() : super(); | 1912 IsolateNegativeTest() : super(); |
| 1931 | 1913 |
| 1932 static void testMain() { | 1914 static void testMain() { |
| 1933 IsolateTestFramework.waitForDone(); | 1915 IsolateTestFramework.waitForDone(); |
| 1934 new IsolateNegativeTest().spawn().then((SendPort port) { | 1916 new IsolateNegativeTest().spawn().then((SendPort port) { |
| 1935 port.call("foo").receive((message, replyTo) { | 1917 port.call("foo").then((message) { |
| 1936 Expect.equals(true, false); // <=-------- Should fail here. | 1918 Expect.equals(true, false); // <=-------- Should fail here. |
| 1937 IsolateTestFramework.done(); | 1919 IsolateTestFramework.done(); |
| 1938 }); | 1920 }); |
| 1939 }); | 1921 }); |
| 1940 } | 1922 } |
| 1941 | 1923 |
| 1942 void main() { | 1924 void main() { |
| 1943 this.port.receive((ignored, replyTo) { | 1925 this.port.receive((ignored, replyTo) { |
| 1944 replyTo.send("foo", null); | 1926 replyTo.send("foo", null); |
| 1945 }); | 1927 }); |
| 1946 } | 1928 } |
| 1947 } | 1929 } |
| OLD | NEW |