json_binder_terminate_test.cxx 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. //
  2. // json_binder_test_terminate.t.h
  3. // json
  4. //
  5. // Created by Sam Jaffe on 2/26/17.
  6. //
  7. #include <gmock/gmock.h>
  8. #include "json/json_binder.hpp"
  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,
  23. disable_concatenated_json_bodies),
  24. json::malformed_json_exception);
  25. }
  26. TEST(JsonBinderEndOfStreamTest, QuotationFormsEndOfStringToken) {
  27. char data[] = "\"This is a \"string";
  28. std::string out = "";
  29. value_binder<std::string> binder{};
  30. EXPECT_NO_THROW(parse(json::binder::bind(out, binder), data, allow_all));
  31. EXPECT_THAT(out, "This is a ");
  32. }
  33. TEST(JsonBinderEndOfStreamTest, ExpectsEoBToOccurAfterAllParsedString) {
  34. char data[] = "\"This is a \"string";
  35. std::string out = "";
  36. value_binder<std::string> binder{};
  37. EXPECT_THROW(parse(json::binder::bind(out, binder), data,
  38. disable_concatenated_json_bodies),
  39. json::malformed_json_exception);
  40. }
  41. TEST(JsonBinderEndOfStreamTest, WhitespaceCountsAsSuccessfulEoB) {
  42. char data[] = "\"This is a \" ";
  43. std::string out = "";
  44. value_binder<std::string> binder{};
  45. EXPECT_NO_THROW(parse(json::binder::bind(out, binder), data,
  46. disable_concatenated_json_bodies));
  47. }
  48. TEST(JsonBinderEndOfStreamTest, NoAmountOfWhitespaceHidesConcatToken) {
  49. char data[] = "\"This is a \" string";
  50. std::string out = "";
  51. value_binder<std::string> binder{};
  52. EXPECT_THROW(parse(json::binder::bind(out, binder), data,
  53. disable_concatenated_json_bodies),
  54. json::malformed_json_exception);
  55. }