json_binder_value_string_test.cxx 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. //
  2. // json_binder_value_string.t.h
  3. // json
  4. //
  5. // Created by Sam Jaffe on 2/25/17.
  6. //
  7. #include <gmock/gmock.h>
  8. #include "json/json_binder.hpp"
  9. using namespace json::binder;
  10. using namespace json::parser;
  11. using namespace ::testing;
  12. TEST(JsonBinderStringTest, ParsesSuccessfully) {
  13. char data[] = "\"This is a string\"";
  14. std::string out = "";
  15. value_binder<std::string> binder{};
  16. parse(json::binder::bind(out, binder), data, allow_all);
  17. EXPECT_THAT(out, "This is a string");
  18. }
  19. TEST(JsonBinderStringTest, CanParseInternalQuotes) {
  20. char data[] = "\"This is a \\\"string\\\"\"";
  21. std::string out = "";
  22. value_binder<std::string> binder{};
  23. parse(json::binder::bind(out, binder), data, allow_all);
  24. EXPECT_THAT(out, "This is a \"string\"");
  25. }
  26. TEST(JsonBinderStringTest, CannotParseRawString) {
  27. char data[] = "This is a string";
  28. std::string out = "";
  29. value_binder<std::string> binder{};
  30. EXPECT_THROW(parse(json::binder::bind(out, binder), data, allow_all),
  31. json::malformed_json_exception);
  32. EXPECT_THAT(out, "");
  33. }
  34. TEST(JsonBinderStringTest, ThrowsOnNoEndQuote) {
  35. char data[] = "\"This is a string";
  36. std::string out = "";
  37. value_binder<std::string> binder{};
  38. EXPECT_THROW(parse(json::binder::bind(out, binder), data, allow_all),
  39. json::unterminated_json_exception);
  40. EXPECT_THAT(out, "");
  41. }
  42. TEST(JsonBinderStringTest, CanWrite) {
  43. std::string const expected = "\"This is a string\"";
  44. std::stringstream ss;
  45. std::string const in = "This is a string";
  46. value_binder<std::string> binder{};
  47. write(json::binder::bind(in, binder), ss);
  48. EXPECT_THAT(ss.str(), expected);
  49. }
  50. TEST(JsonBinderStringTest, EscapesQuotesWhenWriting) {
  51. std::string const expected = "\"This is a \\\"string\\\"\"";
  52. std::stringstream ss;
  53. std::string const in = "This is a \"string\"";
  54. value_binder<std::string> binder{};
  55. write(json::binder::bind(in, binder), ss);
  56. EXPECT_THAT(ss.str(), expected);
  57. }