/*
* 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;
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));
}