execbro 1.11.1 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (302) hide show
  1. package/README.md +4 -4
  2. package/build/__tests__/unit/appContext.test.d.ts +2 -0
  3. package/build/__tests__/unit/appContext.test.d.ts.map +1 -0
  4. package/build/__tests__/unit/appContext.test.js +70 -0
  5. package/build/__tests__/unit/appContext.test.js.map +1 -0
  6. package/build/__tests__/unit/appRequest.test.d.ts +2 -0
  7. package/build/__tests__/unit/appRequest.test.d.ts.map +1 -0
  8. package/build/__tests__/unit/appRequest.test.js +179 -0
  9. package/build/__tests__/unit/appRequest.test.js.map +1 -0
  10. package/build/__tests__/unit/contextWiring.test.d.ts +2 -0
  11. package/build/__tests__/unit/contextWiring.test.d.ts.map +1 -0
  12. package/build/__tests__/unit/contextWiring.test.js +28 -0
  13. package/build/__tests__/unit/contextWiring.test.js.map +1 -0
  14. package/build/__tests__/unit/coordinateMiss.test.d.ts +2 -0
  15. package/build/__tests__/unit/coordinateMiss.test.d.ts.map +1 -0
  16. package/build/__tests__/unit/coordinateMiss.test.js +111 -0
  17. package/build/__tests__/unit/coordinateMiss.test.js.map +1 -0
  18. package/build/__tests__/unit/deviceResolverStaleRetry.test.d.ts +2 -0
  19. package/build/__tests__/unit/deviceResolverStaleRetry.test.d.ts.map +1 -0
  20. package/build/__tests__/unit/deviceResolverStaleRetry.test.js +69 -0
  21. package/build/__tests__/unit/deviceResolverStaleRetry.test.js.map +1 -0
  22. package/build/__tests__/unit/epochRender.test.d.ts +2 -0
  23. package/build/__tests__/unit/epochRender.test.d.ts.map +1 -0
  24. package/build/__tests__/unit/epochRender.test.js +60 -0
  25. package/build/__tests__/unit/epochRender.test.js.map +1 -0
  26. package/build/__tests__/unit/executeBudget.test.d.ts +2 -0
  27. package/build/__tests__/unit/executeBudget.test.d.ts.map +1 -0
  28. package/build/__tests__/unit/executeBudget.test.js +27 -0
  29. package/build/__tests__/unit/executeBudget.test.js.map +1 -0
  30. package/build/__tests__/unit/executor.test.js +48 -6
  31. package/build/__tests__/unit/executor.test.js.map +1 -1
  32. package/build/__tests__/unit/findElementTreeReuse.test.d.ts +2 -0
  33. package/build/__tests__/unit/findElementTreeReuse.test.d.ts.map +1 -0
  34. package/build/__tests__/unit/findElementTreeReuse.test.js +77 -0
  35. package/build/__tests__/unit/findElementTreeReuse.test.js.map +1 -0
  36. package/build/__tests__/unit/getLogsEmptyContract.test.js +4 -3
  37. package/build/__tests__/unit/getLogsEmptyContract.test.js.map +1 -1
  38. package/build/__tests__/unit/getLogsNativeSource.test.js +7 -8
  39. package/build/__tests__/unit/getLogsNativeSource.test.js.map +1 -1
  40. package/build/__tests__/unit/inspectorHarvest.test.js +1 -21
  41. package/build/__tests__/unit/inspectorHarvest.test.js.map +1 -1
  42. package/build/__tests__/unit/inspectorSource.test.js +1 -38
  43. package/build/__tests__/unit/inspectorSource.test.js.map +1 -1
  44. package/build/__tests__/unit/jsLogEvents.test.js +1 -0
  45. package/build/__tests__/unit/jsLogEvents.test.js.map +1 -1
  46. package/build/__tests__/unit/logBufferEpoch.test.d.ts +2 -0
  47. package/build/__tests__/unit/logBufferEpoch.test.d.ts.map +1 -0
  48. package/build/__tests__/unit/logBufferEpoch.test.js +63 -0
  49. package/build/__tests__/unit/logBufferEpoch.test.js.map +1 -0
  50. package/build/__tests__/unit/metro.test.js +18 -1
  51. package/build/__tests__/unit/metro.test.js.map +1 -1
  52. package/build/__tests__/unit/moduleRegistry.test.d.ts +2 -0
  53. package/build/__tests__/unit/moduleRegistry.test.d.ts.map +1 -0
  54. package/build/__tests__/unit/moduleRegistry.test.js +62 -0
  55. package/build/__tests__/unit/moduleRegistry.test.js.map +1 -0
  56. package/build/__tests__/unit/navigateVerify.test.d.ts +2 -0
  57. package/build/__tests__/unit/navigateVerify.test.d.ts.map +1 -0
  58. package/build/__tests__/unit/navigateVerify.test.js +30 -0
  59. package/build/__tests__/unit/navigateVerify.test.js.map +1 -0
  60. package/build/__tests__/unit/navigation.test.d.ts +2 -0
  61. package/build/__tests__/unit/navigation.test.d.ts.map +1 -0
  62. package/build/__tests__/unit/navigation.test.js +254 -0
  63. package/build/__tests__/unit/navigation.test.js.map +1 -0
  64. package/build/__tests__/unit/network.test.js +1 -0
  65. package/build/__tests__/unit/network.test.js.map +1 -1
  66. package/build/__tests__/unit/networkBufferEpoch.test.d.ts +2 -0
  67. package/build/__tests__/unit/networkBufferEpoch.test.d.ts.map +1 -0
  68. package/build/__tests__/unit/networkBufferEpoch.test.js +52 -0
  69. package/build/__tests__/unit/networkBufferEpoch.test.js.map +1 -0
  70. package/build/__tests__/unit/networkInterceptor.test.js +7 -7
  71. package/build/__tests__/unit/networkInterceptor.test.js.map +1 -1
  72. package/build/__tests__/unit/promiseHandles.test.d.ts +2 -0
  73. package/build/__tests__/unit/promiseHandles.test.d.ts.map +1 -0
  74. package/build/__tests__/unit/promiseHandles.test.js +61 -0
  75. package/build/__tests__/unit/promiseHandles.test.js.map +1 -0
  76. package/build/__tests__/unit/resolveBufferOffline.test.d.ts +2 -0
  77. package/build/__tests__/unit/resolveBufferOffline.test.d.ts.map +1 -0
  78. package/build/__tests__/unit/resolveBufferOffline.test.js +25 -0
  79. package/build/__tests__/unit/resolveBufferOffline.test.js.map +1 -0
  80. package/build/__tests__/unit/sdkMirrorPoller.test.d.ts +2 -0
  81. package/build/__tests__/unit/sdkMirrorPoller.test.d.ts.map +1 -0
  82. package/build/__tests__/unit/sdkMirrorPoller.test.js +118 -0
  83. package/build/__tests__/unit/sdkMirrorPoller.test.js.map +1 -0
  84. package/build/__tests__/unit/sessionEpoch.test.d.ts +2 -0
  85. package/build/__tests__/unit/sessionEpoch.test.d.ts.map +1 -0
  86. package/build/__tests__/unit/sessionEpoch.test.js +41 -0
  87. package/build/__tests__/unit/sessionEpoch.test.js.map +1 -0
  88. package/build/__tests__/unit/settleAndDiff.test.d.ts +2 -0
  89. package/build/__tests__/unit/settleAndDiff.test.d.ts.map +1 -0
  90. package/build/__tests__/unit/settleAndDiff.test.js +110 -0
  91. package/build/__tests__/unit/settleAndDiff.test.js.map +1 -0
  92. package/build/__tests__/unit/truncate.test.d.ts +2 -0
  93. package/build/__tests__/unit/truncate.test.d.ts.map +1 -0
  94. package/build/__tests__/unit/truncate.test.js +58 -0
  95. package/build/__tests__/unit/truncate.test.js.map +1 -0
  96. package/build/__tests__/unit/verifyAction.test.js +2 -1
  97. package/build/__tests__/unit/verifyAction.test.js.map +1 -1
  98. package/build/__tests__/unit/waitForMeasurements.test.d.ts +2 -0
  99. package/build/__tests__/unit/waitForMeasurements.test.d.ts.map +1 -0
  100. package/build/__tests__/unit/waitForMeasurements.test.js +69 -0
  101. package/build/__tests__/unit/waitForMeasurements.test.js.map +1 -0
  102. package/build/core/android.d.ts +3 -1
  103. package/build/core/android.d.ts.map +1 -1
  104. package/build/core/android.js +5 -5
  105. package/build/core/android.js.map +1 -1
  106. package/build/core/appContext.d.ts +53 -0
  107. package/build/core/appContext.d.ts.map +1 -0
  108. package/build/core/appContext.js +172 -0
  109. package/build/core/appContext.js.map +1 -0
  110. package/build/core/appRequest.d.ts +21 -0
  111. package/build/core/appRequest.d.ts.map +1 -0
  112. package/build/core/appRequest.js +95 -0
  113. package/build/core/appRequest.js.map +1 -0
  114. package/build/core/bufferConfig.d.ts +5 -0
  115. package/build/core/bufferConfig.d.ts.map +1 -0
  116. package/build/core/bufferConfig.js +20 -0
  117. package/build/core/bufferConfig.js.map +1 -0
  118. package/build/core/connection.d.ts.map +1 -1
  119. package/build/core/connection.js +29 -9
  120. package/build/core/connection.js.map +1 -1
  121. package/build/core/debugGlobals.d.ts.map +1 -1
  122. package/build/core/debugGlobals.js +13 -0
  123. package/build/core/debugGlobals.js.map +1 -1
  124. package/build/core/deviceDiscovery.d.ts +5 -1
  125. package/build/core/deviceDiscovery.d.ts.map +1 -1
  126. package/build/core/deviceDiscovery.js +13 -2
  127. package/build/core/deviceDiscovery.js.map +1 -1
  128. package/build/core/deviceResolver.d.ts.map +1 -1
  129. package/build/core/deviceResolver.js +17 -2
  130. package/build/core/deviceResolver.js.map +1 -1
  131. package/build/core/epochRender.d.ts +19 -0
  132. package/build/core/epochRender.d.ts.map +1 -0
  133. package/build/core/epochRender.js +38 -0
  134. package/build/core/epochRender.js.map +1 -0
  135. package/build/core/guides.d.ts.map +1 -1
  136. package/build/core/guides.js +36 -91
  137. package/build/core/guides.js.map +1 -1
  138. package/build/core/index.d.ts +2 -3
  139. package/build/core/index.d.ts.map +1 -1
  140. package/build/core/index.js +4 -4
  141. package/build/core/index.js.map +1 -1
  142. package/build/core/inspector.d.ts +0 -39
  143. package/build/core/inspector.d.ts.map +1 -1
  144. package/build/core/inspector.js +1 -358
  145. package/build/core/inspector.js.map +1 -1
  146. package/build/core/ios.d.ts +14 -3
  147. package/build/core/ios.d.ts.map +1 -1
  148. package/build/core/ios.js +41 -17
  149. package/build/core/ios.js.map +1 -1
  150. package/build/core/jsExecute.d.ts +15 -0
  151. package/build/core/jsExecute.d.ts.map +1 -1
  152. package/build/core/jsExecute.js +136 -29
  153. package/build/core/jsExecute.js.map +1 -1
  154. package/build/core/logs.d.ts +12 -3
  155. package/build/core/logs.d.ts.map +1 -1
  156. package/build/core/logs.js +28 -5
  157. package/build/core/logs.js.map +1 -1
  158. package/build/core/metro.d.ts +2 -0
  159. package/build/core/metro.d.ts.map +1 -1
  160. package/build/core/metro.js +16 -8
  161. package/build/core/metro.js.map +1 -1
  162. package/build/core/moduleRegistry.d.ts +19 -0
  163. package/build/core/moduleRegistry.d.ts.map +1 -0
  164. package/build/core/moduleRegistry.js +67 -0
  165. package/build/core/moduleRegistry.js.map +1 -0
  166. package/build/core/nativeOnlyHints.d.ts.map +1 -1
  167. package/build/core/nativeOnlyHints.js +0 -2
  168. package/build/core/nativeOnlyHints.js.map +1 -1
  169. package/build/core/navigate.d.ts +46 -0
  170. package/build/core/navigate.d.ts.map +1 -0
  171. package/build/core/navigate.js +119 -0
  172. package/build/core/navigate.js.map +1 -0
  173. package/build/core/navigation.d.ts +66 -0
  174. package/build/core/navigation.d.ts.map +1 -0
  175. package/build/core/navigation.js +269 -0
  176. package/build/core/navigation.js.map +1 -0
  177. package/build/core/network.d.ts +12 -2
  178. package/build/core/network.d.ts.map +1 -1
  179. package/build/core/network.js +52 -12
  180. package/build/core/network.js.map +1 -1
  181. package/build/core/networkInterceptor.d.ts +1 -1
  182. package/build/core/networkInterceptor.d.ts.map +1 -1
  183. package/build/core/networkInterceptor.js +3 -2
  184. package/build/core/networkInterceptor.js.map +1 -1
  185. package/build/core/pressables.d.ts +33 -0
  186. package/build/core/pressables.d.ts.map +1 -1
  187. package/build/core/pressables.js +73 -4
  188. package/build/core/pressables.js.map +1 -1
  189. package/build/core/promiseHandles.d.ts +19 -0
  190. package/build/core/promiseHandles.d.ts.map +1 -0
  191. package/build/core/promiseHandles.js +58 -0
  192. package/build/core/promiseHandles.js.map +1 -0
  193. package/build/core/register.d.ts.map +1 -1
  194. package/build/core/register.js +1 -4
  195. package/build/core/register.js.map +1 -1
  196. package/build/core/sdkMirrorPoller.d.ts +31 -0
  197. package/build/core/sdkMirrorPoller.d.ts.map +1 -0
  198. package/build/core/sdkMirrorPoller.js +210 -0
  199. package/build/core/sdkMirrorPoller.js.map +1 -0
  200. package/build/core/state.d.ts +14 -0
  201. package/build/core/state.d.ts.map +1 -1
  202. package/build/core/state.js +48 -2
  203. package/build/core/state.js.map +1 -1
  204. package/build/core/toolHelpers.d.ts.map +1 -1
  205. package/build/core/toolHelpers.js +42 -10
  206. package/build/core/toolHelpers.js.map +1 -1
  207. package/build/core/truncate.d.ts +42 -0
  208. package/build/core/truncate.d.ts.map +1 -0
  209. package/build/core/truncate.js +169 -0
  210. package/build/core/truncate.js.map +1 -0
  211. package/build/core/types.d.ts +3 -0
  212. package/build/core/types.d.ts.map +1 -1
  213. package/build/index.d.ts.map +1 -1
  214. package/build/index.js +4 -2
  215. package/build/index.js.map +1 -1
  216. package/build/pro/coordinateMiss.d.ts +55 -0
  217. package/build/pro/coordinateMiss.d.ts.map +1 -0
  218. package/build/pro/coordinateMiss.js +122 -0
  219. package/build/pro/coordinateMiss.js.map +1 -0
  220. package/build/pro/tap.d.ts +8 -0
  221. package/build/pro/tap.d.ts.map +1 -1
  222. package/build/pro/tap.js +99 -11
  223. package/build/pro/tap.js.map +1 -1
  224. package/build/pro/verifyAction.d.ts +43 -2
  225. package/build/pro/verifyAction.d.ts.map +1 -1
  226. package/build/pro/verifyAction.js +95 -36
  227. package/build/pro/verifyAction.js.map +1 -1
  228. package/build/tools/_deviceArg.d.ts +17 -1
  229. package/build/tools/_deviceArg.d.ts.map +1 -1
  230. package/build/tools/_deviceArg.js +17 -1
  231. package/build/tools/_deviceArg.js.map +1 -1
  232. package/build/tools/bundleTools.d.ts.map +1 -1
  233. package/build/tools/bundleTools.js +20 -33
  234. package/build/tools/bundleTools.js.map +1 -1
  235. package/build/tools/componentTools.d.ts.map +1 -1
  236. package/build/tools/componentTools.js +41 -219
  237. package/build/tools/componentTools.js.map +1 -1
  238. package/build/tools/connectionTools.d.ts.map +1 -1
  239. package/build/tools/connectionTools.js +17 -22
  240. package/build/tools/connectionTools.js.map +1 -1
  241. package/build/tools/deviceTools.d.ts.map +1 -1
  242. package/build/tools/deviceTools.js +13 -167
  243. package/build/tools/deviceTools.js.map +1 -1
  244. package/build/tools/executionTools.d.ts.map +1 -1
  245. package/build/tools/executionTools.js +63 -18
  246. package/build/tools/executionTools.js.map +1 -1
  247. package/build/tools/interactionTools.d.ts +6 -0
  248. package/build/tools/interactionTools.d.ts.map +1 -1
  249. package/build/tools/interactionTools.js +41 -56
  250. package/build/tools/interactionTools.js.map +1 -1
  251. package/build/tools/logTools.d.ts.map +1 -1
  252. package/build/tools/logTools.js +61 -80
  253. package/build/tools/logTools.js.map +1 -1
  254. package/build/tools/metaTools.js +1 -1
  255. package/build/tools/metaTools.js.map +1 -1
  256. package/build/tools/navigationTools.d.ts +3 -0
  257. package/build/tools/navigationTools.d.ts.map +1 -0
  258. package/build/tools/navigationTools.js +60 -0
  259. package/build/tools/navigationTools.js.map +1 -0
  260. package/build/tools/networkTools.d.ts.map +1 -1
  261. package/build/tools/networkTools.js +44 -202
  262. package/build/tools/networkTools.js.map +1 -1
  263. package/build/tools/reduxTools.d.ts.map +1 -1
  264. package/build/tools/reduxTools.js +3 -2
  265. package/build/tools/reduxTools.js.map +1 -1
  266. package/build/tools/requestTools.d.ts +3 -0
  267. package/build/tools/requestTools.d.ts.map +1 -0
  268. package/build/tools/requestTools.js +79 -0
  269. package/build/tools/requestTools.js.map +1 -0
  270. package/build/tools/screenshotTools.d.ts.map +1 -1
  271. package/build/tools/screenshotTools.js +42 -25
  272. package/build/tools/screenshotTools.js.map +1 -1
  273. package/package.json +1 -1
  274. package/tools.json +22 -78
  275. package/build/__tests__/unit/flowpoints.test.d.ts +0 -2
  276. package/build/__tests__/unit/flowpoints.test.d.ts.map +0 -1
  277. package/build/__tests__/unit/flowpoints.test.js +0 -126
  278. package/build/__tests__/unit/flowpoints.test.js.map +0 -1
  279. package/build/__tests__/unit/flowpointsQuery.test.d.ts +0 -2
  280. package/build/__tests__/unit/flowpointsQuery.test.d.ts.map +0 -1
  281. package/build/__tests__/unit/flowpointsQuery.test.js +0 -91
  282. package/build/__tests__/unit/flowpointsQuery.test.js.map +0 -1
  283. package/build/__tests__/unit/selectionPoller.test.d.ts +0 -2
  284. package/build/__tests__/unit/selectionPoller.test.d.ts.map +0 -1
  285. package/build/__tests__/unit/selectionPoller.test.js +0 -109
  286. package/build/__tests__/unit/selectionPoller.test.js.map +0 -1
  287. package/build/__tests__/unit/verifyFlow.test.d.ts +0 -2
  288. package/build/__tests__/unit/verifyFlow.test.d.ts.map +0 -1
  289. package/build/__tests__/unit/verifyFlow.test.js +0 -45
  290. package/build/__tests__/unit/verifyFlow.test.js.map +0 -1
  291. package/build/core/selectionPoller.d.ts +0 -13
  292. package/build/core/selectionPoller.d.ts.map +0 -1
  293. package/build/core/selectionPoller.js +0 -102
  294. package/build/core/selectionPoller.js.map +0 -1
  295. package/build/pro/flowpointTools.d.ts +0 -4
  296. package/build/pro/flowpointTools.d.ts.map +0 -1
  297. package/build/pro/flowpointTools.js +0 -266
  298. package/build/pro/flowpointTools.js.map +0 -1
  299. package/build/pro/flowpoints.d.ts +0 -86
  300. package/build/pro/flowpoints.d.ts.map +0 -1
  301. package/build/pro/flowpoints.js +0 -283
  302. package/build/pro/flowpoints.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"networkBufferEpoch.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/networkBufferEpoch.test.ts"],"names":[],"mappings":"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"}
@@ -32,7 +32,7 @@ describe("applyInterceptedEvent", () => {
32
32
  url: "https://api.example.com/data",
33
33
  timestamp: 1700000000000,
34
34
  });
35
- applyInterceptedEvent(json, buffer);
35
+ applyInterceptedEvent(json, buffer, "dev");
36
36
  expect(buffer.size).toBe(1);
37
37
  const entry = buffer.get("js-ab12-1");
38
38
  expect(entry).toBeDefined();
@@ -48,7 +48,7 @@ describe("applyInterceptedEvent", () => {
48
48
  method: "GET",
49
49
  url: "https://api.example.com/users",
50
50
  timestamp: 1700000000000,
51
- }), buffer);
51
+ }), buffer, "dev");
52
52
  // Then apply the response
53
53
  applyInterceptedEvent(JSON.stringify({
54
54
  type: "response",
@@ -56,7 +56,7 @@ describe("applyInterceptedEvent", () => {
56
56
  status: 200,
57
57
  statusText: "OK",
58
58
  duration: 150,
59
- }), buffer);
59
+ }), buffer, "dev");
60
60
  expect(buffer.size).toBe(1);
61
61
  const entry = buffer.get("js-ab12-2");
62
62
  expect(entry).toBeDefined();
@@ -72,13 +72,13 @@ describe("applyInterceptedEvent", () => {
72
72
  method: "GET",
73
73
  url: "https://api.example.com/fail",
74
74
  timestamp: 1700000000000,
75
- }), buffer);
75
+ }), buffer, "dev");
76
76
  applyInterceptedEvent(JSON.stringify({
77
77
  type: "error",
78
78
  id: "js-ab12-3",
79
79
  error: "Network request failed",
80
80
  duration: 50,
81
- }), buffer);
81
+ }), buffer, "dev");
82
82
  expect(buffer.size).toBe(1);
83
83
  const entry = buffer.get("js-ab12-3");
84
84
  expect(entry).toBeDefined();
@@ -87,7 +87,7 @@ describe("applyInterceptedEvent", () => {
87
87
  expect(entry.timing?.duration).toBe(50);
88
88
  });
89
89
  it("invalid JSON is silently ignored", () => {
90
- applyInterceptedEvent("not valid json{{{", buffer);
90
+ applyInterceptedEvent("not valid json{{{", buffer, "dev");
91
91
  expect(buffer.size).toBe(0);
92
92
  });
93
93
  it("response without matching request is silently ignored", () => {
@@ -97,7 +97,7 @@ describe("applyInterceptedEvent", () => {
97
97
  status: 200,
98
98
  statusText: "OK",
99
99
  duration: 100,
100
- }), buffer);
100
+ }), buffer, "dev");
101
101
  expect(buffer.size).toBe(0);
102
102
  });
103
103
  });
@@ -1 +1 @@
1
- {"version":3,"file":"networkInterceptor.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/networkInterceptor.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"networkInterceptor.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/networkInterceptor.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=promiseHandles.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promiseHandles.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/unit/promiseHandles.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,61 @@
1
+ import { describe, it, expect, beforeEach } from "@jest/globals";
2
+ import { registerHandle, listHandles, dropHandle, clearHandlesForDevice, buildCollectExpression } from "../../core/promiseHandles.js";
3
+ describe("promise handles", () => {
4
+ beforeEach(() => {
5
+ clearHandlesForDevice("iPhone Air");
6
+ clearHandlesForDevice("pixel");
7
+ });
8
+ it("records a handle per device", () => {
9
+ registerHandle("iPhone Air", "__rn_dbg_1_abc");
10
+ expect(listHandles("iPhone Air")).toContain("__rn_dbg_1_abc");
11
+ expect(listHandles("pixel")).toHaveLength(0);
12
+ });
13
+ it("drops a handle once collected", () => {
14
+ registerHandle("iPhone Air", "__rn_dbg_1_abc");
15
+ dropHandle("__rn_dbg_1_abc");
16
+ expect(listHandles("iPhone Air")).toHaveLength(0);
17
+ });
18
+ it("clears every handle for a device on reload", () => {
19
+ registerHandle("iPhone Air", "a");
20
+ registerHandle("iPhone Air", "b");
21
+ clearHandlesForDevice("iPhone Air");
22
+ expect(listHandles("iPhone Air")).toHaveLength(0);
23
+ });
24
+ it("treats handles as dead after a device reset", () => {
25
+ registerHandle("iPhone Air", "gone");
26
+ clearHandlesForDevice("iPhone Air");
27
+ expect(listHandles("iPhone Air")).not.toContain("gone");
28
+ });
29
+ it("builds ES5 collect source that deletes the slot when settled", () => {
30
+ const src = buildCollectExpression("__rn_dbg_1_abc");
31
+ expect(src).toContain("__rn_dbg_1_abc");
32
+ expect(src).toContain("delete");
33
+ expect(src).not.toMatch(/=>|\bconst\b|\blet\b/);
34
+ });
35
+ it("collect source reports pending without deleting the slot", () => {
36
+ const src = buildCollectExpression("slot1");
37
+ const run = new Function("globalThis", "return " + src + ";");
38
+ const g = { slot1: { s: "pending" } };
39
+ expect(run(g)).toBe("__pending__");
40
+ expect(g.slot1).toBeDefined();
41
+ });
42
+ it("collect source returns and clears a settled value", () => {
43
+ const src = buildCollectExpression("slot2");
44
+ const run = new Function("globalThis", "return " + src + ";");
45
+ const g = { slot2: { s: "ok", v: { total: 7 } } };
46
+ expect(run(g)).toEqual({ status: "ok", value: { total: 7 } });
47
+ expect(g.slot2).toBeUndefined();
48
+ });
49
+ it("collect source distinguishes a missing slot from a pending one", () => {
50
+ const src = buildCollectExpression("slot3");
51
+ const run = new Function("globalThis", "return " + src + ";");
52
+ expect(run({})).toBe("__missing__");
53
+ });
54
+ it("collect source surfaces a rejected promise as an error status", () => {
55
+ const src = buildCollectExpression("slot4");
56
+ const run = new Function("globalThis", "return " + src + ";");
57
+ const g = { slot4: { s: "err", v: "Network request failed" } };
58
+ expect(run(g)).toEqual({ status: "err", value: "Network request failed" });
59
+ });
60
+ });
61
+ //# sourceMappingURL=promiseHandles.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promiseHandles.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/promiseHandles.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=resolveBufferOffline.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveBufferOffline.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/unit/resolveBufferOffline.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,25 @@
1
+ import { resolveLogBuffer, resolveNetworkBuffer } from "../../core/toolHelpers.js";
2
+ import { getLogBuffer, getNetworkBuffer, logBuffers, networkBuffers, resetEpochs } from "../../core/state.js";
3
+ describe("buffer resolution while disconnected", () => {
4
+ beforeEach(() => {
5
+ logBuffers.clear();
6
+ networkBuffers.clear();
7
+ resetEpochs();
8
+ });
9
+ it("falls back to a buffered device name when nothing is connected", () => {
10
+ getLogBuffer("iPhone 17 Pro").add({
11
+ timestamp: new Date(),
12
+ level: "log",
13
+ message: "pre-restart",
14
+ });
15
+ expect(resolveLogBuffer("iPhone").getAll()[0].message).toBe("pre-restart");
16
+ });
17
+ it("matches case-insensitively", () => {
18
+ getNetworkBuffer("sdk_gphone64_arm64");
19
+ expect(() => resolveNetworkBuffer("GPHONE")).not.toThrow();
20
+ });
21
+ it("still throws when no buffer exists for the device either", () => {
22
+ expect(() => resolveLogBuffer("nonexistent")).toThrow(/No connected device/);
23
+ });
24
+ });
25
+ //# sourceMappingURL=resolveBufferOffline.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveBufferOffline.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/resolveBufferOffline.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACnF,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,UAAU,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAE9G,QAAQ,CAAC,sCAAsC,EAAE,GAAG,EAAE;IAClD,UAAU,CAAC,GAAG,EAAE;QACZ,UAAU,CAAC,KAAK,EAAE,CAAC;QACnB,cAAc,CAAC,KAAK,EAAE,CAAC;QACvB,WAAW,EAAE,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QACtE,YAAY,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC;YAC9B,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,KAAK,EAAE,KAAK;YACZ,OAAO,EAAE,aAAa;SACzB,CAAC,CAAC;QACH,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QAClC,gBAAgB,CAAC,oBAAoB,CAAC,CAAC;QACvC,MAAM,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAChE,MAAM,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=sdkMirrorPoller.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdkMirrorPoller.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/unit/sdkMirrorPoller.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,118 @@
1
+ import { jest } from "@jest/globals";
2
+ const executeInApp = jest.fn();
3
+ jest.unstable_mockModule("../../core/executor.js", () => ({ executeInApp }));
4
+ const { mirrorOnce, __resetMirrorState } = await import("../../core/sdkMirrorPoller.js");
5
+ const { getLogBuffer, getNetworkBuffer, resetEpochs, bumpEpoch, getEpoch, connectedApps, logBuffers, networkBuffers } = await import("../../core/state.js");
6
+ const { __resetLogSeq } = await import("../../core/logs.js");
7
+ const payload = (network, console_, runId = "run-1") => ({
8
+ success: true,
9
+ result: JSON.stringify({ runId, network, console: console_ }),
10
+ });
11
+ const netEntry = (id) => ({
12
+ id,
13
+ timestamp: Date.now(),
14
+ method: "GET",
15
+ url: `https://api.test/${id}`,
16
+ status: 200,
17
+ requestHeaders: {},
18
+ responseHeaders: {},
19
+ completed: true,
20
+ });
21
+ const logEntry = (id, message) => ({
22
+ id,
23
+ timestamp: Date.now(),
24
+ level: "log",
25
+ message,
26
+ });
27
+ describe("mirrorOnce", () => {
28
+ beforeEach(() => {
29
+ executeInApp.mockReset();
30
+ __resetMirrorState();
31
+ __resetLogSeq();
32
+ resetEpochs();
33
+ getLogBuffer("dev").clear();
34
+ getNetworkBuffer("dev").clear();
35
+ });
36
+ it("copies SDK entries into the server buffers", async () => {
37
+ executeInApp.mockResolvedValue(payload([netEntry("n1")], [logEntry("c1", "hello")]));
38
+ const result = await mirrorOnce("dev");
39
+ expect(result).toEqual({ logs: 1, network: 1 });
40
+ expect(getNetworkBuffer("dev").size).toBe(1);
41
+ expect(getLogBuffer("dev").getAll()[0].message).toBe("hello");
42
+ });
43
+ it("is idempotent across repeated polls", async () => {
44
+ executeInApp.mockResolvedValue(payload([netEntry("n1")], [logEntry("c1", "hello")]));
45
+ await mirrorOnce("dev");
46
+ const second = await mirrorOnce("dev");
47
+ expect(second).toEqual({ logs: 0, network: 0 });
48
+ expect(getLogBuffer("dev").size).toBe(1);
49
+ expect(getNetworkBuffer("dev").size).toBe(1);
50
+ });
51
+ it("re-mirrors the same SDK ids after an epoch bump", async () => {
52
+ executeInApp.mockResolvedValue(payload([netEntry("n1")], [logEntry("c1", "hello")]));
53
+ await mirrorOnce("dev");
54
+ bumpEpoch("dev");
55
+ const afterRestart = await mirrorOnce("dev");
56
+ expect(afterRestart).toEqual({ logs: 1, network: 1 });
57
+ expect(getNetworkBuffer("dev").size).toBe(2);
58
+ });
59
+ it("bumps the epoch when the runtime nonce changes", async () => {
60
+ // The only reliable restart signal: Metro's inspector proxy reuses the
61
+ // CDP target id after a process kill, and a dead runtime emits no
62
+ // executionContextsCleared. A fresh globalThis is direct proof.
63
+ executeInApp.mockResolvedValue(payload([netEntry("n1")], [], "run-1"));
64
+ await mirrorOnce("dev");
65
+ expect(getEpoch("dev")).toBe(1);
66
+ // Same SDK id, new runtime: must land as a distinct entry, not overwrite.
67
+ executeInApp.mockResolvedValue(payload([netEntry("n1")], [], "run-2"));
68
+ const afterRestart = await mirrorOnce("dev");
69
+ expect(getEpoch("dev")).toBe(2);
70
+ expect(afterRestart).toEqual({ logs: 0, network: 1 });
71
+ expect(getNetworkBuffer("dev").size).toBe(2);
72
+ });
73
+ it("does not bump while the runtime nonce is stable", async () => {
74
+ executeInApp.mockResolvedValue(payload([netEntry("n1")], [], "run-1"));
75
+ await mirrorOnce("dev");
76
+ await mirrorOnce("dev");
77
+ await mirrorOnce("dev");
78
+ expect(getEpoch("dev")).toBe(1);
79
+ });
80
+ it("mirrors into the connected device's buffer key, not the caller's substring", async () => {
81
+ // Tools pass a user-facing substring ("iPhone"); the buffer key is the
82
+ // full device name. Using the substring as the key mirrors into a
83
+ // phantom buffer that device-scoped reads never resolve to, so the
84
+ // SDK data silently goes missing for exactly those calls.
85
+ connectedApps.set("8081-abc", {
86
+ ws: {},
87
+ deviceInfo: { deviceName: "iPhone 17 Pro", title: "app", id: "abc" },
88
+ port: 8081,
89
+ platform: "ios",
90
+ });
91
+ try {
92
+ executeInApp.mockResolvedValue(payload([netEntry("n1")], [logEntry("c1", "hi")]));
93
+ await mirrorOnce("iPhone");
94
+ expect(getNetworkBuffer("iPhone 17 Pro").size).toBe(1);
95
+ expect(getLogBuffer("iPhone 17 Pro").size).toBe(1);
96
+ expect(logBuffers.has("iPhone")).toBe(false);
97
+ expect(networkBuffers.has("iPhone")).toBe(false);
98
+ }
99
+ finally {
100
+ connectedApps.delete("8081-abc");
101
+ getNetworkBuffer("iPhone 17 Pro").clear();
102
+ getLogBuffer("iPhone 17 Pro").clear();
103
+ }
104
+ });
105
+ it("returns zeroes when the eval fails", async () => {
106
+ executeInApp.mockResolvedValue({ success: false, error: "disconnected" });
107
+ expect(await mirrorOnce("dev")).toEqual({ logs: 0, network: 0 });
108
+ });
109
+ it("returns zeroes on malformed JSON", async () => {
110
+ executeInApp.mockResolvedValue({ success: true, result: "not json" });
111
+ expect(await mirrorOnce("dev")).toEqual({ logs: 0, network: 0 });
112
+ });
113
+ it("swallows a thrown eval", async () => {
114
+ executeInApp.mockRejectedValue(new Error("boom"));
115
+ expect(await mirrorOnce("dev")).toEqual({ logs: 0, network: 0 });
116
+ });
117
+ });
118
+ //# sourceMappingURL=sdkMirrorPoller.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdkMirrorPoller.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/sdkMirrorPoller.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=sessionEpoch.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessionEpoch.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/unit/sessionEpoch.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,41 @@
1
+ import { getEpoch, bumpEpoch, resetEpochs } from "../../core/state.js";
2
+ import { logBufferSize, networkBufferSize } from "../../core/bufferConfig.js";
3
+ describe("sessionEpoch", () => {
4
+ beforeEach(() => resetEpochs());
5
+ it("starts at 1 for an unseen device", () => {
6
+ expect(getEpoch("iPhone 17 Pro")).toBe(1);
7
+ });
8
+ it("increments on bump and returns the new value", () => {
9
+ expect(bumpEpoch("iPhone 17 Pro")).toBe(2);
10
+ expect(getEpoch("iPhone 17 Pro")).toBe(2);
11
+ });
12
+ it("tracks epochs independently per device", () => {
13
+ bumpEpoch("iPhone 17 Pro");
14
+ bumpEpoch("iPhone 17 Pro");
15
+ expect(getEpoch("iPhone 17 Pro")).toBe(3);
16
+ expect(getEpoch("sdk_gphone64_arm64")).toBe(1);
17
+ });
18
+ });
19
+ describe("bufferConfig", () => {
20
+ const saved = { ...process.env };
21
+ afterEach(() => {
22
+ process.env = { ...saved };
23
+ });
24
+ it("defaults to 2000 logs and 1000 network entries", () => {
25
+ expect(logBufferSize()).toBe(2000);
26
+ expect(networkBufferSize()).toBe(1000);
27
+ });
28
+ it("honours env overrides", () => {
29
+ process.env.EXECBRO_LOG_BUFFER_SIZE = "50";
30
+ process.env.EXECBRO_NET_BUFFER_SIZE = "25";
31
+ expect(logBufferSize()).toBe(50);
32
+ expect(networkBufferSize()).toBe(25);
33
+ });
34
+ it("ignores non-numeric and non-positive overrides", () => {
35
+ process.env.EXECBRO_LOG_BUFFER_SIZE = "abc";
36
+ expect(logBufferSize()).toBe(2000);
37
+ process.env.EXECBRO_LOG_BUFFER_SIZE = "0";
38
+ expect(logBufferSize()).toBe(2000);
39
+ });
40
+ });
41
+ //# sourceMappingURL=sessionEpoch.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessionEpoch.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/sessionEpoch.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAE9E,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC1B,UAAU,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;IAEhC,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QACxC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACpD,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAC9C,SAAS,CAAC,eAAe,CAAC,CAAC;QAC3B,SAAS,CAAC,eAAe,CAAC,CAAC;QAC3B,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC1C,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC1B,MAAM,KAAK,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IACjC,SAAS,CAAC,GAAG,EAAE;QACX,OAAO,CAAC,GAAG,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACtD,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;QAC7B,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,IAAI,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,IAAI,CAAC;QAC3C,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjC,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACtD,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,KAAK,CAAC;QAC5C,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,GAAG,CAAC;QAC1C,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=settleAndDiff.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settleAndDiff.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/unit/settleAndDiff.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,110 @@
1
+ import { describe, it, expect } from "@jest/globals";
2
+ import { settleAndDiff, SETTLE_POLL_START_MS, SETTLE_STABLE_TIMEOUT_MS, NO_CHANGE_CONFIRM_MS, } from "../../pro/verifyAction.js";
3
+ const frame = (tag) => ({
4
+ buffer: Buffer.from(tag),
5
+ width: 100,
6
+ height: 200,
7
+ scaleFactor: 1,
8
+ });
9
+ /**
10
+ * Fake clock + fake capture/compare so the settle loop is exercised without a
11
+ * device. `compare` treats two buffers as "unchanged" when their bytes match,
12
+ * which mirrors what compareScreenshots reports for identical frames.
13
+ */
14
+ function harness(script, opts = {}) {
15
+ const captureCostMs = opts.captureCostMs ?? 200;
16
+ let clock = 0;
17
+ let captures = 0;
18
+ const sleeps = [];
19
+ return {
20
+ get elapsed() { return clock; },
21
+ get captures() { return captures; },
22
+ sleeps,
23
+ args: {
24
+ beforeBuffer: Buffer.from("before"),
25
+ statusBarHeight: 59,
26
+ capture: async () => {
27
+ // Frames are consumed in order; the last one repeats forever.
28
+ const tag = script[Math.min(captures, script.length - 1)];
29
+ captures++;
30
+ clock += captureCostMs;
31
+ return tag === "__fail__" ? null : frame(tag);
32
+ },
33
+ compare: async (a, b) => {
34
+ const same = a.equals(b);
35
+ clock += 10;
36
+ return {
37
+ changed: !same,
38
+ changeRate: same ? 0 : 0.5,
39
+ changedPixels: same ? 0 : 5000,
40
+ totalPixels: 10000,
41
+ };
42
+ },
43
+ now: () => clock,
44
+ sleep: async (ms) => { sleeps.push(ms); clock += ms; },
45
+ },
46
+ };
47
+ }
48
+ describe("settleAndDiff", () => {
49
+ it("returns as soon as the screen changed and two consecutive frames match", async () => {
50
+ // "a" differs from before and repeats -> stable on the second capture.
51
+ const h = harness(["a", "a", "a", "a"]);
52
+ const result = await settleAndDiff(h.args);
53
+ expect(result).not.toBeNull();
54
+ expect(result.settled).toBe(true);
55
+ expect(result.diff.changedPixels).toBeGreaterThan(0);
56
+ expect(h.captures).toBe(2);
57
+ // 150ms lead-in + 2 captures — well under the old fixed 800ms wait.
58
+ expect(h.elapsed).toBeLessThan(700);
59
+ expect(h.sleeps[0]).toBe(SETTLE_POLL_START_MS);
60
+ });
61
+ it("keeps polling while the screen is still animating", async () => {
62
+ // Every frame differs from the previous one until the last pair.
63
+ const h = harness(["a", "b", "c", "c"]);
64
+ const result = await settleAndDiff(h.args);
65
+ expect(result.settled).toBe(true);
66
+ expect(result.frame.buffer.toString()).toBe("c");
67
+ expect(h.captures).toBe(4);
68
+ });
69
+ it("catches a late change that starts after the screen first looked idle", async () => {
70
+ // Identical to `before` twice (idle), then a modal slides in and settles.
71
+ const h = harness(["before", "before", "late", "late"]);
72
+ const result = await settleAndDiff(h.args);
73
+ expect(result.settled).toBe(true);
74
+ expect(result.diff.changedPixels).toBeGreaterThan(0);
75
+ expect(result.frame.buffer.toString()).toBe("late");
76
+ });
77
+ it("honours a caller-supplied no-change window (Android emulators animate slower)", async () => {
78
+ const h = harness(["before", "before", "before", "before", "before", "before", "before"]);
79
+ const result = await settleAndDiff({ ...h.args, noChangeConfirmMs: 1500 });
80
+ expect(result.diff.changedPixels).toBe(0);
81
+ expect(h.elapsed).toBeGreaterThanOrEqual(1500);
82
+ });
83
+ it("confirms 'no change' only after the confirmation window", async () => {
84
+ const h = harness(["before", "before", "before", "before", "before", "before"]);
85
+ const result = await settleAndDiff(h.args);
86
+ expect(result.settled).toBe(true);
87
+ expect(result.diff.changedPixels).toBe(0);
88
+ expect(h.elapsed).toBeGreaterThanOrEqual(NO_CHANGE_CONFIRM_MS);
89
+ // ...but it must not burn the full stable timeout on a quiet screen.
90
+ expect(h.elapsed).toBeLessThan(SETTLE_STABLE_TIMEOUT_MS + 500);
91
+ });
92
+ it("gives up at the cap when the screen never stabilises", async () => {
93
+ const h = harness(["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k"]);
94
+ const result = await settleAndDiff(h.args);
95
+ expect(result.settled).toBe(false);
96
+ expect(result.diff).toBeDefined();
97
+ expect(h.elapsed).toBeLessThan(SETTLE_STABLE_TIMEOUT_MS + 600);
98
+ });
99
+ it("returns null when the first capture fails", async () => {
100
+ const h = harness(["__fail__"]);
101
+ expect(await settleAndDiff(h.args)).toBeNull();
102
+ });
103
+ it("falls back to the last good frame when a later capture fails", async () => {
104
+ const h = harness(["a", "__fail__"]);
105
+ const result = await settleAndDiff(h.args);
106
+ expect(result).not.toBeNull();
107
+ expect(result.frame.buffer.toString()).toBe("a");
108
+ });
109
+ });
110
+ //# sourceMappingURL=settleAndDiff.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settleAndDiff.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/settleAndDiff.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=truncate.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"truncate.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/unit/truncate.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,58 @@
1
+ import { describe, it, expect } from "@jest/globals";
2
+ import { truncateToBudget } from "../../core/truncate.js";
3
+ describe("truncateToBudget", () => {
4
+ it("returns small values byte-identical and reports no truncation", () => {
5
+ const value = { entityDrawerOpen: false };
6
+ const out = truncateToBudget(value, 25000);
7
+ expect(out.truncated).toBe(false);
8
+ expect(out.appliedBudget).toBeNull();
9
+ expect(JSON.stringify(out.value)).toBe(JSON.stringify(value));
10
+ });
11
+ it("bounds a large array and preserves its true length in the marker", () => {
12
+ const value = { data: Array.from({ length: 153 }, (_, i) => ({ id: i, a: 1, b: 2 })) };
13
+ const out = truncateToBudget(value, 300);
14
+ expect(out.truncated).toBe(true);
15
+ expect(out.returnedBytes).toBeLessThanOrEqual(300);
16
+ const rendered = JSON.stringify(out.value);
17
+ expect(rendered).toContain("more");
18
+ expect(rendered).toMatch(/\+1[0-9][0-9] more/);
19
+ });
20
+ it("survives circular references instead of throwing", () => {
21
+ const a = { name: "root" };
22
+ a.self = a;
23
+ const out = truncateToBudget(a, 25000);
24
+ // `truncated` reports "content was elided", and a cycle always is —
25
+ // it cannot be represented in JSON. Sibling keys survive intact.
26
+ expect(out.truncated).toBe(true);
27
+ expect(JSON.stringify(out.value)).toContain("[Circular]");
28
+ expect(out.value.name).toBe("root");
29
+ });
30
+ it("keeps repeated (non-circular) references intact", () => {
31
+ // A shared child appearing twice is not a cycle — marking the second
32
+ // occurrence "[Circular]" would be a false positive, so `seen` must be
33
+ // path-scoped rather than global.
34
+ const shared = { id: 7 };
35
+ const out = truncateToBudget({ first: shared, second: shared }, 25000);
36
+ expect(out.truncated).toBe(false);
37
+ expect(JSON.stringify(out.value)).toBe(JSON.stringify({ first: { id: 7 }, second: { id: 7 } }));
38
+ });
39
+ it("reports original and returned byte counts", () => {
40
+ const value = { s: "x".repeat(5000) };
41
+ const out = truncateToBudget(value, 200);
42
+ expect(out.originalBytes).toBeGreaterThan(5000);
43
+ expect(out.returnedBytes).toBeLessThanOrEqual(200);
44
+ expect(out.appliedBudget).not.toBeNull();
45
+ });
46
+ it("honours an explicit budget over the adaptive ladder", () => {
47
+ const value = { arr: [1, 2, 3, 4, 5, 6, 7, 8] };
48
+ const out = truncateToBudget(value, 25000, { maxArrayItems: 2 });
49
+ expect(JSON.stringify(out.value)).toContain("+6 more");
50
+ });
51
+ it("marks objects and arrays elided by depth with their sizes", () => {
52
+ const value = { a: { b: { c: { d: { e: [1, 2, 3] } } } } };
53
+ const out = truncateToBudget(value, 25000, { maxDepth: 2 });
54
+ const rendered = JSON.stringify(out.value);
55
+ expect(rendered).toContain("{Object(");
56
+ });
57
+ });
58
+ //# sourceMappingURL=truncate.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"truncate.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/truncate.test.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,8 @@ describe("verifyAction module", () => {
6
6
  expect(typeof mod.verifyAndCapture).toBe("function");
7
7
  expect(typeof mod.burstCaptureAndVerify).toBe("function");
8
8
  expect(typeof mod.drawTapMarker).toBe("function");
9
- expect(typeof mod.SETTLE_DELAY_MS).toBe("number");
9
+ expect(typeof mod.settleAndDiff).toBe("function");
10
+ expect(typeof mod.SETTLE_POLL_START_MS).toBe("number");
10
11
  expect(typeof mod.BURST_FRAME_COUNT).toBe("number");
11
12
  expect(typeof mod.BURST_FRAME_INTERVAL_MS).toBe("number");
12
13
  });