@craft-native/ios 0.0.415 → 0.0.417

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.
package/dist/index.js CHANGED
@@ -317,9 +317,14 @@ function serializeSimulatorSteps(steps) {
317
317
  }
318
318
  }
319
319
  arg = JSON.stringify(step.paths);
320
- } else if ("step" in step)
321
- arg = `${token(step.id)} ${line(step.step)}`;
322
- else if ("seconds" in step && !("text" in step))
320
+ } else if ("step" in step) {
321
+ if (step.command === "iftext") {
322
+ if (!step.text.trim() || step.text.includes("|") || /[\r\n]/.test(step.text))
323
+ throw new Error("iftext needs one line of text without |");
324
+ arg = `${step.text} | ${line(step.step)}`;
325
+ } else
326
+ arg = `${token(step.id)} ${line(step.step)}`;
327
+ } else if ("seconds" in step && !("text" in step))
323
328
  arg = String(number(step.seconds));
324
329
  else if ("milliseconds" in step)
325
330
  arg = String(number(step.milliseconds));
package/dist/testing.d.ts CHANGED
@@ -111,6 +111,16 @@ export type SimulatorStep = {
111
111
  command: 'ifid';
112
112
  id: string;
113
113
  step: SimulatorStep;
114
+ }
115
+ /**
116
+ * Runs `step` only when something on screen shows this text, for content
117
+ * without identifiers: a web page's optional field that appears with a
118
+ * checkbox ticked, say.
119
+ */
120
+ | {
121
+ command: 'iftext';
122
+ text: string;
123
+ step: SimulatorStep;
114
124
  };
115
125
  /** Typed journeys use the same wire protocol as existing line-based scripts. */
116
126
  export declare function serializeSimulatorSteps(steps: readonly SimulatorStep[]): string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@craft-native/ios",
3
- "version": "0.0.415",
3
+ "version": "0.0.417",
4
4
  "homepage": "https://github.com/craft-native/craft/tree/main/packages/ios#readme",
5
5
  "repository": {
6
6
  "type": "git",
@@ -49,6 +49,7 @@ import Darwin
49
49
  /// unlabelled logs every hittable button without a label (FAIL if any)
50
50
  /// dismiss [label] a system prompt's button (default Not Now: "Save Password?")
51
51
  /// ifid <id> <command…> runs the command only when that element is there (a screen shown the first time)
52
+ /// iftext <text> | <command…> runs the command only when something shows text (web content has no identifiers)
52
53
  /// log <text>
53
54
  ///
54
55
  /// With a bundled journey.txt, evidence is kept as native XCTest attachments
@@ -296,6 +297,12 @@ final class DriverTests: XCTestCase {
296
297
  let rest = arg.split(separator: " ", maxSplits: 1).map(String.init)
297
298
  if rest.count == 2, identified(rest[0]).waitForExistence(timeout: 3) { note("ifid \(rest[0]): shown"); run(rest[1]) }
298
299
  else { note("ifid \(rest.first ?? ""): not shown") }
300
+ case "iftext":
301
+ guard let split = arg.range(of: " | ") else { check(false, "iftext needs text | command"); return }
302
+ let text = String(arg[..<split.lowerBound])
303
+ let guarded = String(arg[split.upperBound...])
304
+ if poll(3, { element(containing: text) }) != nil { note("iftext \(text): shown"); run(guarded) }
305
+ else { note("iftext \(text): not shown") }
299
306
  case "launch": app.launch()
300
307
  case "activate": app.activate()
301
308
  case "terminate": app.terminate()