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

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: Tranquillize clang 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
« no previous file with comments | « content/renderer/v8_value_converter_impl.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 693 matching lines...) Expand 10 before | Expand all | Expand 10 after
704 base::DictionaryValue* current_as_object = NULL; 704 base::DictionaryValue* current_as_object = NULL;
705 ASSERT_TRUE(current->GetAsDictionary(&current_as_object)) << i; 705 ASSERT_TRUE(current->GetAsDictionary(&current_as_object)) << i;
706 ASSERT_TRUE(current_as_object->Get(kKey, &current)) << i; 706 ASSERT_TRUE(current_as_object->Get(kKey, &current)) << i;
707 } 707 }
708 708
709 // The leaf node shouldn't have any properties. 709 // The leaf node shouldn't have any properties.
710 base::DictionaryValue empty; 710 base::DictionaryValue empty;
711 EXPECT_TRUE(base::Value::Equals(&empty, current)) << *current; 711 EXPECT_TRUE(base::Value::Equals(&empty, current)) << *current;
712 } 712 }
713 713
714 class V8ValueConverterOverridingStrategyForTesting
715 : public V8ValueConverter::Strategy {
716 public:
717 V8ValueConverterOverridingStrategyForTesting()
718 : reference_value_(NewReferenceValue()) {}
719 virtual bool FromV8Object(
720 v8::Handle<v8::Object> value,
721 base::Value** out,
722 v8::Isolate* isolate,
723 const FromV8ValueCallback& callback) const OVERRIDE {
724 *out = NewReferenceValue();
725 return true;
726 }
727 virtual bool FromV8Array(v8::Handle<v8::Array> value,
728 base::Value** out,
729 v8::Isolate* isolate,
730 const FromV8ValueCallback& callback) const OVERRIDE {
731 *out = NewReferenceValue();
732 return true;
733 }
734 virtual bool FromV8ArrayBuffer(v8::Handle<v8::Object> value,
735 base::Value** out) const OVERRIDE {
736 *out = NewReferenceValue();
737 return true;
738 }
739 virtual bool FromV8Number(v8::Handle<v8::Number> value,
740 base::Value** out) const OVERRIDE {
741 *out = NewReferenceValue();
742 return true;
743 }
744 virtual bool FromV8Undefined(base::Value** out) const OVERRIDE {
745 *out = NewReferenceValue();
746 return true;
747 }
748 base::Value* reference_value() const { return reference_value_.get(); }
749
750 private:
751 static base::Value* NewReferenceValue() {
752 return new base::StringValue("strategy");
753 }
754 scoped_ptr<base::Value> reference_value_;
755 };
756
757 TEST_F(V8ValueConverterImplTest, StrategyOverrides) {
758 v8::HandleScope handle_scope(isolate_);
759 v8::Local<v8::Context> context =
760 v8::Local<v8::Context>::New(isolate_, context_);
761 v8::Context::Scope context_scope(context);
762
763 V8ValueConverterImpl converter;
764 V8ValueConverterOverridingStrategyForTesting strategy;
765 converter.SetStrategy(&strategy);
766
767 v8::Handle<v8::Object> object(v8::Object::New(isolate_));
768 scoped_ptr<base::Value> object_value(converter.FromV8Value(object, context));
769 ASSERT_TRUE(object_value);
770 EXPECT_TRUE(
771 base::Value::Equals(strategy.reference_value(), object_value.get()));
772
773 v8::Handle<v8::Array> array(v8::Array::New(isolate_));
774 scoped_ptr<base::Value> array_value(converter.FromV8Value(array, context));
775 ASSERT_TRUE(array_value);
776 EXPECT_TRUE(
777 base::Value::Equals(strategy.reference_value(), array_value.get()));
778
779 v8::Handle<v8::ArrayBuffer> array_buffer(v8::ArrayBuffer::New(isolate_, 0));
780 scoped_ptr<base::Value> array_buffer_value(
781 converter.FromV8Value(array_buffer, context));
782 ASSERT_TRUE(array_buffer_value);
783 EXPECT_TRUE(base::Value::Equals(strategy.reference_value(),
784 array_buffer_value.get()));
785
786 v8::Handle<v8::ArrayBufferView> array_buffer_view(
787 v8::Uint8Array::New(array_buffer, 0, 0));
788 scoped_ptr<base::Value> array_buffer_view_value(
789 converter.FromV8Value(array_buffer_view, context));
790 ASSERT_TRUE(array_buffer_view_value);
791 EXPECT_TRUE(base::Value::Equals(strategy.reference_value(),
792 array_buffer_view_value.get()));
793
794 v8::Handle<v8::Number> number(v8::Number::New(isolate_, 0.0));
795 scoped_ptr<base::Value> number_value(converter.FromV8Value(number, context));
796 ASSERT_TRUE(number_value);
797 EXPECT_TRUE(
798 base::Value::Equals(strategy.reference_value(), number_value.get()));
799
800 v8::Handle<v8::Primitive> undefined(v8::Undefined(isolate_));
801 scoped_ptr<base::Value> undefined_value(
802 converter.FromV8Value(undefined, context));
803 ASSERT_TRUE(undefined_value);
804 EXPECT_TRUE(
805 base::Value::Equals(strategy.reference_value(), undefined_value.get()));
806 }
807
808 class V8ValueConverterBypassStrategyForTesting
809 : public V8ValueConverter::Strategy {
810 public:
811 virtual bool FromV8Object(
812 v8::Handle<v8::Object> value,
813 base::Value** out,
814 v8::Isolate* isolate,
815 const FromV8ValueCallback& callback) const OVERRIDE {
816 return false;
817 }
818 virtual bool FromV8Array(v8::Handle<v8::Array> value,
819 base::Value** out,
820 v8::Isolate* isolate,
821 const FromV8ValueCallback& callback) const OVERRIDE {
822 return false;
823 }
824 virtual bool FromV8ArrayBuffer(v8::Handle<v8::Object> value,
825 base::Value** out) const OVERRIDE {
826 return false;
827 }
828 virtual bool FromV8Number(v8::Handle<v8::Number> value,
829 base::Value** out) const OVERRIDE {
830 return false;
831 }
832 virtual bool FromV8Undefined(base::Value** out) const OVERRIDE {
833 return false;
834 }
835 };
836
837 // Verify that having a strategy that fallbacks to default behaviour
838 // actually preserves it.
839 TEST_F(V8ValueConverterImplTest, StrategyBypass) {
840 v8::HandleScope handle_scope(isolate_);
841 v8::Local<v8::Context> context =
842 v8::Local<v8::Context>::New(isolate_, context_);
843 v8::Context::Scope context_scope(context);
844
845 V8ValueConverterImpl converter;
846 V8ValueConverterBypassStrategyForTesting strategy;
847 converter.SetStrategy(&strategy);
848
849 v8::Handle<v8::Object> object(v8::Object::New(isolate_));
850 scoped_ptr<base::Value> object_value(converter.FromV8Value(object, context));
851 ASSERT_TRUE(object_value);
852 scoped_ptr<base::Value> reference_object_value(base::test::ParseJson("{}"));
853 EXPECT_TRUE(
854 base::Value::Equals(reference_object_value.get(), object_value.get()));
855
856 v8::Handle<v8::Array> array(v8::Array::New(isolate_));
857 scoped_ptr<base::Value> array_value(converter.FromV8Value(array, context));
858 ASSERT_TRUE(array_value);
859 scoped_ptr<base::Value> reference_array_value(base::test::ParseJson("[]"));
860 EXPECT_TRUE(
861 base::Value::Equals(reference_array_value.get(), array_value.get()));
862
863 // Not testing ArrayBuffers as V8ValueConverter uses blink helpers and
864 // this requires having blink to be initialized.
865
866 v8::Handle<v8::Number> number(v8::Number::New(isolate_, 0.0));
867 scoped_ptr<base::Value> number_value(converter.FromV8Value(number, context));
868 ASSERT_TRUE(number_value);
869 scoped_ptr<base::Value> reference_number_value(base::test::ParseJson("0"));
870 EXPECT_TRUE(
871 base::Value::Equals(reference_number_value.get(), number_value.get()));
872
873 v8::Handle<v8::Primitive> undefined(v8::Undefined(isolate_));
874 scoped_ptr<base::Value> undefined_value(
875 converter.FromV8Value(undefined, context));
876 EXPECT_FALSE(undefined_value);
877 }
878
714 } // namespace content 879 } // namespace content
OLDNEW
« no previous file with comments | « 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