Make min/max length constraints unicode-aware so that strings containing non-ASCII characters are handled correctly.

This commit is contained in:
Tristan Penman 2014-06-15 13:33:49 +10:00
parent 94d9a923c3
commit 031ca48079
61 changed files with 250 additions and 122 deletions

View File

@ -0,0 +1,53 @@
#ifndef __VALIJSON_UTILS_UTF8_UTILS_HPP
#define __VALIJSON_UTILS_UTF8_UTILS_HPP
/*
Basic UTF-8 manipulation routines, adapted from code that was released into
the public domain by Jeff Bezanson.
*/
namespace valijson {
namespace utils {
static const u_int32_t offsetsFromUTF8[6] = {
0x00000000UL, 0x00003080UL, 0x000E2080UL,
0x03C82080UL, 0xFA082080UL, 0x82082080UL
};
/* is c the start of a utf8 sequence? */
inline bool isutf(char c) {
return ((c & 0xC0) != 0x80);
}
/* reads the next utf-8 sequence out of a string, updating an index */
inline u_int32_t u8_nextchar(const char *s, int *i)
{
u_int32_t ch = 0;
int sz = 0;
do {
ch <<= 6;
ch += (unsigned char)s[(*i)++];
sz++;
} while (s[*i] && !isutf(s[*i]));
ch -= offsetsFromUTF8[sz-1];
return ch;
}
/* number of characters */
inline int u8_strlen(const char *s)
{
int count = 0;
int i = 0;
while (u8_nextchar(s, &i) != 0)
count++;
return count;
}
} // namespace utils
} // namespace valijson
#endif

View File

@ -8,6 +8,8 @@
#include <valijson/constraints/constraint_visitor.hpp> #include <valijson/constraints/constraint_visitor.hpp>
#include <valijson/validation_results.hpp> #include <valijson/validation_results.hpp>
#include <valijson/utils/utf8_utils.hpp>
namespace valijson { namespace valijson {
class ValidationResults; class ValidationResults;
@ -465,14 +467,17 @@ public:
*/ */
virtual bool visit(const MaxLengthConstraint &constraint) virtual bool visit(const MaxLengthConstraint &constraint)
{ {
if (target.isString() && if (target.isString()) {
target.getString().size() > constraint.maxLength) { const std::string s = target.getString();
if (results) { const int len = utils::u8_strlen(s.c_str());
results->pushError(context, "String should be no more than " + if (len > constraint.maxLength) {
boost::lexical_cast<std::string>(constraint.maxLength) + if (results) {
" characters in length."); results->pushError(context, "String should be no more than " +
boost::lexical_cast<std::string>(constraint.maxLength) +
" characters in length.");
}
return false;
} }
return false;
} }
return true; return true;
@ -572,14 +577,17 @@ public:
*/ */
virtual bool visit(const MinLengthConstraint &constraint) virtual bool visit(const MinLengthConstraint &constraint)
{ {
if (target.isString() && if (target.isString()) {
target.getString().size() < constraint.minLength) { const std::string s = target.getString();
if (results) { const int len = utils::u8_strlen(s.c_str());
results->pushError(context, "String should be no fewer than " + if (len < constraint.minLength) {
boost::lexical_cast<std::string>(constraint.minLength) + if (results) {
" characters in length."); results->pushError(context, "String should be no fewer than " +
boost::lexical_cast<std::string>(constraint.minLength) +
" characters in length.");
}
return false;
} }
return false;
} }
return true; return true;

0
thirdparty/JSON-Schema-Test-Suite/LICENSE vendored Executable file → Normal file
View File

11
thirdparty/JSON-Schema-Test-Suite/README.md vendored Executable file → Normal file
View File

@ -1,4 +1,4 @@
JSON Schema Test Suite JSON Schema Test Suite [![Build Status](https://travis-ci.org/json-schema/JSON-Schema-Test-Suite.png?branch=develop)](https://travis-ci.org/json-schema/JSON-Schema-Test-Suite)
====================== ======================
This repository contains a set of JSON objects that implementors of JSON Schema This repository contains a set of JSON objects that implementors of JSON Schema
@ -67,9 +67,14 @@ This suite is being used by:
* [jsonschema (javascript)](https://github.com/tdegrunt/jsonschema) * [jsonschema (javascript)](https://github.com/tdegrunt/jsonschema)
* [JaySchema (javascript)](https://github.com/natesilva/jayschema) * [JaySchema (javascript)](https://github.com/natesilva/jayschema)
* [z-schema (javascript)](https://github.com/zaggino/z-schema) * [z-schema (javascript)](https://github.com/zaggino/z-schema)
* [jassi (javascript)](https://github.com/iclanzan/jassi)
* [json-schema-valid (javascript)](https://github.com/ericgj/json-schema-valid)
* [jesse (Erlang)](https://github.com/klarna/jesse) * [jesse (Erlang)](https://github.com/klarna/jesse)
* [json-schema (PHP)](https://github.com/justinrainbow/json-schema) * [json-schema (PHP)](https://github.com/justinrainbow/json-schema)
* [gojsonschema (Go)](https://github.com/sigu-399/gojsonschema) * [gojsonschema (Go)](https://github.com/sigu-399/gojsonschema)
* [json_schema (Dart)](https://github.com/patefacio/json_schema)
* [tv4 (JavaScript)](https://github.com/geraintluff/tv4)
* [Jsonary (JavaScript)](https://github.com/jsonary-js/jsonary)
If you use it as well, please fork and send a pull request adding yourself to If you use it as well, please fork and send a pull request adding yourself to
the list :). the list :).
@ -78,3 +83,7 @@ Contributing
------------ ------------
If you see something missing or incorrect, a pull request is most welcome! If you see something missing or incorrect, a pull request is most welcome!
There are some sanity checks in place for testing the test suite. You can run
them with `bin/jsonschema_suite check`. They will be run automatically by
[Travis CI](https://travis-ci.org/) as well.

0
thirdparty/JSON-Schema-Test-Suite/tests/draft3/additionalItems.json vendored Executable file → Normal file
View File

View File

@ -4,6 +4,7 @@
"additionalProperties being false does not allow other properties", "additionalProperties being false does not allow other properties",
"schema": { "schema": {
"properties": {"foo": {}, "bar": {}}, "properties": {"foo": {}, "bar": {}},
"patternProperties": { "^v": {} },
"additionalProperties": false "additionalProperties": false
}, },
"tests": [ "tests": [
@ -21,6 +22,11 @@
"description": "ignores non-objects", "description": "ignores non-objects",
"data": [1, 2, 3], "data": [1, 2, 3],
"valid": true "valid": true
},
{
"description": "patternProperties are not additional properties",
"data": {"foo":1, "vroom": 2},
"valid": true
} }
] ]
}, },

0
thirdparty/JSON-Schema-Test-Suite/tests/draft3/dependencies.json vendored Executable file → Normal file
View File

0
thirdparty/JSON-Schema-Test-Suite/tests/draft3/disallow.json vendored Executable file → Normal file
View File

0
thirdparty/JSON-Schema-Test-Suite/tests/draft3/divisibleBy.json vendored Executable file → Normal file
View File

32
thirdparty/JSON-Schema-Test-Suite/tests/draft3/enum.json vendored Executable file → Normal file
View File

@ -35,5 +35,37 @@
"valid": false "valid": false
} }
] ]
},
{
"description": "enums in properties",
"schema": {
"type":"object",
"properties": {
"foo": {"enum":["foo"]},
"bar": {"enum":["bar"], "required":true}
}
},
"tests": [
{
"description": "both properties are valid",
"data": {"foo":"foo", "bar":"bar"},
"valid": true
},
{
"description": "missing optional property is valid",
"data": {"bar":"bar"},
"valid": true
},
{
"description": "missing required property is invalid",
"data": {"foo":"foo"},
"valid": false
},
{
"description": "missing all properties is invalid",
"data": {},
"valid": false
}
]
} }
] ]

0
thirdparty/JSON-Schema-Test-Suite/tests/draft3/extends.json vendored Executable file → Normal file
View File

0
thirdparty/JSON-Schema-Test-Suite/tests/draft3/items.json vendored Executable file → Normal file
View File

0
thirdparty/JSON-Schema-Test-Suite/tests/draft3/maxItems.json vendored Executable file → Normal file
View File

5
thirdparty/JSON-Schema-Test-Suite/tests/draft3/maxLength.json vendored Executable file → Normal file
View File

@ -22,6 +22,11 @@
"description": "ignores non-strings", "description": "ignores non-strings",
"data": 10, "data": 10,
"valid": true "valid": true
},
{
"description": "two supplementary Unicode code points is long enough",
"data": "\uD83D\uDCA9\uD83D\uDCA9",
"valid": true
} }
] ]
} }

0
thirdparty/JSON-Schema-Test-Suite/tests/draft3/maximum.json vendored Executable file → Normal file
View File

0
thirdparty/JSON-Schema-Test-Suite/tests/draft3/minItems.json vendored Executable file → Normal file
View File

5
thirdparty/JSON-Schema-Test-Suite/tests/draft3/minLength.json vendored Executable file → Normal file
View File

@ -22,6 +22,11 @@
"description": "ignores non-strings", "description": "ignores non-strings",
"data": 1, "data": 1,
"valid": true "valid": true
},
{
"description": "one supplementary Unicode code point is not long enough",
"data": "\uD83D\uDCA9",
"valid": false
} }
] ]
} }

0
thirdparty/JSON-Schema-Test-Suite/tests/draft3/minimum.json vendored Executable file → Normal file
View File

11
thirdparty/JSON-Schema-Test-Suite/tests/draft3/optional/bignum.json vendored Executable file → Normal file
View File

@ -32,6 +32,17 @@
} }
] ]
}, },
{
"description": "integer comparison",
"schema": {"maximum": 18446744073709551615},
"tests": [
{
"description": "comparison works for high numbers",
"data": 18446744073709551600,
"valid": true
}
]
},
{ {
"description": "float comparison with high precision", "description": "float comparison with high precision",
"schema": { "schema": {

5
thirdparty/JSON-Schema-Test-Suite/tests/draft3/optional/format.json vendored Executable file → Normal file
View File

@ -81,6 +81,11 @@
"description": "an invalid URI", "description": "an invalid URI",
"data": "\\\\WINDOWS\\fileshare", "data": "\\\\WINDOWS\\fileshare",
"valid": false "valid": false
},
{
"description": "an invalid URI though valid URI reference",
"data": "abc",
"valid": false
} }
] ]
}, },

View File

View File

0
thirdparty/JSON-Schema-Test-Suite/tests/draft3/pattern.json vendored Executable file → Normal file
View File

View File

0
thirdparty/JSON-Schema-Test-Suite/tests/draft3/properties.json vendored Executable file → Normal file
View File

0
thirdparty/JSON-Schema-Test-Suite/tests/draft3/ref.json vendored Executable file → Normal file
View File

0
thirdparty/JSON-Schema-Test-Suite/tests/draft3/refRemote.json vendored Executable file → Normal file
View File

0
thirdparty/JSON-Schema-Test-Suite/tests/draft3/required.json vendored Executable file → Normal file
View File

0
thirdparty/JSON-Schema-Test-Suite/tests/draft3/type.json vendored Executable file → Normal file
View File

0
thirdparty/JSON-Schema-Test-Suite/tests/draft3/uniqueItems.json vendored Executable file → Normal file
View File

0
thirdparty/JSON-Schema-Test-Suite/tests/draft4/additionalItems.json vendored Executable file → Normal file
View File

View File

@ -4,6 +4,7 @@
"additionalProperties being false does not allow other properties", "additionalProperties being false does not allow other properties",
"schema": { "schema": {
"properties": {"foo": {}, "bar": {}}, "properties": {"foo": {}, "bar": {}},
"patternProperties": { "^v": {} },
"additionalProperties": false "additionalProperties": false
}, },
"tests": [ "tests": [
@ -21,6 +22,11 @@
"description": "ignores non-objects", "description": "ignores non-objects",
"data": [1, 2, 3], "data": [1, 2, 3],
"valid": true "valid": true
},
{
"description": "patternProperties are not additional properties",
"data": {"foo":1, "vroom": 2},
"valid": true
} }
] ]
}, },

0
thirdparty/JSON-Schema-Test-Suite/tests/draft4/allOf.json vendored Executable file → Normal file
View File

0
thirdparty/JSON-Schema-Test-Suite/tests/draft4/anyOf.json vendored Executable file → Normal file
View File

0
thirdparty/JSON-Schema-Test-Suite/tests/draft4/definitions.json vendored Executable file → Normal file
View File

0
thirdparty/JSON-Schema-Test-Suite/tests/draft4/dependencies.json vendored Executable file → Normal file
View File

33
thirdparty/JSON-Schema-Test-Suite/tests/draft4/enum.json vendored Executable file → Normal file
View File

@ -35,5 +35,38 @@
"valid": false "valid": false
} }
] ]
},
{
"description": "enums in properties",
"schema": {
"type":"object",
"properties": {
"foo": {"enum":["foo"]},
"bar": {"enum":["bar"]}
},
"required": ["bar"]
},
"tests": [
{
"description": "both properties are valid",
"data": {"foo":"foo", "bar":"bar"},
"valid": true
},
{
"description": "missing optional property is valid",
"data": {"bar":"bar"},
"valid": true
},
{
"description": "missing required property is invalid",
"data": {"foo":"foo"},
"valid": false
},
{
"description": "missing all properties is invalid",
"data": {},
"valid": false
}
]
} }
] ]

0
thirdparty/JSON-Schema-Test-Suite/tests/draft4/items.json vendored Executable file → Normal file
View File

0
thirdparty/JSON-Schema-Test-Suite/tests/draft4/maxItems.json vendored Executable file → Normal file
View File

7
thirdparty/JSON-Schema-Test-Suite/tests/draft4/maxLength.json vendored Executable file → Normal file
View File

@ -20,7 +20,12 @@
}, },
{ {
"description": "ignores non-strings", "description": "ignores non-strings",
"data": 10, "data": 100,
"valid": true
},
{
"description": "two supplementary Unicode code points is long enough",
"data": "\uD83D\uDCA9\uD83D\uDCA9",
"valid": true "valid": true
} }
] ]

0
thirdparty/JSON-Schema-Test-Suite/tests/draft4/maxProperties.json vendored Executable file → Normal file
View File

0
thirdparty/JSON-Schema-Test-Suite/tests/draft4/maximum.json vendored Executable file → Normal file
View File

0
thirdparty/JSON-Schema-Test-Suite/tests/draft4/minItems.json vendored Executable file → Normal file
View File

5
thirdparty/JSON-Schema-Test-Suite/tests/draft4/minLength.json vendored Executable file → Normal file
View File

@ -22,6 +22,11 @@
"description": "ignores non-strings", "description": "ignores non-strings",
"data": 1, "data": 1,
"valid": true "valid": true
},
{
"description": "one supplementary Unicode code point is not long enough",
"data": "\uD83D\uDCA9",
"valid": false
} }
] ]
} }

0
thirdparty/JSON-Schema-Test-Suite/tests/draft4/minProperties.json vendored Executable file → Normal file
View File

0
thirdparty/JSON-Schema-Test-Suite/tests/draft4/minimum.json vendored Executable file → Normal file
View File

0
thirdparty/JSON-Schema-Test-Suite/tests/draft4/multipleOf.json vendored Executable file → Normal file
View File

23
thirdparty/JSON-Schema-Test-Suite/tests/draft4/not.json vendored Executable file → Normal file
View File

@ -69,5 +69,28 @@
"valid": false "valid": false
} }
] ]
},
{
"description": "forbidden property",
"schema": {
"properties": {
"foo": {
"not": {}
}
}
},
"tests": [
{
"description": "property present",
"data": {"foo": 1, "bar": 2},
"valid": false
},
{
"description": "property absent",
"data": {"bar": 1, "baz": 2},
"valid": true
}
]
} }
] ]

0
thirdparty/JSON-Schema-Test-Suite/tests/draft4/oneOf.json vendored Executable file → Normal file
View File

11
thirdparty/JSON-Schema-Test-Suite/tests/draft4/optional/bignum.json vendored Executable file → Normal file
View File

@ -32,6 +32,17 @@
} }
] ]
}, },
{
"description": "integer comparison",
"schema": {"maximum": 18446744073709551615},
"tests": [
{
"description": "comparison works for high numbers",
"data": 18446744073709551600,
"valid": true
}
]
},
{ {
"description": "float comparison with high precision", "description": "float comparison with high precision",
"schema": { "schema": {

15
thirdparty/JSON-Schema-Test-Suite/tests/draft4/optional/format.json vendored Executable file → Normal file
View File

@ -33,6 +33,11 @@
"description": "an invalid URI", "description": "an invalid URI",
"data": "\\\\WINDOWS\\fileshare", "data": "\\\\WINDOWS\\fileshare",
"valid": false "valid": false
},
{
"description": "an invalid URI though valid URI reference",
"data": "abc",
"valid": false
} }
] ]
}, },
@ -70,6 +75,16 @@
"description": "an IP address with out-of-range values", "description": "an IP address with out-of-range values",
"data": "256.256.256.256", "data": "256.256.256.256",
"valid": false "valid": false
},
{
"description": "an IP address without 4 components",
"data": "127.0",
"valid": false
},
{
"description": "an IP address as an integer",
"data": "0x7f000001",
"valid": false
} }
] ]
}, },

View File

0
thirdparty/JSON-Schema-Test-Suite/tests/draft4/pattern.json vendored Executable file → Normal file
View File

View File

0
thirdparty/JSON-Schema-Test-Suite/tests/draft4/properties.json vendored Executable file → Normal file
View File

0
thirdparty/JSON-Schema-Test-Suite/tests/draft4/ref.json vendored Executable file → Normal file
View File

0
thirdparty/JSON-Schema-Test-Suite/tests/draft4/refRemote.json vendored Executable file → Normal file
View File

0
thirdparty/JSON-Schema-Test-Suite/tests/draft4/required.json vendored Executable file → Normal file
View File

0
thirdparty/JSON-Schema-Test-Suite/tests/draft4/type.json vendored Executable file → Normal file
View File

0
thirdparty/JSON-Schema-Test-Suite/tests/draft4/uniqueItems.json vendored Executable file → Normal file
View File

View File

@ -121,6 +121,7 @@
6A869A2517CD8641006864FA /* type.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = type.json; sourceTree = "<group>"; }; 6A869A2517CD8641006864FA /* type.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = type.json; sourceTree = "<group>"; };
6A869A2617CD8641006864FA /* uniqueItems.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = uniqueItems.json; sourceTree = "<group>"; }; 6A869A2617CD8641006864FA /* uniqueItems.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = uniqueItems.json; sourceTree = "<group>"; };
6A869A3017CD8A92006864FA /* rapidjson_utils.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = rapidjson_utils.hpp; sourceTree = "<group>"; }; 6A869A3017CD8A92006864FA /* rapidjson_utils.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = rapidjson_utils.hpp; sourceTree = "<group>"; };
6A9E1855194D486C003F1C4C /* utf8_utils.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = utf8_utils.hpp; sourceTree = "<group>"; };
6A9F49F117D344DE005EBA4F /* README.md */ = {isa = PBXFileReference; lastKnownFileType = text; name = README.md; path = ../README.md; sourceTree = "<group>"; }; 6A9F49F117D344DE005EBA4F /* README.md */ = {isa = PBXFileReference; lastKnownFileType = text; name = README.md; path = ../README.md; sourceTree = "<group>"; };
6AA8A5DA17F8BDCA002728A0 /* test_dereference_callback.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = test_dereference_callback.cpp; sourceTree = "<group>"; }; 6AA8A5DA17F8BDCA002728A0 /* test_dereference_callback.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = test_dereference_callback.cpp; sourceTree = "<group>"; };
6AB8FE8617E6A56F0028E147 /* external_schema.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = external_schema.cpp; sourceTree = "<group>"; }; 6AB8FE8617E6A56F0028E147 /* external_schema.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = external_schema.cpp; sourceTree = "<group>"; };
@ -151,39 +152,6 @@
6AC18C1517C861D600FE0EC9 /* validation_visitor.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = validation_visitor.hpp; sourceTree = "<group>"; }; 6AC18C1517C861D600FE0EC9 /* validation_visitor.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = validation_visitor.hpp; sourceTree = "<group>"; };
6AC18C1717CC1BE100FE0EC9 /* frozen_value.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = frozen_value.hpp; sourceTree = "<group>"; }; 6AC18C1717CC1BE100FE0EC9 /* frozen_value.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = frozen_value.hpp; sourceTree = "<group>"; };
6AC18C1917CC2DDC00FE0EC9 /* adapter.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; path = adapter.hpp; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; 6AC18C1917CC2DDC00FE0EC9 /* adapter.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; path = adapter.hpp; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.cpp; };
6AC18C3E17CC850F00FE0EC9 /* gtest-death-test.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "gtest-death-test.h"; sourceTree = "<group>"; };
6AC18C3F17CC850F00FE0EC9 /* gtest-message.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "gtest-message.h"; sourceTree = "<group>"; };
6AC18C4017CC850F00FE0EC9 /* gtest-param-test.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "gtest-param-test.h"; sourceTree = "<group>"; };
6AC18C4117CC850F00FE0EC9 /* gtest-param-test.h.pump */ = {isa = PBXFileReference; lastKnownFileType = text; path = "gtest-param-test.h.pump"; sourceTree = "<group>"; };
6AC18C4217CC850F00FE0EC9 /* gtest-printers.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "gtest-printers.h"; sourceTree = "<group>"; };
6AC18C4317CC850F00FE0EC9 /* gtest-spi.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "gtest-spi.h"; sourceTree = "<group>"; };
6AC18C4417CC850F00FE0EC9 /* gtest-test-part.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "gtest-test-part.h"; sourceTree = "<group>"; };
6AC18C4517CC850F00FE0EC9 /* gtest-typed-test.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "gtest-typed-test.h"; sourceTree = "<group>"; };
6AC18C4617CC850F00FE0EC9 /* gtest.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = gtest.h; sourceTree = "<group>"; };
6AC18C4717CC850F00FE0EC9 /* gtest_pred_impl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = gtest_pred_impl.h; sourceTree = "<group>"; };
6AC18C4817CC850F00FE0EC9 /* gtest_prod.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = gtest_prod.h; sourceTree = "<group>"; };
6AC18C4A17CC850F00FE0EC9 /* gtest-death-test-internal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "gtest-death-test-internal.h"; sourceTree = "<group>"; };
6AC18C4B17CC850F00FE0EC9 /* gtest-filepath.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "gtest-filepath.h"; sourceTree = "<group>"; };
6AC18C4C17CC850F00FE0EC9 /* gtest-internal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "gtest-internal.h"; sourceTree = "<group>"; };
6AC18C4D17CC850F00FE0EC9 /* gtest-linked_ptr.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "gtest-linked_ptr.h"; sourceTree = "<group>"; };
6AC18C4E17CC850F00FE0EC9 /* gtest-param-util-generated.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "gtest-param-util-generated.h"; sourceTree = "<group>"; };
6AC18C4F17CC850F00FE0EC9 /* gtest-param-util-generated.h.pump */ = {isa = PBXFileReference; lastKnownFileType = text; path = "gtest-param-util-generated.h.pump"; sourceTree = "<group>"; };
6AC18C5017CC850F00FE0EC9 /* gtest-param-util.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "gtest-param-util.h"; sourceTree = "<group>"; };
6AC18C5117CC850F00FE0EC9 /* gtest-port.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "gtest-port.h"; sourceTree = "<group>"; };
6AC18C5217CC850F00FE0EC9 /* gtest-string.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "gtest-string.h"; sourceTree = "<group>"; };
6AC18C5317CC850F00FE0EC9 /* gtest-tuple.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "gtest-tuple.h"; sourceTree = "<group>"; };
6AC18C5417CC850F00FE0EC9 /* gtest-tuple.h.pump */ = {isa = PBXFileReference; lastKnownFileType = text; path = "gtest-tuple.h.pump"; sourceTree = "<group>"; };
6AC18C5517CC850F00FE0EC9 /* gtest-type-util.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "gtest-type-util.h"; sourceTree = "<group>"; };
6AC18C5617CC850F00FE0EC9 /* gtest-type-util.h.pump */ = {isa = PBXFileReference; lastKnownFileType = text; path = "gtest-type-util.h.pump"; sourceTree = "<group>"; };
6AC18C8B17CC850F00FE0EC9 /* gtest-death-test.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = "gtest-death-test.cc"; sourceTree = "<group>"; };
6AC18C8C17CC850F00FE0EC9 /* gtest-filepath.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = "gtest-filepath.cc"; sourceTree = "<group>"; };
6AC18C8D17CC850F00FE0EC9 /* gtest-internal-inl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "gtest-internal-inl.h"; sourceTree = "<group>"; };
6AC18C8E17CC850F00FE0EC9 /* gtest-port.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = "gtest-port.cc"; sourceTree = "<group>"; };
6AC18C8F17CC850F00FE0EC9 /* gtest-printers.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = "gtest-printers.cc"; sourceTree = "<group>"; };
6AC18C9017CC850F00FE0EC9 /* gtest-test-part.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = "gtest-test-part.cc"; sourceTree = "<group>"; };
6AC18C9117CC850F00FE0EC9 /* gtest-typed-test.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = "gtest-typed-test.cc"; sourceTree = "<group>"; };
6AC18C9217CC850F00FE0EC9 /* gtest.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = gtest.cc; sourceTree = "<group>"; };
6AC18C9317CC850F00FE0EC9 /* gtest_main.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = gtest_main.cc; sourceTree = "<group>"; };
6AC18CEF17CC851000FE0EC9 /* allocators.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = allocators.h; sourceTree = "<group>"; }; 6AC18CEF17CC851000FE0EC9 /* allocators.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = allocators.h; sourceTree = "<group>"; };
6AC18CF017CC851000FE0EC9 /* document.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = document.h; sourceTree = "<group>"; }; 6AC18CF017CC851000FE0EC9 /* document.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = document.h; sourceTree = "<group>"; };
6AC18CF117CC851000FE0EC9 /* encodedstream.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = encodedstream.h; sourceTree = "<group>"; }; 6AC18CF117CC851000FE0EC9 /* encodedstream.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = encodedstream.h; sourceTree = "<group>"; };
@ -492,6 +460,7 @@
6AB8FEBC17E6EF9A0028E147 /* jsoncpp_utils.hpp */, 6AB8FEBC17E6EF9A0028E147 /* jsoncpp_utils.hpp */,
6AB8FEBD17E77C360028E147 /* property_tree_utils.hpp */, 6AB8FEBD17E77C360028E147 /* property_tree_utils.hpp */,
6A869A3017CD8A92006864FA /* rapidjson_utils.hpp */, 6A869A3017CD8A92006864FA /* rapidjson_utils.hpp */,
6A9E1855194D486C003F1C4C /* utf8_utils.hpp */,
); );
path = utils; path = utils;
sourceTree = "<group>"; sourceTree = "<group>";
@ -564,7 +533,6 @@
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
6AF70AC218FE71F600342325 /* gtest-1.7.0 */, 6AF70AC218FE71F600342325 /* gtest-1.7.0 */,
6AC18C1E17CC850F00FE0EC9 /* gtest-1.6.0 */,
6AB8FE9417E6C08D0028E147 /* jsoncpp-0.5.0 */, 6AB8FE9417E6C08D0028E147 /* jsoncpp-0.5.0 */,
6A8699E517CD8641006864FA /* JSON-Schema-Test-Suite */, 6A8699E517CD8641006864FA /* JSON-Schema-Test-Suite */,
6AC18CEC17CC851000FE0EC9 /* rapidjson-0.1 */, 6AC18CEC17CC851000FE0EC9 /* rapidjson-0.1 */,
@ -574,78 +542,6 @@
path = ../thirdparty; path = ../thirdparty;
sourceTree = "<group>"; sourceTree = "<group>";
}; };
6AC18C1E17CC850F00FE0EC9 /* gtest-1.6.0 */ = {
isa = PBXGroup;
children = (
6AC18C3C17CC850F00FE0EC9 /* include */,
6AC18C8917CC850F00FE0EC9 /* src */,
);
path = "gtest-1.6.0";
sourceTree = "<group>";
};
6AC18C3C17CC850F00FE0EC9 /* include */ = {
isa = PBXGroup;
children = (
6AC18C3D17CC850F00FE0EC9 /* gtest */,
);
path = include;
sourceTree = "<group>";
};
6AC18C3D17CC850F00FE0EC9 /* gtest */ = {
isa = PBXGroup;
children = (
6AC18C3E17CC850F00FE0EC9 /* gtest-death-test.h */,
6AC18C3F17CC850F00FE0EC9 /* gtest-message.h */,
6AC18C4017CC850F00FE0EC9 /* gtest-param-test.h */,
6AC18C4117CC850F00FE0EC9 /* gtest-param-test.h.pump */,
6AC18C4217CC850F00FE0EC9 /* gtest-printers.h */,
6AC18C4317CC850F00FE0EC9 /* gtest-spi.h */,
6AC18C4417CC850F00FE0EC9 /* gtest-test-part.h */,
6AC18C4517CC850F00FE0EC9 /* gtest-typed-test.h */,
6AC18C4617CC850F00FE0EC9 /* gtest.h */,
6AC18C4717CC850F00FE0EC9 /* gtest_pred_impl.h */,
6AC18C4817CC850F00FE0EC9 /* gtest_prod.h */,
6AC18C4917CC850F00FE0EC9 /* internal */,
);
path = gtest;
sourceTree = "<group>";
};
6AC18C4917CC850F00FE0EC9 /* internal */ = {
isa = PBXGroup;
children = (
6AC18C4A17CC850F00FE0EC9 /* gtest-death-test-internal.h */,
6AC18C4B17CC850F00FE0EC9 /* gtest-filepath.h */,
6AC18C4C17CC850F00FE0EC9 /* gtest-internal.h */,
6AC18C4D17CC850F00FE0EC9 /* gtest-linked_ptr.h */,
6AC18C4E17CC850F00FE0EC9 /* gtest-param-util-generated.h */,
6AC18C4F17CC850F00FE0EC9 /* gtest-param-util-generated.h.pump */,
6AC18C5017CC850F00FE0EC9 /* gtest-param-util.h */,
6AC18C5117CC850F00FE0EC9 /* gtest-port.h */,
6AC18C5217CC850F00FE0EC9 /* gtest-string.h */,
6AC18C5317CC850F00FE0EC9 /* gtest-tuple.h */,
6AC18C5417CC850F00FE0EC9 /* gtest-tuple.h.pump */,
6AC18C5517CC850F00FE0EC9 /* gtest-type-util.h */,
6AC18C5617CC850F00FE0EC9 /* gtest-type-util.h.pump */,
);
path = internal;
sourceTree = "<group>";
};
6AC18C8917CC850F00FE0EC9 /* src */ = {
isa = PBXGroup;
children = (
6AC18C8B17CC850F00FE0EC9 /* gtest-death-test.cc */,
6AC18C8C17CC850F00FE0EC9 /* gtest-filepath.cc */,
6AC18C8D17CC850F00FE0EC9 /* gtest-internal-inl.h */,
6AC18C8E17CC850F00FE0EC9 /* gtest-port.cc */,
6AC18C8F17CC850F00FE0EC9 /* gtest-printers.cc */,
6AC18C9017CC850F00FE0EC9 /* gtest-test-part.cc */,
6AC18C9117CC850F00FE0EC9 /* gtest-typed-test.cc */,
6AC18C9217CC850F00FE0EC9 /* gtest.cc */,
6AC18C9317CC850F00FE0EC9 /* gtest_main.cc */,
);
path = src;
sourceTree = "<group>";
};
6AC18CEC17CC851000FE0EC9 /* rapidjson-0.1 */ = { 6AC18CEC17CC851000FE0EC9 /* rapidjson-0.1 */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (