test_main.cpp revision 9fbfe475d933ecd29c9c2af7e35e9b13fbdf905d
1b93f0504e861885734d954f716da0331af4aa438Yifan Hong/* 2b93f0504e861885734d954f716da0331af4aa438Yifan Hong * Copyright (C) 2016 The Android Open Source Project 3b93f0504e861885734d954f716da0331af4aa438Yifan Hong * 4b93f0504e861885734d954f716da0331af4aa438Yifan Hong * Licensed under the Apache License, Version 2.0 (the "License"); 5b93f0504e861885734d954f716da0331af4aa438Yifan Hong * you may not use this file except in compliance with the License. 6b93f0504e861885734d954f716da0331af4aa438Yifan Hong * You may obtain a copy of the License at 7b93f0504e861885734d954f716da0331af4aa438Yifan Hong * 8b93f0504e861885734d954f716da0331af4aa438Yifan Hong * http://www.apache.org/licenses/LICENSE-2.0 9b93f0504e861885734d954f716da0331af4aa438Yifan Hong * 10b93f0504e861885734d954f716da0331af4aa438Yifan Hong * Unless required by applicable law or agreed to in writing, software 11b93f0504e861885734d954f716da0331af4aa438Yifan Hong * distributed under the License is distributed on an "AS IS" BASIS, 12b93f0504e861885734d954f716da0331af4aa438Yifan Hong * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b93f0504e861885734d954f716da0331af4aa438Yifan Hong * See the License for the specific language governing permissions and 14b93f0504e861885734d954f716da0331af4aa438Yifan Hong * limitations under the License. 15b93f0504e861885734d954f716da0331af4aa438Yifan Hong */ 16b93f0504e861885734d954f716da0331af4aa438Yifan Hong 17602b85a846834d466e1f545eace06df87cf94a1eYifan Hong#define LOG_TAG "LibHidlTest" 18602b85a846834d466e1f545eace06df87cf94a1eYifan Hong 19602b85a846834d466e1f545eace06df87cf94a1eYifan Hong#include <android-base/logging.h> 20602b85a846834d466e1f545eace06df87cf94a1eYifan Hong#include <gtest/gtest.h> 21602b85a846834d466e1f545eace06df87cf94a1eYifan Hong#include <hidl/HidlSupport.h> 225e2318c9d54c3fe9454f2d79bc80ead3782658dbYifan Hong#include <hidl/TaskRunner.h> 23602b85a846834d466e1f545eace06df87cf94a1eYifan Hong#include <vector> 24602b85a846834d466e1f545eace06df87cf94a1eYifan Hong 25602b85a846834d466e1f545eace06df87cf94a1eYifan Hong#define EXPECT_ARRAYEQ(__a1__, __a2__, __size__) EXPECT_TRUE(isArrayEqual(__a1__, __a2__, __size__)) 26602b85a846834d466e1f545eace06df87cf94a1eYifan Hong 27602b85a846834d466e1f545eace06df87cf94a1eYifan Hongtemplate<typename T, typename S> 28602b85a846834d466e1f545eace06df87cf94a1eYifan Hongstatic inline bool isArrayEqual(const T arr1, const S arr2, size_t size) { 29602b85a846834d466e1f545eace06df87cf94a1eYifan Hong for(size_t i = 0; i < size; i++) 30602b85a846834d466e1f545eace06df87cf94a1eYifan Hong if(arr1[i] != arr2[i]) 31602b85a846834d466e1f545eace06df87cf94a1eYifan Hong return false; 32602b85a846834d466e1f545eace06df87cf94a1eYifan Hong return true; 33602b85a846834d466e1f545eace06df87cf94a1eYifan Hong} 34602b85a846834d466e1f545eace06df87cf94a1eYifan Hong 35602b85a846834d466e1f545eace06df87cf94a1eYifan Hongclass LibHidlTest : public ::testing::Test { 36602b85a846834d466e1f545eace06df87cf94a1eYifan Hongpublic: 37602b85a846834d466e1f545eace06df87cf94a1eYifan Hong virtual void SetUp() override { 38602b85a846834d466e1f545eace06df87cf94a1eYifan Hong } 39602b85a846834d466e1f545eace06df87cf94a1eYifan Hong virtual void TearDown() override { 40602b85a846834d466e1f545eace06df87cf94a1eYifan Hong } 41602b85a846834d466e1f545eace06df87cf94a1eYifan Hong}; 42602b85a846834d466e1f545eace06df87cf94a1eYifan Hong 43602b85a846834d466e1f545eace06df87cf94a1eYifan HongTEST_F(LibHidlTest, StringTest) { 44602b85a846834d466e1f545eace06df87cf94a1eYifan Hong using android::hardware::hidl_string; 45602b85a846834d466e1f545eace06df87cf94a1eYifan Hong hidl_string s; // empty constructor 46602b85a846834d466e1f545eace06df87cf94a1eYifan Hong EXPECT_STREQ(s.c_str(), ""); 47602b85a846834d466e1f545eace06df87cf94a1eYifan Hong hidl_string s1 = "s1"; // copy = from cstr 48602b85a846834d466e1f545eace06df87cf94a1eYifan Hong EXPECT_STREQ(s1.c_str(), "s1"); 49602b85a846834d466e1f545eace06df87cf94a1eYifan Hong hidl_string s2("s2"); // copy constructor from cstr 50602b85a846834d466e1f545eace06df87cf94a1eYifan Hong EXPECT_STREQ(s2.c_str(), "s2"); 51602b85a846834d466e1f545eace06df87cf94a1eYifan Hong hidl_string s3 = hidl_string("s3"); // move = 52602b85a846834d466e1f545eace06df87cf94a1eYifan Hong EXPECT_STREQ(s3.c_str(), "s3"); 53602b85a846834d466e1f545eace06df87cf94a1eYifan Hong hidl_string s4(hidl_string(hidl_string("s4"))); // move constructor 54602b85a846834d466e1f545eace06df87cf94a1eYifan Hong EXPECT_STREQ(s4.c_str(), "s4"); 55602b85a846834d466e1f545eace06df87cf94a1eYifan Hong hidl_string s5(std::string("s5")); // copy constructor from std::string 56602b85a846834d466e1f545eace06df87cf94a1eYifan Hong EXPECT_STREQ(s5, "s5"); 57602b85a846834d466e1f545eace06df87cf94a1eYifan Hong hidl_string s6 = std::string("s6"); // copy = from std::string 58602b85a846834d466e1f545eace06df87cf94a1eYifan Hong EXPECT_STREQ(s6, "s6"); 59602b85a846834d466e1f545eace06df87cf94a1eYifan Hong hidl_string s7(s6); // copy constructor 60602b85a846834d466e1f545eace06df87cf94a1eYifan Hong EXPECT_STREQ(s7, "s6"); 61602b85a846834d466e1f545eace06df87cf94a1eYifan Hong hidl_string s8 = s7; // copy = 62602b85a846834d466e1f545eace06df87cf94a1eYifan Hong EXPECT_STREQ(s8, "s6"); 63602b85a846834d466e1f545eace06df87cf94a1eYifan Hong char myCString[20] = "myCString"; 64602b85a846834d466e1f545eace06df87cf94a1eYifan Hong s.setToExternal(&myCString[0], strlen(myCString)); 65602b85a846834d466e1f545eace06df87cf94a1eYifan Hong EXPECT_STREQ(s, "myCString"); 66602b85a846834d466e1f545eace06df87cf94a1eYifan Hong myCString[2] = 'D'; 67602b85a846834d466e1f545eace06df87cf94a1eYifan Hong EXPECT_STREQ(s, "myDString"); 68602b85a846834d466e1f545eace06df87cf94a1eYifan Hong s.clear(); // should not affect myCString 69602b85a846834d466e1f545eace06df87cf94a1eYifan Hong EXPECT_STREQ(myCString, "myDString"); 70602b85a846834d466e1f545eace06df87cf94a1eYifan Hong // casts 71602b85a846834d466e1f545eace06df87cf94a1eYifan Hong s = "great"; 72602b85a846834d466e1f545eace06df87cf94a1eYifan Hong std::string myString = s; 73602b85a846834d466e1f545eace06df87cf94a1eYifan Hong const char *anotherCString = s; 74602b85a846834d466e1f545eace06df87cf94a1eYifan Hong EXPECT_EQ(myString, "great"); 75602b85a846834d466e1f545eace06df87cf94a1eYifan Hong EXPECT_STREQ(anotherCString, "great"); 76602b85a846834d466e1f545eace06df87cf94a1eYifan Hong} 77602b85a846834d466e1f545eace06df87cf94a1eYifan Hong 78602b85a846834d466e1f545eace06df87cf94a1eYifan HongTEST_F(LibHidlTest, VecTest) { 79602b85a846834d466e1f545eace06df87cf94a1eYifan Hong using android::hardware::hidl_vec; 80602b85a846834d466e1f545eace06df87cf94a1eYifan Hong using std::vector; 81602b85a846834d466e1f545eace06df87cf94a1eYifan Hong int32_t array[] = {5, 6, 7}; 82602b85a846834d466e1f545eace06df87cf94a1eYifan Hong vector<int32_t> v(array, array + 3); 83602b85a846834d466e1f545eace06df87cf94a1eYifan Hong 84602b85a846834d466e1f545eace06df87cf94a1eYifan Hong hidl_vec<int32_t> hv1 = v; // copy = 85602b85a846834d466e1f545eace06df87cf94a1eYifan Hong EXPECT_ARRAYEQ(hv1, array, 3); 86602b85a846834d466e1f545eace06df87cf94a1eYifan Hong EXPECT_ARRAYEQ(hv1, v, 3); 87602b85a846834d466e1f545eace06df87cf94a1eYifan Hong hidl_vec<int32_t> hv2(v); // copy constructor 88602b85a846834d466e1f545eace06df87cf94a1eYifan Hong EXPECT_ARRAYEQ(hv2, v, 3); 89602b85a846834d466e1f545eace06df87cf94a1eYifan Hong 90602b85a846834d466e1f545eace06df87cf94a1eYifan Hong vector<int32_t> v2 = hv1; // cast 91602b85a846834d466e1f545eace06df87cf94a1eYifan Hong EXPECT_ARRAYEQ(v2, v, 3); 929fbfe475d933ecd29c9c2af7e35e9b13fbdf905dSteven Moreland 939fbfe475d933ecd29c9c2af7e35e9b13fbdf905dSteven Moreland hidl_vec<int32_t> v3 = {5, 6, 7}; // initializer_list 949fbfe475d933ecd29c9c2af7e35e9b13fbdf905dSteven Moreland EXPECT_EQ(v3.size(), 3); 959fbfe475d933ecd29c9c2af7e35e9b13fbdf905dSteven Moreland EXPECT_ARRAYEQ(v3, array, v3.size()); 96602b85a846834d466e1f545eace06df87cf94a1eYifan Hong} 97602b85a846834d466e1f545eace06df87cf94a1eYifan Hong 985e2318c9d54c3fe9454f2d79bc80ead3782658dbYifan HongTEST_F(LibHidlTest, TaskRunnerTest) { 995e2318c9d54c3fe9454f2d79bc80ead3782658dbYifan Hong using android::hardware::TaskRunner; 1005e2318c9d54c3fe9454f2d79bc80ead3782658dbYifan Hong TaskRunner tr; 1015e2318c9d54c3fe9454f2d79bc80ead3782658dbYifan Hong bool flag = false; 1025e2318c9d54c3fe9454f2d79bc80ead3782658dbYifan Hong tr.push([&] { 1035e2318c9d54c3fe9454f2d79bc80ead3782658dbYifan Hong usleep(1000); 1045e2318c9d54c3fe9454f2d79bc80ead3782658dbYifan Hong flag = true; 1055e2318c9d54c3fe9454f2d79bc80ead3782658dbYifan Hong }); 1065e2318c9d54c3fe9454f2d79bc80ead3782658dbYifan Hong usleep(500); 1075e2318c9d54c3fe9454f2d79bc80ead3782658dbYifan Hong EXPECT_FALSE(flag); 1085e2318c9d54c3fe9454f2d79bc80ead3782658dbYifan Hong usleep(1000); 1095e2318c9d54c3fe9454f2d79bc80ead3782658dbYifan Hong EXPECT_TRUE(flag); 1105e2318c9d54c3fe9454f2d79bc80ead3782658dbYifan Hong} 1115e2318c9d54c3fe9454f2d79bc80ead3782658dbYifan Hong 1125708fb4e117f06f8b867eb623d73fd3e5d969155Yifan HongTEST_F(LibHidlTest, StringCmpTest) { 1135708fb4e117f06f8b867eb623d73fd3e5d969155Yifan Hong using android::hardware::hidl_string; 1145708fb4e117f06f8b867eb623d73fd3e5d969155Yifan Hong const char * s = "good"; 1155708fb4e117f06f8b867eb623d73fd3e5d969155Yifan Hong hidl_string hs(s); 1165708fb4e117f06f8b867eb623d73fd3e5d969155Yifan Hong EXPECT_NE(hs.c_str(), s); 1175708fb4e117f06f8b867eb623d73fd3e5d969155Yifan Hong 1185708fb4e117f06f8b867eb623d73fd3e5d969155Yifan Hong EXPECT_TRUE(hs == s); // operator == 1195708fb4e117f06f8b867eb623d73fd3e5d969155Yifan Hong EXPECT_TRUE(s == hs); 1205708fb4e117f06f8b867eb623d73fd3e5d969155Yifan Hong 1215708fb4e117f06f8b867eb623d73fd3e5d969155Yifan Hong EXPECT_FALSE(hs != s); // operator == 1225708fb4e117f06f8b867eb623d73fd3e5d969155Yifan Hong EXPECT_FALSE(s != hs); 1235708fb4e117f06f8b867eb623d73fd3e5d969155Yifan Hong} 1245708fb4e117f06f8b867eb623d73fd3e5d969155Yifan Hong 125602b85a846834d466e1f545eace06df87cf94a1eYifan Hongtemplate <typename T> 126602b85a846834d466e1f545eace06df87cf94a1eYifan Hongvoid great(android::hardware::hidl_vec<T>) {} 127602b85a846834d466e1f545eace06df87cf94a1eYifan Hong 128602b85a846834d466e1f545eace06df87cf94a1eYifan HongTEST_F(LibHidlTest, VecCopyTest) { 129602b85a846834d466e1f545eace06df87cf94a1eYifan Hong android::hardware::hidl_vec<int32_t> v; 130602b85a846834d466e1f545eace06df87cf94a1eYifan Hong great(v); 131602b85a846834d466e1f545eace06df87cf94a1eYifan Hong} 132602b85a846834d466e1f545eace06df87cf94a1eYifan Hong 133602b85a846834d466e1f545eace06df87cf94a1eYifan Hongint main(int argc, char **argv) { 134602b85a846834d466e1f545eace06df87cf94a1eYifan Hong ::testing::InitGoogleTest(&argc, argv); 135602b85a846834d466e1f545eace06df87cf94a1eYifan Hong return RUN_ALL_TESTS(); 136602b85a846834d466e1f545eace06df87cf94a1eYifan Hong} 137