huangcm
2025-04-22 c8cf547b11f2c03565d8fb8b8bcdc69860d0ed08
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/*
 * Copyright (C) 2012 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */
 
#include <gtest/gtest.h>
#include "task/TaskAll.h"
 
static const android::String8 AAA("aaa");
static const android::String8 BBB("bbb");
 
class TaskTest : public testing::Test {
public:
    TaskCase* mTestCase;
    // should not delete
    TaskGeneric* mTaskSetup;
    TaskGeneric* mTaskAction;
    TaskGeneric* mTaskSequential;
    TaskGeneric* mTaskProcess;
    TaskGeneric* mTaskInput;
    TaskGeneric* mTaskOutput;
    TaskGeneric* mTaskSound;
 
    class TestTaskDummy: public TaskGeneric {
    public:
        static int mRunCounter;
        static int mLiveInstanceCounter;
 
        explicit TestTaskDummy(TaskGeneric::TaskType type)
            : TaskGeneric(type) {
            mLiveInstanceCounter++;
 
 
            const android::String8* list[] = {&AAA, &BBB, NULL};
            registerSupportedStringAttributes(list);
        };
        virtual ~TestTaskDummy(){
            mLiveInstanceCounter--;
        };
 
        virtual TaskGeneric::ExecutionResult run()
        {
            mRunCounter++;
            return TaskGeneric::run();
        };
        bool addStringAttributePublic(const android::String8& key, android::String8& value){
            return addStringAttribute(key, value);
        }
        bool findStringAttributePublic(const android::String8& key, android::String8& value){
            return findStringAttribute(key, value);
        }
    };
 
    virtual void SetUp() {
        TestTaskDummy::mRunCounter = 0;
        TestTaskDummy::mLiveInstanceCounter = 0;
        mTestCase = new TaskCase();
        mTaskSetup = new TestTaskDummy(TaskGeneric::ETaskSetup);
        mTaskAction = new TestTaskDummy(TaskGeneric::ETaskAction);
        ASSERT_TRUE(mTestCase->addChild(mTaskSetup));
        ASSERT_TRUE(mTestCase->addChild(mTaskAction));
        mTaskSequential = new TestTaskDummy(TaskGeneric::ETaskSequential);
        ASSERT_TRUE(mTaskAction->addChild(mTaskSequential));
        mTaskProcess = new TestTaskDummy(TaskGeneric::ETaskProcess);
        mTaskInput = new TestTaskDummy(TaskGeneric::ETaskInput);
        mTaskOutput = new TestTaskDummy(TaskGeneric::ETaskOutput);
        ASSERT_TRUE(mTaskSequential->addChild(mTaskOutput));
        ASSERT_TRUE(mTaskSequential->addChild(mTaskInput));
        ASSERT_TRUE(mTaskSequential->addChild(mTaskProcess));
        mTaskSound = new TestTaskDummy(TaskGeneric::ETaskSound);
        ASSERT_TRUE(mTaskSetup->addChild(mTaskSound));
        ASSERT_TRUE(TestTaskDummy::mLiveInstanceCounter == 7);
    }
 
    virtual void TearDown() {
        if(mTestCase != NULL) {
            delete mTestCase;
        }
        ASSERT_TRUE(TestTaskDummy::mLiveInstanceCounter == 0);
    }
};
 
int TaskTest::TestTaskDummy::mRunCounter = 0;
int TaskTest::TestTaskDummy::mLiveInstanceCounter = 0;
 
TEST_F(TaskTest, HierarchyTest) {
    // verify hierarchy
    ASSERT_TRUE(mTaskSetup->getTestCase() == mTestCase);
    ASSERT_TRUE(mTaskAction->getTestCase() == mTestCase);
    ASSERT_TRUE(mTaskSequential->getTestCase() == mTestCase);
    ASSERT_TRUE(mTaskProcess->getTestCase() == mTestCase);
    ASSERT_TRUE(mTaskInput->getTestCase() == mTestCase);
    ASSERT_TRUE(mTaskOutput->getTestCase() == mTestCase);
    ASSERT_TRUE(mTaskSound->getTestCase() == mTestCase);
}
 
TEST_F(TaskTest, RunTest) {
    ASSERT_TRUE(mTestCase->run() == TaskGeneric::EResultOK);
    ASSERT_TRUE(TestTaskDummy::mRunCounter == 7);
}
 
TEST_F(TaskTest, StringAttributeTest) {
    android::String8 aaaVal("aaa_val");
    android::String8 bbbVal("bbb_val");
    android::String8 read;
    TestTaskDummy* task = reinterpret_cast<TestTaskDummy*>(mTaskSetup);
    ASSERT_TRUE(task->addStringAttributePublic(AAA, aaaVal));
    ASSERT_TRUE(task->addStringAttributePublic(BBB, bbbVal));
    const android::String8 CCC("ccc");
    ASSERT_TRUE(!task->addStringAttributePublic(CCC, bbbVal));
    ASSERT_TRUE(task->findStringAttributePublic(AAA, read));
    ASSERT_TRUE(read == aaaVal);
    ASSERT_TRUE(task->findStringAttributePublic(BBB, read));
    ASSERT_TRUE(read == bbbVal);
    const android::String8 VERSION("version");
    const android::String8 NAME("name");
    ASSERT_TRUE(!task->findStringAttributePublic(VERSION, read));
    ASSERT_TRUE(!task->findStringAttributePublic(NAME, read));
}