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::string
FormatFullTestName(const std::string
& test_case_name
,
15 const std::string
& test_name
) {
16 return test_case_name
+ "." + test_name
;
19 std::vector
<SplitTestName
> GetCompiledInTests() {
20 testing::UnitTest
* const unit_test
= testing::UnitTest::GetInstance();
22 std::vector
<SplitTestName
> tests
;
23 for (int i
= 0; i
< unit_test
->total_test_case_count(); ++i
) {
24 const testing::TestCase
* test_case
= unit_test
->GetTestCase(i
);
25 for (int j
= 0; j
< test_case
->total_test_count(); ++j
) {
26 const testing::TestInfo
* test_info
= test_case
->GetTestInfo(j
);
27 tests
.push_back(std::make_pair(test_case
->name(), test_info
->name()));
33 bool WriteCompiledInTestsToFile(const FilePath
& path
) {
34 std::vector
<SplitTestName
> tests(GetCompiledInTests());
37 for (size_t i
= 0; i
< tests
.size(); ++i
) {
38 DictionaryValue
* test_info
= new DictionaryValue
;
39 test_info
->SetString("test_case_name", tests
[i
].first
);
40 test_info
->SetString("test_name", tests
[i
].second
);
41 root
.Append(test_info
);
44 JSONFileValueSerializer
serializer(path
);
45 return serializer
.Serialize(root
);
48 bool ReadTestNamesFromFile(const FilePath
& path
,
49 std::vector
<SplitTestName
>* output
) {
50 JSONFileValueDeserializer
deserializer(path
);
52 std::string error_message
;
53 scoped_ptr
<base::Value
> value(
54 deserializer
.Deserialize(&error_code
, &error_message
));
58 base::ListValue
* tests
= nullptr;
59 if (!value
->GetAsList(&tests
))
62 std::vector
<base::SplitTestName
> result
;
63 for (base::ListValue::iterator i
= tests
->begin(); i
!= tests
->end(); ++i
) {
64 base::DictionaryValue
* test
= nullptr;
65 if (!(*i
)->GetAsDictionary(&test
))
68 std::string test_case_name
;
69 if (!test
->GetStringASCII("test_case_name", &test_case_name
))
72 std::string test_name
;
73 if (!test
->GetStringASCII("test_name", &test_name
))
76 result
.push_back(std::make_pair(test_case_name
, test_name
));