22 static const char kJson[] =
"{\n" 23 " \"foo\":[\"bar\", \"baz\"],\n" 54 EXPECT_EQ(kPointerInvalidIndex, p.GetTokens()[0].index);
63 EXPECT_EQ(kPointerInvalidIndex, p.GetTokens()[0].index);
66 #if RAPIDJSON_HAS_STDSTRING 73 EXPECT_EQ(kPointerInvalidIndex, p.GetTokens()[0].index);
83 EXPECT_EQ(kPointerInvalidIndex, p.GetTokens()[0].index);
133 EXPECT_EQ(
'\0', p.GetTokens()[0].name[0]);
134 EXPECT_EQ(
'\0', p.GetTokens()[0].name[1]);
135 EXPECT_EQ(
'\0', p.GetTokens()[0].name[2]);
153 EXPECT_EQ(kPointerInvalidIndex, p.GetTokens()[0].index);
162 EXPECT_EQ(kPointerInvalidIndex, p.GetTokens()[0].index);
260 EXPECT_EQ(
'\0', p.GetTokens()[0].name[0]);
261 EXPECT_EQ(
'\0', p.GetTokens()[0].name[1]);
262 EXPECT_EQ(
'\0', p.GetTokens()[0].name[2]);
290 EXPECT_EQ(kPointerInvalidIndex, p.GetTokens()[0].index);
299 EXPECT_EQ(kPointerInvalidIndex, p.GetTokens()[0].index);
403 const char* sources[] = {
421 for (
size_t i = 0; i <
sizeof(sources) /
sizeof(sources[0]); i++) {
430 Pointer p2(s2.GetString(), s2.GetSize());
444 #define NAME(s) { s, static_cast<SizeType>(sizeof(s) / sizeof(s[0]) - 1), kPointerInvalidIndex } 445 #define INDEX(i) { #i, static_cast<SizeType>(sizeof(#i) - 1), i } 453 Pointer p(kTokens,
sizeof(kTokens) /
sizeof(kTokens[0]));
466 Pointer p(
"/foo/0", &allocator);
475 EXPECT_EQ(&p.GetAllocator(), &q.GetAllocator());
480 Pointer p(kTokens,
sizeof(kTokens) /
sizeof(kTokens[0]));
495 Pointer p(
"/foo/0", &allocator);
505 EXPECT_NE(&p.GetAllocator(), &q.GetAllocator());
514 EXPECT_NE(&p.GetAllocator(), &q.GetAllocator());
519 Pointer p(kTokens,
sizeof(kTokens) /
sizeof(kTokens[0]));
553 #if RAPIDJSON_HAS_STDSTRING 635 size_t unresolvedTokenIndex;
652 const Value v(
"qux");
665 EXPECT_EQ(0x87654321,
Pointer(
"/foo/uint").GetWithDefault(d, 0x87654321,
a).GetUint());
666 EXPECT_EQ(0x87654321,
Pointer(
"/foo/uint").GetWithDefault(d, 0x12345678,
a).GetUint());
674 EXPECT_EQ(u64,
Pointer(
"/foo/uint64").GetWithDefault(d, u64 - 1,
a).GetUint64());
688 strcpy(buffer,
"World");
690 memset(buffer, 0,
sizeof(buffer));
694 #if RAPIDJSON_HAS_STDSTRING 704 const Value v(
"qux");
717 EXPECT_EQ(0x87654321,
Pointer(
"/foo/uint").GetWithDefault(d, 0x87654321).GetUint());
718 EXPECT_EQ(0x87654321,
Pointer(
"/foo/uint").GetWithDefault(d, 0x12345678).GetUint());
722 EXPECT_EQ(i64,
Pointer(
"/foo/int64").GetWithDefault(d, i64 + 1).GetInt64());
726 EXPECT_EQ(u64,
Pointer(
"/foo/uint64").GetWithDefault(d, u64 - 1).GetUint64());
740 strcpy(buffer,
"World");
742 memset(buffer, 0,
sizeof(buffer));
746 #if RAPIDJSON_HAS_STDSTRING 767 const Value foo(d[
"foo"],
a);
775 Pointer(
"/foo/uint").Set(d, 0x87654321,
a);
779 Pointer(
"/foo/int64").Set(d, i64,
a);
783 Pointer(
"/foo/uint64").Set(d, u64,
a);
786 Pointer(
"/foo/true").Set(d,
true,
a);
789 Pointer(
"/foo/false").Set(d,
false,
a);
793 Pointer(
"/foo/hello").Set(d,
"Hello",
a);
799 strcpy(buffer,
"World");
800 Pointer(
"/foo/world").Set(d, buffer,
a);
801 memset(buffer, 0,
sizeof(buffer));
805 #if RAPIDJSON_HAS_STDSTRING 831 Pointer(
"/foo/int").Set(d, -1);
834 Pointer(
"/foo/uint").Set(d, 0x87654321);
838 Pointer(
"/foo/int64").Set(d, i64);
842 Pointer(
"/foo/uint64").Set(d, u64);
845 Pointer(
"/foo/true").Set(d,
true);
848 Pointer(
"/foo/false").Set(d,
false);
852 Pointer(
"/foo/hello").Set(d,
"Hello");
858 strcpy(buffer,
"World");
859 Pointer(
"/foo/world").Set(d, buffer);
860 memset(buffer, 0,
sizeof(buffer));
864 #if RAPIDJSON_HAS_STDSTRING 960 size_t unresolvedTokenIndex;
991 const Value v(
"qux");
1028 strcpy(buffer,
"World");
1030 memset(buffer, 0,
sizeof(buffer));
1034 #if RAPIDJSON_HAS_STDSTRING 1044 const Value v(
"qux");
1081 strcpy(buffer,
"World");
1083 memset(buffer, 0,
sizeof(buffer));
1087 #if RAPIDJSON_HAS_STDSTRING 1096 const Value v(
"qux");
1133 strcpy(buffer,
"World");
1135 memset(buffer, 0,
sizeof(buffer));
1139 #if RAPIDJSON_HAS_STDSTRING 1148 const Value v(
"qux");
1185 strcpy(buffer,
"World");
1187 memset(buffer, 0,
sizeof(buffer));
1191 #if RAPIDJSON_HAS_STDSTRING 1241 strcpy(buffer,
"World");
1243 memset(buffer, 0,
sizeof(buffer));
1247 #if RAPIDJSON_HAS_STDSTRING 1298 strcpy(buffer,
"World");
1300 memset(buffer, 0,
sizeof(buffer));
1304 #if RAPIDJSON_HAS_STDSTRING 1354 strcpy(buffer,
"World");
1356 memset(buffer, 0,
sizeof(buffer));
1360 #if RAPIDJSON_HAS_STDSTRING 1410 strcpy(buffer,
"World");
1412 memset(buffer, 0,
sizeof(buffer));
1416 #if RAPIDJSON_HAS_STDSTRING 1480 d.
Parse(
"{\"0\" : [123]}");
1502 static const bool kNeedFree =
true;
1503 void *
Malloc(
size_t _size) {
return malloc(_size); }
1504 void *
Realloc(
void *_org_p,
size_t _org_size,
size_t _new_size) { (void)_org_size;
return realloc(_org_p, _new_size); }
1505 static void Free(
void *_p) {
return free(_p); }
1508 typedef rapidjson::GenericDocument<
1510 rapidjson::MemoryPoolAllocator< MyAllocator >,
1514 typedef rapidjson::GenericPointer<
1515 ::myjson::Document::ValueType,
1519 typedef ::myjson::Document::ValueType
Value;
1527 value.SetString(mystr.c_str(),
static_cast<SizeType>(mystr.length()), document.GetAllocator());
TEST(Pointer, DefaultConstructor)
void * Malloc(size_t _size)
T::ValueType & GetValueByPointerWithDefault(T &root, const GenericPointer< typename T::ValueType > &pointer, const typename T::ValueType &defaultValue, typename T::AllocatorType &a)
::myjson::Document::ValueType Value
A token is the basic units of internal representation.
RAPIDJSON_NAMESPACE_BEGIN typedef unsigned SizeType
Size type (for string lengths, array sizes, etc.)
#define EXPECT_TRUE(condition)
#define EXPECT_STREQ(s1, s2)
#define RAPIDJSON_UINT64_C2(high32, low32)
Construct a 64-bit literal by a pair of 32-bit integer.
void * Realloc(void *_org_p, size_t _org_size, size_t _new_size)
Invalid percent encoding in URI fragment.
GTEST_API_ bool IsTrue(bool condition)
C-runtime library allocator.
T::ValueType & SwapValueByPointer(T &root, const GenericPointer< typename T::ValueType > &pointer, typename T::ValueType &value, typename T::AllocatorType &a)
Allocator & GetAllocator()
Get the allocator of this document.
bool HasParseError() const
Whether a parse error has occurred in the last parsing.
rapidjson::GenericDocument< rapidjson::UTF8<>, rapidjson::MemoryPoolAllocator< MyAllocator >, MyAllocator > Document
unsigned __int64 uint64_t
rapidjson::GenericPointer< ::myjson::Document::ValueType, MyAllocator > Pointer
Represents a JSON Pointer. Use Pointer for UTF8 encoding and default allocator.
void Swap(T &a, T &b) RAPIDJSON_NOEXCEPT
Custom swap() to avoid dependency on C++ <algorithm> header.
#define EXPECT_NE(val1, val2)
T::ValueType & CreateValueByPointer(T &root, const GenericPointer< typename T::ValueType > &pointer, typename T::AllocatorType &a)
PolymorphicMatcher< internal::IsNullMatcher > IsNull()
const GenericPointer< typename T::ValueType > T2 T::AllocatorType & a
static void Free(void *_p)
GenericDocument & Parse(const typename SourceEncoding::Ch *str)
Parse JSON text from a read-only string (with Encoding conversion)
A character must percent encoded in URI fragment.
const GenericPointer< typename T::ValueType > T2 value
GenericPointer Append(const Token &token, Allocator *allocator=0) const
Append a token and return a new Pointer.
A token must begin with a '/'.
bool EraseValueByPointer(T &root, const GenericPointer< typename T::ValueType > &pointer)
const Ch * GetString() const
#define EXPECT_FALSE(condition)
T::ValueType & SetValueByPointer(T &root, const GenericPointer< typename T::ValueType > &pointer, typename T::ValueType &value, typename T::AllocatorType &a)
#define EXPECT_EQ(val1, val2)
T::ValueType * GetValueByPointer(T &root, const GenericPointer< typename T::ValueType > &pointer, size_t *unresolvedTokenIndex=0)