17c804472Sopenharmony_ci/* 27c804472Sopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd. 37c804472Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 47c804472Sopenharmony_ci * you may not use this file except in compliance with the License. 57c804472Sopenharmony_ci * You may obtain a copy of the License at 67c804472Sopenharmony_ci * 77c804472Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 87c804472Sopenharmony_ci * 97c804472Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 107c804472Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 117c804472Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 127c804472Sopenharmony_ci * See the License for the specific language governing permissions and 137c804472Sopenharmony_ci * limitations under the License. 147c804472Sopenharmony_ci */ 157c804472Sopenharmony_ci#include <string> 167c804472Sopenharmony_ci#include "gtest/gtest.h" 177c804472Sopenharmony_ci#define private public 187c804472Sopenharmony_ci#include "CppTimer.h" 197c804472Sopenharmony_ci#include "CallbackQueue.h" 207c804472Sopenharmony_ci 217c804472Sopenharmony_cinamespace { 227c804472Sopenharmony_ci static void Double(int& addNum) 237c804472Sopenharmony_ci { 247c804472Sopenharmony_ci addNum += addNum; 257c804472Sopenharmony_ci } 267c804472Sopenharmony_ci 277c804472Sopenharmony_ci // 测试默认构造函数是否被删除 287c804472Sopenharmony_ci TEST(CppTimerTest, DefaultConstructorDeletedTest) 297c804472Sopenharmony_ci { 307c804472Sopenharmony_ci EXPECT_TRUE(std::is_default_constructible<CppTimer>::value == false); 317c804472Sopenharmony_ci } 327c804472Sopenharmony_ci 337c804472Sopenharmony_ci // 测试拷贝构造函数是否被删除 347c804472Sopenharmony_ci TEST(CppTimerTest, CopyConstructorDeletedTest) 357c804472Sopenharmony_ci { 367c804472Sopenharmony_ci EXPECT_TRUE(std::is_copy_constructible<CppTimer>::value == false); 377c804472Sopenharmony_ci } 387c804472Sopenharmony_ci 397c804472Sopenharmony_ci // 测试赋值运算符是否被删除 407c804472Sopenharmony_ci TEST(CppTimerTest, AssignmentOperatorDeletedTest) 417c804472Sopenharmony_ci { 427c804472Sopenharmony_ci EXPECT_TRUE(std::is_copy_assignable<CppTimer>::value == false); 437c804472Sopenharmony_ci } 447c804472Sopenharmony_ci 457c804472Sopenharmony_ci TEST(CppTimerTest, SetShotTimesTest) 467c804472Sopenharmony_ci { 477c804472Sopenharmony_ci // same thread 487c804472Sopenharmony_ci int addNum = 3; 497c804472Sopenharmony_ci CppTimer timer(Double, std::ref(addNum)); 507c804472Sopenharmony_ci int newShotTime = 3; 517c804472Sopenharmony_ci timer.SetShotTimes(newShotTime); 527c804472Sopenharmony_ci EXPECT_EQ(timer.GetShotTimes(), newShotTime); 537c804472Sopenharmony_ci // not same thread 547c804472Sopenharmony_ci std::thread commandThead([&timer, &newShotTime]() { 557c804472Sopenharmony_ci timer.SetShotTimes(newShotTime); 567c804472Sopenharmony_ci EXPECT_EQ(timer.GetShotTimes(), newShotTime); 577c804472Sopenharmony_ci }); 587c804472Sopenharmony_ci commandThead.detach(); 597c804472Sopenharmony_ci } 607c804472Sopenharmony_ci 617c804472Sopenharmony_ci TEST(CppTimerTest, IsRunningTest) 627c804472Sopenharmony_ci { 637c804472Sopenharmony_ci int addNum = 3; 647c804472Sopenharmony_ci int sum = addNum + addNum; 657c804472Sopenharmony_ci CppTimer timer(Double, std::ref(addNum)); 667c804472Sopenharmony_ci CallbackQueue queue; 677c804472Sopenharmony_ci int interval = 100; 687c804472Sopenharmony_ci // normal 697c804472Sopenharmony_ci timer.Start(interval); 707c804472Sopenharmony_ci std::this_thread::sleep_for(std::chrono::milliseconds(200)); 717c804472Sopenharmony_ci EXPECT_EQ(timer.interval, interval); 727c804472Sopenharmony_ci EXPECT_TRUE(timer.IsRunning()); 737c804472Sopenharmony_ci timer.RunTimerTick(queue); 747c804472Sopenharmony_ci EXPECT_TRUE(queue.callBackList.size() > 0); 757c804472Sopenharmony_ci queue.ConsumingCallback(); 767c804472Sopenharmony_ci EXPECT_EQ(addNum, sum); 777c804472Sopenharmony_ci timer.Stop(); 787c804472Sopenharmony_ci EXPECT_FALSE(timer.IsRunning()); 797c804472Sopenharmony_ci } 807c804472Sopenharmony_ci 817c804472Sopenharmony_ci TEST(CppTimerTest, IsRunningTest2) 827c804472Sopenharmony_ci { 837c804472Sopenharmony_ci int addNum = 3; 847c804472Sopenharmony_ci CppTimer timer(Double, std::ref(addNum)); 857c804472Sopenharmony_ci CallbackQueue queue; 867c804472Sopenharmony_ci int interval = 100; 877c804472Sopenharmony_ci // not same thread 887c804472Sopenharmony_ci std::thread commandThead([&timer, &queue, &interval]() { 897c804472Sopenharmony_ci timer.Start(interval); 907c804472Sopenharmony_ci timer.RunTimerTick(queue); 917c804472Sopenharmony_ci timer.Stop(); 927c804472Sopenharmony_ci EXPECT_FALSE(timer.IsRunning()); 937c804472Sopenharmony_ci }); 947c804472Sopenharmony_ci commandThead.detach(); 957c804472Sopenharmony_ci } 967c804472Sopenharmony_ci 977c804472Sopenharmony_ci TEST(CppTimerTest, IsRunningTest3) 987c804472Sopenharmony_ci { 997c804472Sopenharmony_ci int addNum = 3; 1007c804472Sopenharmony_ci CppTimer timer(Double, std::ref(addNum)); 1017c804472Sopenharmony_ci CallbackQueue queue; 1027c804472Sopenharmony_ci int interval = 0; 1037c804472Sopenharmony_ci // interval is 0 1047c804472Sopenharmony_ci timer.Start(interval); 1057c804472Sopenharmony_ci timer.RunTimerTick(queue); 1067c804472Sopenharmony_ci timer.Stop(); 1077c804472Sopenharmony_ci EXPECT_FALSE(timer.IsRunning()); 1087c804472Sopenharmony_ci } 1097c804472Sopenharmony_ci}