cddbe282c6
* Avoid "using namespace" statements, which trigger clang's -Wheader-hygiene warnings in jumbo builds. * Undefine created macros at the end of source files. BUG=chromium:746958 Change-Id: I5d25432c314437f607b0e1be22765a6764267ba6 Reviewed-on: https://chromium-review.googlesource.com/610962 Reviewed-by: Jakob Kummerow <jkummerow@chromium.org> Commit-Queue: Mostyn Bramley-Moore <mostynb@opera.com> Cr-Commit-Position: refs/heads/master@{#47347}
78 lines
2.7 KiB
C++
78 lines
2.7 KiB
C++
// 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/factory.h"
|
|
#include "src/handles-inl.h"
|
|
#include "src/handles.h"
|
|
#include "src/isolate.h"
|
|
#include "src/objects-inl.h"
|
|
#include "src/objects.h"
|
|
#include "src/v8.h"
|
|
#include "test/cctest/cctest.h"
|
|
|
|
namespace v8 {
|
|
namespace 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");
|
|
|
|
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>");
|
|
}
|
|
|
|
} // namespace internal
|
|
} // namespace v8
|