JSDeltaBundleClientTest.cpp 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. /*
  2. * Copyright (c) Facebook, Inc. and its affiliates.
  3. *
  4. * This source code is licensed under the MIT license found in the
  5. * LICENSE file in the root directory of this source tree.
  6. */
  7. #include <gtest/gtest.h>
  8. #include <exception>
  9. #include <iostream>
  10. #include <stdexcept>
  11. #include <cxxreact/JSDeltaBundleClient.h>
  12. #include <folly/dynamic.h>
  13. #include <folly/json.h>
  14. using namespace facebook::react;
  15. TEST(JSDeltaBundleClient, PatchStartupCode) {
  16. JSDeltaBundleClient client;
  17. folly::dynamic delta1 = folly::parseJson(R"({
  18. "base": true,
  19. "revisionId": "rev0",
  20. "pre": "pre",
  21. "post": "post",
  22. "modules": [
  23. [0, "0"],
  24. [1, "1"]
  25. ]
  26. })");
  27. client.patch(delta1);
  28. EXPECT_STREQ(client.getStartupCode()->c_str(), "pre\npost\n");
  29. folly::dynamic delta2 = folly::parseJson(R"({
  30. "base": true,
  31. "revisionId": "rev1",
  32. "pre": "pre2",
  33. "post": "post2",
  34. "modules": []
  35. })");
  36. client.patch(delta2);
  37. EXPECT_STREQ(client.getStartupCode()->c_str(), "pre2\npost2\n");
  38. }
  39. TEST(JSDeltaBundleClient, PatchModule) {
  40. JSDeltaBundleClient client;
  41. folly::dynamic delta1 = folly::parseJson(R"({
  42. "base": true,
  43. "revisionId": "rev0",
  44. "pre": "pre",
  45. "post": "post",
  46. "modules": [
  47. [0, "0"],
  48. [1, "1"]
  49. ]
  50. })");
  51. client.patch(delta1);
  52. EXPECT_EQ(client.getModule(0).code, "0");
  53. EXPECT_EQ(client.getModule(1).code, "1");
  54. ASSERT_THROW(client.getModule(2), JSModulesUnbundle::ModuleNotFound);
  55. folly::dynamic delta2 = folly::parseJson(R"({
  56. "base": false,
  57. "revisionId": "rev1",
  58. "added": [
  59. [2, "2"]
  60. ],
  61. "modified": [
  62. [0, "0.1"]
  63. ],
  64. "deleted": [1]
  65. })");
  66. client.patch(delta2);
  67. EXPECT_EQ(client.getModule(0).code, "0.1");
  68. EXPECT_EQ(client.getModule(2).code, "2");
  69. ASSERT_THROW(client.getModule(1), JSModulesUnbundle::ModuleNotFound);
  70. folly::dynamic delta3 = folly::parseJson(R"({
  71. "base": true,
  72. "revisionId": "rev2",
  73. "pre": "pre",
  74. "post": "post",
  75. "modules": [
  76. [3, "3"],
  77. [4, "4"]
  78. ]
  79. })");
  80. client.patch(delta3);
  81. ASSERT_THROW(client.getModule(0), JSModulesUnbundle::ModuleNotFound);
  82. ASSERT_THROW(client.getModule(1), JSModulesUnbundle::ModuleNotFound);
  83. ASSERT_THROW(client.getModule(2), JSModulesUnbundle::ModuleNotFound);
  84. EXPECT_EQ(client.getModule(3).code, "3");
  85. EXPECT_EQ(client.getModule(4).code, "4");
  86. }
  87. TEST(JSDeltaBundleClient, Clear) {
  88. JSDeltaBundleClient client;
  89. folly::dynamic delta1 = folly::parseJson(R"({
  90. "base": true,
  91. "revisionId": "rev0",
  92. "pre": "pre",
  93. "post": "post",
  94. "modules": [
  95. [0, "0"],
  96. [1, "1"]
  97. ]
  98. })");
  99. client.patch(delta1);
  100. client.clear();
  101. ASSERT_THROW(client.getModule(0), JSModulesUnbundle::ModuleNotFound);
  102. ASSERT_THROW(client.getModule(1), JSModulesUnbundle::ModuleNotFound);
  103. EXPECT_STREQ(client.getStartupCode()->c_str(), "");
  104. }