blob: 718e438bf4659c2265a9d3f516fb160d07d3915c [file] [log] [blame]
openvcdiff@gmail.com732fff22010-08-04 18:00:00 +00001// Copyright 2009 Google Inc.
2// Author: James deBoer
3//
4// Licensed under the Apache License, Version 2.0 (the "License");
5// you may not use this file except in compliance with the License.
6// You may obtain a copy of the License at
7//
8// http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13// See the License for the specific language governing permissions and
14// limitations under the License.
15//
16// Unit tests for the class JSONCodeTableWriter, found in jsonwriter.h.
17
18#include <config.h>
19#include "jsonwriter.h"
20#include "testing.h"
21#include "vcdiff_defs.h"
22#include "google/output_string.h"
23
24namespace open_vcdiff {
25namespace {
26
27class JSONWriterTest : public testing::Test {
28 protected:
29 typedef std::string string;
30
31 JSONWriterTest()
32 : output_string_(&out_) {
33 EXPECT_TRUE(coder_.Init(0));
34 coder_.WriteHeader(&output_string_, 0);
35 }
36
37 virtual ~JSONWriterTest() { }
38
39 string out_;
40 OutputString<string> output_string_;
41 JSONCodeTableWriter coder_;
42};
43
44TEST_F(JSONWriterTest, Null) {
45 EXPECT_EQ(0U, coder_.target_length());
46 coder_.FinishEncoding(&output_string_);
47 EXPECT_EQ("", out_);
48 EXPECT_EQ(0U, coder_.target_length());
49}
50
51TEST_F(JSONWriterTest, Empty) {
52 EXPECT_EQ(0U, coder_.target_length());
53 coder_.Output(&output_string_);
54 coder_.FinishEncoding(&output_string_);
55 EXPECT_EQ("[]", out_);
56 EXPECT_EQ(0U, coder_.target_length());
57}
58
59TEST_F(JSONWriterTest, Add) {
60 coder_.Add("123", 3);
61 EXPECT_EQ(3U, coder_.target_length());
62 coder_.Output(&output_string_);
63 EXPECT_EQ(0U, coder_.target_length());
64 coder_.FinishEncoding(&output_string_);
65 EXPECT_EQ("[\"123\",]", out_);
66}
67
68TEST_F(JSONWriterTest, Copy) {
69 coder_.Copy(3, 5);
70 EXPECT_EQ(5U, coder_.target_length());
71 coder_.Output(&output_string_);
72 EXPECT_EQ(0U, coder_.target_length());
73 coder_.FinishEncoding(&output_string_);
74 EXPECT_EQ("[3,5,]", out_);
75}
76
77TEST_F(JSONWriterTest, Run) {
78 coder_.Run(3, 'a');
79 EXPECT_EQ(3U, coder_.target_length());
80 coder_.Output(&output_string_);
81 EXPECT_EQ(0U, coder_.target_length());
82 coder_.FinishEncoding(&output_string_);
83 EXPECT_EQ("[\"aaa\",]", out_);
84}
85
86TEST_F(JSONWriterTest, AddEscaped) {
87 coder_.Add("\n\b\r", 3);
88 EXPECT_EQ(3U, coder_.target_length());
89 coder_.Output(&output_string_);
90 EXPECT_EQ(0U, coder_.target_length());
91 coder_.FinishEncoding(&output_string_);
92 EXPECT_EQ("[\"\\n\\b\\r\",]", out_);
93}
94
95TEST_F(JSONWriterTest, AddCopyAdd) {
96 coder_.Add("abc", 3);
97 coder_.Copy(3, 5);
98 coder_.Add("defghij", 7);
99 EXPECT_EQ(15U, coder_.target_length());
100 coder_.Output(&output_string_);
101 EXPECT_EQ(0U, coder_.target_length());
102 coder_.FinishEncoding(&output_string_);
103 EXPECT_EQ("[\"abc\",3,5,\"defghij\",]", out_);
104}
105
106TEST_F(JSONWriterTest, AddOutputAddOutputToSameString) {
107 coder_.Add("abc", 3);
108 EXPECT_EQ(3U, coder_.target_length());
109 coder_.Output(&output_string_);
110 EXPECT_EQ(0U, coder_.target_length());
111 EXPECT_EQ("[\"abc\",", out_);
112 coder_.Add("def", 3);
113 EXPECT_EQ(3U, coder_.target_length());
114 coder_.Output(&output_string_);
115 EXPECT_EQ(0U, coder_.target_length());
116 coder_.FinishEncoding(&output_string_);
117 EXPECT_EQ("[\"abc\",\"def\",]", out_);
118}
119
120TEST_F(JSONWriterTest, AddOutputAddOutputToDifferentString) {
121 coder_.Add("abc", 3);
122 EXPECT_EQ(3U, coder_.target_length());
123 coder_.Output(&output_string_);
124 EXPECT_EQ(0U, coder_.target_length());
125 coder_.FinishEncoding(&output_string_);
126 EXPECT_EQ("[\"abc\",]", out_);
127 string out2;
128 OutputString<string> output_string2(&out2);
129 coder_.Init(0);
130 coder_.Add("def", 3);
131 EXPECT_EQ(3U, coder_.target_length());
132 coder_.Output(&output_string2);
133 EXPECT_EQ(0U, coder_.target_length());
134 coder_.FinishEncoding(&output_string2);
135 EXPECT_EQ("[\"def\",]", out2);
136}
137
138} // unnamed namespace
139} // namespace open_vcdiff