| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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 #include "bin/builtin.h" | 5 #include "bin/builtin.h" |
| 6 #include "include/dart_api.h" | 6 #include "include/dart_api.h" |
| 7 #include "include/dart_mirrors_api.h" | 7 #include "include/dart_mirrors_api.h" |
| 8 #include "include/dart_native_api.h" | 8 #include "include/dart_native_api.h" |
| 9 #include "platform/assert.h" | 9 #include "platform/assert.h" |
| 10 #include "platform/json.h" | 10 #include "platform/json.h" |
| (...skipping 3654 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3665 EXPECT(Dart_IsError(result)); | 3665 EXPECT(Dart_IsError(result)); |
| 3666 result = Dart_SetNativeInstanceField(retobj, kNativeFld0, 400); | 3666 result = Dart_SetNativeInstanceField(retobj, kNativeFld0, 400); |
| 3667 EXPECT(Dart_IsError(result)); | 3667 EXPECT(Dart_IsError(result)); |
| 3668 } | 3668 } |
| 3669 | 3669 |
| 3670 | 3670 |
| 3671 TEST_CASE(NegativeNativeFieldInIsolateMessage) { | 3671 TEST_CASE(NegativeNativeFieldInIsolateMessage) { |
| 3672 const char* kScriptChars = | 3672 const char* kScriptChars = |
| 3673 "import 'dart:isolate';\n" | 3673 "import 'dart:isolate';\n" |
| 3674 "import 'dart:nativewrappers';\n" | 3674 "import 'dart:nativewrappers';\n" |
| 3675 "echo() {\n" | 3675 "echo(msg) {\n" |
| 3676 " port.receive((msg, reply) {\n" | 3676 " var data = msg[0];\n" |
| 3677 " reply.send('echoing ${msg(1)}}');\n" | 3677 " var reply = msg[1];\n" |
| 3678 " });\n" | 3678 " reply.send('echoing ${data(1)}}');\n" |
| 3679 "}\n" | 3679 "}\n" |
| 3680 "class Test extends NativeFieldWrapperClass2 {\n" | 3680 "class Test extends NativeFieldWrapperClass2 {\n" |
| 3681 " Test(this.i, this.j);\n" | 3681 " Test(this.i, this.j);\n" |
| 3682 " int i, j;\n" | 3682 " int i, j;\n" |
| 3683 "}\n" | 3683 "}\n" |
| 3684 "main() {\n" | 3684 "main() {\n" |
| 3685 " var snd = spawnFunction(echo);\n" | 3685 " var port = new RawReceivePort();\n" |
| 3686 " var obj = new Test(1,2);\n" | 3686 " var obj = new Test(1,2);\n" |
| 3687 " snd.send(obj, port.toSendPort());\n" | 3687 " var msg = [obj, port.sendPort];\n" |
| 3688 " port.receive((msg, reply) {\n" | 3688 " var snd = Isolate.spawn(echo, msg);\n" |
| 3689 " port.handler = (msg) {\n" |
| 3690 " port.close();\n" |
| 3689 " print('from worker ${msg}');\n" | 3691 " print('from worker ${msg}');\n" |
| 3690 " });\n" | 3692 " };\n" |
| 3691 "}\n"; | 3693 "}\n"; |
| 3692 | 3694 |
| 3693 DARTSCOPE(Isolate::Current()); | 3695 DARTSCOPE(Isolate::Current()); |
| 3694 | 3696 |
| 3695 // Create a test library and Load up a test script in it. | 3697 // Create a test library and Load up a test script in it. |
| 3696 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); | 3698 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); |
| 3697 | 3699 |
| 3698 // Invoke 'main' which should spawn an isolate and try to send an | 3700 // Invoke 'main' which should spawn an isolate and try to send an |
| 3699 // object with native fields over to the spawned isolate. This | 3701 // object with native fields over to the spawned isolate. This |
| 3700 // should result in an unhandled exception which is checked. | 3702 // should result in an unhandled exception which is checked. |
| (...skipping 2072 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5773 EXPECT_EQ(ILLEGAL_PORT, error_port); | 5775 EXPECT_EQ(ILLEGAL_PORT, error_port); |
| 5774 | 5776 |
| 5775 // Create the port w/o a current isolate, just to make sure that works. | 5777 // Create the port w/o a current isolate, just to make sure that works. |
| 5776 Dart_Port port_id1 = | 5778 Dart_Port port_id1 = |
| 5777 Dart_NewNativePort("Port123", NewNativePort_send123, true); | 5779 Dart_NewNativePort("Port123", NewNativePort_send123, true); |
| 5778 | 5780 |
| 5779 TestIsolateScope __test_isolate__; | 5781 TestIsolateScope __test_isolate__; |
| 5780 const char* kScriptChars = | 5782 const char* kScriptChars = |
| 5781 "import 'dart:isolate';\n" | 5783 "import 'dart:isolate';\n" |
| 5782 "void callPort(SendPort port) {\n" | 5784 "void callPort(SendPort port) {\n" |
| 5783 " var receivePort = new ReceivePort();\n" | 5785 " var receivePort = new RawReceivePort();\n" |
| 5784 " port.send(null, receivePort.toSendPort());\n" | 5786 " port.send(null, receivePort.sendPort);\n" |
| 5785 " receivePort.receive((message, _) {\n" | 5787 " receivePort.handler = (message) {\n" |
| 5786 " receivePort.close();\n" | 5788 " receivePort.close();\n" |
| 5787 " throw new Exception(message);\n" | 5789 " throw new Exception(message);\n" |
| 5788 " });\n" | 5790 " };\n" |
| 5789 "}\n"; | 5791 "}\n"; |
| 5790 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); | 5792 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); |
| 5791 Dart_EnterScope(); | 5793 Dart_EnterScope(); |
| 5792 | 5794 |
| 5793 // Create a port w/ a current isolate, to make sure that works too. | 5795 // Create a port w/ a current isolate, to make sure that works too. |
| 5794 Dart_Port port_id2 = | 5796 Dart_Port port_id2 = |
| 5795 Dart_NewNativePort("Port321", NewNativePort_send321, true); | 5797 Dart_NewNativePort("Port321", NewNativePort_send321, true); |
| 5796 | 5798 |
| 5797 Dart_Handle send_port1 = Dart_NewSendPort(port_id1); | 5799 Dart_Handle send_port1 = Dart_NewSendPort(port_id1); |
| 5798 EXPECT_VALID(send_port1); | 5800 EXPECT_VALID(send_port1); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 5827 } | 5829 } |
| 5828 | 5830 |
| 5829 | 5831 |
| 5830 static Dart_Isolate RunLoopTestCallback(const char* script_name, | 5832 static Dart_Isolate RunLoopTestCallback(const char* script_name, |
| 5831 const char* main, | 5833 const char* main, |
| 5832 void* data, | 5834 void* data, |
| 5833 char** error) { | 5835 char** error) { |
| 5834 const char* kScriptChars = | 5836 const char* kScriptChars = |
| 5835 "import 'builtin';\n" | 5837 "import 'builtin';\n" |
| 5836 "import 'dart:isolate';\n" | 5838 "import 'dart:isolate';\n" |
| 5837 "void entry() {\n" | 5839 "void entry(message) {\n" |
| 5838 " port.receive((message, replyTo) {\n" | 5840 " var data = message[0];\n" |
| 5839 " if (message) {\n" | 5841 " var replyTo = message[1];\n" |
| 5840 " throw new Exception('MakeChildExit');\n" | 5842 " if (data) {\n" |
| 5841 " } else {\n" | 5843 " throw new Exception('MakeChildExit');\n" |
| 5842 " replyTo.call('hello');\n" | 5844 " } else {\n" |
| 5843 " port.close();\n" | 5845 " replyTo.send('hello');\n" |
| 5844 " }\n" | 5846 " }\n" |
| 5845 " });\n" | |
| 5846 "}\n" | 5847 "}\n" |
| 5847 "\n" | 5848 "\n" |
| 5848 "void main(exc_child, exc_parent) {\n" | 5849 "void main(exc_child, exc_parent) {\n" |
| 5849 " var port = spawnFunction(entry);\n" | 5850 " var receivePort = new RawReceivePort();\n" |
| 5850 " var receivePort = new ReceivePort();\n" | 5851 " Isolate.spawn(entry, [exc_child, receivePort.sendPort]);\n" |
| 5851 " port.send(exc_child, receivePort.toSendPort());\n" | 5852 " receivePort.handler = (message) {\n" |
| 5852 " receivePort.receive((message, _) {\n" | |
| 5853 " receivePort.close();\n" | 5853 " receivePort.close();\n" |
| 5854 " if (message != 'hello') throw new Exception('ShouldNotHappen');\n" | 5854 " if (message != 'hello') throw new Exception('ShouldNotHappen');\n" |
| 5855 " if (exc_parent) throw new Exception('MakeParentExit');\n" | 5855 " if (exc_parent) throw new Exception('MakeParentExit');\n" |
| 5856 " });\n" | 5856 " };\n" |
| 5857 "}\n"; | 5857 "}\n"; |
| 5858 | 5858 |
| 5859 if (Dart_CurrentIsolate() != NULL) { | 5859 if (Dart_CurrentIsolate() != NULL) { |
| 5860 Dart_ExitIsolate(); | 5860 Dart_ExitIsolate(); |
| 5861 } | 5861 } |
| 5862 Dart_Isolate isolate = TestCase::CreateTestIsolate(); | 5862 Dart_Isolate isolate = TestCase::CreateTestIsolate(); |
| 5863 ASSERT(isolate != NULL); | 5863 ASSERT(isolate != NULL); |
| 5864 Dart_EnterScope(); | 5864 Dart_EnterScope(); |
| 5865 Dart_Handle url = NewString(TestCase::url()); | 5865 Dart_Handle url = NewString(TestCase::url()); |
| 5866 Dart_Handle source = NewString(kScriptChars); | 5866 Dart_Handle source = NewString(kScriptChars); |
| (...skipping 1493 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7360 NewString("main"), | 7360 NewString("main"), |
| 7361 0, | 7361 0, |
| 7362 NULL); | 7362 NULL); |
| 7363 int64_t value = 0; | 7363 int64_t value = 0; |
| 7364 result = Dart_IntegerToInt64(result, &value); | 7364 result = Dart_IntegerToInt64(result, &value); |
| 7365 EXPECT_VALID(result); | 7365 EXPECT_VALID(result); |
| 7366 EXPECT_EQ(8, value); | 7366 EXPECT_EQ(8, value); |
| 7367 } | 7367 } |
| 7368 | 7368 |
| 7369 } // namespace dart | 7369 } // namespace dart |
| OLD | NEW |