1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "base/test/gtest_util.h"
7 #include "base/files/file_path.h"
8 #include "base/json/json_file_value_serializer.h"
9 #include "base/values.h"
10 #include "testing/gtest/include/gtest/gtest.h"
14 std::vector
<SplitTestName
> GetCompiledInTests() {
15 testing::UnitTest
* const unit_test
= testing::UnitTest::GetInstance();
17 std::vector
<SplitTestName
> tests
;
18 for (int i
= 0; i
< unit_test
->total_test_case_count(); ++i
) {
19 const testing::TestCase
* test_case
= unit_test
->GetTestCase(i
);
20 for (int j
= 0; j
< test_case
->total_test_count(); ++j
) {
21 const testing::TestInfo
* test_info
= test_case
->GetTestInfo(j
);
22 tests
.push_back(std::make_pair(test_case
->name(), test_info
->name()));
28 bool WriteCompiledInTestsToFile(const FilePath
& path
) {
29 std::vector
<SplitTestName
> tests(GetCompiledInTests());
32 for (size_t i
= 0; i
< tests
.size(); ++i
) {
33 DictionaryValue
* test_info
= new DictionaryValue
;
34 test_info
->SetString("test_case_name", tests
[i
].first
);
35 test_info
->SetString("test_name", tests
[i
].second
);
36 root
.Append(test_info
);
39 JSONFileValueSerializer
serializer(path
);
40 return serializer
.Serialize(root
);
43 bool ReadTestNamesFromFile(const FilePath
& path
,
44 std::vector
<SplitTestName
>* output
) {
45 JSONFileValueSerializer
deserializer(path
);
47 std::string error_message
;
48 scoped_ptr
<base::Value
> value(
49 deserializer
.Deserialize(&error_code
, &error_message
));
53 base::ListValue
* tests
= nullptr;
54 if (!value
->GetAsList(&tests
))
57 std::vector
<base::SplitTestName
> result
;
58 for (base::ListValue::iterator i
= tests
->begin(); i
!= tests
->end(); ++i
) {
59 base::DictionaryValue
* test
= nullptr;
60 if (!(*i
)->GetAsDictionary(&test
))
63 std::string test_case_name
;
64 if (!test
->GetStringASCII("test_case_name", &test_case_name
))
67 std::string test_name
;
68 if (!test
->GetStringASCII("test_name", &test_name
))
71 result
.push_back(std::make_pair(test_case_name
, test_name
));