Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(259)

Unified Diff: test/cctest/test-api.cc

Issue 1986173002: Refactor script position calculation (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Remove Script.line_ends Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: test/cctest/test-api.cc
diff --git a/test/cctest/test-api.cc b/test/cctest/test-api.cc
index 5db8321db414e78a8f9eb8687511cd22c2103247..96b9a529a79bf656fc169a58127f6761fc05e9e7 100644
--- a/test/cctest/test-api.cc
+++ b/test/cctest/test-api.cc
@@ -23408,6 +23408,88 @@ TEST(ScriptNameAndLineNumber) {
CHECK_EQ(13, line_number);
}
+TEST(ScriptPositionInfo) {
+ LocalContext env;
+ v8::Isolate* isolate = env->GetIsolate();
+ v8::HandleScope scope(isolate);
+ const char* url = "http://www.foo.com/foo.js";
+ v8::ScriptOrigin origin(v8_str(url), v8::Integer::New(isolate, 13));
+ v8::ScriptCompiler::Source script_source(v8_str("var foo;\n"
+ "var bar;\n"
+ "var fisk = foo + bar;\n"),
+ origin);
+ Local<Script> script =
+ v8::ScriptCompiler::Compile(env.local(), &script_source).ToLocalChecked();
+
+ i::Handle<i::SharedFunctionInfo> obj = i::Handle<i::SharedFunctionInfo>::cast(
+ v8::Utils::OpenHandle(*script->GetUnboundScript()));
+ CHECK(obj->script()->IsScript());
+
+ i::Handle<i::Script> script1(i::Script::cast(obj->script()));
+
+ v8::internal::Script::PositionInfo info;
+
+ // With offset.
+
+ // Behave as if 0 was passed if position is negative.
+ CHECK(v8::internal::Script::GetPositionInfo(script1, -1, &info, true));
+ CHECK_EQ(13, info.line);
+ CHECK_EQ(0, info.column);
+ CHECK_EQ(0, info.line_start);
+ CHECK_EQ(8, info.line_end);
+
+ CHECK(v8::internal::Script::GetPositionInfo(script1, 0, &info, true));
+ CHECK_EQ(13, info.line);
+ CHECK_EQ(0, info.column);
+ CHECK_EQ(0, info.line_start);
+ CHECK_EQ(8, info.line_end);
+
+ CHECK(v8::internal::Script::GetPositionInfo(script1, 8, &info, true));
+ CHECK_EQ(13, info.line);
+ CHECK_EQ(8, info.column);
+ CHECK_EQ(0, info.line_start);
+ CHECK_EQ(8, info.line_end);
+
+ CHECK(v8::internal::Script::GetPositionInfo(script1, 9, &info, true));
+ CHECK_EQ(14, info.line);
+ CHECK_EQ(0, info.column);
+ CHECK_EQ(9, info.line_start);
+ CHECK_EQ(17, info.line_end);
+
+ // Fail when position is larger than script size.
+ CHECK(!v8::internal::Script::GetPositionInfo(script1, 220384, &info, true));
+
+ // Without offset.
+
+ // Behave as if 0 was passed if position is negative.
+ CHECK(v8::internal::Script::GetPositionInfo(script1, -1, &info, false));
+ CHECK_EQ(0, info.line);
+ CHECK_EQ(0, info.column);
+ CHECK_EQ(0, info.line_start);
+ CHECK_EQ(8, info.line_end);
+
+ CHECK(v8::internal::Script::GetPositionInfo(script1, 0, &info, false));
+ CHECK_EQ(0, info.line);
+ CHECK_EQ(0, info.column);
+ CHECK_EQ(0, info.line_start);
+ CHECK_EQ(8, info.line_end);
+
+ CHECK(v8::internal::Script::GetPositionInfo(script1, 8, &info, false));
+ CHECK_EQ(0, info.line);
+ CHECK_EQ(8, info.column);
+ CHECK_EQ(0, info.line_start);
+ CHECK_EQ(8, info.line_end);
+
+ CHECK(v8::internal::Script::GetPositionInfo(script1, 9, &info, false));
+ CHECK_EQ(1, info.line);
+ CHECK_EQ(0, info.column);
+ CHECK_EQ(9, info.line_start);
+ CHECK_EQ(17, info.line_end);
+
+ // Fail when position is larger than script size.
+ CHECK(!v8::internal::Script::GetPositionInfo(script1, 220384, &info, true));
+}
+
void CheckMagicComments(Local<Script> script, const char* expected_source_url,
const char* expected_source_mapping_url) {
if (expected_source_url != NULL) {

Powered by Google App Engine
This is Rietveld 408576698