15c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Copyright 2014 The Chromium Authors. All rights reserved. 25c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Use of this source code is governed by a BSD-style license that can be 35c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// found in the LICENSE file. 45c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 55c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "base/basictypes.h" 65c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "base/float_util.h" 75c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "base/memory/scoped_ptr.h" 85c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "content/common/android/gin_java_bridge_value.h" 95c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "testing/gtest/include/gtest/gtest.h" 105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liunamespace content { 125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuclass GinJavaBridgeValueTest : public testing::Test { 145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}; 155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo LiuTEST_F(GinJavaBridgeValueTest, BasicValues) { 175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu float native_float; 185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu int32 native_object_id; 195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu scoped_ptr<base::BinaryValue> undefined( 215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GinJavaBridgeValue::CreateUndefinedValue()); 225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(undefined.get()); 235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_TRUE(GinJavaBridgeValue::ContainsGinJavaBridgeValue(undefined.get())); 245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu scoped_ptr<const GinJavaBridgeValue> undefined_value( 255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GinJavaBridgeValue::FromValue(undefined.get())); 265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(undefined_value.get()); 275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_TRUE(undefined_value->IsType(GinJavaBridgeValue::TYPE_UNDEFINED)); 285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_FALSE(undefined_value->GetAsNonFinite(&native_float)); 305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_FALSE(undefined_value->GetAsObjectID(&native_object_id)); 315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu scoped_ptr<base::BinaryValue> float_infinity( 335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GinJavaBridgeValue::CreateNonFiniteValue( 345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu std::numeric_limits<float>::infinity())); 355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(float_infinity.get()); 365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_TRUE( 375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GinJavaBridgeValue::ContainsGinJavaBridgeValue(float_infinity.get())); 385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu scoped_ptr<const GinJavaBridgeValue> float_infinity_value( 395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GinJavaBridgeValue::FromValue(float_infinity.get())); 405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(float_infinity_value.get()); 415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_TRUE(float_infinity_value->IsType(GinJavaBridgeValue::TYPE_NONFINITE)); 425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_TRUE(float_infinity_value->GetAsNonFinite(&native_float)); 435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_FALSE(base::IsFinite(native_float)); 445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_FALSE(base::IsNaN(native_float)); 455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_FALSE(undefined_value->GetAsObjectID(&native_object_id)); 475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu scoped_ptr<base::BinaryValue> double_infinity( 495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GinJavaBridgeValue::CreateNonFiniteValue( 505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu std::numeric_limits<double>::infinity())); 515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(double_infinity.get()); 525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_TRUE( 535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GinJavaBridgeValue::ContainsGinJavaBridgeValue(double_infinity.get())); 545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu scoped_ptr<const GinJavaBridgeValue> double_infinity_value( 555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GinJavaBridgeValue::FromValue(double_infinity.get())); 565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(double_infinity_value.get()); 575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_TRUE( 585c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu double_infinity_value->IsType(GinJavaBridgeValue::TYPE_NONFINITE)); 595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_TRUE(double_infinity_value->GetAsNonFinite(&native_float)); 605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_FALSE(base::IsFinite(native_float)); 615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_FALSE(base::IsNaN(native_float)); 625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_FALSE(undefined_value->GetAsObjectID(&native_object_id)); 645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu scoped_ptr<base::BinaryValue> object_id( 665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GinJavaBridgeValue::CreateObjectIDValue(42)); 675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(object_id.get()); 685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_TRUE(GinJavaBridgeValue::ContainsGinJavaBridgeValue(object_id.get())); 695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu scoped_ptr<const GinJavaBridgeValue> object_id_value( 705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GinJavaBridgeValue::FromValue(object_id.get())); 715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(object_id_value.get()); 725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_TRUE(object_id_value->IsType(GinJavaBridgeValue::TYPE_OBJECT_ID)); 735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_TRUE(object_id_value->GetAsObjectID(&native_object_id)); 745c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_EQ(42, native_object_id); 755c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 765c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_FALSE(undefined_value->GetAsNonFinite(&native_float)); 775c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo LiuTEST_F(GinJavaBridgeValueTest, BrokenValues) { 805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu scoped_ptr<base::Value> non_binary(new base::FundamentalValue(42)); 815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_FALSE( 825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GinJavaBridgeValue::ContainsGinJavaBridgeValue(non_binary.get())); 835c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 845c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const char dummy_data[] = "\000\001\002\003\004\005\006\007\010\011\012\013"; 855c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu scoped_ptr<base::BinaryValue> broken_binary( 865c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::BinaryValue::CreateWithCopiedBuffer(dummy_data, 875c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu sizeof(dummy_data))); 885c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_FALSE( 895c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GinJavaBridgeValue::ContainsGinJavaBridgeValue(broken_binary.get())); 905c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 915c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 925c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} // namespace 93