16316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum/* 26316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum * Copyright (C) 2016 The Android Open Source Project 36316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum * 46316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum * Licensed under the Apache License, Version 2.0 (the "License"); 56316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum * you may not use this file except in compliance with the License. 66316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum * You may obtain a copy of the License at 76316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum * 86316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum * http://www.apache.org/licenses/LICENSE-2.0 96316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum * 106316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum * Unless required by applicable law or agreed to in writing, software 116316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum * distributed under the License is distributed on an "AS IS" BASIS, 126316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum * See the License for the specific language governing permissions and 146316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum * limitations under the License. 156316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum */ 166316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum 176316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum#include <fcntl.h> 186316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum#include <stdio.h> 196316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum#include <stdlib.h> 206316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum#include <limits> 216316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum#include <cstddef> 226316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum#include <vector> 236316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum 246316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum#include "android-base/file.h" 256316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum#include "android-base/test_utils.h" 266316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum#include <gtest/gtest.h> 276316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum 286316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum#include <binder/Parcel.h> 296316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum#include <binder/Value.h> 306316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum#include <binder/Debug.h> 316316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum 326316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaumusing ::android::binder::Value; 336316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaumusing ::android::os::PersistableBundle; 346316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaumusing ::android::String16; 356316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaumusing ::std::vector; 366316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum 376316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum#define VALUE_TYPE_TEST(T, TYPENAME, VAL) \ 386316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum TEST(ValueType, Handles ## TYPENAME) { \ 396316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum T x = VAL; \ 406316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum T y = T(); \ 416316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum Value value = VAL; \ 426316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum ASSERT_FALSE(value.empty()); \ 436316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum ASSERT_TRUE(value.is ## TYPENAME ()); \ 446316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum ASSERT_TRUE(value.get ## TYPENAME (&y)); \ 456316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum ASSERT_EQ(x, y); \ 466316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum ASSERT_EQ(value, Value(y)); \ 476316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum value.put ## TYPENAME (x); \ 486316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum ASSERT_EQ(value, Value(y)); \ 496316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum value = Value(); \ 506316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum ASSERT_TRUE(value.empty()); \ 516316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum ASSERT_NE(value, Value(y)); \ 526316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum value = y; \ 536316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum ASSERT_EQ(value, Value(x)); \ 546316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum } 556316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum 566316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum#define VALUE_TYPE_VECTOR_TEST(T, TYPENAME, VAL) \ 576316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum TEST(ValueType, Handles ## TYPENAME ## Vector) { \ 586316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum vector<T> x; \ 596316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum vector<T> y; \ 606316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum x.push_back(VAL); \ 616316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum x.push_back(T()); \ 626316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum Value value(x); \ 636316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum ASSERT_FALSE(value.empty()); \ 646316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum ASSERT_TRUE(value.is ## TYPENAME ## Vector()); \ 656316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum ASSERT_TRUE(value.get ## TYPENAME ## Vector(&y)); \ 666316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum ASSERT_EQ(x, y); \ 676316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum ASSERT_EQ(value, Value(y)); \ 686316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum value.put ## TYPENAME ## Vector(x); \ 696316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum ASSERT_EQ(value, Value(y)); \ 706316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum value = Value(); \ 716316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum ASSERT_TRUE(value.empty()); \ 726316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum ASSERT_NE(value, Value(y)); \ 736316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum value = y; \ 746316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum ASSERT_EQ(value, Value(x)); \ 756316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum } 766316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum 776316f5b8df30422b247c2bfd1a805dcd4069b54eRobert QuattlebaumVALUE_TYPE_TEST(bool, Boolean, true) 786316f5b8df30422b247c2bfd1a805dcd4069b54eRobert QuattlebaumVALUE_TYPE_TEST(int32_t, Int, 31337) 796316f5b8df30422b247c2bfd1a805dcd4069b54eRobert QuattlebaumVALUE_TYPE_TEST(int64_t, Long, 13370133701337l) 806316f5b8df30422b247c2bfd1a805dcd4069b54eRobert QuattlebaumVALUE_TYPE_TEST(double, Double, 3.14159265358979323846) 816316f5b8df30422b247c2bfd1a805dcd4069b54eRobert QuattlebaumVALUE_TYPE_TEST(String16, String, String16("Lovely")) 826316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum 836316f5b8df30422b247c2bfd1a805dcd4069b54eRobert QuattlebaumVALUE_TYPE_VECTOR_TEST(bool, Boolean, true) 846316f5b8df30422b247c2bfd1a805dcd4069b54eRobert QuattlebaumVALUE_TYPE_VECTOR_TEST(int32_t, Int, 31337) 856316f5b8df30422b247c2bfd1a805dcd4069b54eRobert QuattlebaumVALUE_TYPE_VECTOR_TEST(int64_t, Long, 13370133701337l) 866316f5b8df30422b247c2bfd1a805dcd4069b54eRobert QuattlebaumVALUE_TYPE_VECTOR_TEST(double, Double, 3.14159265358979323846) 876316f5b8df30422b247c2bfd1a805dcd4069b54eRobert QuattlebaumVALUE_TYPE_VECTOR_TEST(String16, String, String16("Lovely")) 886316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum 896316f5b8df30422b247c2bfd1a805dcd4069b54eRobert QuattlebaumVALUE_TYPE_TEST(PersistableBundle, PersistableBundle, PersistableBundle()) 906316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum 916316f5b8df30422b247c2bfd1a805dcd4069b54eRobert QuattlebaumTEST(ValueType, HandlesClear) { 926316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum Value value; 936316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum ASSERT_TRUE(value.empty()); 946316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum value.putInt(31337); 956316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum ASSERT_FALSE(value.empty()); 966316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum value.clear(); 976316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum ASSERT_TRUE(value.empty()); 986316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum} 996316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum 1006316f5b8df30422b247c2bfd1a805dcd4069b54eRobert QuattlebaumTEST(ValueType, HandlesSwap) { 1016316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum Value value_a, value_b; 1026316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum int32_t int_x; 1036316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum value_a.putInt(31337); 1046316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum ASSERT_FALSE(value_a.empty()); 1056316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum ASSERT_TRUE(value_b.empty()); 1066316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum value_a.swap(value_b); 1076316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum ASSERT_FALSE(value_b.empty()); 1086316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum ASSERT_TRUE(value_a.empty()); 109b013ef62db250fbe616e80b1b5851def06c786adTri Vo ASSERT_TRUE(value_b.getInt(&int_x)); 1106316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum ASSERT_EQ(31337, int_x); 1116316f5b8df30422b247c2bfd1a805dcd4069b54eRobert Quattlebaum} 112