Fix external string test.
authorager@chromium.org <ager@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Mon, 17 Nov 2008 16:00:58 +0000 (16:00 +0000)
committerager@chromium.org <ager@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Mon, 17 Nov 2008 16:00:58 +0000 (16:00 +0000)
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@773 ce2b1a6d-e550-0410-aec6-3dcde31c8c00

test/cctest/test-api.cc

index 38394fbc34268546ab33606b07130e02ab3383f9..347195ebf26147c1a359023c20a1ceb5ef49fb6d 100644 (file)
@@ -5237,7 +5237,8 @@ static String::ExternalStringResource* SymbolCallback(const char* chars,
 
 static v8::Handle<Value> ExternalSymbolGetter(Local<String> name,
                                               const AccessorInfo& info) {
-  CHECK(name->IsExternal());
+  ApiTestFuzzer::Fuzz();
+  CHECK(!name->Equals(v8_str("externalSymbol722")) || name->IsExternal());  CHECK(name->IsExternal());
   return v8::True();
 }
 
@@ -5245,7 +5246,8 @@ static v8::Handle<Value> ExternalSymbolGetter(Local<String> name,
 static void ExternalSymbolSetter(Local<String> name,
                                  Local<Value> value,
                                  const AccessorInfo&) {
-  CHECK(name->IsExternal());
+  ApiTestFuzzer::Fuzz();
+  CHECK(!name->Equals(v8_str("externalSymbol722")) || name->IsExternal());
 }
 
 
@@ -5255,12 +5257,20 @@ THREADED_TEST(ExternalSymbols) {
   v8::HandleScope scope;
   LocalContext context;
   Local<ObjectTemplate> templ = ObjectTemplate::New();
-  templ->SetAccessor(v8_str("x"), ExternalSymbolGetter, ExternalSymbolSetter);
-  context->Global()->Set(v8_str("obj"), templ->NewInstance());
-  Local<Value> value = CompileRun("var o = { x: 42 }; o.x");
+  // Use a bizare name so that the name does not clash with names used
+  // in natives files.  If running with snapshots enabled, variable
+  // names used in the native files will be normal symbols instead of
+  // external ones.  Also, make sure that the bizare name is used from
+  // JavaScript code before using it from C++ code.
+  Local<Value> value =
+      CompileRun("var o = { externalSymbol722: 42 }; o.externalSymbol722");
   CHECK_EQ(42, value->Int32Value());
-  value = CompileRun("obj.x");
+  templ->SetAccessor(v8_str("externalSymbol722"),
+                     ExternalSymbolGetter,
+                     ExternalSymbolSetter);
+  context->Global()->Set(v8_str("obj"), templ->NewInstance());
+  value = CompileRun("obj.externalSymbol722");
   CHECK_EQ(true, value->BooleanValue());
-  value = CompileRun("obj.x = 42");
+  value = CompileRun("obj.externalSymbol722 = 42");
   v8::V8::SetExternalSymbolCallback(NULL);
 }