OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
48 #include "platform.h" | 48 #include "platform.h" |
49 #include "snapshot.h" | 49 #include "snapshot.h" |
50 #include "unicode-inl.h" | 50 #include "unicode-inl.h" |
51 #include "utils.h" | 51 #include "utils.h" |
52 #include "vm-state.h" | 52 #include "vm-state.h" |
53 | 53 |
54 static const bool kLogThreading = false; | 54 static const bool kLogThreading = false; |
55 | 55 |
56 using ::v8::AccessorInfo; | 56 using ::v8::AccessorInfo; |
57 using ::v8::Arguments; | 57 using ::v8::Arguments; |
| 58 using ::v8::Boolean; |
| 59 using ::v8::BooleanObject; |
58 using ::v8::Context; | 60 using ::v8::Context; |
59 using ::v8::Extension; | 61 using ::v8::Extension; |
60 using ::v8::Function; | 62 using ::v8::Function; |
61 using ::v8::FunctionTemplate; | 63 using ::v8::FunctionTemplate; |
62 using ::v8::Handle; | 64 using ::v8::Handle; |
63 using ::v8::HandleScope; | 65 using ::v8::HandleScope; |
64 using ::v8::Local; | 66 using ::v8::Local; |
65 using ::v8::Message; | 67 using ::v8::Message; |
66 using ::v8::MessageCallback; | 68 using ::v8::MessageCallback; |
67 using ::v8::Object; | 69 using ::v8::Object; |
(...skipping 1411 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1479 v8::Handle<Value> boxed_string = CompileRun("new String(\"test\")"); | 1481 v8::Handle<Value> boxed_string = CompileRun("new String(\"test\")"); |
1480 CHECK(boxed_string->IsStringObject()); | 1482 CHECK(boxed_string->IsStringObject()); |
1481 v8::Handle<Value> unboxed_string = CompileRun("\"test\""); | 1483 v8::Handle<Value> unboxed_string = CompileRun("\"test\""); |
1482 CHECK(!unboxed_string->IsStringObject()); | 1484 CHECK(!unboxed_string->IsStringObject()); |
1483 v8::Handle<Value> boxed_not_string = CompileRun("new Number(42)"); | 1485 v8::Handle<Value> boxed_not_string = CompileRun("new Number(42)"); |
1484 CHECK(!boxed_not_string->IsStringObject()); | 1486 CHECK(!boxed_not_string->IsStringObject()); |
1485 v8::Handle<Value> not_object = CompileRun("0"); | 1487 v8::Handle<Value> not_object = CompileRun("0"); |
1486 CHECK(!not_object->IsStringObject()); | 1488 CHECK(!not_object->IsStringObject()); |
1487 v8::Handle<v8::StringObject> as_boxed = boxed_string.As<v8::StringObject>(); | 1489 v8::Handle<v8::StringObject> as_boxed = boxed_string.As<v8::StringObject>(); |
1488 CHECK(!as_boxed.IsEmpty()); | 1490 CHECK(!as_boxed.IsEmpty()); |
1489 Local<v8::String> the_string = as_boxed->StringValue(); | 1491 Local<v8::String> the_string = as_boxed->ValueOf(); |
1490 CHECK(!the_string.IsEmpty()); | 1492 CHECK(!the_string.IsEmpty()); |
1491 ExpectObject("\"test\"", the_string); | 1493 ExpectObject("\"test\"", the_string); |
1492 v8::Handle<v8::Value> new_boxed_string = v8::StringObject::New(the_string); | 1494 v8::Handle<v8::Value> new_boxed_string = v8::StringObject::New(the_string); |
1493 CHECK(new_boxed_string->IsStringObject()); | 1495 CHECK(new_boxed_string->IsStringObject()); |
1494 as_boxed = new_boxed_string.As<v8::StringObject>(); | 1496 as_boxed = new_boxed_string.As<v8::StringObject>(); |
1495 the_string = as_boxed->StringValue(); | 1497 the_string = as_boxed->ValueOf(); |
1496 CHECK(!the_string.IsEmpty()); | 1498 CHECK(!the_string.IsEmpty()); |
1497 ExpectObject("\"test\"", the_string); | 1499 ExpectObject("\"test\"", the_string); |
1498 } | 1500 } |
1499 | 1501 |
1500 | 1502 |
1501 THREADED_TEST(NumberObject) { | 1503 THREADED_TEST(NumberObject) { |
1502 LocalContext env; | 1504 LocalContext env; |
1503 v8::HandleScope scope(env->GetIsolate()); | 1505 v8::HandleScope scope(env->GetIsolate()); |
1504 v8::Handle<Value> boxed_number = CompileRun("new Number(42)"); | 1506 v8::Handle<Value> boxed_number = CompileRun("new Number(42)"); |
1505 CHECK(boxed_number->IsNumberObject()); | 1507 CHECK(boxed_number->IsNumberObject()); |
1506 v8::Handle<Value> unboxed_number = CompileRun("42"); | 1508 v8::Handle<Value> unboxed_number = CompileRun("42"); |
1507 CHECK(!unboxed_number->IsNumberObject()); | 1509 CHECK(!unboxed_number->IsNumberObject()); |
1508 v8::Handle<Value> boxed_not_number = CompileRun("new Boolean(false)"); | 1510 v8::Handle<Value> boxed_not_number = CompileRun("new Boolean(false)"); |
1509 CHECK(!boxed_not_number->IsNumberObject()); | 1511 CHECK(!boxed_not_number->IsNumberObject()); |
1510 v8::Handle<v8::NumberObject> as_boxed = boxed_number.As<v8::NumberObject>(); | 1512 v8::Handle<v8::NumberObject> as_boxed = boxed_number.As<v8::NumberObject>(); |
1511 CHECK(!as_boxed.IsEmpty()); | 1513 CHECK(!as_boxed.IsEmpty()); |
1512 double the_number = as_boxed->NumberValue(); | 1514 double the_number = as_boxed->ValueOf(); |
1513 CHECK_EQ(42.0, the_number); | 1515 CHECK_EQ(42.0, the_number); |
1514 v8::Handle<v8::Value> new_boxed_number = v8::NumberObject::New(43); | 1516 v8::Handle<v8::Value> new_boxed_number = v8::NumberObject::New(43); |
1515 CHECK(new_boxed_number->IsNumberObject()); | 1517 CHECK(new_boxed_number->IsNumberObject()); |
1516 as_boxed = new_boxed_number.As<v8::NumberObject>(); | 1518 as_boxed = new_boxed_number.As<v8::NumberObject>(); |
1517 the_number = as_boxed->NumberValue(); | 1519 the_number = as_boxed->ValueOf(); |
1518 CHECK_EQ(43.0, the_number); | 1520 CHECK_EQ(43.0, the_number); |
1519 } | 1521 } |
1520 | 1522 |
1521 | 1523 |
1522 THREADED_TEST(BooleanObject) { | 1524 THREADED_TEST(BooleanObject) { |
1523 LocalContext env; | 1525 LocalContext env; |
1524 v8::HandleScope scope(env->GetIsolate()); | 1526 v8::HandleScope scope(env->GetIsolate()); |
1525 v8::Handle<Value> boxed_boolean = CompileRun("new Boolean(true)"); | 1527 v8::Handle<Value> boxed_boolean = CompileRun("new Boolean(true)"); |
1526 CHECK(boxed_boolean->IsBooleanObject()); | 1528 CHECK(boxed_boolean->IsBooleanObject()); |
1527 v8::Handle<Value> unboxed_boolean = CompileRun("true"); | 1529 v8::Handle<Value> unboxed_boolean = CompileRun("true"); |
1528 CHECK(!unboxed_boolean->IsBooleanObject()); | 1530 CHECK(!unboxed_boolean->IsBooleanObject()); |
1529 v8::Handle<Value> boxed_not_boolean = CompileRun("new Number(42)"); | 1531 v8::Handle<Value> boxed_not_boolean = CompileRun("new Number(42)"); |
1530 CHECK(!boxed_not_boolean->IsBooleanObject()); | 1532 CHECK(!boxed_not_boolean->IsBooleanObject()); |
1531 v8::Handle<v8::BooleanObject> as_boxed = | 1533 v8::Handle<v8::BooleanObject> as_boxed = |
1532 boxed_boolean.As<v8::BooleanObject>(); | 1534 boxed_boolean.As<v8::BooleanObject>(); |
1533 CHECK(!as_boxed.IsEmpty()); | 1535 CHECK(!as_boxed.IsEmpty()); |
1534 bool the_boolean = as_boxed->BooleanValue(); | 1536 bool the_boolean = as_boxed->ValueOf(); |
1535 CHECK_EQ(true, the_boolean); | 1537 CHECK_EQ(true, the_boolean); |
1536 v8::Handle<v8::Value> boxed_true = v8::BooleanObject::New(true); | 1538 v8::Handle<v8::Value> boxed_true = v8::BooleanObject::New(true); |
1537 v8::Handle<v8::Value> boxed_false = v8::BooleanObject::New(false); | 1539 v8::Handle<v8::Value> boxed_false = v8::BooleanObject::New(false); |
1538 CHECK(boxed_true->IsBooleanObject()); | 1540 CHECK(boxed_true->IsBooleanObject()); |
1539 CHECK(boxed_false->IsBooleanObject()); | 1541 CHECK(boxed_false->IsBooleanObject()); |
1540 as_boxed = boxed_true.As<v8::BooleanObject>(); | 1542 as_boxed = boxed_true.As<v8::BooleanObject>(); |
1541 CHECK_EQ(true, as_boxed->BooleanValue()); | 1543 CHECK_EQ(true, as_boxed->ValueOf()); |
1542 as_boxed = boxed_false.As<v8::BooleanObject>(); | 1544 as_boxed = boxed_false.As<v8::BooleanObject>(); |
1543 CHECK_EQ(false, as_boxed->BooleanValue()); | 1545 CHECK_EQ(false, as_boxed->ValueOf()); |
1544 } | 1546 } |
1545 | 1547 |
1546 | 1548 |
| 1549 THREADED_TEST(PrimitiveAndWrappedBooleans) { |
| 1550 LocalContext env; |
| 1551 v8::HandleScope scope(env->GetIsolate()); |
| 1552 |
| 1553 Local<Value> primitive_false = Boolean::New(false); |
| 1554 CHECK(primitive_false->IsBoolean()); |
| 1555 CHECK(!primitive_false->IsBooleanObject()); |
| 1556 CHECK(!primitive_false->BooleanValue()); |
| 1557 CHECK(!primitive_false->IsTrue()); |
| 1558 CHECK(primitive_false->IsFalse()); |
| 1559 |
| 1560 Local<Value> false_value = BooleanObject::New(false); |
| 1561 CHECK(!false_value->IsBoolean()); |
| 1562 CHECK(false_value->IsBooleanObject()); |
| 1563 CHECK(false_value->BooleanValue()); |
| 1564 CHECK(!false_value->IsTrue()); |
| 1565 CHECK(!false_value->IsFalse()); |
| 1566 |
| 1567 Local<BooleanObject> false_boolean_object = false_value.As<BooleanObject>(); |
| 1568 CHECK(!false_boolean_object->IsBoolean()); |
| 1569 CHECK(false_boolean_object->IsBooleanObject()); |
| 1570 // TODO(svenpanne) Uncomment when BooleanObject::BooleanValue() is deleted. |
| 1571 // CHECK(false_boolean_object->BooleanValue()); |
| 1572 CHECK(!false_boolean_object->ValueOf()); |
| 1573 CHECK(!false_boolean_object->IsTrue()); |
| 1574 CHECK(!false_boolean_object->IsFalse()); |
| 1575 |
| 1576 Local<Value> primitive_true = Boolean::New(true); |
| 1577 CHECK(primitive_true->IsBoolean()); |
| 1578 CHECK(!primitive_true->IsBooleanObject()); |
| 1579 CHECK(primitive_true->BooleanValue()); |
| 1580 CHECK(primitive_true->IsTrue()); |
| 1581 CHECK(!primitive_true->IsFalse()); |
| 1582 |
| 1583 Local<Value> true_value = BooleanObject::New(true); |
| 1584 CHECK(!true_value->IsBoolean()); |
| 1585 CHECK(true_value->IsBooleanObject()); |
| 1586 CHECK(true_value->BooleanValue()); |
| 1587 CHECK(!true_value->IsTrue()); |
| 1588 CHECK(!true_value->IsFalse()); |
| 1589 |
| 1590 Local<BooleanObject> true_boolean_object = true_value.As<BooleanObject>(); |
| 1591 CHECK(!true_boolean_object->IsBoolean()); |
| 1592 CHECK(true_boolean_object->IsBooleanObject()); |
| 1593 // TODO(svenpanne) Uncomment when BooleanObject::BooleanValue() is deleted. |
| 1594 // CHECK(true_boolean_object->BooleanValue()); |
| 1595 CHECK(true_boolean_object->ValueOf()); |
| 1596 CHECK(!true_boolean_object->IsTrue()); |
| 1597 CHECK(!true_boolean_object->IsFalse()); |
| 1598 } |
| 1599 |
| 1600 |
1547 THREADED_TEST(Number) { | 1601 THREADED_TEST(Number) { |
1548 LocalContext env; | 1602 LocalContext env; |
1549 v8::HandleScope scope(env->GetIsolate()); | 1603 v8::HandleScope scope(env->GetIsolate()); |
1550 double PI = 3.1415926; | 1604 double PI = 3.1415926; |
1551 Local<v8::Number> pi_obj = v8::Number::New(PI); | 1605 Local<v8::Number> pi_obj = v8::Number::New(PI); |
1552 CHECK_EQ(PI, pi_obj->NumberValue()); | 1606 CHECK_EQ(PI, pi_obj->NumberValue()); |
1553 } | 1607 } |
1554 | 1608 |
1555 | 1609 |
1556 THREADED_TEST(ToNumber) { | 1610 THREADED_TEST(ToNumber) { |
(...skipping 1002 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2559 CHECK(sym_val->StrictEquals(sym2)); | 2613 CHECK(sym_val->StrictEquals(sym2)); |
2560 CHECK(v8::Symbol::Cast(*sym_val)->Equals(sym2)); | 2614 CHECK(v8::Symbol::Cast(*sym_val)->Equals(sym2)); |
2561 | 2615 |
2562 v8::Local<v8::Value> sym_obj = v8::SymbolObject::New(isolate, sym2); | 2616 v8::Local<v8::Value> sym_obj = v8::SymbolObject::New(isolate, sym2); |
2563 CHECK(sym_obj->IsSymbolObject()); | 2617 CHECK(sym_obj->IsSymbolObject()); |
2564 CHECK(!sym2->IsSymbolObject()); | 2618 CHECK(!sym2->IsSymbolObject()); |
2565 CHECK(!obj->IsSymbolObject()); | 2619 CHECK(!obj->IsSymbolObject()); |
2566 CHECK(sym_obj->Equals(sym2)); | 2620 CHECK(sym_obj->Equals(sym2)); |
2567 CHECK(!sym_obj->StrictEquals(sym2)); | 2621 CHECK(!sym_obj->StrictEquals(sym2)); |
2568 CHECK(v8::SymbolObject::Cast(*sym_obj)->Equals(sym_obj)); | 2622 CHECK(v8::SymbolObject::Cast(*sym_obj)->Equals(sym_obj)); |
2569 CHECK(v8::SymbolObject::Cast(*sym_obj)->SymbolValue()->Equals(sym2)); | 2623 CHECK(v8::SymbolObject::Cast(*sym_obj)->ValueOf()->Equals(sym2)); |
2570 | 2624 |
2571 // Make sure delete of a non-existent symbol property works. | 2625 // Make sure delete of a non-existent symbol property works. |
2572 CHECK(obj->Delete(sym1)); | 2626 CHECK(obj->Delete(sym1)); |
2573 CHECK(!obj->Has(sym1)); | 2627 CHECK(!obj->Has(sym1)); |
2574 | 2628 |
2575 CHECK(obj->Set(sym1, v8::Integer::New(1503))); | 2629 CHECK(obj->Set(sym1, v8::Integer::New(1503))); |
2576 CHECK(obj->Has(sym1)); | 2630 CHECK(obj->Has(sym1)); |
2577 CHECK_EQ(1503, obj->Get(sym1)->Int32Value()); | 2631 CHECK_EQ(1503, obj->Get(sym1)->Int32Value()); |
2578 CHECK(obj->Set(sym1, v8::Integer::New(2002))); | 2632 CHECK(obj->Set(sym1, v8::Integer::New(2002))); |
2579 CHECK(obj->Has(sym1)); | 2633 CHECK(obj->Has(sym1)); |
(...skipping 924 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3504 | 3558 |
3505 | 3559 |
3506 bool message_received; | 3560 bool message_received; |
3507 | 3561 |
3508 | 3562 |
3509 static void check_message_0(v8::Handle<v8::Message> message, | 3563 static void check_message_0(v8::Handle<v8::Message> message, |
3510 v8::Handle<Value> data) { | 3564 v8::Handle<Value> data) { |
3511 CHECK_EQ(5.76, data->NumberValue()); | 3565 CHECK_EQ(5.76, data->NumberValue()); |
3512 CHECK_EQ(6.75, message->GetScriptResourceName()->NumberValue()); | 3566 CHECK_EQ(6.75, message->GetScriptResourceName()->NumberValue()); |
3513 CHECK_EQ(7.56, message->GetScriptData()->NumberValue()); | 3567 CHECK_EQ(7.56, message->GetScriptData()->NumberValue()); |
| 3568 CHECK(!message->IsSharedCrossOrigin()); |
3514 message_received = true; | 3569 message_received = true; |
3515 } | 3570 } |
3516 | 3571 |
3517 | 3572 |
3518 THREADED_TEST(MessageHandler0) { | 3573 THREADED_TEST(MessageHandler0) { |
3519 message_received = false; | 3574 message_received = false; |
3520 v8::HandleScope scope(v8::Isolate::GetCurrent()); | 3575 v8::HandleScope scope(v8::Isolate::GetCurrent()); |
3521 CHECK(!message_received); | 3576 CHECK(!message_received); |
3522 v8::V8::AddMessageListener(check_message_0, v8_num(5.76)); | 3577 v8::V8::AddMessageListener(check_message_0, v8_num(5.76)); |
3523 LocalContext context; | 3578 LocalContext context; |
3524 v8::ScriptOrigin origin = | 3579 v8::ScriptOrigin origin = |
3525 v8::ScriptOrigin(v8_str("6.75")); | 3580 v8::ScriptOrigin(v8_str("6.75")); |
3526 v8::Handle<v8::Script> script = Script::Compile(v8_str("throw 'error'"), | 3581 v8::Handle<v8::Script> script = Script::Compile(v8_str("throw 'error'"), |
3527 &origin); | 3582 &origin); |
3528 script->SetData(v8_str("7.56")); | 3583 script->SetData(v8_str("7.56")); |
3529 script->Run(); | 3584 script->Run(); |
3530 CHECK(message_received); | 3585 CHECK(message_received); |
3531 // clear out the message listener | 3586 // clear out the message listener |
3532 v8::V8::RemoveMessageListeners(check_message_0); | 3587 v8::V8::RemoveMessageListeners(check_message_0); |
3533 } | 3588 } |
3534 | 3589 |
3535 | 3590 |
3536 static void check_message_1(v8::Handle<v8::Message> message, | 3591 static void check_message_1(v8::Handle<v8::Message> message, |
3537 v8::Handle<Value> data) { | 3592 v8::Handle<Value> data) { |
3538 CHECK(data->IsNumber()); | 3593 CHECK(data->IsNumber()); |
3539 CHECK_EQ(1337, data->Int32Value()); | 3594 CHECK_EQ(1337, data->Int32Value()); |
| 3595 CHECK(!message->IsSharedCrossOrigin()); |
3540 message_received = true; | 3596 message_received = true; |
3541 } | 3597 } |
3542 | 3598 |
3543 | 3599 |
3544 TEST(MessageHandler1) { | 3600 TEST(MessageHandler1) { |
3545 message_received = false; | 3601 message_received = false; |
3546 v8::HandleScope scope(v8::Isolate::GetCurrent()); | 3602 v8::HandleScope scope(v8::Isolate::GetCurrent()); |
3547 CHECK(!message_received); | 3603 CHECK(!message_received); |
3548 v8::V8::AddMessageListener(check_message_1); | 3604 v8::V8::AddMessageListener(check_message_1); |
3549 LocalContext context; | 3605 LocalContext context; |
3550 CompileRun("throw 1337;"); | 3606 CompileRun("throw 1337;"); |
3551 CHECK(message_received); | 3607 CHECK(message_received); |
3552 // clear out the message listener | 3608 // clear out the message listener |
3553 v8::V8::RemoveMessageListeners(check_message_1); | 3609 v8::V8::RemoveMessageListeners(check_message_1); |
3554 } | 3610 } |
3555 | 3611 |
3556 | 3612 |
3557 static void check_message_2(v8::Handle<v8::Message> message, | 3613 static void check_message_2(v8::Handle<v8::Message> message, |
3558 v8::Handle<Value> data) { | 3614 v8::Handle<Value> data) { |
3559 LocalContext context; | 3615 LocalContext context; |
3560 CHECK(data->IsObject()); | 3616 CHECK(data->IsObject()); |
3561 v8::Local<v8::Value> hidden_property = | 3617 v8::Local<v8::Value> hidden_property = |
3562 v8::Object::Cast(*data)->GetHiddenValue(v8_str("hidden key")); | 3618 v8::Object::Cast(*data)->GetHiddenValue(v8_str("hidden key")); |
3563 CHECK(v8_str("hidden value")->Equals(hidden_property)); | 3619 CHECK(v8_str("hidden value")->Equals(hidden_property)); |
| 3620 CHECK(!message->IsSharedCrossOrigin()); |
3564 message_received = true; | 3621 message_received = true; |
3565 } | 3622 } |
3566 | 3623 |
3567 | 3624 |
3568 TEST(MessageHandler2) { | 3625 TEST(MessageHandler2) { |
3569 message_received = false; | 3626 message_received = false; |
3570 v8::HandleScope scope(v8::Isolate::GetCurrent()); | 3627 v8::HandleScope scope(v8::Isolate::GetCurrent()); |
3571 CHECK(!message_received); | 3628 CHECK(!message_received); |
3572 v8::V8::AddMessageListener(check_message_2); | 3629 v8::V8::AddMessageListener(check_message_2); |
3573 LocalContext context; | 3630 LocalContext context; |
3574 v8::Local<v8::Value> error = v8::Exception::Error(v8_str("custom error")); | 3631 v8::Local<v8::Value> error = v8::Exception::Error(v8_str("custom error")); |
3575 v8::Object::Cast(*error)->SetHiddenValue(v8_str("hidden key"), | 3632 v8::Object::Cast(*error)->SetHiddenValue(v8_str("hidden key"), |
3576 v8_str("hidden value")); | 3633 v8_str("hidden value")); |
3577 context->Global()->Set(v8_str("error"), error); | 3634 context->Global()->Set(v8_str("error"), error); |
3578 CompileRun("throw error;"); | 3635 CompileRun("throw error;"); |
3579 CHECK(message_received); | 3636 CHECK(message_received); |
3580 // clear out the message listener | 3637 // clear out the message listener |
3581 v8::V8::RemoveMessageListeners(check_message_2); | 3638 v8::V8::RemoveMessageListeners(check_message_2); |
3582 } | 3639 } |
3583 | 3640 |
3584 | 3641 |
| 3642 static void check_message_3(v8::Handle<v8::Message> message, |
| 3643 v8::Handle<Value> data) { |
| 3644 CHECK(message->IsSharedCrossOrigin()); |
| 3645 CHECK_EQ(6.75, message->GetScriptResourceName()->NumberValue()); |
| 3646 message_received = true; |
| 3647 } |
| 3648 |
| 3649 |
| 3650 TEST(MessageHandler3) { |
| 3651 message_received = false; |
| 3652 v8::HandleScope scope(v8::Isolate::GetCurrent()); |
| 3653 CHECK(!message_received); |
| 3654 v8::V8::AddMessageListener(check_message_3); |
| 3655 LocalContext context; |
| 3656 v8::ScriptOrigin origin = |
| 3657 v8::ScriptOrigin(v8_str("6.75"), |
| 3658 v8::Integer::New(1), |
| 3659 v8::Integer::New(2), |
| 3660 v8::True()); |
| 3661 v8::Handle<v8::Script> script = Script::Compile(v8_str("throw 'error'"), |
| 3662 &origin); |
| 3663 script->Run(); |
| 3664 CHECK(message_received); |
| 3665 // clear out the message listener |
| 3666 v8::V8::RemoveMessageListeners(check_message_3); |
| 3667 } |
| 3668 |
| 3669 |
| 3670 static void check_message_4(v8::Handle<v8::Message> message, |
| 3671 v8::Handle<Value> data) { |
| 3672 CHECK(!message->IsSharedCrossOrigin()); |
| 3673 CHECK_EQ(6.75, message->GetScriptResourceName()->NumberValue()); |
| 3674 message_received = true; |
| 3675 } |
| 3676 |
| 3677 |
| 3678 TEST(MessageHandler4) { |
| 3679 message_received = false; |
| 3680 v8::HandleScope scope(v8::Isolate::GetCurrent()); |
| 3681 CHECK(!message_received); |
| 3682 v8::V8::AddMessageListener(check_message_4); |
| 3683 LocalContext context; |
| 3684 v8::ScriptOrigin origin = |
| 3685 v8::ScriptOrigin(v8_str("6.75"), |
| 3686 v8::Integer::New(1), |
| 3687 v8::Integer::New(2), |
| 3688 v8::False()); |
| 3689 v8::Handle<v8::Script> script = Script::Compile(v8_str("throw 'error'"), |
| 3690 &origin); |
| 3691 script->Run(); |
| 3692 CHECK(message_received); |
| 3693 // clear out the message listener |
| 3694 v8::V8::RemoveMessageListeners(check_message_4); |
| 3695 } |
| 3696 |
| 3697 |
| 3698 static void check_message_5a(v8::Handle<v8::Message> message, |
| 3699 v8::Handle<Value> data) { |
| 3700 CHECK(message->IsSharedCrossOrigin()); |
| 3701 CHECK_EQ(6.75, message->GetScriptResourceName()->NumberValue()); |
| 3702 message_received = true; |
| 3703 } |
| 3704 |
| 3705 |
| 3706 static void check_message_5b(v8::Handle<v8::Message> message, |
| 3707 v8::Handle<Value> data) { |
| 3708 CHECK(!message->IsSharedCrossOrigin()); |
| 3709 CHECK_EQ(6.75, message->GetScriptResourceName()->NumberValue()); |
| 3710 message_received = true; |
| 3711 } |
| 3712 |
| 3713 |
| 3714 TEST(MessageHandler5) { |
| 3715 message_received = false; |
| 3716 v8::HandleScope scope(v8::Isolate::GetCurrent()); |
| 3717 CHECK(!message_received); |
| 3718 v8::V8::AddMessageListener(check_message_5a); |
| 3719 LocalContext context; |
| 3720 v8::ScriptOrigin origin = |
| 3721 v8::ScriptOrigin(v8_str("6.75"), |
| 3722 v8::Integer::New(1), |
| 3723 v8::Integer::New(2), |
| 3724 v8::True()); |
| 3725 v8::Handle<v8::Script> script = Script::Compile(v8_str("throw 'error'"), |
| 3726 &origin); |
| 3727 script->Run(); |
| 3728 CHECK(message_received); |
| 3729 // clear out the message listener |
| 3730 v8::V8::RemoveMessageListeners(check_message_5a); |
| 3731 |
| 3732 message_received = false; |
| 3733 v8::V8::AddMessageListener(check_message_5b); |
| 3734 origin = |
| 3735 v8::ScriptOrigin(v8_str("6.75"), |
| 3736 v8::Integer::New(1), |
| 3737 v8::Integer::New(2), |
| 3738 v8::False()); |
| 3739 script = Script::Compile(v8_str("throw 'error'"), |
| 3740 &origin); |
| 3741 script->Run(); |
| 3742 CHECK(message_received); |
| 3743 // clear out the message listener |
| 3744 v8::V8::RemoveMessageListeners(check_message_5b); |
| 3745 } |
| 3746 |
| 3747 |
3585 THREADED_TEST(GetSetProperty) { | 3748 THREADED_TEST(GetSetProperty) { |
3586 LocalContext context; | 3749 LocalContext context; |
3587 v8::HandleScope scope(context->GetIsolate()); | 3750 v8::HandleScope scope(context->GetIsolate()); |
3588 context->Global()->Set(v8_str("foo"), v8_num(14)); | 3751 context->Global()->Set(v8_str("foo"), v8_num(14)); |
3589 context->Global()->Set(v8_str("12"), v8_num(92)); | 3752 context->Global()->Set(v8_str("12"), v8_num(92)); |
3590 context->Global()->Set(v8::Integer::New(16), v8_num(32)); | 3753 context->Global()->Set(v8::Integer::New(16), v8_num(32)); |
3591 context->Global()->Set(v8_num(13), v8_num(56)); | 3754 context->Global()->Set(v8_num(13), v8_num(56)); |
3592 Local<Value> foo = Script::Compile(v8_str("this.foo"))->Run(); | 3755 Local<Value> foo = Script::Compile(v8_str("this.foo"))->Run(); |
3593 CHECK_EQ(14, foo->Int32Value()); | 3756 CHECK_EQ(14, foo->Int32Value()); |
3594 Local<Value> twelve = Script::Compile(v8_str("this[12]"))->Run(); | 3757 Local<Value> twelve = Script::Compile(v8_str("this[12]"))->Run(); |
(...skipping 9572 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
13167 v8::String::Utf8Value name(value); | 13330 v8::String::Utf8Value name(value); |
13168 CHECK_EQ("asdf", *name); | 13331 CHECK_EQ("asdf", *name); |
13169 } | 13332 } |
13170 | 13333 |
13171 | 13334 |
13172 THREADED_TEST(DateAccess) { | 13335 THREADED_TEST(DateAccess) { |
13173 LocalContext context; | 13336 LocalContext context; |
13174 v8::HandleScope scope(context->GetIsolate()); | 13337 v8::HandleScope scope(context->GetIsolate()); |
13175 v8::Handle<v8::Value> date = v8::Date::New(1224744689038.0); | 13338 v8::Handle<v8::Value> date = v8::Date::New(1224744689038.0); |
13176 CHECK(date->IsDate()); | 13339 CHECK(date->IsDate()); |
13177 CHECK_EQ(1224744689038.0, date.As<v8::Date>()->NumberValue()); | 13340 CHECK_EQ(1224744689038.0, date.As<v8::Date>()->ValueOf()); |
13178 } | 13341 } |
13179 | 13342 |
13180 | 13343 |
13181 void CheckProperties(v8::Handle<v8::Value> val, int elmc, const char* elmv[]) { | 13344 void CheckProperties(v8::Handle<v8::Value> val, int elmc, const char* elmv[]) { |
13182 v8::Handle<v8::Object> obj = val.As<v8::Object>(); | 13345 v8::Handle<v8::Object> obj = val.As<v8::Object>(); |
13183 v8::Handle<v8::Array> props = obj->GetPropertyNames(); | 13346 v8::Handle<v8::Array> props = obj->GetPropertyNames(); |
13184 CHECK_EQ(elmc, props->Length()); | 13347 CHECK_EQ(elmc, props->Length()); |
13185 for (int i = 0; i < elmc; i++) { | 13348 for (int i = 0; i < elmc; i++) { |
13186 v8::String::Utf8Value elm(props->Get(v8::Integer::New(i))); | 13349 v8::String::Utf8Value elm(props->Get(v8::Integer::New(i))); |
13187 CHECK_EQ(elmv[i], *elm); | 13350 CHECK_EQ(elmv[i], *elm); |
(...skipping 6744 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
19932 CheckCorrectThrow("%HasProperty(other, 'x')"); | 20095 CheckCorrectThrow("%HasProperty(other, 'x')"); |
19933 CheckCorrectThrow("%HasElement(other, 1)"); | 20096 CheckCorrectThrow("%HasElement(other, 1)"); |
19934 CheckCorrectThrow("%IsPropertyEnumerable(other, 'x')"); | 20097 CheckCorrectThrow("%IsPropertyEnumerable(other, 'x')"); |
19935 CheckCorrectThrow("%GetPropertyNames(other)"); | 20098 CheckCorrectThrow("%GetPropertyNames(other)"); |
19936 CheckCorrectThrow("%GetLocalPropertyNames(other, true)"); | 20099 CheckCorrectThrow("%GetLocalPropertyNames(other, true)"); |
19937 CheckCorrectThrow("%DefineOrRedefineAccessorProperty(" | 20100 CheckCorrectThrow("%DefineOrRedefineAccessorProperty(" |
19938 "other, 'x', null, null, 1)"); | 20101 "other, 'x', null, null, 1)"); |
19939 } | 20102 } |
19940 | 20103 |
19941 #endif // WIN32 | 20104 #endif // WIN32 |
OLD | NEW |