| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- //
- // json_binder_collection.t.h
- // json
- //
- // Created by Sam Jaffe on 2/27/17.
- //
- #include <gmock/gmock.h>
- #include "json/json_binder.hpp"
- using namespace json::binder;
- using namespace json::parser;
- TEST(JsonBinderArrayTest, ParsesSuccessfully) {
- char data[] = "[ 0, 1, 2 ]";
- using collect = std::vector<int>;
- collect out;
- value_binder<collect> binder{};
- EXPECT_NO_THROW(parse(json::binder::bind(out, binder), data, allow_all));
- EXPECT_THAT(out, collect({0, 1, 2}));
- }
- TEST(JsonBinderArrayTest, ThrowsOnMissingEndToken) {
- char data[] = "[ 0, 1";
- using collect = std::vector<int>;
- collect out;
- value_binder<collect> binder{};
- EXPECT_THROW(parse(json::binder::bind(out, binder), data, allow_all),
- json::unterminated_json_exception);
- }
- TEST(JsonBinderArrayTest, ThrowsOnMissingStartToken) {
- char data[] = "0, 1";
- using collect = std::vector<int>;
- collect out;
- value_binder<collect> binder{};
- EXPECT_THROW(parse(json::binder::bind(out, binder), data, allow_all),
- json::malformed_json_exception);
- }
- TEST(JsonBinderMapTest, ParsesSuccessfully) {
- char data[] = "{ \"a\" : 1 , \"b\" : 2 }";
- using collect = std::map<std::string, int>;
- collect out;
- value_binder<collect> binder{};
- EXPECT_NO_THROW(parse(json::binder::bind(out, binder), data, allow_all));
- EXPECT_THAT(out, collect({{"a", 1}, {"b", 2}}));
- }
- TEST(JsonBinderMapTest, ThrowsOnMissingEndToken) {
- char data[] = "{ \"a\" : 1 , \"b\" : 2";
- using collect = std::map<std::string, int>;
- collect out;
- value_binder<collect> binder{};
- EXPECT_THROW(parse(json::binder::bind(out, binder), data, allow_all),
- json::unterminated_json_exception);
- }
- TEST(JsonBinderMapTest, ThrowsOnMissingValueForKey) {
- char data[] = "{ \"a\" : 1 , \"b\" }";
- using collect = std::map<std::string, int>;
- collect out;
- value_binder<collect> binder{};
- EXPECT_THROW(parse(json::binder::bind(out, binder), data, allow_all),
- json::malformed_json_exception);
- }
- TEST(JsonBinderMapTest, ThrowsOnMissingStartToken) {
- char data[] = "\"a\" : 1 , \"b\" : 2";
- using collect = std::map<std::string, int>;
- collect out;
- value_binder<collect> binder{};
- EXPECT_THROW(parse(json::binder::bind(out, binder), data, allow_all),
- json::malformed_json_exception);
- }
- TEST(JsonBinderArrayTest, WritesDataWithoutWhitespace) {
- std::string const expected = "[5,4,7]";
- std::stringstream ss;
- using collect = std::vector<int>;
- collect const in{ 5, 4, 7 };
- value_binder<collect> binder{};
- EXPECT_NO_THROW(write(json::binder::bind(in, binder), ss));
- EXPECT_THAT(ss.str(), expected);
- }
- TEST(JsonBinderMapTest, WritesDataWithoutWhitespace) {
- std::string const expected = "{\"a\":1,\"b\":2}";
- std::stringstream ss;
- using collect = std::map<std::string, int>;
- collect const in{ { "a", 1 }, { "b", 2 } };
- value_binder<collect> binder{};
- EXPECT_NO_THROW(write(json::binder::bind(in, binder), ss));
- EXPECT_THAT(ss.str(), expected);
- }
|