1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/tools/profiler/tests/gtest/JSStreamWriterTest.cpp Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,183 @@ 1.4 +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 1.5 +/* This Source Code Form is subject to the terms of the Mozilla Public 1.6 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.7 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.8 + 1.9 +#include "gtest/gtest.h" 1.10 + 1.11 +#include <sstream> 1.12 +#include "JSStreamWriter.h" 1.13 + 1.14 +TEST(JSStreamWriter, NoOutput) { 1.15 + std::stringstream ss; 1.16 + JSStreamWriter b(ss); 1.17 + ASSERT_TRUE(ss.str().compare("") == 0); 1.18 +} 1.19 + 1.20 +TEST(JSStreamWriter, EmptyObject) { 1.21 + std::stringstream ss; 1.22 + JSStreamWriter b(ss); 1.23 + b.BeginObject(); 1.24 + b.EndObject(); 1.25 + ASSERT_TRUE(ss.str().compare("{}") == 0); 1.26 +} 1.27 + 1.28 +TEST(JSStreamWriter, OnePropertyObject) { 1.29 + std::stringstream ss; 1.30 + JSStreamWriter b(ss); 1.31 + b.BeginObject(); 1.32 + b.Name("a"); 1.33 + b.Value(1); 1.34 + b.EndObject(); 1.35 + ASSERT_TRUE(ss.str().compare("{\"a\":1}") == 0); 1.36 +} 1.37 + 1.38 +TEST(JSStreamWriter, MultiPropertyObject) { 1.39 + std::stringstream ss; 1.40 + JSStreamWriter b(ss); 1.41 + b.BeginObject(); 1.42 + b.Name("a"); 1.43 + b.Value(1); 1.44 + b.Name("b"); 1.45 + b.Value(2); 1.46 + b.EndObject(); 1.47 + ASSERT_TRUE(ss.str().compare("{\"a\":1,\"b\":2}") == 0); 1.48 +} 1.49 + 1.50 +TEST(JSStreamWriter, OnePropertyArray) { 1.51 + std::stringstream ss; 1.52 + JSStreamWriter b(ss); 1.53 + b.BeginArray(); 1.54 + b.Value(1); 1.55 + b.EndArray(); 1.56 + ASSERT_TRUE(ss.str().compare("[1]") == 0); 1.57 +} 1.58 + 1.59 +TEST(JSStreamWriter, MultiPropertyArray) { 1.60 + std::stringstream ss; 1.61 + JSStreamWriter b(ss); 1.62 + b.BeginArray(); 1.63 + b.Value(1); 1.64 + b.Value(2); 1.65 + b.EndArray(); 1.66 + ASSERT_TRUE(ss.str().compare("[1,2]") == 0); 1.67 +} 1.68 + 1.69 +TEST(JSStreamWriter, NestedObject) { 1.70 + std::stringstream ss; 1.71 + JSStreamWriter b(ss); 1.72 + b.BeginObject(); 1.73 + b.Name("a"); 1.74 + b.BeginObject(); 1.75 + b.Name("b"); 1.76 + b.Value(1); 1.77 + b.EndObject(); 1.78 + b.EndObject(); 1.79 + ASSERT_TRUE(ss.str().compare("{\"a\":{\"b\":1}}") == 0); 1.80 +} 1.81 + 1.82 +TEST(JSStreamWriter, NestedObjectInArray) { 1.83 + std::stringstream ss; 1.84 + JSStreamWriter b(ss); 1.85 + b.BeginArray(); 1.86 + b.BeginObject(); 1.87 + b.Name("a"); 1.88 + b.Value(1); 1.89 + b.EndObject(); 1.90 + b.EndArray(); 1.91 + ASSERT_TRUE(ss.str().compare("[{\"a\":1}]") == 0); 1.92 +} 1.93 + 1.94 +TEST(JSStreamWriter, NestedArrayInObject) { 1.95 + std::stringstream ss; 1.96 + JSStreamWriter b(ss); 1.97 + b.BeginObject(); 1.98 + b.Name("a"); 1.99 + b.BeginArray(); 1.100 + b.Value(1); 1.101 + b.EndArray(); 1.102 + b.EndObject(); 1.103 + ASSERT_TRUE(ss.str().compare("{\"a\":[1]}") == 0); 1.104 +} 1.105 + 1.106 +TEST(JSStreamWriter, StingEscaping) { 1.107 + std::stringstream ss; 1.108 + JSStreamWriter b(ss); 1.109 + b.Value("a\"a"); 1.110 + ASSERT_TRUE(ss.str().compare("\"a\\\"a\"") == 0); 1.111 + 1.112 + std::stringstream ss2; 1.113 + JSStreamWriter b2(ss2); 1.114 + b2.Value("a\na"); 1.115 + ASSERT_TRUE(ss2.str().compare("\"a\\u000Aa\"") == 0); 1.116 +} 1.117 + 1.118 +TEST(JSStreamWriter, ArrayOfOjects) { 1.119 + std::stringstream ss; 1.120 + JSStreamWriter b(ss); 1.121 + b.BeginArray(); 1.122 + b.BeginObject(); 1.123 + b.EndObject(); 1.124 + 1.125 + b.BeginObject(); 1.126 + b.EndObject(); 1.127 + b.EndArray(); 1.128 + ASSERT_TRUE(ss.str().compare("[{},{}]") == 0); 1.129 +} 1.130 + 1.131 +TEST(JSStreamWriter, Complex) { 1.132 + std::stringstream ss; 1.133 + JSStreamWriter b(ss); 1.134 + b.BeginObject(); 1.135 + b.Name("a"); 1.136 + b.BeginArray(); 1.137 + b.Value(1); 1.138 + 1.139 + b.BeginObject(); 1.140 + b.EndObject(); 1.141 + 1.142 + b.BeginObject(); 1.143 + b.Name("b"); 1.144 + b.Value("c"); 1.145 + b.EndObject(); 1.146 + b.EndArray(); 1.147 + 1.148 + b.Name("b"); 1.149 + b.BeginArray(); 1.150 + b.BeginArray(); 1.151 + b.EndArray(); 1.152 + b.EndArray(); 1.153 + b.EndObject(); 1.154 + ASSERT_TRUE(ss.str().compare("{\"a\":[1,{},{\"b\":\"c\"}],\"b\":[[]]}") == 0); 1.155 +} 1.156 + 1.157 +TEST(JSStreamWriter, Complex2) { 1.158 + std::stringstream ss; 1.159 + JSStreamWriter b(ss); 1.160 + b.BeginObject(); 1.161 + b.Name("a"); 1.162 + b.BeginArray(); 1.163 + b.BeginObject(); 1.164 + b.Name("b"); 1.165 + b.Value("c"); 1.166 + b.Name("d"); 1.167 + b.BeginArray(); 1.168 + b.BeginObject(); 1.169 + b.Name("e"); 1.170 + b.BeginArray(); 1.171 + b.BeginObject(); 1.172 + b.Name("f"); 1.173 + b.Value("g"); 1.174 + b.EndObject(); 1.175 + b.BeginObject(); 1.176 + b.Name("h"); 1.177 + b.Value("i"); 1.178 + b.EndObject(); 1.179 + b.EndArray(); 1.180 + b.EndObject(); 1.181 + b.EndArray(); 1.182 + b.EndObject(); 1.183 + b.EndArray(); 1.184 + b.EndObject(); 1.185 + ASSERT_TRUE(ss.str().compare("{\"a\":[{\"b\":\"c\",\"d\":[{\"e\":[{\"f\":\"g\"},{\"h\":\"i\"}]}]}]}") 1.186 +}