blob: 4eb8207a1faff6d975f473d1a0ae3c510c58a20c [file]
/*
* Copyright (C) 2025 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "src/trace_processor/util/json_serializer.h"
#include <string>
#include "test/gtest_and_gmock.h"
namespace perfetto::trace_processor::json {
namespace {
// Tests pretty-printing - the only test needed for this feature
TEST(JsonSerializerTest, PrettyPrint) {
JsonSerializer s(JsonSerializer::kPretty);
s.OpenObject();
s.Key("outer");
s.OpenObject();
s.Key("inner");
s.NumberValue(1);
s.CloseObject();
s.Key("array");
s.OpenArray();
s.NumberValue(2);
s.NumberValue(3);
s.CloseArray();
s.CloseObject();
std::string expected =
"{\n"
" \"outer\": {\n"
" \"inner\": 1\n"
" },\n"
" \"array\": [\n"
" 2,\n"
" 3\n"
" ]\n"
"}";
EXPECT_EQ(s.ToString(), expected);
}
// Tests UTF-8 surrogate pair encoding (4-byte sequences)
// This is the most complex case that could break
TEST(JsonSerializerTest, Utf8SurrogatePair) {
JsonSerializer s;
// U+1D11E (musical G clef) = UTF-8: F0 9D 84 9E
// Should become surrogate pair: \uD834\uDD1E
s.StringValue("\xf0\x9d\x84\x9e");
EXPECT_EQ(s.ToString(), R"("\ud834\udd1e")");
}
} // namespace
} // namespace perfetto::trace_processor::json