json_binder_discard_test.cxx 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. //
  2. // json_binder_discard_test.cpp
  3. // json-direct-test
  4. //
  5. // Created by Sam Jaffe on 11/17/18.
  6. // Copyright © 2018 Sam Jaffe. All rights reserved.
  7. //
  8. #include "json/json_binder.hpp"
  9. #include <gmock/gmock.h>
  10. using namespace json::binder;
  11. using namespace json::parser;
  12. TEST(JsonBinderDiscardTest, ParsesLargeNumberSuccessfully) {
  13. char data[] = R"(10000000000)";
  14. char const * ptr = data;
  15. EXPECT_NO_THROW(json::parse_discard_token(ptr));
  16. EXPECT_THAT(ptr, data + strlen(data));
  17. EXPECT_THAT(*ptr, '\0');
  18. }
  19. TEST(JsonBinderDiscardTest, ParsesObjectSuccessfully) {
  20. char data[] = R"({"key": "value"})";
  21. char const * ptr = data;
  22. EXPECT_NO_THROW(json::parse_discard_token(ptr));
  23. EXPECT_THAT(ptr, data + strlen(data));
  24. EXPECT_THAT(*ptr, '\0');
  25. }
  26. TEST(JsonBinderDiscardTest, ParsesArraySuccessfully) {
  27. char data[] = R"([ 1.0 ])";
  28. char const * ptr = data;
  29. EXPECT_NO_THROW(json::parse_discard_token(ptr));
  30. EXPECT_THAT(ptr, data + strlen(data));
  31. EXPECT_THAT(*ptr, '\0');
  32. }
  33. TEST(JsonBinderDiscardTest, ParsesNullSuccessfully) {
  34. char data[] = R"(null)";
  35. char const * ptr = data;
  36. EXPECT_NO_THROW(json::parse_discard_token(ptr));
  37. EXPECT_THAT(ptr, data + strlen(data));
  38. EXPECT_THAT(*ptr, '\0');
  39. }
  40. TEST(JsonBinderDiscardTest, ThrowsOnMissingValueForKey) {
  41. char data[] = R"({"key": })";
  42. char const * ptr = data;
  43. EXPECT_THROW(json::parse_discard_token(ptr),
  44. json::malformed_json_exception);
  45. }
  46. TEST(JsonBinderDiscardTest, ThrowsOnMissingAssoc) {
  47. char data[] = R"({"key"="value"})";
  48. char const * ptr = data;
  49. EXPECT_THROW(json::parse_discard_token(ptr),
  50. json::malformed_json_exception);
  51. }
  52. TEST(JsonBinderDiscardTest, ThrowsOnMissingArrayEndToken) {
  53. char data[] = R"([1.0 )";
  54. char const * ptr = data;
  55. EXPECT_THROW(json::parse_discard_token(ptr),
  56. json::unterminated_json_exception);
  57. }
  58. TEST(JsonBinderDiscardTest, ThrowsOnMissingObjectEndToken) {
  59. char data[] = R"({"key": "value")";
  60. char const * ptr = data;
  61. EXPECT_THROW(json::parse_discard_token(ptr),
  62. json::unterminated_json_exception);
  63. }