• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2006-2008 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.
4 
5 #include <vector>
6 
7 #include "base/file_util.h"
8 #include "base/path_service.h"
9 #include "base/perftimer.h"
10 #include "base/string_util.h"
11 #include "base/values.h"
12 #include "chrome/common/chrome_paths.h"
13 #include "chrome/common/logging_chrome.h"
14 #include "content/common/json_value_serializer.h"
15 #include "testing/gtest/include/gtest/gtest.h"
16 
17 namespace {
18 class JSONValueSerializerTests : public testing::Test {
19  protected:
SetUp()20   virtual void SetUp() {
21     static const char* const kTestFilenames[] = {
22       "serializer_nested_test.js",
23       "serializer_test.js",
24       "serializer_test_nowhitespace.js",
25     };
26 
27     // Load test cases
28     for (size_t i = 0; i < arraysize(kTestFilenames); ++i) {
29       FilePath filename;
30       EXPECT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &filename));
31       filename = filename.AppendASCII(kTestFilenames[i]);
32 
33       std::string test_case;
34       EXPECT_TRUE(file_util::ReadFileToString(filename, &test_case));
35       test_cases_.push_back(test_case);
36     }
37   }
38 
39   // Holds json strings to be tested.
40   std::vector<std::string> test_cases_;
41 };
42 
43 }  // namespace
44 
45 // Test deserialization of a json string into a Value object.  We run the test
46 // using 3 sample strings for both the current decoder and jsoncpp's decoder.
TEST_F(JSONValueSerializerTests,Reading)47 TEST_F(JSONValueSerializerTests, Reading) {
48   printf("\n");
49   const int kIterations = 100000;
50 
51   // Test chrome json implementation
52   PerfTimeLogger chrome_timer("chrome");
53   for (int i = 0; i < kIterations; ++i) {
54     for (size_t j = 0; j < test_cases_.size(); ++j) {
55       JSONStringValueSerializer reader(test_cases_[j]);
56       scoped_ptr<Value> root(reader.Deserialize(NULL, NULL));
57       ASSERT_TRUE(root.get());
58     }
59   }
60   chrome_timer.Done();
61 }
62 
TEST_F(JSONValueSerializerTests,CompactWriting)63 TEST_F(JSONValueSerializerTests, CompactWriting) {
64   printf("\n");
65   const int kIterations = 100000;
66   // Convert test cases to Value objects.
67   std::vector<Value*> test_cases;
68   for (size_t i = 0; i < test_cases_.size(); ++i) {
69     JSONStringValueSerializer reader(test_cases_[i]);
70     Value* root = reader.Deserialize(NULL, NULL);
71     ASSERT_TRUE(root);
72     test_cases.push_back(root);
73   }
74 
75   PerfTimeLogger chrome_timer("chrome");
76   for (int i = 0; i < kIterations; ++i) {
77     for (size_t j = 0; j < test_cases.size(); ++j) {
78       std::string json;
79       JSONStringValueSerializer reader(&json);
80       ASSERT_TRUE(reader.Serialize(*test_cases[j]));
81     }
82   }
83   chrome_timer.Done();
84 
85   // Clean up test cases.
86   for (size_t i = 0; i < test_cases.size(); ++i) {
87     delete test_cases[i];
88     test_cases[i] = NULL;
89   }
90 }
91