diff -r 000000000000 -r 6474c204b198 tools/profiler/tests/gtest/JSStreamWriterTest.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/profiler/tests/gtest/JSStreamWriterTest.cpp Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,183 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "gtest/gtest.h" + +#include +#include "JSStreamWriter.h" + +TEST(JSStreamWriter, NoOutput) { + std::stringstream ss; + JSStreamWriter b(ss); + ASSERT_TRUE(ss.str().compare("") == 0); +} + +TEST(JSStreamWriter, EmptyObject) { + std::stringstream ss; + JSStreamWriter b(ss); + b.BeginObject(); + b.EndObject(); + ASSERT_TRUE(ss.str().compare("{}") == 0); +} + +TEST(JSStreamWriter, OnePropertyObject) { + std::stringstream ss; + JSStreamWriter b(ss); + b.BeginObject(); + b.Name("a"); + b.Value(1); + b.EndObject(); + ASSERT_TRUE(ss.str().compare("{\"a\":1}") == 0); +} + +TEST(JSStreamWriter, MultiPropertyObject) { + std::stringstream ss; + JSStreamWriter b(ss); + b.BeginObject(); + b.Name("a"); + b.Value(1); + b.Name("b"); + b.Value(2); + b.EndObject(); + ASSERT_TRUE(ss.str().compare("{\"a\":1,\"b\":2}") == 0); +} + +TEST(JSStreamWriter, OnePropertyArray) { + std::stringstream ss; + JSStreamWriter b(ss); + b.BeginArray(); + b.Value(1); + b.EndArray(); + ASSERT_TRUE(ss.str().compare("[1]") == 0); +} + +TEST(JSStreamWriter, MultiPropertyArray) { + std::stringstream ss; + JSStreamWriter b(ss); + b.BeginArray(); + b.Value(1); + b.Value(2); + b.EndArray(); + ASSERT_TRUE(ss.str().compare("[1,2]") == 0); +} + +TEST(JSStreamWriter, NestedObject) { + std::stringstream ss; + JSStreamWriter b(ss); + b.BeginObject(); + b.Name("a"); + b.BeginObject(); + b.Name("b"); + b.Value(1); + b.EndObject(); + b.EndObject(); + ASSERT_TRUE(ss.str().compare("{\"a\":{\"b\":1}}") == 0); +} + +TEST(JSStreamWriter, NestedObjectInArray) { + std::stringstream ss; + JSStreamWriter b(ss); + b.BeginArray(); + b.BeginObject(); + b.Name("a"); + b.Value(1); + b.EndObject(); + b.EndArray(); + ASSERT_TRUE(ss.str().compare("[{\"a\":1}]") == 0); +} + +TEST(JSStreamWriter, NestedArrayInObject) { + std::stringstream ss; + JSStreamWriter b(ss); + b.BeginObject(); + b.Name("a"); + b.BeginArray(); + b.Value(1); + b.EndArray(); + b.EndObject(); + ASSERT_TRUE(ss.str().compare("{\"a\":[1]}") == 0); +} + +TEST(JSStreamWriter, StingEscaping) { + std::stringstream ss; + JSStreamWriter b(ss); + b.Value("a\"a"); + ASSERT_TRUE(ss.str().compare("\"a\\\"a\"") == 0); + + std::stringstream ss2; + JSStreamWriter b2(ss2); + b2.Value("a\na"); + ASSERT_TRUE(ss2.str().compare("\"a\\u000Aa\"") == 0); +} + +TEST(JSStreamWriter, ArrayOfOjects) { + std::stringstream ss; + JSStreamWriter b(ss); + b.BeginArray(); + b.BeginObject(); + b.EndObject(); + + b.BeginObject(); + b.EndObject(); + b.EndArray(); + ASSERT_TRUE(ss.str().compare("[{},{}]") == 0); +} + +TEST(JSStreamWriter, Complex) { + std::stringstream ss; + JSStreamWriter b(ss); + b.BeginObject(); + b.Name("a"); + b.BeginArray(); + b.Value(1); + + b.BeginObject(); + b.EndObject(); + + b.BeginObject(); + b.Name("b"); + b.Value("c"); + b.EndObject(); + b.EndArray(); + + b.Name("b"); + b.BeginArray(); + b.BeginArray(); + b.EndArray(); + b.EndArray(); + b.EndObject(); + ASSERT_TRUE(ss.str().compare("{\"a\":[1,{},{\"b\":\"c\"}],\"b\":[[]]}") == 0); +} + +TEST(JSStreamWriter, Complex2) { + std::stringstream ss; + JSStreamWriter b(ss); + b.BeginObject(); + b.Name("a"); + b.BeginArray(); + b.BeginObject(); + b.Name("b"); + b.Value("c"); + b.Name("d"); + b.BeginArray(); + b.BeginObject(); + b.Name("e"); + b.BeginArray(); + b.BeginObject(); + b.Name("f"); + b.Value("g"); + b.EndObject(); + b.BeginObject(); + b.Name("h"); + b.Value("i"); + b.EndObject(); + b.EndArray(); + b.EndObject(); + b.EndArray(); + b.EndObject(); + b.EndArray(); + b.EndObject(); + ASSERT_TRUE(ss.str().compare("{\"a\":[{\"b\":\"c\",\"d\":[{\"e\":[{\"f\":\"g\"},{\"h\":\"i\"}]}]}]}") +}