| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- //
- // json_binder_tuple.t.h
- // json
- //
- // Created by Sam Jaffe on 2/26/17.
- //
- #pragma once
- #include <cxxtest/TestSuite.h>
- #include "json_binder.hpp"
- using namespace json::binder;
- using namespace json::parser;
- class json_binder_tuple_TestSuite : public CxxTest::TestSuite {
- public:
- void test_bind_to_tuple() {
- char data[] = "[ 1, 2 ]";
- using tuple = std::tuple<int, int>;
- tuple out = std::make_tuple(0, 0);
- auto binder = make_default_tuple_binder<int, int>();
- parse(json::binder::bind(out, binder), data, allow_all);
- TS_ASSERT_EQUALS(out, std::make_tuple(1, 2));
- }
-
- void test_bind_to_tuple_throws_if_missing_entry() {
- char data[] = "[ 1 ]";
- using tuple = std::tuple<int, int>;
- tuple out = std::make_tuple(0, 0);
- auto binder = make_default_tuple_binder<int, int>();
- TS_ASSERT_THROWS(parse(json::binder::bind(out, binder), data, allow_all),
- json::malformed_json_exception);
- }
- void test_bind_to_tuple_throws_if_too_many_entries() {
- char data[] = "[ 1, 2, 3 ]";
- using tuple = std::tuple<int, int>;
- tuple out = std::make_tuple(0, 0);
- auto binder = make_default_tuple_binder<int, int>();
- TS_ASSERT_THROWS(parse(json::binder::bind(out, binder), data, allow_all),
- json::malformed_json_exception);
- }
-
- void test_bind_to_tuple_throws_if_unterminated() {
- char data[] = "[ 1, 2 ";
- using tuple = std::tuple<int, int>;
- tuple out = std::make_tuple(0, 0);
- auto binder = make_default_tuple_binder<int, int>();
- TS_ASSERT_THROWS(parse(json::binder::bind(out, binder), data, allow_all),
- json::unterminated_json_exception);
- }
-
- void test_bind_to_tuple_throws_if_unstarted() {
- char data[] = "1, 2 ]";
- using tuple = std::tuple<int, int>;
- tuple out = std::make_tuple(0, 0);
- auto binder = make_default_tuple_binder<int, int>();
- TS_ASSERT_THROWS(parse(json::binder::bind(out, binder), data, allow_all),
- json::malformed_json_exception);
- }
-
- void test_bind_to_tuple_with_multiple_types() {
- char data[] = "[ 1, 0.5, \"hello\" ]";
- using tuple = std::tuple<int, double, std::string>;
- tuple out = std::make_tuple(0, 0.0, "");
- auto binder = make_default_tuple_binder<int, double, std::string>();
- TS_ASSERT_THROWS_NOTHING(parse(json::binder::bind(out, binder), data, allow_all));
- TS_ASSERT_EQUALS(out, std::make_tuple(1, 0.5, "hello"));
- }
- };
|