Index: test/cctest/test-object.cc |
diff --git a/test/cctest/test-object.cc b/test/cctest/test-object.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..e078bfcdb06f2c01dfc95f25444946ec109c243c |
--- /dev/null |
+++ b/test/cctest/test-object.cc |
@@ -0,0 +1,71 @@ |
+// Copyright 2016 the V8 project authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "src/v8.h" |
+ |
+#include "test/cctest/cctest.h" |
+ |
+using namespace v8::internal; |
+ |
+static void CheckObject(Isolate* isolate, Handle<Object> obj, |
+ const char* string) { |
+ Object* print_string = *Object::NoSideEffectsToString(isolate, obj); |
+ CHECK(String::cast(print_string)->IsUtf8EqualTo(CStrVector(string))); |
+} |
+ |
+static void CheckSmi(Isolate* isolate, int value, const char* string) { |
+ Handle<Object> handle(Smi::FromInt(value), isolate); |
+ CheckObject(isolate, handle, string); |
+} |
+ |
+static void CheckString(Isolate* isolate, const char* value, |
+ const char* string) { |
+ Handle<String> handle(isolate->factory()->NewStringFromAsciiChecked(value)); |
+ CheckObject(isolate, handle, string); |
+} |
+ |
+static void CheckNumber(Isolate* isolate, double value, const char* string) { |
+ Handle<Object> number = isolate->factory()->NewNumber(value); |
+ CHECK(number->IsNumber()); |
+ CheckObject(isolate, number, string); |
+} |
+ |
+static void CheckBoolean(Isolate* isolate, bool value, const char* string) { |
+ CheckObject(isolate, value ? isolate->factory()->true_value() |
+ : isolate->factory()->false_value(), |
+ string); |
+} |
+ |
+TEST(NoSideEffectsToString) { |
+ CcTest::InitializeVM(); |
+ Isolate* isolate = CcTest::i_isolate(); |
+ Factory* factory = isolate->factory(); |
+ |
+ HandleScope scope(isolate); |
+ |
+ CheckString(isolate, "fisk hest", "fisk hest"); |
+ CheckNumber(isolate, 42.3, "42.3"); |
+ CheckSmi(isolate, 42, "42"); |
+ CheckBoolean(isolate, true, "true"); |
+ CheckBoolean(isolate, false, "false"); |
+ CheckBoolean(isolate, false, "false"); |
+ CheckObject(isolate, factory->undefined_value(), "undefined"); |
+ CheckObject(isolate, factory->null_value(), "null"); |
+ |
+ int lanes[] = {0, 1, 2, 3}; |
+ CheckObject(isolate, factory->NewInt32x4(lanes), "SIMD.Int32x4(0, 1, 2, 3)"); |
+ |
+ CheckObject(isolate, factory->error_to_string(), "[object Error]"); |
+ CheckObject(isolate, factory->stack_trace_symbol(), |
+ "Symbol(stack_trace_symbol)"); |
+ CheckObject(isolate, factory->NewError(isolate->error_function(), |
+ factory->empty_string()), |
+ "Error"); |
+ CheckObject(isolate, factory->NewError( |
+ isolate->error_function(), |
+ factory->NewStringFromAsciiChecked("fisk hest")), |
+ "Error: fisk hest"); |
+ CheckObject(isolate, factory->NewJSObject(isolate->object_function()), |
+ "#<Object>"); |
+} |