[dali_2.0.25] Merge branch 'devel/master'
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit / dali-toolkit-test-utils / test-harness.h
1 #ifndef TEST_HARNESS_H
2 #define TEST_HARNESS_H
3
4 /*
5  * Copyright (c) 2020 Samsung Electronics Co., Ltd.
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  */
19
20 #include <stdio.h>
21 #include <testcase.h>
22
23 #include <chrono>
24 #include <cstdint>
25
26 namespace TestHarness
27 {
28 enum ExitStatus
29 {
30   EXIT_STATUS_TESTCASE_SUCCEEDED, // 0
31   EXIT_STATUS_TESTCASE_FAILED,    // 1
32   EXIT_STATUS_TESTCASE_ABORTED,   // 2
33   EXIT_STATUS_FORK_FAILED,        // 3
34   EXIT_STATUS_WAITPID_FAILED,     // 4
35   EXIT_STATUS_BAD_ARGUMENT,       // 5
36   EXIT_STATUS_TESTCASE_NOT_FOUND  // 6
37 };
38
39 const int32_t MAX_NUM_CHILDREN(16);
40
41 struct TestCase
42 {
43   int32_t                               testCase;
44   const char*                           name;
45   std::chrono::steady_clock::time_point startTime;
46   std::chrono::system_clock::time_point startSystemTime;
47   int32_t                               result;
48   pid_t                                 childPid{0};
49   testcase*                             tctPtr;
50
51   TestCase(int32_t index, testcase* testCase)
52   : testCase(index),
53     name(testCase->name),
54     startTime(),
55     startSystemTime(),
56     result(0),
57     childPid(0),
58     tctPtr(testCase)
59   {
60   }
61   TestCase()
62   : testCase(0),
63     name(NULL),
64     startTime(),
65     startSystemTime(),
66     result(0),
67     childPid(0),
68     tctPtr(nullptr)
69   {
70   }
71
72   TestCase(int32_t tc, const char* name)
73   : testCase(tc),
74     name(name),
75     startTime(),
76     startSystemTime(),
77     result(0),
78     childPid(0),
79     tctPtr(nullptr)
80   {
81   }
82   TestCase(const TestCase& rhs)
83   : testCase(rhs.testCase),
84     name(rhs.name),
85     startTime(rhs.startTime),
86     startSystemTime(rhs.startSystemTime),
87     result(rhs.result),
88     childPid(rhs.childPid),
89     tctPtr(rhs.tctPtr)
90   {
91   }
92   TestCase& operator=(const TestCase& rhs)
93   {
94     testCase        = rhs.testCase;
95     name            = rhs.name;
96     startTime       = rhs.startTime;
97     startSystemTime = rhs.startSystemTime;
98     result          = rhs.result;
99     childPid        = rhs.childPid;
100     tctPtr          = rhs.tctPtr;
101     return *this;
102   }
103 };
104
105 /**
106  * Run a test case
107  * @param[in] testCase The Testkit-lite test case to run
108  */
109 int32_t RunTestCase(struct testcase_s& testCase);
110
111 /**
112  * Run all test cases in parallel
113  * @param[in] processName The name of this process
114  * @param[in] tc_array The array of auto-generated testkit-lite test cases
115  * @param[in] reRunFailed True if failed test cases should be re-run
116  * @return 0 on success
117  */
118 int32_t RunAllInParallel(const char* processName, testcase tc_array[], bool reRunFailed);
119
120 /**
121  * Run all test cases in serial
122  * @param[in] processName The name of this process
123  * @param[in] tc_array The array of auto-generated testkit-lite test cases
124  * @return 0 on success
125  */
126 int32_t RunAll(const char* processName, testcase tc_array[]);
127
128 /**
129  * Find the named test case in the given array, and run it
130  * @param[in] tc_array The array of auto-generated testkit-lite test cases
131  * @param[in] testCaseName the name of the test case to run
132  * @return 0 on success
133  */
134 int32_t FindAndRunTestCase(::testcase tc_array[], const char* testCaseName);
135
136 /**
137  * Display usage instructions for this program
138  * @param[in] program The name of this program
139  */
140 void Usage(const char* program);
141
142 /**
143  * Main function.
144  * @param[in] argc Argument count
145  * @param[in] argv Argument vector
146  * @param[in] tc_array Array of test cases
147  */
148 int RunTests(int argc, char* const argv[], ::testcase tc_array[]);
149
150 } // namespace TestHarness
151
152 #endif