testdriverai 7.1.0 → 7.1.2
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/.env.example +2 -0
- package/.github/workflows/linux-tests.yml +28 -0
- package/agent/index.js +18 -45
- package/agent/interface.js +13 -2
- package/agent/lib/commands.js +1 -1
- package/agent/lib/redraw.js +1 -1
- package/agent/lib/sandbox.js +30 -2
- package/agent/lib/valid-version.js +2 -2
- package/debugger/index.html +1 -1
- package/docs/docs.json +140 -131
- package/docs/v6/getting-started/self-hosting.mdx +3 -2
- package/docs/v7/_drafts/agents.mdx +852 -0
- package/docs/v7/_drafts/auto-cache-key.mdx +167 -0
- package/docs/v7/{guides → _drafts}/caching-selectors.mdx +125 -17
- package/docs/v7/_drafts/dashcam-title-feature.mdx +89 -0
- package/docs/v7/_drafts/error-handling.mdx +501 -0
- package/docs/v7/_drafts/implementation-plan.mdx +994 -0
- package/docs/v7/_drafts/init-command.mdx +95 -0
- package/docs/v7/_drafts/optimal-sdk-design.mdx +1348 -0
- package/docs/v7/_drafts/plugin-migration.mdx +222 -0
- package/docs/v7/_drafts/prompt-cache.mdx +200 -0
- package/docs/{QUICK_START_TEST_RECORDING.md → v7/_drafts/quick-start-test-recording.mdx} +3 -3
- package/docs/v7/_drafts/sdk-logging.mdx +222 -0
- package/docs/v7/_drafts/sdk-migration.mdx +474 -0
- package/docs/v7/_drafts/sdk-v7-complete.mdx +345 -0
- package/docs/v7/{guides → _drafts}/self-hosting.mdx +1 -1
- package/docs/v7/{guides → _drafts}/troubleshooting.mdx +2 -2
- package/docs/v7/{guides → _drafts}/vitest-plugin.mdx +4 -4
- package/docs/v7/api/{ai.mdx → act.mdx} +24 -24
- package/docs/v7/api/client.mdx +1 -1
- package/docs/v7/api/dashcam.mdx +2 -2
- package/docs/v7/api/elements.mdx +143 -41
- package/docs/v7/api/find.mdx +258 -0
- package/docs/v7/api/type.mdx +51 -7
- package/docs/v7/features/ai-native.mdx +427 -0
- package/docs/v7/features/easy-to-write.mdx +351 -0
- package/docs/v7/features/enterprise.mdx +540 -0
- package/docs/v7/features/fast.mdx +424 -0
- package/docs/v7/features/observable.mdx +623 -0
- package/docs/v7/features/powerful.mdx +531 -0
- package/docs/v7/features/scalable.mdx +417 -0
- package/docs/v7/features/stable.mdx +514 -0
- package/docs/v7/getting-started/configuration.mdx +1 -1
- package/docs/v7/getting-started/generating-tests.mdx +525 -0
- package/docs/v7/getting-started/installation.mdx +486 -0
- package/docs/v7/getting-started/quickstart.mdx +51 -5
- package/docs/v7/getting-started/running-and-debugging.mdx +511 -0
- package/docs/v7/getting-started/setting-up-in-ci.mdx +612 -0
- package/docs/v7/getting-started/writing-tests.mdx +535 -0
- package/docs/v7/overview/what-is-testdriver.mdx +398 -0
- package/docs/v7/playwright.mdx +3 -3
- package/docs/v7/presets/chrome.mdx +16 -0
- package/docs/v7/presets/electron.mdx +18 -0
- package/docs/v7/presets/vscode.mdx +19 -0
- package/examples/run-tests-with-recording.sh +70 -0
- package/examples/screenshot-example.js +63 -0
- package/examples/sdk-awesome-logs-demo.js +177 -0
- package/examples/sdk-cache-thresholds.js +96 -0
- package/examples/sdk-element-properties.js +155 -0
- package/examples/sdk-simple-example.js +65 -0
- package/examples/test-recording-example.test.js +166 -0
- package/interfaces/cli/commands/init.js +358 -0
- package/interfaces/vitest-plugin.mjs +214 -10
- package/{src → lib}/core/Dashcam.js +41 -4
- package/{src → lib}/vitest/hooks.mjs +118 -100
- package/lib/vitest/setup.mjs +44 -0
- package/package.json +9 -10
- package/sdk.d.ts +15 -2
- package/sdk.js +72 -17
- package/{self-hosted.yml → setup/aws/self-hosted.yml} +1 -1
- package/{testdriver/acceptance-sdk → test/manual}/test-console-logs.test.mjs +1 -1
- package/test/manual/test-find-api.js +73 -0
- package/test/manual/test-init.sh +54 -0
- package/test/manual/test-prompt-cache.js +96 -0
- package/test/manual/test-provision-auth.mjs +22 -0
- package/test/manual/test-sandbox-render.js +28 -0
- package/test/manual/test-sdk-methods.js +15 -0
- package/test/manual/test-sdk-refactor.js +53 -0
- package/test/manual/test-stack-trace.mjs +57 -0
- package/test/testdriver/assert.test.mjs +41 -0
- package/{testdriver/acceptance-sdk → test/testdriver}/auto-cache-key-demo.test.mjs +1 -1
- package/{testdriver/acceptance-sdk → test/testdriver}/drag-and-drop.test.mjs +1 -1
- package/{testdriver/acceptance-sdk → test/testdriver}/element-not-found.test.mjs +1 -1
- package/{testdriver/acceptance-sdk → test/testdriver}/exec-js.test.mjs +1 -1
- package/{testdriver/acceptance-sdk → test/testdriver}/exec-output.test.mjs +3 -3
- package/{testdriver/acceptance-sdk → test/testdriver}/exec-pwsh.test.mjs +3 -3
- package/{testdriver/acceptance-sdk → test/testdriver}/focus-window.test.mjs +1 -1
- package/{testdriver/acceptance-sdk → test/testdriver}/formatted-logging.test.mjs +1 -1
- package/{testdriver/acceptance-sdk → test/testdriver}/hover-image.test.mjs +1 -1
- package/{testdriver/acceptance-sdk → test/testdriver}/hover-text-with-description.test.mjs +1 -1
- package/{testdriver/acceptance-sdk → test/testdriver}/hover-text.test.mjs +1 -1
- package/{testdriver/acceptance-sdk → test/testdriver}/match-image.test.mjs +1 -1
- package/{testdriver/acceptance-sdk → test/testdriver}/press-keys.test.mjs +1 -1
- package/{testdriver/acceptance-sdk → test/testdriver}/prompt.test.mjs +2 -2
- package/{testdriver/acceptance-sdk → test/testdriver}/scroll-keyboard.test.mjs +1 -1
- package/{testdriver/acceptance-sdk → test/testdriver}/scroll-until-image.test.mjs +1 -1
- package/{testdriver/acceptance-sdk → test/testdriver}/scroll-until-text.test.mjs +1 -1
- package/{testdriver/acceptance-sdk → test/testdriver}/scroll.test.mjs +1 -1
- package/{src/vitest/lifecycle.mjs → test/testdriver/setup/lifecycleHelpers.mjs} +84 -99
- package/test/testdriver/setup/testHelpers.mjs +653 -0
- package/{testdriver/acceptance-sdk → test/testdriver}/type.test.mjs +1 -1
- package/vitest.config.mjs +8 -59
- package/.github/dependabot.yml +0 -11
- package/.github/workflows/acceptance-linux.yml +0 -75
- package/.github/workflows/acceptance-sdk-tests.yml +0 -133
- package/.github/workflows/acceptance-tests.yml +0 -130
- package/.github/workflows/lint.yml +0 -27
- package/.github/workflows/publish-canary.yml +0 -40
- package/.github/workflows/publish-latest.yml +0 -61
- package/.github/workflows/test-install.yml +0 -29
- package/.vscode/extensions.json +0 -3
- package/.vscode/launch.json +0 -22
- package/.vscode/settings.json +0 -14
- package/AGENTS.md +0 -550
- package/CODEOWNERS +0 -2
- package/_testdriver/acceptance/assert.yaml +0 -7
- package/_testdriver/acceptance/dashcam.yaml +0 -9
- package/_testdriver/acceptance/drag-and-drop.yaml +0 -49
- package/_testdriver/acceptance/embed.yaml +0 -9
- package/_testdriver/acceptance/exec-js.yaml +0 -29
- package/_testdriver/acceptance/exec-output.yaml +0 -43
- package/_testdriver/acceptance/exec-shell.yaml +0 -40
- package/_testdriver/acceptance/focus-window.yaml +0 -16
- package/_testdriver/acceptance/hover-image.yaml +0 -18
- package/_testdriver/acceptance/hover-text-with-description.yaml +0 -29
- package/_testdriver/acceptance/hover-text.yaml +0 -14
- package/_testdriver/acceptance/if-else.yaml +0 -31
- package/_testdriver/acceptance/match-image.yaml +0 -15
- package/_testdriver/acceptance/press-keys.yaml +0 -35
- package/_testdriver/acceptance/prompt.yaml +0 -11
- package/_testdriver/acceptance/remember.yaml +0 -27
- package/_testdriver/acceptance/screenshots/cart.png +0 -0
- package/_testdriver/acceptance/scroll-keyboard.yaml +0 -34
- package/_testdriver/acceptance/scroll-until-image.yaml +0 -26
- package/_testdriver/acceptance/scroll-until-text.yaml +0 -20
- package/_testdriver/acceptance/scroll.yaml +0 -33
- package/_testdriver/acceptance/snippets/login.yaml +0 -29
- package/_testdriver/acceptance/snippets/match-cart.yaml +0 -8
- package/_testdriver/acceptance/type.yaml +0 -29
- package/_testdriver/behavior/failure.yaml +0 -7
- package/_testdriver/behavior/hover-text.yaml +0 -13
- package/_testdriver/behavior/lifecycle/postrun.yaml +0 -10
- package/_testdriver/behavior/lifecycle/prerun.yaml +0 -8
- package/_testdriver/behavior/lifecycle/provision.yaml +0 -8
- package/_testdriver/behavior/secrets.yaml +0 -7
- package/_testdriver/edge-cases/dashcam-chrome.yaml +0 -8
- package/_testdriver/edge-cases/exec-pwsh-multiline.yaml +0 -10
- package/_testdriver/edge-cases/js-exception.yaml +0 -8
- package/_testdriver/edge-cases/js-promise.yaml +0 -19
- package/_testdriver/edge-cases/lifecycle/postrun.yaml +0 -10
- package/_testdriver/edge-cases/prompt-in-middle.yaml +0 -23
- package/_testdriver/edge-cases/prompt-nested.yaml +0 -7
- package/_testdriver/edge-cases/success-test.yaml +0 -9
- package/_testdriver/examples/android/example.yaml +0 -12
- package/_testdriver/examples/android/lifecycle/postrun.yaml +0 -11
- package/_testdriver/examples/android/lifecycle/provision.yaml +0 -47
- package/_testdriver/examples/android/readme.md +0 -7
- package/_testdriver/examples/chrome-extension/lifecycle/provision.yaml +0 -74
- package/_testdriver/examples/desktop/lifecycle/prerun.yaml +0 -0
- package/_testdriver/examples/desktop/lifecycle/provision.yaml +0 -64
- package/_testdriver/examples/vscode-extension/lifecycle/provision.yaml +0 -73
- package/_testdriver/examples/web/lifecycle/postrun.yaml +0 -7
- package/_testdriver/examples/web/lifecycle/prerun.yaml +0 -22
- package/_testdriver/lifecycle/postrun.yaml +0 -8
- package/_testdriver/lifecycle/prerun.yaml +0 -15
- package/_testdriver/lifecycle/provision.yaml +0 -25
- package/docs/v7/guides/ci-cd/azure.mdx +0 -587
- package/docs/v7/guides/ci-cd/circleci.mdx +0 -523
- package/docs/v7/guides/ci-cd/github-actions.mdx +0 -457
- package/docs/v7/guides/ci-cd/gitlab.mdx +0 -498
- package/docs/v7/guides/ci-cd/jenkins.mdx +0 -664
- package/docs/v7/guides/ci-cd/travis.mdx +0 -438
- package/scripts/view-test-results.mjs +0 -96
- package/src/vitest/extended.mjs +0 -108
- package/src/vitest/index.mjs +0 -64
- package/src/vitest/utils.mjs +0 -150
- package/styles/.vale-config/2-MDX.ini +0 -5
- package/styles/Microsoft/AMPM.yml +0 -9
- package/styles/Microsoft/Accessibility.yml +0 -30
- package/styles/Microsoft/Acronyms.yml +0 -64
- package/styles/Microsoft/Adverbs.yml +0 -272
- package/styles/Microsoft/Auto.yml +0 -11
- package/styles/Microsoft/Avoid.yml +0 -14
- package/styles/Microsoft/Contractions.yml +0 -50
- package/styles/Microsoft/Dashes.yml +0 -13
- package/styles/Microsoft/DateFormat.yml +0 -8
- package/styles/Microsoft/DateNumbers.yml +0 -40
- package/styles/Microsoft/DateOrder.yml +0 -8
- package/styles/Microsoft/Ellipses.yml +0 -9
- package/styles/Microsoft/FirstPerson.yml +0 -16
- package/styles/Microsoft/Foreign.yml +0 -13
- package/styles/Microsoft/Gender.yml +0 -8
- package/styles/Microsoft/GenderBias.yml +0 -42
- package/styles/Microsoft/GeneralURL.yml +0 -11
- package/styles/Microsoft/HeadingAcronyms.yml +0 -7
- package/styles/Microsoft/HeadingColons.yml +0 -8
- package/styles/Microsoft/HeadingPunctuation.yml +0 -13
- package/styles/Microsoft/Headings.yml +0 -28
- package/styles/Microsoft/Hyphens.yml +0 -14
- package/styles/Microsoft/Negative.yml +0 -13
- package/styles/Microsoft/Ordinal.yml +0 -13
- package/styles/Microsoft/OxfordComma.yml +0 -8
- package/styles/Microsoft/Passive.yml +0 -183
- package/styles/Microsoft/Percentages.yml +0 -7
- package/styles/Microsoft/Plurals.yml +0 -7
- package/styles/Microsoft/Quotes.yml +0 -7
- package/styles/Microsoft/RangeTime.yml +0 -13
- package/styles/Microsoft/Semicolon.yml +0 -8
- package/styles/Microsoft/SentenceLength.yml +0 -6
- package/styles/Microsoft/Spacing.yml +0 -8
- package/styles/Microsoft/Suspended.yml +0 -7
- package/styles/Microsoft/Terms.yml +0 -42
- package/styles/Microsoft/URLFormat.yml +0 -9
- package/styles/Microsoft/Units.yml +0 -16
- package/styles/Microsoft/Vocab.yml +0 -25
- package/styles/Microsoft/We.yml +0 -11
- package/styles/Microsoft/Wordiness.yml +0 -127
- package/styles/Microsoft/meta.json +0 -4
- package/styles/alex/Ablist.yml +0 -274
- package/styles/alex/Condescending.yml +0 -16
- package/styles/alex/Gendered.yml +0 -110
- package/styles/alex/LGBTQ.yml +0 -55
- package/styles/alex/OCD.yml +0 -10
- package/styles/alex/Press.yml +0 -12
- package/styles/alex/ProfanityLikely.yml +0 -1289
- package/styles/alex/ProfanityMaybe.yml +0 -282
- package/styles/alex/ProfanityUnlikely.yml +0 -251
- package/styles/alex/README.md +0 -27
- package/styles/alex/Race.yml +0 -85
- package/styles/alex/Suicide.yml +0 -26
- package/styles/alex/meta.json +0 -4
- package/styles/config/vocabularies/Docs/accept.txt +0 -47
- package/styles/config/vocabularies/Docs/reject.txt +0 -4
- package/styles/proselint/Airlinese.yml +0 -8
- package/styles/proselint/AnimalLabels.yml +0 -48
- package/styles/proselint/Annotations.yml +0 -9
- package/styles/proselint/Apologizing.yml +0 -8
- package/styles/proselint/Archaisms.yml +0 -52
- package/styles/proselint/But.yml +0 -8
- package/styles/proselint/Cliches.yml +0 -782
- package/styles/proselint/CorporateSpeak.yml +0 -30
- package/styles/proselint/Currency.yml +0 -5
- package/styles/proselint/Cursing.yml +0 -15
- package/styles/proselint/DateCase.yml +0 -7
- package/styles/proselint/DateMidnight.yml +0 -7
- package/styles/proselint/DateRedundancy.yml +0 -10
- package/styles/proselint/DateSpacing.yml +0 -7
- package/styles/proselint/DenizenLabels.yml +0 -52
- package/styles/proselint/Diacritical.yml +0 -95
- package/styles/proselint/GenderBias.yml +0 -45
- package/styles/proselint/GroupTerms.yml +0 -39
- package/styles/proselint/Hedging.yml +0 -8
- package/styles/proselint/Hyperbole.yml +0 -6
- package/styles/proselint/Jargon.yml +0 -11
- package/styles/proselint/LGBTOffensive.yml +0 -13
- package/styles/proselint/LGBTTerms.yml +0 -15
- package/styles/proselint/Malapropisms.yml +0 -8
- package/styles/proselint/Needless.yml +0 -358
- package/styles/proselint/Nonwords.yml +0 -38
- package/styles/proselint/Oxymorons.yml +0 -22
- package/styles/proselint/P-Value.yml +0 -6
- package/styles/proselint/RASSyndrome.yml +0 -30
- package/styles/proselint/README.md +0 -12
- package/styles/proselint/Skunked.yml +0 -13
- package/styles/proselint/Spelling.yml +0 -17
- package/styles/proselint/Typography.yml +0 -11
- package/styles/proselint/Uncomparables.yml +0 -50
- package/styles/proselint/Very.yml +0 -6
- package/styles/proselint/meta.json +0 -15
- package/styles/write-good/Cliches.yml +0 -702
- package/styles/write-good/E-Prime.yml +0 -32
- package/styles/write-good/Illusions.yml +0 -11
- package/styles/write-good/Passive.yml +0 -183
- package/styles/write-good/README.md +0 -27
- package/styles/write-good/So.yml +0 -5
- package/styles/write-good/ThereIs.yml +0 -6
- package/styles/write-good/TooWordy.yml +0 -221
- package/styles/write-good/Weasel.yml +0 -29
- package/styles/write-good/meta.json +0 -4
- package/test/dashcam.test.js +0 -137
- package/test/mcp-example-test.yaml +0 -27
- package/test/test_parser.js +0 -47
- package/testdriver/acceptance-sdk/QUICK_REFERENCE.md +0 -61
- package/testdriver/acceptance-sdk/README.md +0 -128
- package/testdriver/acceptance-sdk/TEST_REPORTING.md +0 -245
- package/testdriver/acceptance-sdk/assert.test.mjs +0 -26
- package/testdriver/acceptance-sdk/hooks-example.test.mjs +0 -38
- package/testdriver/acceptance-sdk/presets-example.test.mjs +0 -87
- package/testdriver/acceptance-sdk/setup/testHelpers.mjs +0 -420
- package/testdriver/acceptance-sdk/sully-ai.test.mjs +0 -234
- package/testdriver/acceptance-sdk/type-checking-demo.js +0 -49
- package/vale.ini +0 -18
- package/vitest.config.example.js +0 -19
- package/vitest.config.mjs.bak +0 -44
- /package/docs/{ARCHITECTURE.md → v7/_drafts/architecture.mdx} +0 -0
- /package/docs/{AWESOME_LOGS_QUICK_REF.md → v7/_drafts/awesome-logs-quick-ref.mdx} +0 -0
- /package/docs/v7/{guides → _drafts}/best-practices.mdx +0 -0
- /package/docs/v7/{guides → _drafts}/caching-ai.mdx +0 -0
- /package/docs/v7/{guides → _drafts}/caching.mdx +0 -0
- /package/docs/{MIGRATION.md → v7/_drafts/cli-to-sdk-migration.mdx} +0 -0
- /package/{CONTRIBUTING.md → docs/v7/_drafts/contributing.mdx} +0 -0
- /package/docs/v7/{progressive-apis/CORE.md → _drafts/core.mdx} +0 -0
- /package/docs/v7/{guides → _drafts}/debugging.mdx +0 -0
- /package/docs/v7/{guides → _drafts}/faq.mdx +0 -0
- /package/docs/v7/{progressive-apis/HOOKS.md → _drafts/hooks.mdx} +0 -0
- /package/docs/v7/{guides → _drafts}/migration.mdx +0 -0
- /package/docs/v7/{guides → _drafts}/performance.mdx +0 -0
- /package/docs/{PRESETS.md → v7/_drafts/presets.mdx} +0 -0
- /package/docs/v7/{progressive-apis/PROGRESSIVE_DISCLOSURE.md → _drafts/progressive-disclosure.mdx} +0 -0
- /package/docs/v7/{progressive-apis/PROVISION.md → _drafts/provision.mdx} +0 -0
- /package/docs/{SDK_AWESOME_LOGS.md → v7/_drafts/sdk-awesome-logs.mdx} +0 -0
- /package/docs/{sdk-browser-rendering.md → v7/_drafts/sdk-browser-rendering.mdx} +0 -0
- /package/docs/{TEST_RECORDING.md → v7/_drafts/test-recording.mdx} +0 -0
- /package/docs/v7/{guides → _drafts}/vitest.mdx +0 -0
- /package/docs/v7/{README.md → overview/readme.mdx} +0 -0
- /package/{src → lib}/core/index.d.ts +0 -0
- /package/{src → lib}/core/index.js +0 -0
- /package/{src → lib}/presets/index.mjs +0 -0
- /package/{src → lib}/vitest/hooks.d.ts +0 -0
- /package/{debug-locate-response.js → test/manual/debug-locate-response.js} +0 -0
- /package/{verify-element-api.js → test/manual/verify-element-api.js} +0 -0
- /package/{verify-types.js → test/manual/verify-types.js} +0 -0
- /package/{testdriver/acceptance-sdk → test/testdriver}/chrome-extension.test.mjs +0 -0
- /package/{testdriver/acceptance-sdk → test/testdriver}/setup/globalTeardown.mjs +0 -0
- /package/{testdriver/acceptance-sdk → test/testdriver}/setup/vitestSetup.mjs +0 -0
package/src/vitest/utils.mjs
DELETED
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Utility Functions for TestDriver Vitest Plugin
|
|
3
|
-
*
|
|
4
|
-
* General-purpose utilities for testing with TestDriver.
|
|
5
|
-
*
|
|
6
|
-
* @example
|
|
7
|
-
* import { retryAsync, setupEventLogging } from 'testdriverai/vitest';
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Set up detailed event logging for debugging
|
|
12
|
-
* @param {TestDriver} client - TestDriver client
|
|
13
|
-
*/
|
|
14
|
-
export function setupEventLogging(client) {
|
|
15
|
-
const emitter = client.getEmitter();
|
|
16
|
-
|
|
17
|
-
// Log all events
|
|
18
|
-
emitter.on("**", function (data) {
|
|
19
|
-
const event = this.event;
|
|
20
|
-
if (event.startsWith("log:debug")) return; // Skip debug logs
|
|
21
|
-
console.log(`[EVENT] ${event}`, data || "");
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
// Log command lifecycle
|
|
25
|
-
emitter.on("command:start", (data) => {
|
|
26
|
-
console.log("🚀 Command started:", data);
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
emitter.on("command:success", (data) => {
|
|
30
|
-
console.log("✅ Command succeeded:", data);
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
emitter.on("command:error", (data) => {
|
|
34
|
-
console.error("❌ Command error:", data);
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
// Log sandbox events
|
|
38
|
-
emitter.on("sandbox:connected", () => {
|
|
39
|
-
console.log("🔌 Sandbox connected");
|
|
40
|
-
});
|
|
41
|
-
|
|
42
|
-
emitter.on("sandbox:authenticated", () => {
|
|
43
|
-
console.log("🔐 Sandbox authenticated");
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
emitter.on("sandbox:error", (error) => {
|
|
47
|
-
console.error("⚠️ Sandbox error:", error);
|
|
48
|
-
});
|
|
49
|
-
|
|
50
|
-
// Log SDK API calls
|
|
51
|
-
emitter.on("sdk:request", (data) => {
|
|
52
|
-
console.log("📤 SDK Request:", data);
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
emitter.on("sdk:response", (data) => {
|
|
56
|
-
console.log("📥 SDK Response:", data);
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
/**
|
|
61
|
-
* Retry an async function with configurable attempts and delay
|
|
62
|
-
* @param {Function} fn - Async function to retry
|
|
63
|
-
* @param {number} retries - Number of retries (default: 3)
|
|
64
|
-
* @param {number} delay - Delay between retries in ms (default: 1000)
|
|
65
|
-
* @returns {Promise} Result of successful execution
|
|
66
|
-
* @throws {Error} Last error if all retries fail
|
|
67
|
-
*
|
|
68
|
-
* @example
|
|
69
|
-
* const result = await retryAsync(
|
|
70
|
-
* () => testdriver.find("Flaky Element"),
|
|
71
|
-
* 5,
|
|
72
|
-
* 2000
|
|
73
|
-
* );
|
|
74
|
-
*/
|
|
75
|
-
export async function retryAsync(fn, retries = 3, delay = 1000) {
|
|
76
|
-
let lastError;
|
|
77
|
-
|
|
78
|
-
for (let i = 0; i < retries; i++) {
|
|
79
|
-
try {
|
|
80
|
-
return await fn();
|
|
81
|
-
} catch (error) {
|
|
82
|
-
lastError = error;
|
|
83
|
-
if (i < retries - 1) {
|
|
84
|
-
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
throw lastError;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* Wait for a condition to be true
|
|
94
|
-
* @param {Function} condition - Function that returns boolean or Promise<boolean>
|
|
95
|
-
* @param {object} options - Wait options
|
|
96
|
-
* @param {number} options.timeout - Maximum time to wait in ms (default: 30000)
|
|
97
|
-
* @param {number} options.interval - Poll interval in ms (default: 500)
|
|
98
|
-
* @param {string} options.message - Error message if timeout (default: "Condition not met")
|
|
99
|
-
* @returns {Promise<boolean>} True if condition met
|
|
100
|
-
* @throws {Error} If timeout reached
|
|
101
|
-
*
|
|
102
|
-
* @example
|
|
103
|
-
* await waitFor(() => element.exists(), { timeout: 10000 });
|
|
104
|
-
*/
|
|
105
|
-
export async function waitFor(condition, options = {}) {
|
|
106
|
-
const {
|
|
107
|
-
timeout = 30000,
|
|
108
|
-
interval = 500,
|
|
109
|
-
message = "Condition not met within timeout"
|
|
110
|
-
} = options;
|
|
111
|
-
|
|
112
|
-
const startTime = Date.now();
|
|
113
|
-
|
|
114
|
-
while (Date.now() - startTime < timeout) {
|
|
115
|
-
try {
|
|
116
|
-
const result = await condition();
|
|
117
|
-
if (result) {
|
|
118
|
-
return true;
|
|
119
|
-
}
|
|
120
|
-
} catch (error) {
|
|
121
|
-
// Condition threw, keep polling
|
|
122
|
-
}
|
|
123
|
-
await new Promise(resolve => setTimeout(resolve, interval));
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
throw new Error(`${message} (timeout: ${timeout}ms)`);
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
/**
|
|
130
|
-
* Sleep for a specified duration
|
|
131
|
-
* @param {number} ms - Milliseconds to sleep
|
|
132
|
-
* @returns {Promise<void>}
|
|
133
|
-
*
|
|
134
|
-
* @example
|
|
135
|
-
* await sleep(1000); // Wait 1 second
|
|
136
|
-
*/
|
|
137
|
-
export function sleep(ms) {
|
|
138
|
-
return new Promise(resolve => setTimeout(resolve, ms));
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
/**
|
|
142
|
-
* Generate a unique test ID
|
|
143
|
-
* @param {string} prefix - Optional prefix for the ID
|
|
144
|
-
* @returns {string} Unique ID
|
|
145
|
-
*/
|
|
146
|
-
export function generateTestId(prefix = "test") {
|
|
147
|
-
const timestamp = Date.now().toString(36);
|
|
148
|
-
const random = Math.random().toString(36).substring(2, 8);
|
|
149
|
-
return `${prefix}-${timestamp}-${random}`;
|
|
150
|
-
}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
extends: existence
|
|
2
|
-
message: Use 'AM' or 'PM' (preceded by a space).
|
|
3
|
-
link: https://docs.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/term-collections/date-time-terms
|
|
4
|
-
level: error
|
|
5
|
-
nonword: true
|
|
6
|
-
tokens:
|
|
7
|
-
- '\d{1,2}[AP]M'
|
|
8
|
-
- '\d{1,2} ?[ap]m'
|
|
9
|
-
- '\d{1,2} ?[aApP]\.[mM]\.'
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
extends: existence
|
|
2
|
-
message: "Don't use language (such as '%s') that defines people by their disability."
|
|
3
|
-
link: https://docs.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/term-collections/accessibility-terms
|
|
4
|
-
level: suggestion
|
|
5
|
-
ignorecase: true
|
|
6
|
-
tokens:
|
|
7
|
-
- a victim of
|
|
8
|
-
- able-bodied
|
|
9
|
-
- an epileptic
|
|
10
|
-
- birth defect
|
|
11
|
-
- crippled
|
|
12
|
-
- differently abled
|
|
13
|
-
- disabled
|
|
14
|
-
- dumb
|
|
15
|
-
- handicapped
|
|
16
|
-
- handicaps
|
|
17
|
-
- healthy person
|
|
18
|
-
- hearing-impaired
|
|
19
|
-
- lame
|
|
20
|
-
- maimed
|
|
21
|
-
- mentally handicapped
|
|
22
|
-
- missing a limb
|
|
23
|
-
- mute
|
|
24
|
-
- non-verbal
|
|
25
|
-
- normal person
|
|
26
|
-
- sight-impaired
|
|
27
|
-
- slow learner
|
|
28
|
-
- stricken with
|
|
29
|
-
- suffers from
|
|
30
|
-
- vision-impaired
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
extends: conditional
|
|
2
|
-
message: "'%s' has no definition."
|
|
3
|
-
link: https://docs.microsoft.com/en-us/style-guide/acronyms
|
|
4
|
-
level: suggestion
|
|
5
|
-
ignorecase: false
|
|
6
|
-
# Ensures that the existence of 'first' implies the existence of 'second'.
|
|
7
|
-
first: '\b([A-Z]{3,5})\b'
|
|
8
|
-
second: '(?:\b[A-Z][a-z]+ )+\(([A-Z]{3,5})\)'
|
|
9
|
-
# ... with the exception of these:
|
|
10
|
-
exceptions:
|
|
11
|
-
- API
|
|
12
|
-
- ASP
|
|
13
|
-
- CLI
|
|
14
|
-
- CPU
|
|
15
|
-
- CSS
|
|
16
|
-
- CSV
|
|
17
|
-
- DEBUG
|
|
18
|
-
- DOM
|
|
19
|
-
- DPI
|
|
20
|
-
- FAQ
|
|
21
|
-
- GCC
|
|
22
|
-
- GDB
|
|
23
|
-
- GET
|
|
24
|
-
- GPU
|
|
25
|
-
- GTK
|
|
26
|
-
- GUI
|
|
27
|
-
- HTML
|
|
28
|
-
- HTTP
|
|
29
|
-
- HTTPS
|
|
30
|
-
- IDE
|
|
31
|
-
- JAR
|
|
32
|
-
- JSON
|
|
33
|
-
- JSX
|
|
34
|
-
- LESS
|
|
35
|
-
- LLDB
|
|
36
|
-
- NET
|
|
37
|
-
- NOTE
|
|
38
|
-
- NVDA
|
|
39
|
-
- OSS
|
|
40
|
-
- PATH
|
|
41
|
-
- PDF
|
|
42
|
-
- PHP
|
|
43
|
-
- POST
|
|
44
|
-
- RAM
|
|
45
|
-
- REPL
|
|
46
|
-
- RSA
|
|
47
|
-
- SCM
|
|
48
|
-
- SCSS
|
|
49
|
-
- SDK
|
|
50
|
-
- SQL
|
|
51
|
-
- SSH
|
|
52
|
-
- SSL
|
|
53
|
-
- SVG
|
|
54
|
-
- TBD
|
|
55
|
-
- TCP
|
|
56
|
-
- TODO
|
|
57
|
-
- URI
|
|
58
|
-
- URL
|
|
59
|
-
- USB
|
|
60
|
-
- UTF
|
|
61
|
-
- XML
|
|
62
|
-
- XSS
|
|
63
|
-
- YAML
|
|
64
|
-
- ZIP
|
|
@@ -1,272 +0,0 @@
|
|
|
1
|
-
extends: existence
|
|
2
|
-
message: "Remove '%s' if it's not important to the meaning of the statement."
|
|
3
|
-
link: https://docs.microsoft.com/en-us/style-guide/word-choice/use-simple-words-concise-sentences
|
|
4
|
-
ignorecase: true
|
|
5
|
-
level: warning
|
|
6
|
-
action:
|
|
7
|
-
name: remove
|
|
8
|
-
tokens:
|
|
9
|
-
- abnormally
|
|
10
|
-
- absentmindedly
|
|
11
|
-
- accidentally
|
|
12
|
-
- adventurously
|
|
13
|
-
- anxiously
|
|
14
|
-
- arrogantly
|
|
15
|
-
- awkwardly
|
|
16
|
-
- bashfully
|
|
17
|
-
- beautifully
|
|
18
|
-
- bitterly
|
|
19
|
-
- bleakly
|
|
20
|
-
- blindly
|
|
21
|
-
- blissfully
|
|
22
|
-
- boastfully
|
|
23
|
-
- boldly
|
|
24
|
-
- bravely
|
|
25
|
-
- briefly
|
|
26
|
-
- brightly
|
|
27
|
-
- briskly
|
|
28
|
-
- broadly
|
|
29
|
-
- busily
|
|
30
|
-
- calmly
|
|
31
|
-
- carefully
|
|
32
|
-
- carelessly
|
|
33
|
-
- cautiously
|
|
34
|
-
- cheerfully
|
|
35
|
-
- cleverly
|
|
36
|
-
- closely
|
|
37
|
-
- coaxingly
|
|
38
|
-
- colorfully
|
|
39
|
-
- continually
|
|
40
|
-
- coolly
|
|
41
|
-
- courageously
|
|
42
|
-
- crossly
|
|
43
|
-
- cruelly
|
|
44
|
-
- curiously
|
|
45
|
-
- daintily
|
|
46
|
-
- dearly
|
|
47
|
-
- deceivingly
|
|
48
|
-
- deeply
|
|
49
|
-
- defiantly
|
|
50
|
-
- deliberately
|
|
51
|
-
- delightfully
|
|
52
|
-
- diligently
|
|
53
|
-
- dimly
|
|
54
|
-
- doubtfully
|
|
55
|
-
- dreamily
|
|
56
|
-
- easily
|
|
57
|
-
- effectively
|
|
58
|
-
- elegantly
|
|
59
|
-
- energetically
|
|
60
|
-
- enormously
|
|
61
|
-
- enthusiastically
|
|
62
|
-
- excitedly
|
|
63
|
-
- extremely
|
|
64
|
-
- fairly
|
|
65
|
-
- faithfully
|
|
66
|
-
- famously
|
|
67
|
-
- ferociously
|
|
68
|
-
- fervently
|
|
69
|
-
- fiercely
|
|
70
|
-
- fondly
|
|
71
|
-
- foolishly
|
|
72
|
-
- fortunately
|
|
73
|
-
- frankly
|
|
74
|
-
- frantically
|
|
75
|
-
- freely
|
|
76
|
-
- frenetically
|
|
77
|
-
- frightfully
|
|
78
|
-
- furiously
|
|
79
|
-
- generally
|
|
80
|
-
- generously
|
|
81
|
-
- gently
|
|
82
|
-
- gladly
|
|
83
|
-
- gleefully
|
|
84
|
-
- gracefully
|
|
85
|
-
- gratefully
|
|
86
|
-
- greatly
|
|
87
|
-
- greedily
|
|
88
|
-
- happily
|
|
89
|
-
- hastily
|
|
90
|
-
- healthily
|
|
91
|
-
- heavily
|
|
92
|
-
- helplessly
|
|
93
|
-
- honestly
|
|
94
|
-
- hopelessly
|
|
95
|
-
- hungrily
|
|
96
|
-
- innocently
|
|
97
|
-
- inquisitively
|
|
98
|
-
- intensely
|
|
99
|
-
- intently
|
|
100
|
-
- interestingly
|
|
101
|
-
- inwardly
|
|
102
|
-
- irritably
|
|
103
|
-
- jaggedly
|
|
104
|
-
- jealously
|
|
105
|
-
- jovially
|
|
106
|
-
- joyfully
|
|
107
|
-
- joyously
|
|
108
|
-
- jubilantly
|
|
109
|
-
- judgmentally
|
|
110
|
-
- justly
|
|
111
|
-
- keenly
|
|
112
|
-
- kiddingly
|
|
113
|
-
- kindheartedly
|
|
114
|
-
- knavishly
|
|
115
|
-
- knowingly
|
|
116
|
-
- knowledgeably
|
|
117
|
-
- lazily
|
|
118
|
-
- lightly
|
|
119
|
-
- limply
|
|
120
|
-
- lively
|
|
121
|
-
- loftily
|
|
122
|
-
- longingly
|
|
123
|
-
- loosely
|
|
124
|
-
- loudly
|
|
125
|
-
- lovingly
|
|
126
|
-
- loyally
|
|
127
|
-
- madly
|
|
128
|
-
- majestically
|
|
129
|
-
- meaningfully
|
|
130
|
-
- mechanically
|
|
131
|
-
- merrily
|
|
132
|
-
- miserably
|
|
133
|
-
- mockingly
|
|
134
|
-
- mortally
|
|
135
|
-
- mysteriously
|
|
136
|
-
- naturally
|
|
137
|
-
- nearly
|
|
138
|
-
- neatly
|
|
139
|
-
- nervously
|
|
140
|
-
- nicely
|
|
141
|
-
- noisily
|
|
142
|
-
- obediently
|
|
143
|
-
- obnoxiously
|
|
144
|
-
- oddly
|
|
145
|
-
- offensively
|
|
146
|
-
- optimistically
|
|
147
|
-
- overconfidently
|
|
148
|
-
- painfully
|
|
149
|
-
- partially
|
|
150
|
-
- patiently
|
|
151
|
-
- perfectly
|
|
152
|
-
- playfully
|
|
153
|
-
- politely
|
|
154
|
-
- poorly
|
|
155
|
-
- positively
|
|
156
|
-
- potentially
|
|
157
|
-
- powerfully
|
|
158
|
-
- promptly
|
|
159
|
-
- properly
|
|
160
|
-
- punctually
|
|
161
|
-
- quaintly
|
|
162
|
-
- queasily
|
|
163
|
-
- queerly
|
|
164
|
-
- questionably
|
|
165
|
-
- quickly
|
|
166
|
-
- quietly
|
|
167
|
-
- quirkily
|
|
168
|
-
- quite
|
|
169
|
-
- quizzically
|
|
170
|
-
- randomly
|
|
171
|
-
- rapidly
|
|
172
|
-
- rarely
|
|
173
|
-
- readily
|
|
174
|
-
- really
|
|
175
|
-
- reassuringly
|
|
176
|
-
- recklessly
|
|
177
|
-
- regularly
|
|
178
|
-
- reluctantly
|
|
179
|
-
- repeatedly
|
|
180
|
-
- reproachfully
|
|
181
|
-
- restfully
|
|
182
|
-
- righteously
|
|
183
|
-
- rightfully
|
|
184
|
-
- rigidly
|
|
185
|
-
- roughly
|
|
186
|
-
- rudely
|
|
187
|
-
- safely
|
|
188
|
-
- scarcely
|
|
189
|
-
- scarily
|
|
190
|
-
- searchingly
|
|
191
|
-
- sedately
|
|
192
|
-
- seemingly
|
|
193
|
-
- selfishly
|
|
194
|
-
- separately
|
|
195
|
-
- seriously
|
|
196
|
-
- shakily
|
|
197
|
-
- sharply
|
|
198
|
-
- sheepishly
|
|
199
|
-
- shrilly
|
|
200
|
-
- shyly
|
|
201
|
-
- silently
|
|
202
|
-
- sleepily
|
|
203
|
-
- slowly
|
|
204
|
-
- smoothly
|
|
205
|
-
- softly
|
|
206
|
-
- solemnly
|
|
207
|
-
- solidly
|
|
208
|
-
- speedily
|
|
209
|
-
- stealthily
|
|
210
|
-
- sternly
|
|
211
|
-
- strictly
|
|
212
|
-
- suddenly
|
|
213
|
-
- supposedly
|
|
214
|
-
- surprisingly
|
|
215
|
-
- suspiciously
|
|
216
|
-
- sweetly
|
|
217
|
-
- swiftly
|
|
218
|
-
- sympathetically
|
|
219
|
-
- tenderly
|
|
220
|
-
- tensely
|
|
221
|
-
- terribly
|
|
222
|
-
- thankfully
|
|
223
|
-
- thoroughly
|
|
224
|
-
- thoughtfully
|
|
225
|
-
- tightly
|
|
226
|
-
- tremendously
|
|
227
|
-
- triumphantly
|
|
228
|
-
- truthfully
|
|
229
|
-
- ultimately
|
|
230
|
-
- unabashedly
|
|
231
|
-
- unaccountably
|
|
232
|
-
- unbearably
|
|
233
|
-
- unethically
|
|
234
|
-
- unexpectedly
|
|
235
|
-
- unfortunately
|
|
236
|
-
- unimpressively
|
|
237
|
-
- unnaturally
|
|
238
|
-
- unnecessarily
|
|
239
|
-
- urgently
|
|
240
|
-
- usefully
|
|
241
|
-
- uselessly
|
|
242
|
-
- utterly
|
|
243
|
-
- vacantly
|
|
244
|
-
- vaguely
|
|
245
|
-
- vainly
|
|
246
|
-
- valiantly
|
|
247
|
-
- vastly
|
|
248
|
-
- verbally
|
|
249
|
-
- very
|
|
250
|
-
- viciously
|
|
251
|
-
- victoriously
|
|
252
|
-
- violently
|
|
253
|
-
- vivaciously
|
|
254
|
-
- voluntarily
|
|
255
|
-
- warmly
|
|
256
|
-
- weakly
|
|
257
|
-
- wearily
|
|
258
|
-
- wetly
|
|
259
|
-
- wholly
|
|
260
|
-
- wildly
|
|
261
|
-
- willfully
|
|
262
|
-
- wisely
|
|
263
|
-
- woefully
|
|
264
|
-
- wonderfully
|
|
265
|
-
- worriedly
|
|
266
|
-
- yawningly
|
|
267
|
-
- yearningly
|
|
268
|
-
- yieldingly
|
|
269
|
-
- youthfully
|
|
270
|
-
- zealously
|
|
271
|
-
- zestfully
|
|
272
|
-
- zestily
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
extends: existence
|
|
2
|
-
message: "In general, don't hyphenate '%s'."
|
|
3
|
-
link: https://docs.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/a/auto
|
|
4
|
-
ignorecase: true
|
|
5
|
-
level: error
|
|
6
|
-
action:
|
|
7
|
-
name: convert
|
|
8
|
-
params:
|
|
9
|
-
- simple
|
|
10
|
-
tokens:
|
|
11
|
-
- 'auto-\w+'
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
extends: existence
|
|
2
|
-
message: "Don't use '%s'. See the A-Z word list for details."
|
|
3
|
-
# See the A-Z word list
|
|
4
|
-
link: https://docs.microsoft.com/en-us/style-guide
|
|
5
|
-
ignorecase: true
|
|
6
|
-
level: error
|
|
7
|
-
tokens:
|
|
8
|
-
- abortion
|
|
9
|
-
- and so on
|
|
10
|
-
- app(?:lication)?s? (?:developer|program)
|
|
11
|
-
- app(?:lication)? file
|
|
12
|
-
- backbone
|
|
13
|
-
- backend
|
|
14
|
-
- contiguous selection
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
extends: substitution
|
|
2
|
-
message: "Use '%s' instead of '%s'."
|
|
3
|
-
link: https://docs.microsoft.com/en-us/style-guide/word-choice/use-contractions
|
|
4
|
-
level: error
|
|
5
|
-
ignorecase: true
|
|
6
|
-
action:
|
|
7
|
-
name: replace
|
|
8
|
-
swap:
|
|
9
|
-
are not: aren't
|
|
10
|
-
cannot: can't
|
|
11
|
-
could not: couldn't
|
|
12
|
-
did not: didn't
|
|
13
|
-
do not: don't
|
|
14
|
-
does not: doesn't
|
|
15
|
-
has not: hasn't
|
|
16
|
-
have not: haven't
|
|
17
|
-
how is: how's
|
|
18
|
-
is not: isn't
|
|
19
|
-
|
|
20
|
-
'it is(?!\.)': it's
|
|
21
|
-
'it''s(?=\.)': it is
|
|
22
|
-
|
|
23
|
-
should not: shouldn't
|
|
24
|
-
|
|
25
|
-
"that is(?![.,])": that's
|
|
26
|
-
'that''s(?=\.)': that is
|
|
27
|
-
|
|
28
|
-
'they are(?!\.)': they're
|
|
29
|
-
'they''re(?=\.)': they are
|
|
30
|
-
|
|
31
|
-
was not: wasn't
|
|
32
|
-
|
|
33
|
-
'we are(?!\.)': we're
|
|
34
|
-
'we''re(?=\.)': we are
|
|
35
|
-
|
|
36
|
-
'we have(?!\.)': we've
|
|
37
|
-
'we''ve(?=\.)': we have
|
|
38
|
-
|
|
39
|
-
were not: weren't
|
|
40
|
-
|
|
41
|
-
'what is(?!\.)': what's
|
|
42
|
-
'what''s(?=\.)': what is
|
|
43
|
-
|
|
44
|
-
'when is(?!\.)': when's
|
|
45
|
-
'when''s(?=\.)': when is
|
|
46
|
-
|
|
47
|
-
'where is(?!\.)': where's
|
|
48
|
-
'where''s(?=\.)': where is
|
|
49
|
-
|
|
50
|
-
will not: won't
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
extends: existence
|
|
2
|
-
message: "Remove the spaces around '%s'."
|
|
3
|
-
link: https://docs.microsoft.com/en-us/style-guide/punctuation/dashes-hyphens/emes
|
|
4
|
-
ignorecase: true
|
|
5
|
-
nonword: true
|
|
6
|
-
level: error
|
|
7
|
-
action:
|
|
8
|
-
name: edit
|
|
9
|
-
params:
|
|
10
|
-
- trim
|
|
11
|
-
- " "
|
|
12
|
-
tokens:
|
|
13
|
-
- '\s[—–]\s|\s[—–]|[—–]\s'
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
extends: existence
|
|
2
|
-
message: Use 'July 31, 2016' format, not '%s'.
|
|
3
|
-
link: https://docs.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/term-collections/date-time-terms
|
|
4
|
-
ignorecase: true
|
|
5
|
-
level: error
|
|
6
|
-
nonword: true
|
|
7
|
-
tokens:
|
|
8
|
-
- '\d{1,2} (?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)|May|Jun(?:e)|Jul(?:y)|Aug(?:ust)|Sep(?:tember)?|Oct(?:ober)|Nov(?:ember)?|Dec(?:ember)?) \d{4}'
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
extends: existence
|
|
2
|
-
message: "Don't use ordinal numbers for dates."
|
|
3
|
-
link: https://docs.microsoft.com/en-us/style-guide/numbers#numbers-in-dates
|
|
4
|
-
level: error
|
|
5
|
-
nonword: true
|
|
6
|
-
ignorecase: true
|
|
7
|
-
raw:
|
|
8
|
-
- \b(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)|May|Jun(?:e)|Jul(?:y)|Aug(?:ust)|Sep(?:tember)?|Oct(?:ober)|Nov(?:ember)?|Dec(?:ember)?)\b\s*
|
|
9
|
-
tokens:
|
|
10
|
-
- first
|
|
11
|
-
- second
|
|
12
|
-
- third
|
|
13
|
-
- fourth
|
|
14
|
-
- fifth
|
|
15
|
-
- sixth
|
|
16
|
-
- seventh
|
|
17
|
-
- eighth
|
|
18
|
-
- ninth
|
|
19
|
-
- tenth
|
|
20
|
-
- eleventh
|
|
21
|
-
- twelfth
|
|
22
|
-
- thirteenth
|
|
23
|
-
- fourteenth
|
|
24
|
-
- fifteenth
|
|
25
|
-
- sixteenth
|
|
26
|
-
- seventeenth
|
|
27
|
-
- eighteenth
|
|
28
|
-
- nineteenth
|
|
29
|
-
- twentieth
|
|
30
|
-
- twenty-first
|
|
31
|
-
- twenty-second
|
|
32
|
-
- twenty-third
|
|
33
|
-
- twenty-fourth
|
|
34
|
-
- twenty-fifth
|
|
35
|
-
- twenty-sixth
|
|
36
|
-
- twenty-seventh
|
|
37
|
-
- twenty-eighth
|
|
38
|
-
- twenty-ninth
|
|
39
|
-
- thirtieth
|
|
40
|
-
- thirty-first
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
extends: existence
|
|
2
|
-
message: "Use first person (such as '%s') sparingly."
|
|
3
|
-
link: https://docs.microsoft.com/en-us/style-guide/grammar/person
|
|
4
|
-
ignorecase: true
|
|
5
|
-
level: warning
|
|
6
|
-
nonword: true
|
|
7
|
-
tokens:
|
|
8
|
-
- (?:^|\s)I(?=\s)
|
|
9
|
-
- (?:^|\s)I(?=,\s)
|
|
10
|
-
- \bI'd\b
|
|
11
|
-
- \bI'll\b
|
|
12
|
-
- \bI'm\b
|
|
13
|
-
- \bI've\b
|
|
14
|
-
- \bme\b
|
|
15
|
-
- \bmy\b
|
|
16
|
-
- \bmine\b
|