json_binder_terminate_test.cxx 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. //
  2. // json_binder_test_terminate.t.h
  3. // json
  4. //
  5. // Created by Sam Jaffe on 2/26/17.
  6. //
  7. #include "json/json_binder.hpp"
  8. #include <gmock/gmock.h>
  9. using namespace json::binder;
  10. using namespace json::parser;
  11. TEST(JsonBinderEndOfStreamTest, WhitespaceDelimitsTokens) {
  12. char data[] = "10 0";
  13. int out = 0;
  14. value_binder<int> binder{};
  15. EXPECT_NO_THROW(parse(bind(out, binder), data, allow_all));
  16. EXPECT_THAT(out, 10);
  17. }
  18. TEST(JsonBinderEndOfStreamTest, ExpectsEoBToOccurAfterAllParsed) {
  19. char data[] = "10 0";
  20. int out = 0;
  21. value_binder<int> binder{};
  22. EXPECT_THROW(parse(bind(out, binder), data, disable_concatenated_json_bodies),
  23. json::malformed_json_exception);
  24. }
  25. TEST(JsonBinderEndOfStreamTest, QuotationFormsEndOfStringToken) {
  26. char data[] = "\"This is a \"string";
  27. std::string out = "";
  28. value_binder<std::string> binder{};
  29. EXPECT_NO_THROW(parse(json::binder::bind(out, binder), data, allow_all));
  30. EXPECT_THAT(out, "This is a ");
  31. }
  32. TEST(JsonBinderEndOfStreamTest, ExpectsEoBToOccurAfterAllParsedString) {
  33. char data[] = "\"This is a \"string";
  34. std::string out = "";
  35. value_binder<std::string> binder{};
  36. EXPECT_THROW(parse(json::binder::bind(out, binder), data,
  37. disable_concatenated_json_bodies),
  38. json::malformed_json_exception);
  39. }
  40. TEST(JsonBinderEndOfStreamTest, WhitespaceCountsAsSuccessfulEoB) {
  41. char data[] = "\"This is a \" ";
  42. std::string out = "";
  43. value_binder<std::string> binder{};
  44. EXPECT_NO_THROW(parse(json::binder::bind(out, binder), data,
  45. disable_concatenated_json_bodies));
  46. }
  47. TEST(JsonBinderEndOfStreamTest, NoAmountOfWhitespaceHidesConcatToken) {
  48. char data[] = "\"This is a \" string";
  49. std::string out = "";
  50. value_binder<std::string> binder{};
  51. EXPECT_THROW(parse(json::binder::bind(out, binder), data,
  52. disable_concatenated_json_bodies),
  53. json::malformed_json_exception);
  54. }