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

Side by Side Diff: content/renderer/v8_value_converter_impl_unittest.cc

Issue 248903003: Extend V8ValueConverter::Strategy for the needs of Gin Java Bridge (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 8 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <cmath> 5 #include <cmath>
6 6
7 #include "base/memory/scoped_ptr.h" 7 #include "base/memory/scoped_ptr.h"
8 #include "base/stl_util.h" 8 #include "base/stl_util.h"
9 #include "base/test/values_test_util.h" 9 #include "base/test/values_test_util.h"
10 #include "base/values.h" 10 #include "base/values.h"
(...skipping 676 matching lines...) Expand 10 before | Expand all | Expand 10 after
687 base::DictionaryValue* current_as_object = NULL; 687 base::DictionaryValue* current_as_object = NULL;
688 ASSERT_TRUE(current->GetAsDictionary(&current_as_object)) << i; 688 ASSERT_TRUE(current->GetAsDictionary(&current_as_object)) << i;
689 ASSERT_TRUE(current_as_object->Get(kKey, &current)) << i; 689 ASSERT_TRUE(current_as_object->Get(kKey, &current)) << i;
690 } 690 }
691 691
692 // The leaf node shouldn't have any properties. 692 // The leaf node shouldn't have any properties.
693 base::DictionaryValue empty; 693 base::DictionaryValue empty;
694 EXPECT_TRUE(base::Value::Equals(&empty, current)) << *current; 694 EXPECT_TRUE(base::Value::Equals(&empty, current)) << *current;
695 } 695 }
696 696
697 class V8ValueConverterOverridingStrategyForTesting
698 : public V8ValueConverter::Strategy {
699 public:
700 V8ValueConverterOverridingStrategyForTesting()
701 : reference_value_(NewReferenceValue()) {}
702 virtual bool FromV8Object(
703 v8::Handle<v8::Object> value,
704 base::Value** out,
705 v8::Isolate* isolate,
706 const FromV8ValueCallback& callback) const OVERRIDE {
707 *out = NewReferenceValue();
708 return true;
709 }
710 virtual bool FromV8Array(v8::Handle<v8::Array> value,
711 base::Value** out,
712 v8::Isolate* isolate,
713 const FromV8ValueCallback& callback) const OVERRIDE {
714 *out = NewReferenceValue();
715 return true;
716 }
717 virtual bool FromV8ArrayBuffer(v8::Handle<v8::Object> value,
718 base::Value** out) const OVERRIDE {
719 *out = NewReferenceValue();
720 return true;
721 }
722 virtual bool FromV8Number(v8::Handle<v8::Number> value,
723 base::Value** out) const OVERRIDE {
724 *out = NewReferenceValue();
725 return true;
726 }
727 virtual bool FromV8Undefined(base::Value** out) const OVERRIDE {
728 *out = NewReferenceValue();
729 return true;
730 }
731 base::Value* reference_value() const { return reference_value_.get(); }
732
733 private:
734 static base::Value* NewReferenceValue() {
735 return new base::StringValue("strategy");
736 }
737 scoped_ptr<base::Value> reference_value_;
738 };
739
740 TEST_F(V8ValueConverterImplTest, StrategyOverrides) {
741 v8::HandleScope handle_scope(isolate_);
742 v8::Local<v8::Context> context =
743 v8::Local<v8::Context>::New(isolate_, context_);
744 v8::Context::Scope context_scope(context);
745
746 V8ValueConverterImpl converter;
747 V8ValueConverterOverridingStrategyForTesting strategy;
748 converter.SetStrategy(&strategy);
749
750 v8::Handle<v8::Object> object(v8::Object::New(isolate_));
751 scoped_ptr<base::Value> object_value(converter.FromV8Value(object, context));
752 ASSERT_TRUE(object_value);
753 EXPECT_TRUE(
754 base::Value::Equals(strategy.reference_value(), object_value.get()));
755
756 v8::Handle<v8::Array> array(v8::Array::New(isolate_));
757 scoped_ptr<base::Value> array_value(converter.FromV8Value(array, context));
758 ASSERT_TRUE(array_value);
759 EXPECT_TRUE(
760 base::Value::Equals(strategy.reference_value(), array_value.get()));
761
762 v8::Handle<v8::ArrayBuffer> array_buffer(v8::ArrayBuffer::New(isolate_, 0));
763 scoped_ptr<base::Value> array_buffer_value(
764 converter.FromV8Value(array_buffer, context));
765 ASSERT_TRUE(array_buffer_value);
766 EXPECT_TRUE(base::Value::Equals(strategy.reference_value(),
767 array_buffer_value.get()));
768
769 v8::Handle<v8::ArrayBufferView> array_buffer_view(
770 v8::Uint8Array::New(array_buffer, 0, 0));
771 scoped_ptr<base::Value> array_buffer_view_value(
772 converter.FromV8Value(array_buffer_view, context));
773 ASSERT_TRUE(array_buffer_view_value);
774 EXPECT_TRUE(base::Value::Equals(strategy.reference_value(),
775 array_buffer_view_value.get()));
776
777 v8::Handle<v8::Number> number(v8::Number::New(isolate_, 0.0));
778 scoped_ptr<base::Value> number_value(converter.FromV8Value(number, context));
779 ASSERT_TRUE(number_value);
780 EXPECT_TRUE(
781 base::Value::Equals(strategy.reference_value(), number_value.get()));
782
783 v8::Handle<v8::Primitive> undefined(v8::Undefined(isolate_));
784 scoped_ptr<base::Value> undefined_value(
785 converter.FromV8Value(undefined, context));
786 ASSERT_TRUE(undefined_value);
787 EXPECT_TRUE(
788 base::Value::Equals(strategy.reference_value(), undefined_value.get()));
789 }
790
791 class V8ValueConverterBypassStrategyForTesting
792 : public V8ValueConverter::Strategy {
793 public:
794 virtual bool FromV8Object(
795 v8::Handle<v8::Object> value,
796 base::Value** out,
797 v8::Isolate* isolate,
798 const FromV8ValueCallback& callback) const OVERRIDE {
799 return false;
800 }
801 virtual bool FromV8Array(v8::Handle<v8::Array> value,
802 base::Value** out,
803 v8::Isolate* isolate,
804 const FromV8ValueCallback& callback) const OVERRIDE {
805 return false;
806 }
807 virtual bool FromV8ArrayBuffer(v8::Handle<v8::Object> value,
808 base::Value** out) const OVERRIDE {
809 return false;
810 }
811 virtual bool FromV8Number(v8::Handle<v8::Number> value,
812 base::Value** out) const OVERRIDE {
813 return false;
814 }
815 virtual bool FromV8Undefined(base::Value** out) const OVERRIDE {
816 return false;
817 }
818 };
819
820 // Verify that having a strategy that fallbacks to default behaviour
821 // actually preserves it.
822 TEST_F(V8ValueConverterImplTest, StrategyBypass) {
823 v8::HandleScope handle_scope(isolate_);
824 v8::Local<v8::Context> context =
825 v8::Local<v8::Context>::New(isolate_, context_);
826 v8::Context::Scope context_scope(context);
827
828 V8ValueConverterImpl converter;
829 V8ValueConverterBypassStrategyForTesting strategy;
830 converter.SetStrategy(&strategy);
831
832 v8::Handle<v8::Object> object(v8::Object::New(isolate_));
833 scoped_ptr<base::Value> object_value(converter.FromV8Value(object, context));
834 ASSERT_TRUE(object_value);
835 scoped_ptr<base::Value> reference_object_value(base::test::ParseJson("{}"));
836 EXPECT_TRUE(
837 base::Value::Equals(reference_object_value.get(), object_value.get()));
838
839 v8::Handle<v8::Array> array(v8::Array::New(isolate_));
840 scoped_ptr<base::Value> array_value(converter.FromV8Value(array, context));
841 ASSERT_TRUE(array_value);
842 scoped_ptr<base::Value> reference_array_value(base::test::ParseJson("[]"));
843 EXPECT_TRUE(
844 base::Value::Equals(reference_array_value.get(), array_value.get()));
845
846 // Not testing ArrayBuffers as V8ValueConverter uses blink helpers and
847 // this requires having blink to be initialized.
848
849 v8::Handle<v8::Number> number(v8::Number::New(isolate_, 0.0));
850 scoped_ptr<base::Value> number_value(converter.FromV8Value(number, context));
851 ASSERT_TRUE(number_value);
852 scoped_ptr<base::Value> reference_number_value(base::test::ParseJson("0"));
853 EXPECT_TRUE(
854 base::Value::Equals(reference_number_value.get(), number_value.get()));
855
856 v8::Handle<v8::Primitive> undefined(v8::Undefined(isolate_));
857 scoped_ptr<base::Value> undefined_value(
858 converter.FromV8Value(undefined, context));
859 EXPECT_FALSE(undefined_value);
860 }
861
697 } // namespace content 862 } // namespace content
OLDNEW
« content/public/renderer/v8_value_converter.h ('K') | « content/renderer/v8_value_converter_impl.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698