| 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 "vm/assembler.h" | 5 #include "vm/assembler.h" |
| 6 #include "vm/bigint_operations.h" | 6 #include "vm/bigint_operations.h" |
| 7 #include "vm/class_finalizer.h" | 7 #include "vm/class_finalizer.h" |
| 8 #include "vm/dart_api_impl.h" | 8 #include "vm/dart_api_impl.h" |
| 9 #include "vm/dart_entry.h" | 9 #include "vm/dart_entry.h" |
| 10 #include "vm/debugger.h" | 10 #include "vm/debugger.h" |
| (...skipping 3905 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3916 TEST_CASE(ToUserCString) { | 3916 TEST_CASE(ToUserCString) { |
| 3917 const char* kScriptChars = | 3917 const char* kScriptChars = |
| 3918 "var simple = 'simple';\n" | 3918 "var simple = 'simple';\n" |
| 3919 "var escapes = 'stuff\\n\\r\\f\\b\\t\\v\\'\"\\$stuff';\n" | 3919 "var escapes = 'stuff\\n\\r\\f\\b\\t\\v\\'\"\\$stuff';\n" |
| 3920 "var uescapes = 'stuff\\u0001\\u0002stuff';\n" | 3920 "var uescapes = 'stuff\\u0001\\u0002stuff';\n" |
| 3921 "var toolong = " | 3921 "var toolong = " |
| 3922 "'01234567890123456789012345678901234567890123456789howdy';\n" | 3922 "'01234567890123456789012345678901234567890123456789howdy';\n" |
| 3923 "var toolong2 = " | 3923 "var toolong2 = " |
| 3924 "'0123456789012345678901234567890123\\t567890123456789howdy';\n" | 3924 "'0123456789012345678901234567890123\\t567890123456789howdy';\n" |
| 3925 "var toolong3 = " | 3925 "var toolong3 = " |
| 3926 "'012345678901234567890123456789\\u0001567890123456789howdy';\n" | 3926 "'012345678901234567890123456789\\u0001567890123456789howdy';\n"; |
| 3927 "\n" | |
| 3928 "class _Cobra { }\n" | |
| 3929 "var instance = new _Cobra();\n" | |
| 3930 "\n" | |
| 3931 "var empty_list = [];\n" | |
| 3932 "var simple_list = [1,2,'otter'];\n" | |
| 3933 "var nested_list = [[[[1]]],[2,'otter']];\n" | |
| 3934 "var deeply_nested_list = [[[[[1]]]],[2,'otter']];\n" | |
| 3935 "var toolong_list = " | |
| 3936 "['0123456789','0123456789','0123456789','0123456789'];\n" | |
| 3937 "var toolong2_list = [toolong];\n" | |
| 3938 "var justenough_list = [0,1,2,3,4,0,1,2,3,4,0,1,2,3,4,0,1,2,99];" | |
| 3939 "var toolong3_list = [0,1,2,3,4,0,1,2,3,4,0,1,2,3,4,0,1,2,3,4];" | |
| 3940 "\n" | |
| 3941 "var simple_map = {1: 2, 2: 'otter'};\n"; | |
| 3942 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); | 3927 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); |
| 3943 EXPECT_VALID(lib); | 3928 EXPECT_VALID(lib); |
| 3944 | 3929 |
| 3945 Instance& obj = Instance::Handle(); | 3930 String& obj = String::Handle(); |
| 3946 Dart_Handle result; | 3931 Dart_Handle result; |
| 3947 | 3932 |
| 3948 // Simple string. | 3933 // Simple string. |
| 3949 result = Dart_GetField(lib, NewString("simple")); | 3934 result = Dart_GetField(lib, NewString("simple")); |
| 3950 EXPECT_VALID(result); | 3935 EXPECT_VALID(result); |
| 3951 obj ^= Api::UnwrapHandle(result); | 3936 obj ^= Api::UnwrapHandle(result); |
| 3952 EXPECT_STREQ("\"simple\"", obj.ToUserCString()); | 3937 EXPECT_STREQ("\"simple\"", obj.ToUserCString(40)); |
| 3953 | 3938 |
| 3954 // Escaped chars. | 3939 // Escaped chars. |
| 3955 result = Dart_GetField(lib, NewString("escapes")); | 3940 result = Dart_GetField(lib, NewString("escapes")); |
| 3956 EXPECT_VALID(result); | 3941 EXPECT_VALID(result); |
| 3957 obj ^= Api::UnwrapHandle(result); | 3942 obj ^= Api::UnwrapHandle(result); |
| 3958 EXPECT_STREQ("\"stuff\\n\\r\\f\\b\\t\\v'\\\"\\$stuff\"", | 3943 EXPECT_STREQ("\"stuff\\n\\r\\f\\b\\t\\v'\\\"\\$stuff\"", |
| 3959 obj.ToUserCString()); | 3944 obj.ToUserCString(40)); |
| 3960 | 3945 |
| 3961 // U-escaped chars. | 3946 // U-escaped chars. |
| 3962 result = Dart_GetField(lib, NewString("uescapes")); | 3947 result = Dart_GetField(lib, NewString("uescapes")); |
| 3963 EXPECT_VALID(result); | 3948 EXPECT_VALID(result); |
| 3964 obj ^= Api::UnwrapHandle(result); | 3949 obj ^= Api::UnwrapHandle(result); |
| 3965 EXPECT_STREQ("\"stuff\\u0001\\u0002stuff\"", obj.ToUserCString()); | 3950 EXPECT_STREQ("\"stuff\\u0001\\u0002stuff\"", obj.ToUserCString(40)); |
| 3966 | 3951 |
| 3967 // Truncation. | 3952 // Truncation. |
| 3968 result = Dart_GetField(lib, NewString("toolong")); | 3953 result = Dart_GetField(lib, NewString("toolong")); |
| 3969 EXPECT_VALID(result); | 3954 EXPECT_VALID(result); |
| 3970 obj ^= Api::UnwrapHandle(result); | 3955 obj ^= Api::UnwrapHandle(result); |
| 3971 EXPECT_STREQ("\"01234567890123456789012345678901234\"...", | 3956 EXPECT_STREQ("\"01234567890123456789012345678901234\"...", |
| 3972 obj.ToUserCString()); | 3957 obj.ToUserCString(40)); |
| 3973 | 3958 |
| 3974 // Truncation. Custom limit. | 3959 // Truncation, shorter. |
| 3975 result = Dart_GetField(lib, NewString("toolong")); | 3960 result = Dart_GetField(lib, NewString("toolong")); |
| 3976 EXPECT_VALID(result); | 3961 EXPECT_VALID(result); |
| 3977 obj ^= Api::UnwrapHandle(result); | 3962 obj ^= Api::UnwrapHandle(result); |
| 3978 EXPECT_STREQ("\"01234\"...", obj.ToUserCString(10)); | 3963 EXPECT_STREQ("\"01234\"...", obj.ToUserCString(10)); |
| 3979 | 3964 |
| 3980 // Truncation, limit is in escape. | 3965 // Truncation, limit is in escape. |
| 3981 result = Dart_GetField(lib, NewString("toolong2")); | 3966 result = Dart_GetField(lib, NewString("toolong2")); |
| 3982 EXPECT_VALID(result); | 3967 EXPECT_VALID(result); |
| 3983 obj ^= Api::UnwrapHandle(result); | 3968 obj ^= Api::UnwrapHandle(result); |
| 3984 EXPECT_STREQ("\"0123456789012345678901234567890123\"...", | 3969 EXPECT_STREQ("\"0123456789012345678901234567890123\"...", |
| 3985 obj.ToUserCString()); | 3970 obj.ToUserCString(40)); |
| 3986 | 3971 |
| 3987 // Truncation, limit is in u-escape | 3972 // Truncation, limit is in u-escape |
| 3988 result = Dart_GetField(lib, NewString("toolong3")); | 3973 result = Dart_GetField(lib, NewString("toolong3")); |
| 3989 EXPECT_VALID(result); | 3974 EXPECT_VALID(result); |
| 3990 obj ^= Api::UnwrapHandle(result); | 3975 obj ^= Api::UnwrapHandle(result); |
| 3991 EXPECT_STREQ("\"012345678901234567890123456789\"...", | 3976 EXPECT_STREQ("\"012345678901234567890123456789\"...", |
| 3992 obj.ToUserCString()); | 3977 obj.ToUserCString(40)); |
| 3993 | |
| 3994 // Instance of a class. | |
| 3995 result = Dart_GetField(lib, NewString("instance")); | |
| 3996 EXPECT_VALID(result); | |
| 3997 obj ^= Api::UnwrapHandle(result); | |
| 3998 EXPECT_STREQ("Instance of '_Cobra'", obj.ToUserCString()); | |
| 3999 | |
| 4000 // Empty list. | |
| 4001 result = Dart_GetField(lib, NewString("empty_list")); | |
| 4002 EXPECT_VALID(result); | |
| 4003 obj ^= Api::UnwrapHandle(result); | |
| 4004 EXPECT_STREQ("[]", obj.ToUserCString()); | |
| 4005 | |
| 4006 // Simple list. | |
| 4007 result = Dart_GetField(lib, NewString("simple_list")); | |
| 4008 EXPECT_VALID(result); | |
| 4009 obj ^= Api::UnwrapHandle(result); | |
| 4010 EXPECT_STREQ("[1,2,\"otter\"]", obj.ToUserCString()); | |
| 4011 | |
| 4012 // Nested list. | |
| 4013 result = Dart_GetField(lib, NewString("nested_list")); | |
| 4014 EXPECT_VALID(result); | |
| 4015 obj ^= Api::UnwrapHandle(result); | |
| 4016 EXPECT_STREQ("[[[[1]]],[2,\"otter\"]]", obj.ToUserCString()); | |
| 4017 | |
| 4018 // Deeply ested list. | |
| 4019 result = Dart_GetField(lib, NewString("deeply_nested_list")); | |
| 4020 EXPECT_VALID(result); | |
| 4021 obj ^= Api::UnwrapHandle(result); | |
| 4022 EXPECT_STREQ("[[[[[...]]]],[2,\"otter\"]]", obj.ToUserCString()); | |
| 4023 | |
| 4024 // Truncation. | |
| 4025 result = Dart_GetField(lib, NewString("toolong_list")); | |
| 4026 EXPECT_VALID(result); | |
| 4027 obj ^= Api::UnwrapHandle(result); | |
| 4028 EXPECT_STREQ("[\"0123456789\",\"012345\"...,...](length:4)", | |
| 4029 obj.ToUserCString()); | |
| 4030 | |
| 4031 // More truncation. | |
| 4032 result = Dart_GetField(lib, NewString("toolong2_list")); | |
| 4033 EXPECT_VALID(result); | |
| 4034 obj ^= Api::UnwrapHandle(result); | |
| 4035 EXPECT_STREQ("[\"012345678901234567890123456789012\"...]", | |
| 4036 obj.ToUserCString()); | |
| 4037 | |
| 4038 // Just fits. | |
| 4039 result = Dart_GetField(lib, NewString("justenough_list")); | |
| 4040 EXPECT_VALID(result); | |
| 4041 obj ^= Api::UnwrapHandle(result); | |
| 4042 EXPECT_STREQ("[0,1,2,3,4,0,1,2,3,4,0,1,2,3,4,0,1,2,99]", | |
| 4043 obj.ToUserCString()); | |
| 4044 | |
| 4045 // Just too big, small elements. | |
| 4046 result = Dart_GetField(lib, NewString("toolong3_list")); | |
| 4047 EXPECT_VALID(result); | |
| 4048 obj ^= Api::UnwrapHandle(result); | |
| 4049 EXPECT_STREQ("[0,1,2,3,4,0,1,2,3,4,0,1,...](length:20)", | |
| 4050 obj.ToUserCString()); | |
| 4051 | |
| 4052 // Simple map. | |
| 4053 // | |
| 4054 // TODO(turnidge): Consider showing something like: {1: 2, 2: 'otter'} | |
| 4055 result = Dart_GetField(lib, NewString("simple_map")); | |
| 4056 EXPECT_VALID(result); | |
| 4057 obj ^= Api::UnwrapHandle(result); | |
| 4058 EXPECT_STREQ("Instance of '_LinkedHashMap'", obj.ToUserCString()); | |
| 4059 } | 3978 } |
| 4060 | 3979 |
| 4061 | 3980 |
| 4062 class JSONTypeVerifier : public ObjectVisitor { | 3981 class JSONTypeVerifier : public ObjectVisitor { |
| 4063 public: | 3982 public: |
| 4064 JSONTypeVerifier() : ObjectVisitor(Isolate::Current()) {} | 3983 JSONTypeVerifier() : ObjectVisitor(Isolate::Current()) {} |
| 4065 virtual ~JSONTypeVerifier() { } | 3984 virtual ~JSONTypeVerifier() { } |
| 4066 virtual void VisitObject(RawObject* obj) { | 3985 virtual void VisitObject(RawObject* obj) { |
| 4067 // Free-list elements cannot even be wrapped in handles. | 3986 // Free-list elements cannot even be wrapped in handles. |
| 4068 if (obj->IsFreeListElement()) { | 3987 if (obj->IsFreeListElement()) { |
| (...skipping 14 matching lines...) Expand all Loading... |
| 4083 | 4002 |
| 4084 | 4003 |
| 4085 TEST_CASE(PrintToJSONStream) { | 4004 TEST_CASE(PrintToJSONStream) { |
| 4086 Heap* heap = Isolate::Current()->heap(); | 4005 Heap* heap = Isolate::Current()->heap(); |
| 4087 heap->CollectAllGarbage(); | 4006 heap->CollectAllGarbage(); |
| 4088 JSONTypeVerifier verifier; | 4007 JSONTypeVerifier verifier; |
| 4089 heap->IterateObjects(&verifier); | 4008 heap->IterateObjects(&verifier); |
| 4090 } | 4009 } |
| 4091 | 4010 |
| 4092 } // namespace dart | 4011 } // namespace dart |
| OLD | NEW |