Index: runtime/vm/object_test.cc |
diff --git a/runtime/vm/object_test.cc b/runtime/vm/object_test.cc |
index 692a03bf22b800d7e882c708b7843d1b33f15252..c7ddd97e67df40f47f1fdbd625667a0a1e528236 100644 |
--- a/runtime/vm/object_test.cc |
+++ b/runtime/vm/object_test.cc |
@@ -4229,40 +4229,6 @@ TEST_CASE(PrintJSON) { |
} |
-// Elide a substring which starts with some prefix and ends with a ". |
-// |
-// This is used to remove non-deterministic or fragile substrings from |
-// JSON output. |
-// |
-// For example: |
-// |
-// prefix = "classes" |
-// in = "\"id\":\"classes/46\"" |
-// |
-// Yields: |
-// |
-// out = "\"id\":\"\"" |
-// |
-static void elideSubstring(const char* prefix, const char* in, char* out) { |
- const char* pos = strstr(in, prefix); |
- while (pos != NULL) { |
- // Copy up to pos into the output buffer. |
- while (in < pos) { |
- *out++ = *in++; |
- } |
- |
- // Skip to the close quote. |
- in += strcspn(in, "\""); |
- pos = strstr(in, prefix); |
- } |
- // Copy the remainder of in to out. |
- while (*in != '\0') { |
- *out++ = *in++; |
- } |
- *out = '\0'; |
-} |
- |
- |
TEST_CASE(PrintJSONPrimitives) { |
char buffer[1024]; |
Isolate* isolate = Isolate::Current(); |
@@ -4272,7 +4238,7 @@ TEST_CASE(PrintJSONPrimitives) { |
JSONStream js; |
Class& cls = Class::Handle(isolate->object_store()->bool_class()); |
cls.PrintJSON(&js, true); |
- elideSubstring("classes", js.ToCString(), buffer); |
+ ElideJSONSubstring("classes", js.ToCString(), buffer); |
EXPECT_STREQ( |
"{\"type\":\"@Class\",\"fixedId\":true,\"id\":\"\",\"name\":\"bool\"}", |
buffer); |
@@ -4285,7 +4251,7 @@ TEST_CASE(PrintJSONPrimitives) { |
Function& func = Function::Handle(cls.LookupFunction(func_name)); |
ASSERT(!func.IsNull()); |
func.PrintJSON(&js, true); |
- elideSubstring("classes", js.ToCString(), buffer); |
+ ElideJSONSubstring("classes", js.ToCString(), buffer); |
EXPECT_STREQ( |
"{\"type\":\"@Function\",\"fixedId\":true," |
"\"id\":\"\",\"name\":\"toString\"," |
@@ -4300,7 +4266,7 @@ TEST_CASE(PrintJSONPrimitives) { |
JSONStream js; |
Library& lib = Library::Handle(isolate->object_store()->core_library()); |
lib.PrintJSON(&js, true); |
- elideSubstring("libraries", js.ToCString(), buffer); |
+ ElideJSONSubstring("libraries", js.ToCString(), buffer); |
EXPECT_STREQ( |
"{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"\"," |
"\"name\":\"dart.core\",\"uri\":\"dart:core\"}", |
@@ -4310,7 +4276,7 @@ TEST_CASE(PrintJSONPrimitives) { |
{ |
JSONStream js; |
Bool::True().PrintJSON(&js, true); |
- elideSubstring("classes", js.ToCString(), buffer); |
+ ElideJSONSubstring("classes", js.ToCString(), buffer); |
EXPECT_STREQ( |
"{\"type\":\"@Instance\"," |
"\"_vmType\":\"Bool\"," |
@@ -4326,8 +4292,8 @@ TEST_CASE(PrintJSONPrimitives) { |
JSONStream js; |
const Integer& smi = Integer::Handle(Integer::New(7)); |
smi.PrintJSON(&js, true); |
- elideSubstring("classes", js.ToCString(), buffer); |
- elideSubstring("_Smi@", buffer, buffer); |
+ ElideJSONSubstring("classes", js.ToCString(), buffer); |
+ ElideJSONSubstring("_Smi@", buffer, buffer); |
EXPECT_STREQ( |
"{\"type\":\"@Instance\"," |
"\"_vmType\":\"Smi\"," |
@@ -4344,9 +4310,9 @@ TEST_CASE(PrintJSONPrimitives) { |
JSONStream js; |
const Integer& smi = Integer::Handle(Integer::New(Mint::kMinValue)); |
smi.PrintJSON(&js, true); |
- elideSubstring("classes", js.ToCString(), buffer); |
- elideSubstring("objects", buffer, buffer); |
- elideSubstring("_Mint@", buffer, buffer); |
+ ElideJSONSubstring("classes", js.ToCString(), buffer); |
+ ElideJSONSubstring("objects", buffer, buffer); |
+ ElideJSONSubstring("_Mint@", buffer, buffer); |
EXPECT_STREQ( |
"{\"type\":\"@Instance\"," |
"\"_vmType\":\"Mint\"," |
@@ -4363,9 +4329,9 @@ TEST_CASE(PrintJSONPrimitives) { |
String::Handle(String::New("44444444444444444444444444444444")); |
const Integer& bigint = Integer::Handle(Integer::New(bigint_str)); |
bigint.PrintJSON(&js, true); |
- elideSubstring("classes", js.ToCString(), buffer); |
- elideSubstring("objects", buffer, buffer); |
- elideSubstring("_Bigint@", buffer, buffer); |
+ ElideJSONSubstring("classes", js.ToCString(), buffer); |
+ ElideJSONSubstring("objects", buffer, buffer); |
+ ElideJSONSubstring("_Bigint@", buffer, buffer); |
EXPECT_STREQ( |
"{\"type\":\"@Instance\"," |
"\"_vmType\":\"Bigint\"," |
@@ -4380,9 +4346,9 @@ TEST_CASE(PrintJSONPrimitives) { |
JSONStream js; |
const Double& dub = Double::Handle(Double::New(0.1234)); |
dub.PrintJSON(&js, true); |
- elideSubstring("classes", js.ToCString(), buffer); |
- elideSubstring("objects", buffer, buffer); |
- elideSubstring("_Double@", buffer, buffer); |
+ ElideJSONSubstring("classes", js.ToCString(), buffer); |
+ ElideJSONSubstring("objects", buffer, buffer); |
+ ElideJSONSubstring("_Double@", buffer, buffer); |
EXPECT_STREQ( |
"{\"type\":\"@Instance\"," |
"\"_vmType\":\"Double\"," |
@@ -4397,9 +4363,9 @@ TEST_CASE(PrintJSONPrimitives) { |
JSONStream js; |
const String& str = String::Handle(String::New("dw")); |
str.PrintJSON(&js, true); |
- elideSubstring("classes", js.ToCString(), buffer); |
- elideSubstring("objects", buffer, buffer); |
- elideSubstring("_OneByteString@", buffer, buffer); |
+ ElideJSONSubstring("classes", js.ToCString(), buffer); |
+ ElideJSONSubstring("objects", buffer, buffer); |
+ ElideJSONSubstring("_OneByteString@", buffer, buffer); |
EXPECT_STREQ( |
"{\"type\":\"@Instance\"," |
"\"_vmType\":\"String\"," |
@@ -4414,9 +4380,9 @@ TEST_CASE(PrintJSONPrimitives) { |
JSONStream js; |
const Array& array = Array::Handle(Array::New(0)); |
array.PrintJSON(&js, true); |
- elideSubstring("classes", js.ToCString(), buffer); |
- elideSubstring("objects", buffer, buffer); |
- elideSubstring("_List@", buffer, buffer); |
+ ElideJSONSubstring("classes", js.ToCString(), buffer); |
+ ElideJSONSubstring("objects", buffer, buffer); |
+ ElideJSONSubstring("_List@", buffer, buffer); |
EXPECT_STREQ( |
"{\"type\":\"@Instance\"," |
"\"_vmType\":\"Array\"," |
@@ -4432,9 +4398,9 @@ TEST_CASE(PrintJSONPrimitives) { |
const GrowableObjectArray& array = |
GrowableObjectArray::Handle(GrowableObjectArray::New()); |
array.PrintJSON(&js, true); |
- elideSubstring("classes", js.ToCString(), buffer); |
- elideSubstring("objects", buffer, buffer); |
- elideSubstring("_GrowableList@", buffer, buffer); |
+ ElideJSONSubstring("classes", js.ToCString(), buffer); |
+ ElideJSONSubstring("objects", buffer, buffer); |
+ ElideJSONSubstring("_GrowableList@", buffer, buffer); |
EXPECT_STREQ( |
"{\"type\":\"@Instance\"," |
"\"_vmType\":\"GrowableObjectArray\"," |
@@ -4451,9 +4417,9 @@ TEST_CASE(PrintJSONPrimitives) { |
const LinkedHashMap& array = |
LinkedHashMap::Handle(LinkedHashMap::NewDefault()); |
array.PrintJSON(&js, true); |
- elideSubstring("classes", js.ToCString(), buffer); |
- elideSubstring("objects", buffer, buffer); |
- elideSubstring("_InternalLinkedHashMap@", buffer, buffer); |
+ ElideJSONSubstring("classes", js.ToCString(), buffer); |
+ ElideJSONSubstring("objects", buffer, buffer); |
+ ElideJSONSubstring("_InternalLinkedHashMap@", buffer, buffer); |
EXPECT_STREQ( |
"{\"type\":\"@Instance\"," |
"\"_vmType\":\"LinkedHashMap\"," |
@@ -4469,9 +4435,9 @@ TEST_CASE(PrintJSONPrimitives) { |
JSONStream js; |
Instance& tag = Instance::Handle(isolate->default_tag()); |
tag.PrintJSON(&js, true); |
- elideSubstring("classes", js.ToCString(), buffer); |
- elideSubstring("objects", buffer, buffer); |
- elideSubstring("_UserTag@", buffer, buffer); |
+ ElideJSONSubstring("classes", js.ToCString(), buffer); |
+ ElideJSONSubstring("objects", buffer, buffer); |
+ ElideJSONSubstring("_UserTag@", buffer, buffer); |
EXPECT_STREQ( |
"{\"type\":\"@Instance\"," |
"\"_vmType\":\"UserTag\"," |
@@ -4487,9 +4453,9 @@ TEST_CASE(PrintJSONPrimitives) { |
JSONStream js; |
Instance& type = Instance::Handle(isolate->object_store()->bool_type()); |
type.PrintJSON(&js, true); |
- elideSubstring("classes", js.ToCString(), buffer); |
- elideSubstring("objects", buffer, buffer); |
- elideSubstring("_Type@", buffer, buffer); |
+ ElideJSONSubstring("classes", js.ToCString(), buffer); |
+ ElideJSONSubstring("objects", buffer, buffer); |
+ ElideJSONSubstring("_Type@", buffer, buffer); |
EXPECT_STREQ( |
"{\"type\":\"@Instance\"," |
"\"_vmType\":\"Type\"," |
@@ -4505,14 +4471,17 @@ TEST_CASE(PrintJSONPrimitives) { |
{ |
JSONStream js; |
Object::null_object().PrintJSON(&js, true); |
+ ElideJSONSubstring("classes", js.ToCString(), buffer); |
EXPECT_STREQ( |
"{\"type\":\"@Instance\"," |
"\"_vmType\":\"null\"," |
+ "\"class\":{\"type\":\"@Class\",\"fixedId\":true,\"id\":\"\"," |
+ "\"name\":\"Null\"}," |
"\"kind\":\"Null\"," |
"\"fixedId\":true," |
"\"id\":\"objects\\/null\"," |
"\"valueAsString\":\"null\"}", |
- js.ToCString()); |
+ buffer); |
} |
// Sentinel reference |
{ |
@@ -4541,7 +4510,7 @@ TEST_CASE(PrintJSONPrimitives) { |
JSONStream js; |
LiteralToken& tok = LiteralToken::Handle(LiteralToken::New()); |
tok.PrintJSON(&js, true); |
- elideSubstring("objects", js.ToCString(), buffer); |
+ ElideJSONSubstring("objects", js.ToCString(), buffer); |
EXPECT_STREQ( |
"{\"type\":\"@Object\",\"_vmType\":\"LiteralToken\",\"id\":\"\"}", |
buffer); |