From 6b60fa9e8da07a03c367bda33de08e5d137ed4b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20B=C3=B6hm?= Date: Fri, 9 Oct 2020 12:13:57 -0700 Subject: [PATCH 01/12] feat(docs): Add JSDocs to exported functions --- readme.md | 4 ++-- src/parse.ts | 30 +++++++++++++++++++++++++----- src/stringify.ts | 9 +++++++-- 3 files changed, 34 insertions(+), 9 deletions(-) diff --git a/readme.md b/readme.md index 26f95dec..e9c3e9b3 100644 --- a/readme.md +++ b/readme.md @@ -25,11 +25,11 @@ CSSwhat.parse("foo[bar]:baz") ## API -**`CSSwhat.parse(str, options)` - Parses `str`, optionally with the passed `options`.** +**`CSSwhat.parse(selector, options)` - Parses `selector`, optionally with the passed `options`.** The function returns a two-dimensional array. The first array represents selectors separated by commas (eg. `sub1, sub2`), the second contains the relevant tokens for that selector. Possible token types are: -| name | attributes | example | output | +| name | properties | example | output | | ---------------- | --------------------------------------- | ------------- | ---------------------------------------------------------------------------------------- | | `tag` | `name` | `div` | `{ type: 'tag', name: 'div' }` | | `universal` | - | `*` | `{ type: 'universal' }` | diff --git a/src/parse.ts b/src/parse.ts index 2f9d2849..51b972ad 100644 --- a/src/parse.ts +++ b/src/parse.ts @@ -1,10 +1,18 @@ -"use strict"; - -export default parse; - export interface Options { + /** + * When false, tag names will not be lowercased. + * @default true + */ lowerCaseAttributeNames?: boolean; + /** + * When false, attribute names will not be lowercased. + * @default true + */ lowerCaseTags?: boolean; + /** + * When `true`, `xmlMode` implies both `lowerCaseTags` and `lowerCaseAttributeNames` are set to `false`. + * @default false + */ xmlMode?: boolean; } @@ -131,7 +139,19 @@ function isWhitespace(c: string) { return c === " " || c === "\n" || c === "\t" || c === "\f" || c === "\r"; } -function parse(selector: string, options?: Options): Selector[][] { +/** + * Parses `selector`, optionally with the passed `options`. + * + * @param selector Selector to parse. + * @param options Options for parsing. + * @returns Returns a two-dimensional array. + * The first dimension represents selectors separated by commas (eg. `sub1, sub2`), + * the second contains the relevant tokens for that selector. + */ +export default function parse( + selector: string, + options?: Options +): Selector[][] { const subselects: Selector[][] = []; selector = parseSelector(subselects, `${selector}`, options); diff --git a/src/stringify.ts b/src/stringify.ts index b60b8cfe..1970469c 100644 --- a/src/stringify.ts +++ b/src/stringify.ts @@ -21,8 +21,13 @@ const charsToEscape = new Set([ "\\", ]); -export default function stringify(token: Selector[][]): string { - return token.map(stringifySubselector).join(", "); +/** + * Turns `selector` back into a string. + * + * @param selector Selector to stringify. + */ +export default function stringify(selector: Selector[][]): string { + return selector.map(stringifySubselector).join(", "); } function stringifySubselector(token: Selector[]): string { From f6365fef3d3216b6338455d26b1a659ed804425a Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Sat, 10 Oct 2020 07:55:04 +0000 Subject: [PATCH 02/12] chore(deps-dev): Bump eslint from 7.10.0 to 7.11.0 Bumps [eslint](https://github.com/eslint/eslint) from 7.10.0 to 7.11.0. - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/master/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/compare/v7.10.0...v7.11.0) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index a23577c1..e8ccf292 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2128,9 +2128,9 @@ } }, "eslint": { - "version": "7.10.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.10.0.tgz", - "integrity": "sha512-BDVffmqWl7JJXqCjAK6lWtcQThZB/aP1HXSH1JKwGwv0LQEdvpR7qzNrUT487RM39B5goWuboFad5ovMBmD8yA==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.11.0.tgz", + "integrity": "sha512-G9+qtYVCHaDi1ZuWzBsOWo2wSwd70TXnU6UHA3cTYHp7gCTXZcpggWFoUVAMRarg68qtPoNfFbzPh+VdOgmwmw==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", @@ -2143,7 +2143,7 @@ "enquirer": "^2.3.5", "eslint-scope": "^5.1.1", "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^1.3.0", + "eslint-visitor-keys": "^2.0.0", "espree": "^7.3.0", "esquery": "^1.2.0", "esutils": "^2.0.2", @@ -2182,12 +2182,6 @@ "supports-color": "^7.1.0" } }, - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - }, "ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", From 0b6bc0fd4472095569397cd8d0bc1eda944df029 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Sun, 11 Oct 2020 17:58:26 +0000 Subject: [PATCH 03/12] chore(deps-dev): Bump jest from 26.5.2 to 26.5.3 Bumps [jest](https://github.com/facebook/jest) from 26.5.2 to 26.5.3. - [Release notes](https://github.com/facebook/jest/releases) - [Changelog](https://github.com/facebook/jest/blob/master/CHANGELOG.md) - [Commits](https://github.com/facebook/jest/compare/v26.5.2...v26.5.3) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 162 +++++++++++++++++++++++----------------------- 1 file changed, 81 insertions(+), 81 deletions(-) diff --git a/package-lock.json b/package-lock.json index e8ccf292..feee551b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -519,13 +519,13 @@ } }, "@jest/core": { - "version": "26.5.2", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-26.5.2.tgz", - "integrity": "sha512-LLTo1LQMg7eJjG/+P1NYqFof2B25EV1EqzD5FonklihG4UJKiK2JBIvWonunws6W7e+DhNLoFD+g05tCY03eyA==", + "version": "26.5.3", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-26.5.3.tgz", + "integrity": "sha512-CiU0UKFF1V7KzYTVEtFbFmGLdb2g4aTtY0WlyUfLgj/RtoTnJFhh50xKKr7OYkdmBUlGFSa2mD1TU3UZ6OLd4g==", "dev": true, "requires": { "@jest/console": "^26.5.2", - "@jest/reporters": "^26.5.2", + "@jest/reporters": "^26.5.3", "@jest/test-result": "^26.5.2", "@jest/transform": "^26.5.2", "@jest/types": "^26.5.2", @@ -535,17 +535,17 @@ "exit": "^0.1.2", "graceful-fs": "^4.2.4", "jest-changed-files": "^26.5.2", - "jest-config": "^26.5.2", + "jest-config": "^26.5.3", "jest-haste-map": "^26.5.2", "jest-message-util": "^26.5.2", "jest-regex-util": "^26.0.0", "jest-resolve": "^26.5.2", - "jest-resolve-dependencies": "^26.5.2", - "jest-runner": "^26.5.2", - "jest-runtime": "^26.5.2", - "jest-snapshot": "^26.5.2", + "jest-resolve-dependencies": "^26.5.3", + "jest-runner": "^26.5.3", + "jest-runtime": "^26.5.3", + "jest-snapshot": "^26.5.3", "jest-util": "^26.5.2", - "jest-validate": "^26.5.2", + "jest-validate": "^26.5.3", "jest-watcher": "^26.5.2", "micromatch": "^4.0.2", "p-each-series": "^2.1.0", @@ -692,14 +692,14 @@ } }, "@jest/globals": { - "version": "26.5.2", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.5.2.tgz", - "integrity": "sha512-9PmnFsAUJxpPt1s/stq02acS1YHliVBDNfAWMe1bwdRr1iTCfhbNt3ERQXrO/ZfZSweftoA26Q/2yhSVSWQ3sw==", + "version": "26.5.3", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.5.3.tgz", + "integrity": "sha512-7QztI0JC2CuB+Wx1VdnOUNeIGm8+PIaqngYsZXQCkH2QV0GFqzAYc9BZfU0nuqA6cbYrWh5wkuMzyii3P7deug==", "dev": true, "requires": { "@jest/environment": "^26.5.2", "@jest/types": "^26.5.2", - "expect": "^26.5.2" + "expect": "^26.5.3" }, "dependencies": { "@jest/types": { @@ -737,9 +737,9 @@ } }, "@jest/reporters": { - "version": "26.5.2", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-26.5.2.tgz", - "integrity": "sha512-zvq6Wvy6MmJq/0QY0YfOPb49CXKSf42wkJbrBPkeypVa8I+XDxijvFuywo6TJBX/ILPrdrlE/FW9vJZh6Rf9vA==", + "version": "26.5.3", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-26.5.3.tgz", + "integrity": "sha512-X+vR0CpfMQzYcYmMFKNY9n4jklcb14Kffffp7+H/MqitWnb0440bW2L76NGWKAa+bnXhNoZr+lCVtdtPmfJVOQ==", "dev": true, "requires": { "@bcoe/v8-coverage": "^0.2.3", @@ -766,7 +766,7 @@ "source-map": "^0.6.0", "string-length": "^4.0.1", "terminal-link": "^2.0.0", - "v8-to-istanbul": "^5.0.1" + "v8-to-istanbul": "^6.0.1" }, "dependencies": { "@jest/types": { @@ -861,16 +861,16 @@ } }, "@jest/test-sequencer": { - "version": "26.5.2", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.5.2.tgz", - "integrity": "sha512-XmGEh7hh07H2B8mHLFCIgr7gA5Y6Hw1ZATIsbz2fOhpnQ5AnQtZk0gmP0Q5/+mVB2xygO64tVFQxOajzoptkNA==", + "version": "26.5.3", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.5.3.tgz", + "integrity": "sha512-Wqzb7aQ13L3T47xHdpUqYMOpiqz6Dx2QDDghp5AV/eUDXR7JieY+E1s233TQlNyl+PqtqgjVokmyjzX/HA51BA==", "dev": true, "requires": { "@jest/test-result": "^26.5.2", "graceful-fs": "^4.2.4", "jest-haste-map": "^26.5.2", - "jest-runner": "^26.5.2", - "jest-runtime": "^26.5.2" + "jest-runner": "^26.5.3", + "jest-runtime": "^26.5.3" } }, "@jest/transform": { @@ -1090,9 +1090,9 @@ "dev": true }, "@types/prettier": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.1.1.tgz", - "integrity": "sha512-2zs+O+UkDsJ1Vcp667pd3f8xearMdopz/z54i99wtRDI5KLmngk7vlrYZD0ZjKHaROR03EznlBbVY9PfAEyJIQ==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.1.2.tgz", + "integrity": "sha512-IiPhNnenzkqdSdQH3ifk9LoX7oQe61ZlDdDO4+MUv6FyWdPGDPr26gCPVs3oguZEMq//nFZZpwUZcVuNJsG+DQ==", "dev": true }, "@types/stack-utils": { @@ -2464,9 +2464,9 @@ } }, "expect": { - "version": "26.5.2", - "resolved": "https://registry.npmjs.org/expect/-/expect-26.5.2.tgz", - "integrity": "sha512-ccTGrXZd8DZCcvCz4htGXTkd/LOoy6OEtiDS38x3/VVf6E4AQL0QoeksBiw7BtGR5xDNiRYPB8GN6pfbuTOi7w==", + "version": "26.5.3", + "resolved": "https://registry.npmjs.org/expect/-/expect-26.5.3.tgz", + "integrity": "sha512-kkpOhGRWGOr+TEFUnYAjfGvv35bfP+OlPtqPIJpOCR9DVtv8QV+p8zG0Edqafh80fsjeE+7RBcVUq1xApnYglw==", "dev": true, "requires": { "@jest/types": "^26.5.2", @@ -3295,14 +3295,14 @@ } }, "jest": { - "version": "26.5.2", - "resolved": "https://registry.npmjs.org/jest/-/jest-26.5.2.tgz", - "integrity": "sha512-4HFabJVwsgDwul/7rhXJ3yFAF/aUkVIXiJWmgFxb+WMdZG39fVvOwYAs8/3r4AlFPc4m/n5sTMtuMbOL3kNtrQ==", + "version": "26.5.3", + "resolved": "https://registry.npmjs.org/jest/-/jest-26.5.3.tgz", + "integrity": "sha512-uJi3FuVSLmkZrWvaDyaVTZGLL8WcfynbRnFXyAHuEtYiSZ+ijDDIMOw1ytmftK+y/+OdAtsG9QrtbF7WIBmOyA==", "dev": true, "requires": { - "@jest/core": "^26.5.2", + "@jest/core": "^26.5.3", "import-local": "^3.0.2", - "jest-cli": "^26.5.2" + "jest-cli": "^26.5.3" }, "dependencies": { "@jest/types": { @@ -3338,12 +3338,12 @@ } }, "jest-cli": { - "version": "26.5.2", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.5.2.tgz", - "integrity": "sha512-usm48COuUvRp8YEG5OWOaxbSM0my7eHn3QeBWxiGUuFhvkGVBvl1fic4UjC02EAEQtDv8KrNQUXdQTV6ZZBsoA==", + "version": "26.5.3", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.5.3.tgz", + "integrity": "sha512-HkbSvtugpSXBf2660v9FrNVUgxvPkssN8CRGj9gPM8PLhnaa6zziFiCEKQAkQS4uRzseww45o0TR+l6KeRYV9A==", "dev": true, "requires": { - "@jest/core": "^26.5.2", + "@jest/core": "^26.5.3", "@jest/test-result": "^26.5.2", "@jest/types": "^26.5.2", "chalk": "^4.0.0", @@ -3351,9 +3351,9 @@ "graceful-fs": "^4.2.4", "import-local": "^3.0.2", "is-ci": "^2.0.0", - "jest-config": "^26.5.2", + "jest-config": "^26.5.3", "jest-util": "^26.5.2", - "jest-validate": "^26.5.2", + "jest-validate": "^26.5.3", "prompts": "^2.0.1", "yargs": "^15.4.1" } @@ -3447,13 +3447,13 @@ } }, "jest-config": { - "version": "26.5.2", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.5.2.tgz", - "integrity": "sha512-dqJOnSegNdE5yDiuGHsjTM5gec7Z4AcAMHiW+YscbOYJAlb3LEtDSobXCq0or9EmGQI5SFmKy4T7P1FxetJOfg==", + "version": "26.5.3", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.5.3.tgz", + "integrity": "sha512-NVhZiIuN0GQM6b6as4CI5FSCyXKxdrx5ACMCcv/7Pf+TeCajJhJc+6dwgdAVPyerUFB9pRBIz3bE7clSrRge/w==", "dev": true, "requires": { "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^26.5.2", + "@jest/test-sequencer": "^26.5.3", "@jest/types": "^26.5.2", "babel-jest": "^26.5.2", "chalk": "^4.0.0", @@ -3463,11 +3463,11 @@ "jest-environment-jsdom": "^26.5.2", "jest-environment-node": "^26.5.2", "jest-get-type": "^26.3.0", - "jest-jasmine2": "^26.5.2", + "jest-jasmine2": "^26.5.3", "jest-regex-util": "^26.0.0", "jest-resolve": "^26.5.2", "jest-util": "^26.5.2", - "jest-validate": "^26.5.2", + "jest-validate": "^26.5.3", "micromatch": "^4.0.2", "pretty-format": "^26.5.2" }, @@ -3770,9 +3770,9 @@ } }, "jest-jasmine2": { - "version": "26.5.2", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.5.2.tgz", - "integrity": "sha512-2J+GYcgLVPTkpmvHEj0/IDTIAuyblGNGlyGe4fLfDT2aktEPBYvoxUwFiOmDDxxzuuEAD2uxcYXr0+1Yw4tjFA==", + "version": "26.5.3", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.5.3.tgz", + "integrity": "sha512-nFlZOpnGlNc7y/+UkkeHnvbOM+rLz4wB1AimgI9QhtnqSZte0wYjbAm8hf7TCwXlXgDwZxAXo6z0a2Wzn9FoOg==", "dev": true, "requires": { "@babel/traverse": "^7.1.0", @@ -3783,13 +3783,13 @@ "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", - "expect": "^26.5.2", + "expect": "^26.5.3", "is-generator-fn": "^2.0.0", "jest-each": "^26.5.2", "jest-matcher-utils": "^26.5.2", "jest-message-util": "^26.5.2", - "jest-runtime": "^26.5.2", - "jest-snapshot": "^26.5.2", + "jest-runtime": "^26.5.3", + "jest-snapshot": "^26.5.3", "jest-util": "^26.5.2", "pretty-format": "^26.5.2", "throat": "^5.0.0" @@ -4142,14 +4142,14 @@ } }, "jest-resolve-dependencies": { - "version": "26.5.2", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.5.2.tgz", - "integrity": "sha512-LLkc8LuRtxqOx0AtX/Npa2C4I23WcIrwUgNtHYXg4owYF/ZDQShcwBAHjYZIFR06+HpQcZ43+kCTMlQ3aDCYTg==", + "version": "26.5.3", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.5.3.tgz", + "integrity": "sha512-+KMDeke/BFK+mIQ2IYSyBz010h7zQaVt4Xie6cLqUGChorx66vVeQVv4ErNoMwInnyYHi1Ud73tDS01UbXbfLQ==", "dev": true, "requires": { "@jest/types": "^26.5.2", "jest-regex-util": "^26.0.0", - "jest-snapshot": "^26.5.2" + "jest-snapshot": "^26.5.3" }, "dependencies": { "@jest/types": { @@ -4187,9 +4187,9 @@ } }, "jest-runner": { - "version": "26.5.2", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.5.2.tgz", - "integrity": "sha512-GKhYxtSX5+tXZsd2QwfkDqPIj5C2HqOdXLRc2x2qYqWE26OJh17xo58/fN/mLhRkO4y6o60ZVloan7Kk5YA6hg==", + "version": "26.5.3", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.5.3.tgz", + "integrity": "sha512-qproP0Pq7IIule+263W57k2+8kWCszVJTC9TJWGUz0xJBr+gNiniGXlG8rotd0XxwonD5UiJloYoSO5vbUr5FQ==", "dev": true, "requires": { "@jest/console": "^26.5.2", @@ -4201,13 +4201,13 @@ "emittery": "^0.7.1", "exit": "^0.1.2", "graceful-fs": "^4.2.4", - "jest-config": "^26.5.2", + "jest-config": "^26.5.3", "jest-docblock": "^26.0.0", "jest-haste-map": "^26.5.2", "jest-leak-detector": "^26.5.2", "jest-message-util": "^26.5.2", "jest-resolve": "^26.5.2", - "jest-runtime": "^26.5.2", + "jest-runtime": "^26.5.3", "jest-util": "^26.5.2", "jest-worker": "^26.5.0", "source-map-support": "^0.5.6", @@ -4249,15 +4249,15 @@ } }, "jest-runtime": { - "version": "26.5.2", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.5.2.tgz", - "integrity": "sha512-zArr4DatX/Sn0wswX/AnAuJgmwgAR5rNtrUz36HR8BfMuysHYNq5sDbYHuLC4ICyRdy5ae/KQ+sczxyS9G6Qvw==", + "version": "26.5.3", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.5.3.tgz", + "integrity": "sha512-IDjalmn2s/Tc4GvUwhPHZ0iaXCdMRq5p6taW9P8RpU+FpG01O3+H8z+p3rDCQ9mbyyyviDgxy/LHPLzrIOKBkQ==", "dev": true, "requires": { "@jest/console": "^26.5.2", "@jest/environment": "^26.5.2", "@jest/fake-timers": "^26.5.2", - "@jest/globals": "^26.5.2", + "@jest/globals": "^26.5.3", "@jest/source-map": "^26.5.0", "@jest/test-result": "^26.5.2", "@jest/transform": "^26.5.2", @@ -4268,15 +4268,15 @@ "exit": "^0.1.2", "glob": "^7.1.3", "graceful-fs": "^4.2.4", - "jest-config": "^26.5.2", + "jest-config": "^26.5.3", "jest-haste-map": "^26.5.2", "jest-message-util": "^26.5.2", "jest-mock": "^26.5.2", "jest-regex-util": "^26.0.0", "jest-resolve": "^26.5.2", - "jest-snapshot": "^26.5.2", + "jest-snapshot": "^26.5.3", "jest-util": "^26.5.2", - "jest-validate": "^26.5.2", + "jest-validate": "^26.5.3", "slash": "^3.0.0", "strip-bom": "^4.0.0", "yargs": "^15.4.1" @@ -4327,9 +4327,9 @@ } }, "jest-snapshot": { - "version": "26.5.2", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.5.2.tgz", - "integrity": "sha512-MkXIDvEefzDubI/WaDVSRH4xnkuirP/Pz8LhAIDXcVQTmcEfwxywj5LGwBmhz+kAAIldA7XM4l96vbpzltSjqg==", + "version": "26.5.3", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.5.3.tgz", + "integrity": "sha512-ZgAk0Wm0JJ75WS4lGaeRfa0zIgpL0KD595+XmtwlIEMe8j4FaYHyZhP1LNOO+8fXq7HJ3hll54+sFV9X4+CGVw==", "dev": true, "requires": { "@babel/types": "^7.0.0", @@ -4337,7 +4337,7 @@ "@types/babel__traverse": "^7.0.4", "@types/prettier": "^2.0.0", "chalk": "^4.0.0", - "expect": "^26.5.2", + "expect": "^26.5.3", "graceful-fs": "^4.2.4", "jest-diff": "^26.5.2", "jest-get-type": "^26.3.0", @@ -4469,9 +4469,9 @@ } }, "jest-validate": { - "version": "26.5.2", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.5.2.tgz", - "integrity": "sha512-FmJks0zY36mp6Af/5sqO6CTL9bNMU45yKCJk3hrz8d2aIqQIlN1pr9HPIwZE8blLaewOla134nt5+xAmWsx3SQ==", + "version": "26.5.3", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.5.3.tgz", + "integrity": "sha512-LX07qKeAtY+lsU0o3IvfDdN5KH9OulEGOMN1sFo6PnEf5/qjS1LZIwNk9blcBeW94pQUI9dLN9FlDYDWI5tyaA==", "dev": true, "requires": { "@jest/types": "^26.5.2", @@ -4505,9 +4505,9 @@ } }, "camelcase": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.0.0.tgz", - "integrity": "sha512-8KMDF1Vz2gzOq54ONPJS65IvTUaB1cHJ2DMM7MbPmLZljDH1qpzzLsWdiN9pHh6qvkRVDTi/07+eNGch/oLU4w==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.1.0.tgz", + "integrity": "sha512-WCMml9ivU60+8rEJgELlFp1gxFcEGxwYleE3bziHEDeqsqAWGHdimB7beBFGjLzVNgPGyDsfgXLQEYMpmIFnVQ==", "dev": true }, "chalk": { @@ -6500,9 +6500,9 @@ "dev": true }, "v8-to-istanbul": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-5.0.1.tgz", - "integrity": "sha512-mbDNjuDajqYe3TXFk5qxcQy8L1msXNE37WTlLoqqpBfRsimbNcrlhQlDPntmECEcUvdC+AQ8CyMMf6EUx1r74Q==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-6.0.1.tgz", + "integrity": "sha512-PzM1WlqquhBvsV+Gco6WSFeg1AGdD53ccMRkFeyHRE/KRZaVacPOmQYP3EeVgDBtKD2BJ8kgynBQ5OtKiHCH+w==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.1", From 8f64671cb0bd1c68ab5c9d0c99dab737eb6d0954 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20B=C3=B6hm?= Date: Mon, 12 Oct 2020 13:10:01 -0700 Subject: [PATCH 04/12] feat(parse): Add `isTraversal` function --- src/parse.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/parse.ts b/src/parse.ts index 51b972ad..1f98cf1c 100644 --- a/src/parse.ts +++ b/src/parse.ts @@ -113,6 +113,22 @@ const unpackPseudos = new Set([ "host-context", ]); +const traversalNames = new Set([ + "descendant", + ...Object.keys(Traversals).map((k) => Traversals[k]), +]); + +/** + * Checks whether a specific selector is a traversal. + * This is useful eg. in swapping the order of elements that + * are not traversals. + * + * @param selector Selector to check. + */ +export function isTraversal(selector: Selector): selector is Traversal { + return traversalNames.has(selector.type as TraversalType); +} + const stripQuotesFromPseudos = new Set(["contains", "icontains"]); const quotes = new Set(['"', "'"]); From f07d582462a2069f5213388ee3cc1db69cd1818e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20B=C3=B6hm?= Date: Mon, 12 Oct 2020 13:16:55 -0700 Subject: [PATCH 05/12] fix(parse): Throw errors when encountering multiple traversals in a row Eg. `<>` is no longer a valid selector --- src/parse.spec.ts | 23 +++++++++++++++++++++++ src/parse.ts | 8 ++++++++ 2 files changed, 31 insertions(+) diff --git a/src/parse.spec.ts b/src/parse.spec.ts index 9ebe3738..904bc141 100644 --- a/src/parse.spec.ts +++ b/src/parse.spec.ts @@ -18,3 +18,26 @@ describe("Collected selectors", () => { } }); }); + +const broken = [ + "[", + "(", + "{", + "()", + "<>", + "{}", + ",", + ",a", + "a,", + "[id=012345678901234567890123456789", + "input[name=foo.baz]", + "input[name=foo[baz]]", +]; + +describe("Broken selectors", () => { + for (const selector of broken) { + it(`should not parse — ${selector}`, () => { + expect(() => parse(selector)).toThrow(Error); + }); + } +}); diff --git a/src/parse.ts b/src/parse.ts index 1f98cf1c..2b1ad3b6 100644 --- a/src/parse.ts +++ b/src/parse.ts @@ -211,6 +211,12 @@ function parseSelector( return (slashCount & 1) === 1; } + function ensureNotTraversal() { + if (tokens.length > 0 && isTraversal(tokens[tokens.length - 1])) { + throw new Error("Did not expect successive traversals."); + } + } + stripWhitespace(0); while (selector !== "") { @@ -220,6 +226,7 @@ function parseSelector( sawWS = true; stripWhitespace(1); } else if (firstChar in Traversals) { + ensureNotTraversal(); tokens.push({ type: Traversals[firstChar] }); sawWS = false; @@ -235,6 +242,7 @@ function parseSelector( } else { if (sawWS) { if (tokens.length > 0) { + ensureNotTraversal(); tokens.push({ type: "descendant" }); } sawWS = false; From 276a4b20da11e2f62de37f3b9b6d4cf504dd0373 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20B=C3=B6hm?= Date: Mon, 12 Oct 2020 14:05:22 -0700 Subject: [PATCH 06/12] fix(parse): Disallow quotes around unpacked pseudos --- src/parse.spec.ts | 1 + src/parse.ts | 17 ++++++----------- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/src/parse.spec.ts b/src/parse.spec.ts index 904bc141..0fe2e2c3 100644 --- a/src/parse.spec.ts +++ b/src/parse.spec.ts @@ -32,6 +32,7 @@ const broken = [ "[id=012345678901234567890123456789", "input[name=foo.baz]", "input[name=foo[baz]]", + ':has("p")', ]; describe("Broken selectors", () => { diff --git a/src/parse.ts b/src/parse.ts index 2b1ad3b6..3e28fa1e 100644 --- a/src/parse.ts +++ b/src/parse.ts @@ -311,22 +311,17 @@ function parseSelector( if (selector.startsWith("(")) { if (unpackPseudos.has(name)) { - const quot = selector.charAt(1); - const quoted = quotes.has(quot); + if (quotes.has(selector.charAt(1))) { + throw new Error( + `Pseudo-selector ${name} cannot be quoted` + ); + } - selector = selector.substr(quoted ? 2 : 1); + selector = selector.substr(1); data = []; selector = parseSelector(data, selector, options); - if (quoted) { - if (!selector.startsWith(quot)) { - throw new Error(`Unmatched quotes in :${name}`); - } else { - selector = selector.substr(1); - } - } - if (!selector.startsWith(")")) { throw new Error( `Missing closing parenthesis in :${name} (${selector})` From c49747fb187f8d94bf0367866ebbd5cc7b3d9cf9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20B=C3=B6hm?= Date: Mon, 12 Oct 2020 14:08:18 -0700 Subject: [PATCH 07/12] tests: Add missing tests for complete test coverage --- src/__fixtures__/tests.ts | 98 ++++++++++++++++++++++++++++++++++++++- src/parse.spec.ts | 9 +++- src/parse.ts | 6 +-- src/stringify.spec.ts | 6 ++- src/stringify.ts | 4 +- 5 files changed, 112 insertions(+), 11 deletions(-) diff --git a/src/__fixtures__/tests.ts b/src/__fixtures__/tests.ts index 7ea22f9a..b6f96e36 100644 --- a/src/__fixtures__/tests.ts +++ b/src/__fixtures__/tests.ts @@ -1,6 +1,11 @@ -import { Selector } from ".."; +import { Selector, Options } from ".."; -export const tests: [string, Selector[][], string][] = [ +export const tests: [ + selector: string, + expected: Selector[][], + message: string, + options?: Options +][] = [ // Tag names [ "div", @@ -370,6 +375,20 @@ export const tests: [string, Selector[][], string][] = [ "ID starting with a dot", ], + // Pseudo elements + [ + "::foo", + [ + [ + { + type: "pseudo-element", + name: "foo", + }, + ], + ], + "pseudo-element", + ], + // Pseudo selectors [ ":foo", @@ -410,6 +429,19 @@ export const tests: [string, Selector[][], string][] = [ ], "pseudo selector with data", ], + [ + ':contains("(a((foo\\\\\\))))")', + [ + [ + { + type: "pseudo", + name: "contains", + data: "(a((foo\\))))", + }, + ], + ], + "pseudo selector with escaped data", + ], [ ":icontains('')", [ @@ -698,4 +730,66 @@ export const tests: [string, Selector[][], string][] = [ ], "Long numeric escape (non-BMP)", ], + + // Options + [ + "fOo[baR]", + [ + [ + { + name: "fOo", + type: "tag", + }, + { + action: "exists", + ignoreCase: false, + name: "baR", + type: "attribute", + value: "", + }, + ], + ], + "XML mode", + { xmlMode: true }, + ], + [ + "fOo[baR]", + [ + [ + { + name: "foo", + type: "tag", + }, + { + action: "exists", + ignoreCase: false, + name: "baR", + type: "attribute", + value: "", + }, + ], + ], + "`lowerCaseAttributeNames` option", + { lowerCaseAttributeNames: false }, + ], + [ + "fOo[baR]", + [ + [ + { + name: "fOo", + type: "tag", + }, + { + action: "exists", + ignoreCase: false, + name: "bar", + type: "attribute", + value: "", + }, + ], + ], + "`lowerCaseTags` option", + { lowerCaseTags: false }, + ], ]; diff --git a/src/parse.spec.ts b/src/parse.spec.ts index 0fe2e2c3..e5577a9e 100644 --- a/src/parse.spec.ts +++ b/src/parse.spec.ts @@ -3,8 +3,10 @@ import { parse } from "."; import { tests } from "./__fixtures__/tests"; describe("parse own tests", () => { - for (const [selector, expected, message] of tests) { - test(message, () => expect(parse(selector)).toStrictEqual(expected)); + for (const [selector, expected, message, options] of tests) { + test(message, () => + expect(parse(selector, options)).toStrictEqual(expected) + ); } }); @@ -33,6 +35,9 @@ const broken = [ "input[name=foo.baz]", "input[name=foo[baz]]", ':has("p")', + ":has(p", + ":foo(p()", + "#", ]; describe("Broken selectors", () => { diff --git a/src/parse.ts b/src/parse.ts index 3e28fa1e..e77ca5eb 100644 --- a/src/parse.ts +++ b/src/parse.ts @@ -241,10 +241,8 @@ function parseSelector( stripWhitespace(1); } else { if (sawWS) { - if (tokens.length > 0) { - ensureNotTraversal(); - tokens.push({ type: "descendant" }); - } + ensureNotTraversal(); + tokens.push({ type: "descendant" }); sawWS = false; } diff --git a/src/stringify.spec.ts b/src/stringify.spec.ts index 37a9a7d6..c4211523 100644 --- a/src/stringify.spec.ts +++ b/src/stringify.spec.ts @@ -4,9 +4,11 @@ import { tests } from "./__fixtures__/tests"; describe("Stringify & re-parse", () => { describe("Own tests", () => { - for (const [selector, expected, message] of tests) { + for (const [selector, expected, message, options] of tests) { test(`${message} (${selector})`, () => { - expect(parse(stringify(expected))).toStrictEqual(expected); + expect(parse(stringify(expected), options)).toStrictEqual( + expected + ); }); } }); diff --git a/src/stringify.ts b/src/stringify.ts index 1970469c..30ed9f3e 100644 --- a/src/stringify.ts +++ b/src/stringify.ts @@ -19,6 +19,8 @@ const charsToEscape = new Set([ "]", " ", "\\", + "(", + ")", ]); /** @@ -59,7 +61,7 @@ function stringifyToken(token: Selector): string { case "pseudo": if (token.data === null) return `:${escapeName(token.name)}`; if (typeof token.data === "string") { - return `:${escapeName(token.name)}(${token.data})`; + return `:${escapeName(token.name)}(${escapeName(token.data)})`; } return `:${escapeName(token.name)}(${stringify(token.data)})`; From c6672143f6bf25f363617d0243ed1c437dd4ddc9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20B=C3=B6hm?= Date: Mon, 12 Oct 2020 14:56:51 -0700 Subject: [PATCH 08/12] refactor(parse): Walk through selector using indices We no longer rely as much on updated string slices, which should reduce the number of allocations. Also, this allows us to add token ranges in a next step. --- src/parse.ts | 100 +++++++++++++++++++++++++++------------------------ 1 file changed, 54 insertions(+), 46 deletions(-) diff --git a/src/parse.ts b/src/parse.ts index e77ca5eb..2452a3ef 100644 --- a/src/parse.ts +++ b/src/parse.ts @@ -170,9 +170,9 @@ export default function parse( ): Selector[][] { const subselects: Selector[][] = []; - selector = parseSelector(subselects, `${selector}`, options); + const endIndex = parseSelector(subselects, `${selector}`, options, 0); - if (selector !== "") { + if (endIndex < selector.length) { throw new Error(`Unmatched selector: ${selector}`); } @@ -182,26 +182,29 @@ export default function parse( function parseSelector( subselects: Selector[][], selector: string, - options: Options = {} -): string { + options: Options = {}, + selectorIndex: number +): number { let tokens: Selector[] = []; let sawWS = false; - function getName(): string { - const match = selector.match(reName); + function getName(offset: number): string { + const match = selector.slice(selectorIndex + offset).match(reName); if (!match) { - throw new Error(`Expected name, found ${selector}`); + throw new Error( + `Expected name, found ${selector.slice(selectorIndex)}` + ); } - const [sub] = match; - selector = selector.substr(sub.length); - return unescapeCSS(sub); + const [name] = match; + selectorIndex += offset + name.length; + return unescapeCSS(name); } - function stripWhitespace(start: number) { - while (isWhitespace(selector.charAt(start))) start++; - selector = selector.substr(start); + function stripWhitespace(offset: number) { + while (isWhitespace(selector.charAt(selectorIndex + offset))) offset++; + selectorIndex += offset; } function isEscaped(pos: number): boolean { @@ -220,7 +223,7 @@ function parseSelector( stripWhitespace(0); while (selector !== "") { - const firstChar = selector.charAt(0); + const firstChar = selector.charAt(selectorIndex); if (isWhitespace(firstChar)) { sawWS = true; @@ -247,21 +250,22 @@ function parseSelector( } if (firstChar === "*") { - selector = selector.substr(1); + selectorIndex += 1; tokens.push({ type: "universal" }); } else if (firstChar in attribSelectors) { const [name, action] = attribSelectors[firstChar]; - selector = selector.substr(1); tokens.push({ type: "attribute", name, action, - value: getName(), + value: getName(1), ignoreCase: false, }); } else if (firstChar === "[") { - selector = selector.substr(1); - const attributeMatch = selector.match(reAttr); + const attributeMatch = selector + .slice(selectorIndex + 1) + .match(reAttr); + if (!attributeMatch) { throw new Error( `Malformed attribute selector: ${selector}` @@ -278,7 +282,7 @@ function parseSelector( ignoreCase, ] = attributeMatch; - selector = selector.substr(completeSelector.length); + selectorIndex += completeSelector.length + 1; let name = unescapeCSS(baseName); if (options.lowerCaseAttributeNames ?? !options.xmlMode) { @@ -293,53 +297,58 @@ function parseSelector( ignoreCase: !!ignoreCase, }); } else if (firstChar === ":") { - if (selector.charAt(1) === ":") { - selector = selector.substr(2); + if (selector.charAt(selectorIndex + 1) === ":") { tokens.push({ type: "pseudo-element", - name: getName().toLowerCase(), + name: getName(2).toLowerCase(), }); continue; } - selector = selector.substr(1); - - const name = getName().toLowerCase(); + const name = getName(1).toLowerCase(); let data: DataType = null; - if (selector.startsWith("(")) { + if (selector.charAt(selectorIndex) === "(") { if (unpackPseudos.has(name)) { - if (quotes.has(selector.charAt(1))) { + if (quotes.has(selector.charAt(selectorIndex + 1))) { throw new Error( `Pseudo-selector ${name} cannot be quoted` ); } - selector = selector.substr(1); - data = []; - selector = parseSelector(data, selector, options); - - if (!selector.startsWith(")")) { + selectorIndex = parseSelector( + data, + selector, + options, + selectorIndex + 1 + ); + + if (selector.charAt(selectorIndex) !== ")") { throw new Error( `Missing closing parenthesis in :${name} (${selector})` ); } - selector = selector.substr(1); + selectorIndex += 1; } else { - let pos = 1; + selectorIndex += 1; + const start = selectorIndex; let counter = 1; - for (; counter > 0 && pos < selector.length; pos++) { + for ( + ; + counter > 0 && selectorIndex < selector.length; + selectorIndex++ + ) { if ( - selector.charAt(pos) === "(" && - !isEscaped(pos) + selector.charAt(selectorIndex) === "(" && + !isEscaped(selectorIndex) ) { counter++; } else if ( - selector.charAt(pos) === ")" && - !isEscaped(pos) + selector.charAt(selectorIndex) === ")" && + !isEscaped(selectorIndex) ) { counter--; } @@ -349,8 +358,7 @@ function parseSelector( throw new Error("Parenthesis not matched"); } - data = selector.substr(1, pos - 2); - selector = selector.substr(pos); + data = selector.slice(start, selectorIndex - 1); if (stripQuotesFromPseudos.has(name)) { const quot = data.charAt(0); @@ -365,8 +373,8 @@ function parseSelector( } tokens.push({ type: "pseudo", name, data }); - } else if (reName.test(selector)) { - let name = getName(); + } else if (reName.test(selector.slice(selectorIndex))) { + let name = getName(0); if (options.lowerCaseTags ?? !options.xmlMode) { name = name.toLowerCase(); @@ -381,14 +389,14 @@ function parseSelector( tokens.pop(); } addToken(subselects, tokens); - return selector; + return selectorIndex; } } } addToken(subselects, tokens); - return selector; + return selectorIndex; } function addToken(subselects: Selector[][], tokens: Selector[]) { From 63cb253baf66a64094de8ecc167d41b4d4dee90b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20B=C3=B6hm?= Date: Mon, 12 Oct 2020 23:29:52 -0700 Subject: [PATCH 09/12] feat: Add support for namespaces --- src/__fixtures__/out.json | 1475 +++++++++++++++++++++++++++++++++++++ src/__fixtures__/tests.ts | 128 ++++ src/parse.ts | 68 +- src/stringify.ts | 37 +- 4 files changed, 1678 insertions(+), 30 deletions(-) diff --git a/src/__fixtures__/out.json b/src/__fixtures__/out.json index 36b2b61f..e088c8e5 100644 --- a/src/__fixtures__/out.json +++ b/src/__fixtures__/out.json @@ -5,6 +5,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -15,6 +16,7 @@ }, { "type": "tag", + "namespace": null, "name": "p" } ] @@ -23,6 +25,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -33,6 +36,7 @@ }, { "type": "tag", + "namespace": null, "name": "p" } ] @@ -41,6 +45,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -51,6 +56,7 @@ }, { "type": "tag", + "namespace": null, "name": "p" } ] @@ -59,6 +65,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -69,6 +76,7 @@ }, { "type": "tag", + "namespace": null, "name": "p" } ] @@ -78,6 +86,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -88,6 +97,7 @@ }, { "type": "tag", + "namespace": null, "name": "p" } ] @@ -96,6 +106,7 @@ [ { "type": "tag", + "namespace": null, "name": "a" } ] @@ -104,6 +115,7 @@ [ { "type": "tag", + "namespace": null, "name": "p" } ] @@ -112,6 +124,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "__sizzle__", @@ -123,6 +136,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "ap", @@ -142,6 +156,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "ap", @@ -161,6 +176,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "ap", @@ -180,6 +196,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "ap", @@ -199,6 +216,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "ap", @@ -218,6 +236,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "ap", @@ -237,6 +256,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "ap", @@ -256,6 +276,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "ap", @@ -275,6 +296,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "ap", @@ -294,6 +316,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "ap", @@ -313,6 +336,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "ap", @@ -332,6 +356,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "ap", @@ -351,6 +376,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "ap", @@ -370,6 +396,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "ap", @@ -389,6 +416,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "ap", @@ -399,10 +427,12 @@ }, { "type": "tag", + "namespace": null, "name": "a" }, { "type": "attribute", + "namespace": null, "name": "hreflang", "action": "not", "value": "en", @@ -414,6 +444,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "ap", @@ -434,6 +465,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "ap", @@ -456,6 +488,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "asdfasdf", @@ -466,6 +499,7 @@ }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "foobar", @@ -477,6 +511,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "attr-child-boosh", @@ -488,6 +523,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "attributes", @@ -498,10 +534,12 @@ }, { "type": "tag", + "namespace": null, "name": "a" }, { "type": "attribute", + "namespace": null, "name": "href", "action": "equals", "value": "#aname", @@ -513,6 +551,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "attributes", @@ -523,10 +562,12 @@ }, { "type": "tag", + "namespace": null, "name": "div" }, { "type": "attribute", + "namespace": null, "name": "test", "action": "end", "value": "foo", @@ -538,6 +579,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "attributes", @@ -548,10 +590,12 @@ }, { "type": "tag", + "namespace": null, "name": "div" }, { "type": "attribute", + "namespace": null, "name": "test", "action": "any", "value": "hree", @@ -563,6 +607,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "attributes", @@ -573,10 +618,12 @@ }, { "type": "tag", + "namespace": null, "name": "div" }, { "type": "attribute", + "namespace": null, "name": "test", "action": "equals", "value": "two-foo", @@ -588,6 +635,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "attributes", @@ -598,10 +646,12 @@ }, { "type": "tag", + "namespace": null, "name": "div" }, { "type": "attribute", + "namespace": null, "name": "test", "action": "equals", "value": "two-foo", @@ -613,6 +663,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "attributes", @@ -623,10 +674,12 @@ }, { "type": "tag", + "namespace": null, "name": "div" }, { "type": "attribute", + "namespace": null, "name": "test", "action": "equals", "value": "two-foo", @@ -638,6 +691,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "attributes", @@ -648,10 +702,12 @@ }, { "type": "tag", + "namespace": null, "name": "div" }, { "type": "attribute", + "namespace": null, "name": "test", "action": "start", "value": "two", @@ -663,6 +719,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "attributes", @@ -673,10 +730,12 @@ }, { "type": "tag", + "namespace": null, "name": "div" }, { "type": "attribute", + "namespace": null, "name": "test", "action": "hyphen", "value": "two-foo", @@ -688,6 +747,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "attributes", @@ -698,10 +758,12 @@ }, { "type": "tag", + "namespace": null, "name": "div" }, { "type": "attribute", + "namespace": null, "name": "test", "action": "hyphen", "value": "two", @@ -713,6 +775,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "attributes", @@ -723,10 +786,12 @@ }, { "type": "tag", + "namespace": null, "name": "div" }, { "type": "attribute", + "namespace": null, "name": "test", "action": "element", "value": "three", @@ -738,6 +803,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "attributes", @@ -748,10 +814,12 @@ }, { "type": "tag", + "namespace": null, "name": "div" }, { "type": "attribute", + "namespace": null, "name": "unique-test", "action": "exists", "value": "", @@ -763,6 +831,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "backslash\\foo", @@ -774,6 +843,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "blargh", @@ -785,6 +855,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "body", @@ -796,6 +867,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "boosh", @@ -807,6 +879,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "boosh", @@ -817,6 +890,7 @@ }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "booshTest", @@ -828,6 +902,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "boosh", @@ -845,6 +920,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "boosh", @@ -855,6 +931,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "a", @@ -866,6 +943,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "boosh", @@ -876,6 +954,7 @@ }, { "type": "tag", + "namespace": null, "name": "div" } ] @@ -884,6 +963,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "boosh", @@ -894,6 +974,7 @@ }, { "type": "tag", + "namespace": null, "name": "div" }, { @@ -901,6 +982,7 @@ }, { "type": "tag", + "namespace": null, "name": "div" } ] @@ -909,6 +991,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "boosh", @@ -919,12 +1002,14 @@ }, { "type": "tag", + "namespace": null, "name": "div" } ], [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "boosh", @@ -935,6 +1020,7 @@ }, { "type": "tag", + "namespace": null, "name": "span" } ] @@ -943,6 +1029,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "boosh", @@ -953,10 +1040,12 @@ }, { "type": "tag", + "namespace": null, "name": "div" }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "a", @@ -968,6 +1057,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "boosh", @@ -978,10 +1068,12 @@ }, { "type": "tag", + "namespace": null, "name": "div" }, { "type": "attribute", + "namespace": null, "name": "test", "action": "equals", "value": "fg", @@ -993,6 +1085,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "boosh", @@ -1003,10 +1096,12 @@ }, { "type": "tag", + "namespace": null, "name": "div" }, { "type": "attribute", + "namespace": null, "name": "test", "action": "exists", "value": "", @@ -1018,6 +1113,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "boosh", @@ -1028,6 +1124,7 @@ }, { "type": "tag", + "namespace": null, "name": "span" } ] @@ -1036,6 +1133,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "boosh", @@ -1045,6 +1143,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "boosh", @@ -1056,6 +1155,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "boosh", @@ -1065,6 +1165,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "apples", @@ -1074,6 +1175,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "boosh", @@ -1085,6 +1187,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "boosh", @@ -1095,6 +1198,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "a", @@ -1105,6 +1209,7 @@ }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "booshTest", @@ -1116,6 +1221,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "booshTest", @@ -1127,6 +1233,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "direct-descend", @@ -1137,6 +1244,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "direct-descend", @@ -1148,6 +1256,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "direct-descend", @@ -1158,6 +1267,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "direct-descend", @@ -1168,6 +1278,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "lvl2", @@ -1179,6 +1290,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "dupContainer", @@ -1189,6 +1301,7 @@ }, { "type": "tag", + "namespace": null, "name": "span" } ] @@ -1197,6 +1310,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "dupL1", @@ -1208,6 +1322,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "dupL2", @@ -1219,6 +1334,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "emem", @@ -1230,6 +1346,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "first", @@ -1240,6 +1357,7 @@ }, { "type": "tag", + "namespace": null, "name": "div" } ] @@ -1248,6 +1366,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "firstUL", @@ -1265,6 +1384,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "firstp", @@ -1275,6 +1395,7 @@ }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "foobar", @@ -1286,6 +1407,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "firstp", @@ -1296,6 +1418,7 @@ }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "simon1", @@ -1307,6 +1430,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "fixtures", @@ -1318,6 +1442,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "fixtures", @@ -1328,6 +1453,7 @@ }, { "type": "tag", + "namespace": null, "name": "a" }, { @@ -1342,6 +1468,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "fixtures", @@ -1352,6 +1479,7 @@ }, { "type": "tag", + "namespace": null, "name": "h1" } ] @@ -1360,6 +1488,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "foo", @@ -1371,6 +1500,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "foo", @@ -1388,6 +1518,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "foo", @@ -1398,6 +1529,7 @@ }, { "type": "tag", + "namespace": null, "name": "a" }, { @@ -1407,6 +1539,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "blog", @@ -1421,6 +1554,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "foo", @@ -1431,6 +1565,7 @@ }, { "type": "tag", + "namespace": null, "name": "a" }, { @@ -1440,6 +1575,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "blog", @@ -1447,6 +1583,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "link", @@ -1461,6 +1598,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "foo", @@ -1471,6 +1609,7 @@ }, { "type": "tag", + "namespace": null, "name": "a" }, { @@ -1480,6 +1619,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "link", @@ -1494,6 +1634,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "foo:bar", @@ -1505,6 +1646,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "foo:bar", @@ -1515,6 +1657,7 @@ }, { "type": "tag", + "namespace": null, "name": "span" }, { @@ -1536,6 +1679,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "form", @@ -1547,6 +1691,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "form", @@ -1557,6 +1702,7 @@ }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "first", @@ -1568,6 +1714,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "form", @@ -1587,6 +1734,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "form", @@ -1611,6 +1759,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "form", @@ -1630,6 +1779,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "form", @@ -1649,6 +1799,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "form", @@ -1673,6 +1824,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "form", @@ -1695,6 +1847,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "form", @@ -1719,6 +1872,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "form", @@ -1738,6 +1892,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "form", @@ -1748,6 +1903,7 @@ }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "option1a", @@ -1759,6 +1915,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "form", @@ -1769,6 +1926,7 @@ }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "radio1", @@ -1780,6 +1938,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "form", @@ -1790,6 +1949,7 @@ }, { "type": "attribute", + "namespace": null, "name": "for", "action": "equals", "value": "action", @@ -1801,6 +1961,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "form", @@ -1811,10 +1972,12 @@ }, { "type": "tag", + "namespace": null, "name": "input" }, { "type": "attribute", + "namespace": null, "name": "type", "action": "equals", "value": "radio", @@ -1824,6 +1987,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "form", @@ -1834,10 +1998,12 @@ }, { "type": "tag", + "namespace": null, "name": "input" }, { "type": "attribute", + "namespace": null, "name": "type", "action": "equals", "value": "hidden", @@ -1849,6 +2015,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "form", @@ -1859,10 +2026,12 @@ }, { "type": "tag", + "namespace": null, "name": "input" }, { "type": "attribute", + "namespace": null, "name": "type", "action": "equals", "value": "radio", @@ -1872,6 +2041,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "form", @@ -1882,10 +2052,12 @@ }, { "type": "tag", + "namespace": null, "name": "input" }, { "type": "attribute", + "namespace": null, "name": "type", "action": "equals", "value": "hidden", @@ -1897,6 +2069,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "form", @@ -1907,10 +2080,12 @@ }, { "type": "tag", + "namespace": null, "name": "input" }, { "type": "attribute", + "namespace": null, "name": "type", "action": "equals", "value": "radio", @@ -1920,6 +2095,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "form", @@ -1930,10 +2106,12 @@ }, { "type": "tag", + "namespace": null, "name": "input" }, { "type": "attribute", + "namespace": null, "name": "type", "action": "equals", "value": "hidden", @@ -1945,6 +2123,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "form", @@ -1955,10 +2134,12 @@ }, { "type": "tag", + "namespace": null, "name": "input" }, { "type": "attribute", + "namespace": null, "name": "type", "action": "equals", "value": "search", @@ -1970,6 +2151,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "form", @@ -1980,10 +2162,12 @@ }, { "type": "tag", + "namespace": null, "name": "input" }, { "type": "attribute", + "namespace": null, "name": "type", "action": "equals", "value": "text", @@ -1995,6 +2179,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "form", @@ -2005,6 +2190,7 @@ }, { "type": "tag", + "namespace": null, "name": "option" }, { @@ -2018,6 +2204,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "form", @@ -2028,6 +2215,7 @@ }, { "type": "tag", + "namespace": null, "name": "option" }, { @@ -2044,6 +2232,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "option1b", @@ -2065,6 +2254,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "form", @@ -2075,6 +2265,7 @@ }, { "type": "tag", + "namespace": null, "name": "option" }, { @@ -2100,6 +2291,7 @@ }, { "type": "attribute", + "namespace": null, "name": "id", "action": "start", "value": "option3", @@ -2111,6 +2303,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "form", @@ -2121,6 +2314,7 @@ }, { "type": "tag", + "namespace": null, "name": "option" }, { @@ -2134,6 +2328,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "form", @@ -2144,6 +2339,7 @@ }, { "type": "tag", + "namespace": null, "name": "select" }, { @@ -2153,6 +2349,7 @@ [ { "type": "tag", + "namespace": null, "name": "option" }, { @@ -2174,6 +2371,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "form", @@ -2184,6 +2382,7 @@ }, { "type": "tag", + "namespace": null, "name": "select" }, { @@ -2193,6 +2392,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "select1", @@ -2211,6 +2411,7 @@ }, { "type": "tag", + "namespace": null, "name": "option" }, { @@ -2220,6 +2421,7 @@ [ { "type": "tag", + "namespace": null, "name": "option" } ] @@ -2231,6 +2433,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "form", @@ -2241,6 +2444,7 @@ }, { "type": "tag", + "namespace": null, "name": "select" }, { @@ -2250,6 +2454,7 @@ [ { "type": "attribute", + "namespace": null, "name": "multiple", "action": "exists", "value": "", @@ -2264,6 +2469,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "form", @@ -2274,6 +2480,7 @@ }, { "type": "tag", + "namespace": null, "name": "select" }, { @@ -2283,6 +2490,7 @@ [ { "type": "attribute", + "namespace": null, "name": "name", "action": "equals", "value": "select1", @@ -2297,6 +2505,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "form", @@ -2307,6 +2516,7 @@ }, { "type": "tag", + "namespace": null, "name": "select" }, { @@ -2316,6 +2526,7 @@ [ { "type": "attribute", + "namespace": null, "name": "name", "action": "equals", "value": "select1", @@ -2330,6 +2541,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "grandfather", @@ -2340,6 +2552,7 @@ }, { "type": "tag", + "namespace": null, "name": "div" }, { @@ -2349,6 +2562,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "uncle", @@ -2362,6 +2576,7 @@ }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "son", @@ -2373,6 +2588,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "groups", @@ -2383,6 +2599,7 @@ }, { "type": "tag", + "namespace": null, "name": "a" } ] @@ -2391,6 +2608,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "hidden1", @@ -2407,6 +2625,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "hsoob", @@ -2418,6 +2637,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "hsoob", @@ -2428,6 +2648,7 @@ }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "spanny", @@ -2439,6 +2660,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "hsoob", @@ -2449,6 +2671,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "a", @@ -2460,6 +2683,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "hsoob", @@ -2470,6 +2694,7 @@ }, { "type": "tag", + "namespace": null, "name": "div" }, { @@ -2477,6 +2702,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "h", @@ -2488,6 +2714,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "hsoob", @@ -2498,6 +2725,7 @@ }, { "type": "tag", + "namespace": null, "name": "div" } ] @@ -2506,6 +2734,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "hsoob", @@ -2516,6 +2745,7 @@ }, { "type": "tag", + "namespace": null, "name": "div" }, { @@ -2523,6 +2753,7 @@ }, { "type": "tag", + "namespace": null, "name": "div" } ] @@ -2531,6 +2762,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "hsoob", @@ -2541,10 +2773,12 @@ }, { "type": "tag", + "namespace": null, "name": "div" }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "a", @@ -2556,6 +2790,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "hsoob", @@ -2566,6 +2801,7 @@ }, { "type": "tag", + "namespace": null, "name": "span" } ] @@ -2574,6 +2810,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "idTest", @@ -2585,6 +2822,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "item_1", @@ -2596,6 +2834,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "item_3", @@ -2607,6 +2846,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "length", @@ -2617,6 +2857,7 @@ }, { "type": "tag", + "namespace": null, "name": "input" } ] @@ -2625,6 +2866,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "lengthtest", @@ -2636,6 +2878,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "level1", @@ -2658,6 +2901,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "level1", @@ -2680,6 +2924,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "level1", @@ -2702,6 +2947,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "level1", @@ -2715,6 +2961,7 @@ }, { "type": "attribute", + "namespace": null, "name": "id", "action": "end", "value": "_1", @@ -2726,6 +2973,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "level1", @@ -2739,6 +2987,7 @@ }, { "type": "attribute", + "namespace": null, "name": "id", "action": "end", "value": "_1", @@ -2750,6 +2999,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "level1", @@ -2763,6 +3013,7 @@ }, { "type": "attribute", + "namespace": null, "name": "id", "action": "any", "value": "2", @@ -2774,6 +3025,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "level1", @@ -2787,6 +3039,7 @@ }, { "type": "attribute", + "namespace": null, "name": "id", "action": "start", "value": "level2_", @@ -2798,6 +3051,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "level1", @@ -2811,6 +3065,7 @@ }, { "type": "attribute", + "namespace": null, "name": "id", "action": "start", "value": "level2_", @@ -2822,6 +3077,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "level1", @@ -2832,6 +3088,7 @@ }, { "type": "tag", + "namespace": null, "name": "span" } ] @@ -2840,6 +3097,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "level1", @@ -2850,6 +3108,7 @@ }, { "type": "tag", + "namespace": null, "name": "div" }, { @@ -2863,6 +3122,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "level1", @@ -2873,6 +3133,7 @@ }, { "type": "tag", + "namespace": null, "name": "span" }, { @@ -2886,6 +3147,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "level1", @@ -2902,6 +3164,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "level1", @@ -2918,6 +3181,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "level1", @@ -2940,6 +3204,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "level1", @@ -2962,6 +3227,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "level1", @@ -2984,6 +3250,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "level1", @@ -2994,6 +3261,7 @@ }, { "type": "tag", + "namespace": null, "name": "div" }, { @@ -3007,6 +3275,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "level1", @@ -3017,6 +3286,7 @@ }, { "type": "tag", + "namespace": null, "name": "div" }, { @@ -3030,6 +3300,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "level1", @@ -3040,6 +3311,7 @@ }, { "type": "tag", + "namespace": null, "name": "span" } ] @@ -3048,6 +3320,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "level1", @@ -3058,6 +3331,7 @@ }, { "type": "tag", + "namespace": null, "name": "span" }, { @@ -3071,6 +3345,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "level2_1", @@ -3088,6 +3363,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "level2_1", @@ -3098,6 +3374,7 @@ }, { "type": "tag", + "namespace": null, "name": "span" } ] @@ -3106,6 +3383,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "level2_1", @@ -3123,6 +3401,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "level2_1", @@ -3140,6 +3419,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "level2_1", @@ -3150,6 +3430,7 @@ }, { "type": "tag", + "namespace": null, "name": "span" } ] @@ -3158,6 +3439,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "level2_1", @@ -3168,6 +3450,7 @@ }, { "type": "tag", + "namespace": null, "name": "span" } ] @@ -3176,6 +3459,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "level2_2", @@ -3186,6 +3470,7 @@ }, { "type": "tag", + "namespace": null, "name": "span" } ] @@ -3194,6 +3479,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "level2_2", @@ -3226,6 +3512,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "level2_2", @@ -3258,6 +3545,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "level2_2", @@ -3268,6 +3556,7 @@ }, { "type": "tag", + "namespace": null, "name": "span" } ] @@ -3276,6 +3565,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "level3_1", @@ -3293,6 +3583,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "level3_1", @@ -3303,6 +3594,7 @@ }, { "type": "tag", + "namespace": null, "name": "em" } ] @@ -3311,6 +3603,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "level3_1", @@ -3321,6 +3614,7 @@ }, { "type": "tag", + "namespace": null, "name": "span" } ] @@ -3329,6 +3623,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "level3_1", @@ -3339,6 +3634,7 @@ }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "level3_2", @@ -3350,6 +3646,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "level3_1", @@ -3360,6 +3657,7 @@ }, { "type": "tag", + "namespace": null, "name": "em" } ] @@ -3368,6 +3666,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "level3_1", @@ -3384,6 +3683,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "level3_2", @@ -3401,6 +3701,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "level3_2", @@ -3418,6 +3719,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "link_2", @@ -3425,6 +3727,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "internal", @@ -3436,6 +3739,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "link_2", @@ -3443,6 +3747,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "internal", @@ -3450,6 +3755,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "highlight", @@ -3461,6 +3767,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "link_2", @@ -3468,6 +3775,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "internal", @@ -3475,6 +3783,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "nonexistent", @@ -3486,6 +3795,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "list", @@ -3496,6 +3806,7 @@ }, { "type": "tag", + "namespace": null, "name": "li" }, { @@ -3509,6 +3820,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "list", @@ -3519,6 +3831,7 @@ }, { "type": "tag", + "namespace": null, "name": "li" }, { @@ -3532,6 +3845,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "list", @@ -3542,6 +3856,7 @@ }, { "type": "tag", + "namespace": null, "name": "li" }, { @@ -3551,6 +3866,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "item_1", @@ -3566,6 +3882,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "item_3", @@ -3580,6 +3897,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "list", @@ -3590,6 +3908,7 @@ }, { "type": "tag", + "namespace": null, "name": "li" } ] @@ -3598,6 +3917,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "listWithTabIndex", @@ -3609,6 +3929,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "liveHandlerOrder", @@ -3619,6 +3940,7 @@ }, { "type": "tag", + "namespace": null, "name": "div" }, { @@ -3626,6 +3948,7 @@ }, { "type": "tag", + "namespace": null, "name": "em" }, { @@ -3639,6 +3962,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "lonelyBoosh", @@ -3650,6 +3974,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "lonelyHsoob", @@ -3661,6 +3986,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "moretests", @@ -3671,10 +3997,12 @@ }, { "type": "tag", + "namespace": null, "name": "script" }, { "type": "attribute", + "namespace": null, "name": "src", "action": "exists", "value": "", @@ -3686,6 +4014,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "name+value", @@ -3697,6 +4026,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "nonexistent", @@ -3717,6 +4047,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "ap", @@ -3739,6 +4070,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "oooo", @@ -3750,6 +4082,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "order-matters", @@ -3760,6 +4093,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "order-matters", @@ -3771,6 +4105,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "p", @@ -3793,6 +4128,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "p", @@ -3803,6 +4139,7 @@ }, { "type": "tag", + "namespace": null, "name": "a" }, { @@ -3816,6 +4153,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "p", @@ -3826,6 +4164,7 @@ }, { "type": "tag", + "namespace": null, "name": "a" }, { @@ -3839,6 +4178,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "p", @@ -3849,6 +4189,7 @@ }, { "type": "tag", + "namespace": null, "name": "a" }, { @@ -3870,6 +4211,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "p", @@ -3880,6 +4222,7 @@ }, { "type": "tag", + "namespace": null, "name": "a" }, { @@ -3901,6 +4244,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "p", @@ -3911,6 +4255,7 @@ }, { "type": "tag", + "namespace": null, "name": "a" }, { @@ -3932,6 +4277,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "p", @@ -3942,6 +4288,7 @@ }, { "type": "tag", + "namespace": null, "name": "a" }, { @@ -3963,6 +4310,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "p", @@ -3973,6 +4321,7 @@ }, { "type": "tag", + "namespace": null, "name": "a" }, { @@ -3982,6 +4331,7 @@ [ { "type": "attribute", + "namespace": null, "name": "rel", "action": "end", "value": "nofollow", @@ -3995,6 +4345,7 @@ }, { "type": "tag", + "namespace": null, "name": "em" } ] @@ -4003,6 +4354,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "p", @@ -4013,6 +4365,7 @@ }, { "type": "tag", + "namespace": null, "name": "a" }, { @@ -4022,6 +4375,7 @@ [ { "type": "attribute", + "namespace": null, "name": "rel", "action": "end", "value": "nofollow", @@ -4035,6 +4389,7 @@ }, { "type": "tag", + "namespace": null, "name": "em" } ] @@ -4043,6 +4398,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "p", @@ -4053,6 +4409,7 @@ }, { "type": "tag", + "namespace": null, "name": "a" }, { @@ -4062,6 +4419,7 @@ [ { "type": "attribute", + "namespace": null, "name": "rel", "action": "end", "value": "nofollow", @@ -4075,6 +4433,7 @@ }, { "type": "tag", + "namespace": null, "name": "em" } ] @@ -4083,6 +4442,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "p", @@ -4093,6 +4453,7 @@ }, { "type": "tag", + "namespace": null, "name": "a" }, { @@ -4102,6 +4463,7 @@ [ { "type": "attribute", + "namespace": null, "name": "rel", "action": "end", "value": "nofollow", @@ -4116,6 +4478,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "p", @@ -4126,6 +4489,7 @@ }, { "type": "tag", + "namespace": null, "name": "a" }, { @@ -4135,6 +4499,7 @@ [ { "type": "attribute", + "namespace": null, "name": "rel", "action": "start", "value": "external", @@ -4149,6 +4514,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "p", @@ -4159,6 +4525,7 @@ }, { "type": "tag", + "namespace": null, "name": "a" }, { @@ -4168,6 +4535,7 @@ [ { "type": "attribute", + "namespace": null, "name": "rel", "action": "element", "value": "nofollow", @@ -4182,6 +4550,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "p", @@ -4192,6 +4561,7 @@ }, { "type": "tag", + "namespace": null, "name": "a" }, { @@ -4205,6 +4575,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "p", @@ -4215,6 +4586,7 @@ }, { "type": "tag", + "namespace": null, "name": "a" }, { @@ -4228,6 +4600,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "p", @@ -4238,6 +4611,7 @@ }, { "type": "tag", + "namespace": null, "name": "a" }, { @@ -4251,6 +4625,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "p", @@ -4261,6 +4636,7 @@ }, { "type": "tag", + "namespace": null, "name": "a" }, { @@ -4274,6 +4650,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "pseudos", @@ -4293,6 +4670,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "pseudos", @@ -4312,6 +4690,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "pseudos", @@ -4331,6 +4710,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "pseudos", @@ -4350,6 +4730,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "pseudos", @@ -4369,6 +4750,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "pseudos", @@ -4388,6 +4770,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "pseudos", @@ -4407,6 +4790,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "pseudos", @@ -4426,6 +4810,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "pseudos", @@ -4445,6 +4830,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "pseudos", @@ -4464,6 +4850,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "pseudos", @@ -4483,6 +4870,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "pseudos", @@ -4502,6 +4890,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "pseudos", @@ -4521,6 +4910,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "pseudos", @@ -4531,6 +4921,7 @@ }, { "type": "tag", + "namespace": null, "name": "a" }, { @@ -4544,6 +4935,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "pseudos", @@ -4554,6 +4946,7 @@ }, { "type": "tag", + "namespace": null, "name": "a" }, { @@ -4567,6 +4960,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "pseudos", @@ -4577,6 +4971,7 @@ }, { "type": "tag", + "namespace": null, "name": "a" }, { @@ -4590,6 +4985,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "pseudos", @@ -4600,6 +4996,7 @@ }, { "type": "tag", + "namespace": null, "name": "a" }, { @@ -4613,6 +5010,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "pseudos", @@ -4623,6 +5021,7 @@ }, { "type": "tag", + "namespace": null, "name": "a" }, { @@ -4636,6 +5035,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "pseudos", @@ -4646,6 +5046,7 @@ }, { "type": "tag", + "namespace": null, "name": "a" }, { @@ -4659,6 +5060,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "pseudos", @@ -4669,6 +5071,7 @@ }, { "type": "tag", + "namespace": null, "name": "a" }, { @@ -4682,6 +5085,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "pseudos", @@ -4692,6 +5096,7 @@ }, { "type": "tag", + "namespace": null, "name": "div" }, { @@ -4705,6 +5110,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "pseudos", @@ -4715,6 +5121,7 @@ }, { "type": "tag", + "namespace": null, "name": "div" }, { @@ -4728,6 +5135,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "pseudos", @@ -4738,6 +5146,7 @@ }, { "type": "tag", + "namespace": null, "name": "div" }, { @@ -4751,6 +5160,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "pseudos", @@ -4761,6 +5171,7 @@ }, { "type": "tag", + "namespace": null, "name": "div" }, { @@ -4774,6 +5185,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "pseudos", @@ -4784,6 +5196,7 @@ }, { "type": "tag", + "namespace": null, "name": "div" }, { @@ -4797,6 +5210,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "pseudos", @@ -4807,6 +5221,7 @@ }, { "type": "tag", + "namespace": null, "name": "div" }, { @@ -4820,6 +5235,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "pseudos", @@ -4830,6 +5246,7 @@ }, { "type": "tag", + "namespace": null, "name": "div" }, { @@ -4843,6 +5260,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "pseudos", @@ -4853,6 +5271,7 @@ }, { "type": "tag", + "namespace": null, "name": "div" }, { @@ -4866,6 +5285,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "pseudos", @@ -4876,6 +5296,7 @@ }, { "type": "tag", + "namespace": null, "name": "div" }, { @@ -4889,6 +5310,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "pseudos", @@ -4899,6 +5321,7 @@ }, { "type": "tag", + "namespace": null, "name": "div" }, { @@ -4912,6 +5335,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "pseudos", @@ -4922,6 +5346,7 @@ }, { "type": "tag", + "namespace": null, "name": "div" }, { @@ -4935,6 +5360,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "pseudos", @@ -4945,6 +5371,7 @@ }, { "type": "tag", + "namespace": null, "name": "div" }, { @@ -4958,6 +5385,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "pseudos", @@ -4974,6 +5402,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -4985,6 +5414,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -4998,6 +5428,7 @@ }, { "type": "attribute", + "namespace": null, "name": "title", "action": "exists", "value": "", @@ -5009,6 +5440,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -5050,6 +5482,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -5069,6 +5502,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -5088,6 +5522,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -5107,6 +5542,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -5117,6 +5553,7 @@ }, { "type": "tag", + "namespace": null, "name": "p" }, { @@ -5130,6 +5567,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -5140,6 +5578,7 @@ }, { "type": "tag", + "namespace": null, "name": "p" }, { @@ -5153,6 +5592,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -5163,6 +5603,7 @@ }, { "type": "attribute", + "namespace": null, "name": "title", "action": "exists", "value": "", @@ -5174,6 +5615,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -5184,6 +5626,7 @@ }, { "type": "tag", + "namespace": null, "name": "a" }, { @@ -5191,6 +5634,7 @@ }, { "type": "tag", + "namespace": null, "name": "a" } ] @@ -5199,6 +5643,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -5209,6 +5654,7 @@ }, { "type": "tag", + "namespace": null, "name": "a" }, { @@ -5216,12 +5662,14 @@ }, { "type": "tag", + "namespace": null, "name": "a" } ], [ { "type": "tag", + "namespace": null, "name": "code" }, { @@ -5229,6 +5677,7 @@ }, { "type": "tag", + "namespace": null, "name": "a" } ] @@ -5237,6 +5686,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -5247,6 +5697,7 @@ }, { "type": "tag", + "namespace": null, "name": "a" }, { @@ -5254,6 +5705,7 @@ }, { "type": "tag", + "namespace": null, "name": "a" } ] @@ -5262,6 +5714,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -5272,6 +5725,7 @@ }, { "type": "tag", + "namespace": null, "name": "a" }, { @@ -5279,6 +5733,7 @@ }, { "type": "tag", + "namespace": null, "name": "a" } ] @@ -5287,6 +5742,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -5297,6 +5753,7 @@ }, { "type": "tag", + "namespace": null, "name": "a" }, { @@ -5304,6 +5761,7 @@ }, { "type": "tag", + "namespace": null, "name": "a" } ] @@ -5312,6 +5770,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -5322,6 +5781,7 @@ }, { "type": "tag", + "namespace": null, "name": "a" }, { @@ -5335,6 +5795,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -5345,6 +5806,7 @@ }, { "type": "tag", + "namespace": null, "name": "a" }, { @@ -5358,6 +5820,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -5368,10 +5831,12 @@ }, { "type": "tag", + "namespace": null, "name": "a" }, { "type": "attribute", + "namespace": null, "name": "rel", "action": "equals", "value": "bookmark", @@ -5383,6 +5848,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -5393,10 +5859,12 @@ }, { "type": "tag", + "namespace": null, "name": "a" }, { "type": "attribute", + "namespace": null, "name": "title", "action": "exists", "value": "", @@ -5408,6 +5876,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -5418,10 +5887,12 @@ }, { "type": "tag", + "namespace": null, "name": "a" }, { "type": "attribute", + "namespace": null, "name": "title", "action": "exists", "value": "", @@ -5433,6 +5904,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -5443,10 +5915,12 @@ }, { "type": "tag", + "namespace": null, "name": "a" }, { "type": "attribute", + "namespace": null, "name": "href", "action": "equals", "value": "http://www.google.com/", @@ -5458,6 +5932,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -5468,10 +5943,12 @@ }, { "type": "tag", + "namespace": null, "name": "a" }, { "type": "attribute", + "namespace": null, "name": "rel", "action": "equals", "value": "bookmark", @@ -5483,6 +5960,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -5493,10 +5971,12 @@ }, { "type": "tag", + "namespace": null, "name": "a" }, { "type": "attribute", + "namespace": null, "name": "rel", "action": "equals", "value": "bookmark", @@ -5508,6 +5988,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -5518,10 +5999,12 @@ }, { "type": "tag", + "namespace": null, "name": "a" }, { "type": "attribute", + "namespace": null, "name": "title", "action": "exists", "value": "", @@ -5533,6 +6016,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -5543,6 +6027,7 @@ }, { "type": "tag", + "namespace": null, "name": "div" }, { @@ -5552,6 +6037,7 @@ [ { "type": "tag", + "namespace": null, "name": "div" }, { @@ -5561,6 +6047,7 @@ [ { "type": "tag", + "namespace": null, "name": "div" }, { @@ -5570,6 +6057,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "exists", "value": "", @@ -5590,6 +6078,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -5600,10 +6089,12 @@ }, { "type": "tag", + "namespace": null, "name": "div" }, { "type": "attribute", + "namespace": null, "name": "id", "action": "exists", "value": "", @@ -5621,12 +6112,14 @@ [ { "type": "tag", + "namespace": null, "name": "div" } ], [ { "type": "tag", + "namespace": null, "name": "span" } ] @@ -5660,6 +6153,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -5670,10 +6164,12 @@ }, { "type": "tag", + "namespace": null, "name": "form" }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "form", @@ -5696,6 +6192,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -5706,10 +6203,12 @@ }, { "type": "tag", + "namespace": null, "name": "form" }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "form", @@ -5729,6 +6228,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -5739,10 +6239,12 @@ }, { "type": "tag", + "namespace": null, "name": "form" }, { "type": "attribute", + "namespace": null, "name": "id", "action": "exists", "value": "", @@ -5755,6 +6257,7 @@ [ { "type": "attribute", + "namespace": null, "name": "action", "action": "end", "value": "formaction", @@ -5782,6 +6285,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -5792,10 +6296,12 @@ }, { "type": "tag", + "namespace": null, "name": "form" }, { "type": "attribute", + "namespace": null, "name": "id", "action": "exists", "value": "", @@ -5808,6 +6314,7 @@ [ { "type": "attribute", + "namespace": null, "name": "action", "action": "equals", "value": "form:action", @@ -5835,6 +6342,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -5845,10 +6353,12 @@ }, { "type": "tag", + "namespace": null, "name": "form" }, { "type": "attribute", + "namespace": null, "name": "id", "action": "exists", "value": "", @@ -5861,6 +6371,7 @@ [ { "type": "attribute", + "namespace": null, "name": "action", "action": "equals", "value": "form:action", @@ -5893,6 +6404,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -5903,10 +6415,12 @@ }, { "type": "tag", + "namespace": null, "name": "li" }, { "type": "attribute", + "namespace": null, "name": "tabindex", "action": "equals", "value": "-1", @@ -5918,6 +6432,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -5928,10 +6443,12 @@ }, { "type": "tag", + "namespace": null, "name": "option" }, { "type": "attribute", + "namespace": null, "name": "value", "action": "equals", "value": "1", @@ -5943,6 +6460,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -5953,6 +6471,7 @@ }, { "type": "tag", + "namespace": null, "name": "p" } ] @@ -5961,6 +6480,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -5971,6 +6491,7 @@ }, { "type": "tag", + "namespace": null, "name": "p" } ] @@ -5979,6 +6500,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -5989,6 +6511,7 @@ }, { "type": "tag", + "namespace": null, "name": "p" } ] @@ -5997,6 +6520,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -6007,6 +6531,7 @@ }, { "type": "tag", + "namespace": null, "name": "p" } ] @@ -6015,6 +6540,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -6025,6 +6551,7 @@ }, { "type": "tag", + "namespace": null, "name": "p" } ] @@ -6033,6 +6560,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -6043,6 +6571,7 @@ }, { "type": "tag", + "namespace": null, "name": "p" } ] @@ -6051,6 +6580,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -6061,6 +6591,7 @@ }, { "type": "tag", + "namespace": null, "name": "p" }, { @@ -6068,6 +6599,7 @@ }, { "type": "tag", + "namespace": null, "name": "div" } ] @@ -6076,6 +6608,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -6086,12 +6619,14 @@ }, { "type": "tag", + "namespace": null, "name": "p" } ], [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -6102,6 +6637,7 @@ }, { "type": "tag", + "namespace": null, "name": "p" }, { @@ -6109,6 +6645,7 @@ }, { "type": "tag", + "namespace": null, "name": "a" } ] @@ -6117,6 +6654,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -6127,6 +6665,7 @@ }, { "type": "tag", + "namespace": null, "name": "p" }, { @@ -6140,6 +6679,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -6150,6 +6690,7 @@ }, { "type": "tag", + "namespace": null, "name": "p" }, { @@ -6163,6 +6704,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -6173,6 +6715,7 @@ }, { "type": "tag", + "namespace": null, "name": "p" }, { @@ -6195,6 +6738,7 @@ [ { "type": "tag", + "namespace": null, "name": "code" } ] @@ -6206,6 +6750,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -6216,6 +6761,7 @@ }, { "type": "tag", + "namespace": null, "name": "p" }, { @@ -6238,6 +6784,7 @@ [ { "type": "tag", + "namespace": null, "name": "code" } ] @@ -6254,6 +6801,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -6264,6 +6812,7 @@ }, { "type": "tag", + "namespace": null, "name": "p" }, { @@ -6273,6 +6822,7 @@ [ { "type": "tag", + "namespace": null, "name": "a" } ] @@ -6284,6 +6834,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -6294,6 +6845,7 @@ }, { "type": "tag", + "namespace": null, "name": "p" }, { @@ -6303,6 +6855,7 @@ [ { "type": "tag", + "namespace": null, "name": "p" } ] @@ -6314,6 +6867,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -6324,6 +6878,7 @@ }, { "type": "tag", + "namespace": null, "name": "p" }, { @@ -6333,6 +6888,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "blargh", @@ -6347,6 +6903,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -6357,6 +6914,7 @@ }, { "type": "tag", + "namespace": null, "name": "p" }, { @@ -6366,6 +6924,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "foo", @@ -6380,6 +6939,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -6390,6 +6950,7 @@ }, { "type": "tag", + "namespace": null, "name": "p" }, { @@ -6404,6 +6965,7 @@ [ { "type": "tag", + "namespace": null, "name": "a" } ] @@ -6425,6 +6987,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -6435,6 +6998,7 @@ }, { "type": "tag", + "namespace": null, "name": "p" }, { @@ -6456,6 +7020,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -6466,6 +7031,7 @@ }, { "type": "tag", + "namespace": null, "name": "p" }, { @@ -6487,6 +7053,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -6497,6 +7064,7 @@ }, { "type": "tag", + "namespace": null, "name": "p" }, { @@ -6506,6 +7074,7 @@ [ { "type": "tag", + "namespace": null, "name": "a" } ] @@ -6517,6 +7086,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -6527,6 +7097,7 @@ }, { "type": "tag", + "namespace": null, "name": "p" }, { @@ -6536,12 +7107,14 @@ [ { "type": "tag", + "namespace": null, "name": "a" } ], [ { "type": "tag", + "namespace": null, "name": "b" } ] @@ -6553,6 +7126,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -6563,6 +7137,7 @@ }, { "type": "tag", + "namespace": null, "name": "p" }, { @@ -6572,18 +7147,21 @@ [ { "type": "tag", + "namespace": null, "name": "a" } ], [ { "type": "tag", + "namespace": null, "name": "b" } ], [ { "type": "tag", + "namespace": null, "name": "div" } ] @@ -6595,6 +7173,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -6605,6 +7184,7 @@ }, { "type": "tag", + "namespace": null, "name": "p" }, { @@ -6614,10 +7194,12 @@ [ { "type": "tag", + "namespace": null, "name": "div" }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "blargh", @@ -6632,6 +7214,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -6642,6 +7225,7 @@ }, { "type": "tag", + "namespace": null, "name": "p" }, { @@ -6651,10 +7235,12 @@ [ { "type": "tag", + "namespace": null, "name": "div" }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "foo", @@ -6669,6 +7255,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -6679,6 +7266,7 @@ }, { "type": "tag", + "namespace": null, "name": "p" }, { @@ -6688,10 +7276,12 @@ [ { "type": "tag", + "namespace": null, "name": "p" }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "blargh", @@ -6706,6 +7296,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -6716,6 +7307,7 @@ }, { "type": "tag", + "namespace": null, "name": "p" }, { @@ -6725,10 +7317,12 @@ [ { "type": "tag", + "namespace": null, "name": "p" }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "foo", @@ -6743,6 +7337,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -6753,6 +7348,7 @@ }, { "type": "tag", + "namespace": null, "name": "p" }, { @@ -6766,6 +7362,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "seite1", @@ -6777,6 +7374,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "select1", @@ -6799,6 +7397,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "select1", @@ -6818,6 +7417,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "select1", @@ -6828,6 +7428,7 @@ }, { "type": "tag", + "namespace": null, "name": "option" }, { @@ -6841,6 +7442,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "select1", @@ -6851,6 +7453,7 @@ }, { "type": "tag", + "namespace": null, "name": "option" }, { @@ -6864,6 +7467,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "select1", @@ -6874,6 +7478,7 @@ }, { "type": "tag", + "namespace": null, "name": "option" }, { @@ -6887,6 +7492,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "select1", @@ -6897,6 +7503,7 @@ }, { "type": "tag", + "namespace": null, "name": "option" }, { @@ -6910,6 +7517,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "select1", @@ -6920,6 +7528,7 @@ }, { "type": "tag", + "namespace": null, "name": "option" }, { @@ -6933,6 +7542,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "select1", @@ -6943,6 +7553,7 @@ }, { "type": "tag", + "namespace": null, "name": "option" }, { @@ -6956,6 +7567,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "select1", @@ -6966,6 +7578,7 @@ }, { "type": "tag", + "namespace": null, "name": "option" }, { @@ -6979,6 +7592,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "select1", @@ -6989,6 +7603,7 @@ }, { "type": "tag", + "namespace": null, "name": "option" }, { @@ -7002,6 +7617,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "select1", @@ -7012,6 +7628,7 @@ }, { "type": "tag", + "namespace": null, "name": "option" }, { @@ -7025,6 +7642,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "select1", @@ -7035,6 +7653,7 @@ }, { "type": "tag", + "namespace": null, "name": "option" }, { @@ -7048,6 +7667,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "select1", @@ -7058,6 +7678,7 @@ }, { "type": "tag", + "namespace": null, "name": "option" }, { @@ -7071,6 +7692,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "select1", @@ -7081,6 +7703,7 @@ }, { "type": "tag", + "namespace": null, "name": "option" }, { @@ -7094,6 +7717,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "select1", @@ -7104,6 +7728,7 @@ }, { "type": "tag", + "namespace": null, "name": "option" }, { @@ -7117,6 +7742,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "select1", @@ -7127,6 +7753,7 @@ }, { "type": "tag", + "namespace": null, "name": "option" }, { @@ -7140,6 +7767,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "select1", @@ -7150,6 +7778,7 @@ }, { "type": "tag", + "namespace": null, "name": "option" }, { @@ -7163,6 +7792,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "select1", @@ -7173,6 +7803,7 @@ }, { "type": "tag", + "namespace": null, "name": "option" }, { @@ -7186,6 +7817,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "select1", @@ -7196,6 +7828,7 @@ }, { "type": "tag", + "namespace": null, "name": "option" }, { @@ -7209,6 +7842,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "select1", @@ -7219,6 +7853,7 @@ }, { "type": "tag", + "namespace": null, "name": "option" }, { @@ -7232,6 +7867,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "select1", @@ -7242,6 +7878,7 @@ }, { "type": "tag", + "namespace": null, "name": "option" }, { @@ -7255,6 +7892,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "select1", @@ -7265,6 +7903,7 @@ }, { "type": "tag", + "namespace": null, "name": "option" }, { @@ -7278,6 +7917,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "select1", @@ -7288,6 +7928,7 @@ }, { "type": "tag", + "namespace": null, "name": "option" }, { @@ -7301,6 +7942,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "select1", @@ -7311,6 +7953,7 @@ }, { "type": "tag", + "namespace": null, "name": "option" }, { @@ -7324,6 +7967,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "select1", @@ -7334,6 +7978,7 @@ }, { "type": "tag", + "namespace": null, "name": "option" }, { @@ -7347,6 +7992,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "select1", @@ -7357,6 +8003,7 @@ }, { "type": "tag", + "namespace": null, "name": "option" }, { @@ -7370,6 +8017,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "select1", @@ -7380,6 +8028,7 @@ }, { "type": "tag", + "namespace": null, "name": "option" }, { @@ -7393,6 +8042,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "select1", @@ -7403,6 +8053,7 @@ }, { "type": "tag", + "namespace": null, "name": "option" }, { @@ -7416,6 +8067,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "select1", @@ -7426,6 +8078,7 @@ }, { "type": "tag", + "namespace": null, "name": "option" }, { @@ -7439,6 +8092,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "select1", @@ -7449,6 +8103,7 @@ }, { "type": "tag", + "namespace": null, "name": "option" }, { @@ -7462,6 +8117,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "select1", @@ -7472,6 +8128,7 @@ }, { "type": "tag", + "namespace": null, "name": "option" }, { @@ -7485,6 +8142,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "select1", @@ -7495,6 +8153,7 @@ }, { "type": "tag", + "namespace": null, "name": "option" }, { @@ -7508,6 +8167,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "select1", @@ -7518,6 +8178,7 @@ }, { "type": "tag", + "namespace": null, "name": "option" }, { @@ -7531,6 +8192,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "select1", @@ -7541,6 +8203,7 @@ }, { "type": "tag", + "namespace": null, "name": "option" }, { @@ -7554,6 +8217,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "select1", @@ -7564,6 +8228,7 @@ }, { "type": "tag", + "namespace": null, "name": "option" }, { @@ -7577,6 +8242,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "select1", @@ -7587,6 +8253,7 @@ }, { "type": "tag", + "namespace": null, "name": "option" }, { @@ -7600,6 +8267,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "select1", @@ -7610,6 +8278,7 @@ }, { "type": "tag", + "namespace": null, "name": "option" }, { @@ -7623,6 +8292,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "select1", @@ -7633,6 +8303,7 @@ }, { "type": "tag", + "namespace": null, "name": "option" }, { @@ -7646,6 +8317,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "select1", @@ -7656,6 +8328,7 @@ }, { "type": "tag", + "namespace": null, "name": "option" }, { @@ -7669,6 +8342,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "select1", @@ -7679,6 +8353,7 @@ }, { "type": "tag", + "namespace": null, "name": "option" }, { @@ -7692,6 +8367,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "select1", @@ -7702,6 +8378,7 @@ }, { "type": "tag", + "namespace": null, "name": "option" }, { @@ -7715,6 +8392,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "select1", @@ -7725,6 +8403,7 @@ }, { "type": "tag", + "namespace": null, "name": "option" }, { @@ -7738,6 +8417,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "select1", @@ -7748,6 +8428,7 @@ }, { "type": "tag", + "namespace": null, "name": "option" }, { @@ -7761,6 +8442,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "select1", @@ -7771,6 +8453,7 @@ }, { "type": "tag", + "namespace": null, "name": "option" }, { @@ -7784,6 +8467,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "select1", @@ -7794,6 +8478,7 @@ }, { "type": "tag", + "namespace": null, "name": "option" }, { @@ -7807,6 +8492,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "select1", @@ -7817,6 +8503,7 @@ }, { "type": "tag", + "namespace": null, "name": "option" }, { @@ -7830,6 +8517,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "select1", @@ -7840,6 +8528,7 @@ }, { "type": "tag", + "namespace": null, "name": "option" }, { @@ -7853,6 +8542,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "select1", @@ -7863,6 +8553,7 @@ }, { "type": "tag", + "namespace": null, "name": "option" }, { @@ -7876,6 +8567,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "select1", @@ -7886,6 +8578,7 @@ }, { "type": "tag", + "namespace": null, "name": "option" }, { @@ -7899,6 +8592,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "select1", @@ -7909,10 +8603,12 @@ }, { "type": "tag", + "namespace": null, "name": "option" }, { "type": "attribute", + "namespace": null, "name": "value", "action": "not", "value": "", @@ -7924,6 +8620,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "select1", @@ -7934,10 +8631,12 @@ }, { "type": "tag", + "namespace": null, "name": "option" }, { "type": "attribute", + "namespace": null, "name": "value", "action": "equals", "value": "", @@ -7949,6 +8648,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "select2", @@ -7959,6 +8659,7 @@ }, { "type": "tag", + "namespace": null, "name": "option" }, { @@ -7972,6 +8673,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "select2", @@ -7982,10 +8684,12 @@ }, { "type": "tag", + "namespace": null, "name": "option" }, { "type": "attribute", + "namespace": null, "name": "selected", "action": "equals", "value": "selected", @@ -7997,6 +8701,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "select2", @@ -8007,10 +8712,12 @@ }, { "type": "tag", + "namespace": null, "name": "option" }, { "type": "attribute", + "namespace": null, "name": "selected", "action": "exists", "value": "", @@ -8022,6 +8729,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "select3", @@ -8032,6 +8740,7 @@ }, { "type": "tag", + "namespace": null, "name": "option" }, { @@ -8045,6 +8754,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "sep", @@ -8056,6 +8766,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "sibling-selector", @@ -8066,6 +8777,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "sibling-selector", @@ -8077,6 +8789,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "sibling-selector", @@ -8087,10 +8800,12 @@ }, { "type": "tag", + "namespace": null, "name": "div" }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "sibling-selector", @@ -8102,6 +8817,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "sibling-selector", @@ -8112,6 +8828,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "sibling-selector", @@ -8123,6 +8840,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "sibling-selector", @@ -8133,10 +8851,12 @@ }, { "type": "tag", + "namespace": null, "name": "div" }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "sibling-selector", @@ -8148,6 +8868,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "siblingTest", @@ -8158,6 +8879,7 @@ }, { "type": "tag", + "namespace": null, "name": "em" }, { @@ -8172,6 +8894,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "siblingTest", @@ -8182,6 +8905,7 @@ }, { "type": "tag", + "namespace": null, "name": "em" }, { @@ -8194,6 +8918,7 @@ }, { "type": "tag", + "namespace": null, "name": "em" }, { @@ -8201,6 +8926,7 @@ }, { "type": "tag", + "namespace": null, "name": "span" } ] @@ -8209,6 +8935,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "siblingTest", @@ -8219,6 +8946,7 @@ }, { "type": "tag", + "namespace": null, "name": "em" }, { @@ -8231,6 +8959,7 @@ }, { "type": "tag", + "namespace": null, "name": "em" }, { @@ -8238,6 +8967,7 @@ }, { "type": "tag", + "namespace": null, "name": "span" } ] @@ -8246,6 +8976,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "siblingTest", @@ -8256,6 +8987,7 @@ }, { "type": "tag", + "namespace": null, "name": "em" }, { @@ -8270,6 +9002,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "siblingTest", @@ -8280,6 +9013,7 @@ }, { "type": "tag", + "namespace": null, "name": "em" }, { @@ -8287,6 +9021,7 @@ }, { "type": "tag", + "namespace": null, "name": "em" }, { @@ -8294,6 +9029,7 @@ }, { "type": "tag", + "namespace": null, "name": "em" }, { @@ -8301,6 +9037,7 @@ }, { "type": "tag", + "namespace": null, "name": "span" } ] @@ -8309,6 +9046,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "siblingfirst", @@ -8319,6 +9057,7 @@ }, { "type": "tag", + "namespace": null, "name": "em" } ] @@ -8327,6 +9066,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "spaced-tokens", @@ -8337,6 +9077,7 @@ }, { "type": "tag", + "namespace": null, "name": "p" }, { @@ -8344,6 +9085,7 @@ }, { "type": "tag", + "namespace": null, "name": "em" }, { @@ -8351,6 +9093,7 @@ }, { "type": "tag", + "namespace": null, "name": "a" } ] @@ -8359,6 +9102,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "spanny", @@ -8370,6 +9114,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "tName1", @@ -8381,6 +9126,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "tName1", @@ -8391,6 +9137,7 @@ }, { "type": "tag", + "namespace": null, "name": "span" } ] @@ -8399,6 +9146,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "tName1-span", @@ -8410,6 +9158,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "tName2", @@ -8421,6 +9170,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "tName2", @@ -8431,6 +9181,7 @@ }, { "type": "tag", + "namespace": null, "name": "span" } ] @@ -8439,6 +9190,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "tName2ID", @@ -8450,6 +9202,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "test.foo[5]bar", @@ -8461,6 +9214,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "tmp_input", @@ -8480,6 +9234,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "tmp_input", @@ -8499,6 +9254,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "tmp_input", @@ -8518,6 +9274,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "token-four", @@ -8529,6 +9286,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "troubleForm", @@ -8540,6 +9298,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "troubleForm", @@ -8562,6 +9321,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "troubleForm", @@ -8575,6 +9335,7 @@ }, { "type": "attribute", + "namespace": null, "name": "type", "action": "equals", "value": "radio", @@ -8586,6 +9347,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "troubleForm", @@ -8599,6 +9361,7 @@ }, { "type": "attribute", + "namespace": null, "name": "type", "action": "exists", "value": "", @@ -8610,6 +9373,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "troubleForm", @@ -8620,6 +9384,7 @@ }, { "type": "tag", + "namespace": null, "name": "p" }, { @@ -8639,6 +9404,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "troubleForm", @@ -8649,6 +9415,7 @@ }, { "type": "attribute", + "namespace": null, "name": "type", "action": "equals", "value": "radio", @@ -8660,6 +9427,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "troubleForm", @@ -8670,6 +9438,7 @@ }, { "type": "attribute", + "namespace": null, "name": "type", "action": "exists", "value": "", @@ -8681,6 +9450,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "troubleForm2", @@ -8691,10 +9461,12 @@ }, { "type": "tag", + "namespace": null, "name": "input" }, { "type": "attribute", + "namespace": null, "name": "name", "action": "equals", "value": "brackets[5][]", @@ -8706,6 +9478,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "troubleForm2", @@ -8716,10 +9489,12 @@ }, { "type": "tag", + "namespace": null, "name": "input" }, { "type": "attribute", + "namespace": null, "name": "name", "action": "equals", "value": "brackets[5][]", @@ -8736,6 +9511,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "troubleForm2", @@ -8746,10 +9522,12 @@ }, { "type": "tag", + "namespace": null, "name": "input" }, { "type": "attribute", + "namespace": null, "name": "name", "action": "equals", "value": "brackets[5][]", @@ -8757,6 +9535,7 @@ }, { "type": "attribute", + "namespace": null, "name": "value", "action": "equals", "value": "2", @@ -8768,6 +9547,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "types_all", @@ -8779,6 +9559,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "uncle", @@ -8790,6 +9571,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "台北Táiběi", @@ -8801,6 +9583,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "台北Táiběi", @@ -8810,6 +9593,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "台北", @@ -8848,6 +9632,7 @@ }, { "type": "tag", + "namespace": null, "name": "foo" } ] @@ -8874,6 +9659,7 @@ [ { "type": "tag", + "namespace": null, "name": "foo" } ] @@ -8911,6 +9697,7 @@ }, { "type": "attribute", + "namespace": null, "name": "id", "action": "exists", "value": "", @@ -8925,6 +9712,7 @@ }, { "type": "attribute", + "namespace": null, "name": "name", "action": "equals", "value": "iframe", @@ -8939,6 +9727,7 @@ }, { "type": "attribute", + "namespace": null, "name": "type", "action": "equals", "value": "checkbox", @@ -8950,6 +9739,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "GROUPS", @@ -8961,6 +9751,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "a", @@ -8972,6 +9763,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "a", @@ -8982,6 +9774,7 @@ }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "booshTest", @@ -8992,6 +9785,7 @@ }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "spanny", @@ -9003,6 +9797,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "a", @@ -9013,6 +9808,7 @@ }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "spanny", @@ -9024,6 +9820,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "a", @@ -9034,6 +9831,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "d", @@ -9044,6 +9842,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "sib", @@ -9055,6 +9854,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "a", @@ -9065,6 +9865,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "d", @@ -9075,6 +9876,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "sib", @@ -9082,6 +9884,7 @@ }, { "type": "attribute", + "namespace": null, "name": "test", "action": "equals", "value": "f g", @@ -9093,6 +9896,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "a", @@ -9103,6 +9907,7 @@ }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "booshTest", @@ -9114,6 +9919,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "a", @@ -9124,6 +9930,7 @@ }, { "type": "tag", + "namespace": null, "name": "span" } ] @@ -9132,6 +9939,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "a", @@ -9139,6 +9947,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "b", @@ -9149,6 +9958,7 @@ }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "booshTest", @@ -9160,6 +9970,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "a", @@ -9170,6 +9981,7 @@ }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "booshTest", @@ -9181,6 +9993,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "blog", @@ -9192,6 +10005,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "blog", @@ -9199,6 +10013,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "link", @@ -9210,6 +10025,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "brothers", @@ -9221,6 +10037,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "class-with-dashes", @@ -9232,6 +10049,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "component", @@ -9243,6 +10061,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "container", @@ -9253,6 +10072,7 @@ }, { "type": "tag", + "namespace": null, "name": "div" }, { @@ -9262,6 +10082,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "excluded", @@ -9275,6 +10096,7 @@ }, { "type": "tag", + "namespace": null, "name": "div" } ] @@ -9283,6 +10105,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "d", @@ -9293,6 +10116,7 @@ }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "oooo", @@ -9303,6 +10127,7 @@ }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "emem", @@ -9314,6 +10139,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "d", @@ -9324,6 +10150,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "sib", @@ -9335,6 +10162,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "d", @@ -9342,6 +10170,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "i", @@ -9352,6 +10181,7 @@ }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "emem", @@ -9363,6 +10193,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "direct-descend", @@ -9373,6 +10204,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "direct-descend", @@ -9383,6 +10215,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "lvl2", @@ -9394,6 +10227,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "direct-descend", @@ -9404,6 +10238,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "direct-descend", @@ -9414,6 +10249,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "direct-descend", @@ -9424,6 +10260,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "lvl2", @@ -9435,6 +10272,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "direct-descend", @@ -9445,6 +10283,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "direct-descend", @@ -9455,6 +10294,7 @@ }, { "type": "tag", + "namespace": null, "name": "div" } ] @@ -9463,6 +10303,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "e", @@ -9474,6 +10315,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "e", @@ -9481,6 +10323,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "hasOwnProperty", @@ -9488,6 +10331,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "toString", @@ -9499,6 +10343,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "excluded", @@ -9510,6 +10355,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "first", @@ -9521,6 +10367,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "foo", @@ -9532,6 +10379,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "foo:bar", @@ -9543,6 +10391,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "fototab", @@ -9553,6 +10402,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "thumbnails", @@ -9563,6 +10413,7 @@ }, { "type": "tag", + "namespace": null, "name": "a" } ] @@ -9571,6 +10422,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "internal", @@ -9578,6 +10430,7 @@ }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "link_2", @@ -9589,6 +10442,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "link", @@ -9600,6 +10454,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "nothiddendiv", @@ -9610,6 +10465,7 @@ }, { "type": "tag", + "namespace": null, "name": "div" }, { @@ -9623,6 +10479,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "null", @@ -9634,6 +10491,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "null", @@ -9644,6 +10502,7 @@ }, { "type": "tag", + "namespace": null, "name": "div" } ] @@ -9652,6 +10511,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "odd", @@ -9664,6 +10524,7 @@ [ { "type": "tag", + "namespace": null, "name": "div" } ] @@ -9675,6 +10536,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "parent", @@ -9685,6 +10547,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "middle", @@ -9695,6 +10558,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "sibling", @@ -9706,6 +10570,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "parent", @@ -9716,6 +10581,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "middle", @@ -9726,6 +10592,7 @@ }, { "type": "tag", + "namespace": null, "name": "h2" } ] @@ -9734,6 +10601,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "parent", @@ -9744,6 +10612,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "middle", @@ -9754,6 +10623,7 @@ }, { "type": "tag", + "namespace": null, "name": "h3" } ] @@ -9762,6 +10632,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "parent", @@ -9772,6 +10643,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "middle", @@ -9782,6 +10654,7 @@ }, { "type": "tag", + "namespace": null, "name": "h4" } ] @@ -9790,6 +10663,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "parent", @@ -9800,6 +10674,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "middle", @@ -9810,6 +10685,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "sibling", @@ -9821,6 +10697,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "parent", @@ -9831,6 +10708,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "middle", @@ -9841,6 +10719,7 @@ }, { "type": "tag", + "namespace": null, "name": "h2" } ] @@ -9849,6 +10728,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "parent", @@ -9859,6 +10739,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "middle", @@ -9869,6 +10750,7 @@ }, { "type": "tag", + "namespace": null, "name": "h3" } ] @@ -9877,6 +10759,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "parent", @@ -9887,6 +10770,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "middle", @@ -9897,6 +10781,7 @@ }, { "type": "tag", + "namespace": null, "name": "h4" } ] @@ -9905,6 +10790,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "parent", @@ -9915,6 +10801,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "middle", @@ -9925,10 +10812,12 @@ }, { "type": "tag", + "namespace": null, "name": "h4" }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "younger", @@ -9940,6 +10829,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "parent", @@ -9950,6 +10840,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "oldest", @@ -9960,6 +10851,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "sibling", @@ -9971,6 +10863,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "parent", @@ -9981,6 +10874,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "oldest", @@ -9991,6 +10885,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "sibling", @@ -10002,6 +10897,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "parent", @@ -10012,6 +10908,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "youngest", @@ -10022,6 +10919,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "sibling", @@ -10033,6 +10931,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "parent", @@ -10043,6 +10942,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "youngest", @@ -10053,6 +10953,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "sibling", @@ -10064,6 +10965,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "second", @@ -10075,6 +10977,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "select1", @@ -10086,6 +10989,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "test.foo[5]bar", @@ -10097,6 +11001,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "台北", @@ -10108,6 +11013,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "台北Táiběi", @@ -10119,6 +11025,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "台北Táiběi", @@ -10128,6 +11035,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "台北", @@ -10139,6 +11047,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "台北Táiběi", @@ -10146,6 +11055,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "台北", @@ -10182,6 +11092,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "option1b", @@ -10361,6 +11272,7 @@ [ { "type": "tag", + "namespace": null, "name": "a" } ] @@ -10384,12 +11296,14 @@ [ { "type": "tag", + "namespace": null, "name": "div" } ], [ { "type": "tag", + "namespace": null, "name": "span" } ] @@ -10406,6 +11320,7 @@ [ { "type": "tag", + "namespace": null, "name": "option" } ] @@ -10508,6 +11423,7 @@ }, { "type": "attribute", + "namespace": null, "name": "data-pos", "action": "equals", "value": ":first", @@ -10663,6 +11579,7 @@ [ { "type": "tag", + "namespace": null, "name": "code" } ] @@ -10884,6 +11801,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "a", @@ -10894,6 +11812,7 @@ }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "booshTest", @@ -10905,6 +11824,7 @@ [ { "type": "attribute", + "namespace": null, "name": "action", "action": "end", "value": "formaction", @@ -10916,6 +11836,7 @@ [ { "type": "attribute", + "namespace": null, "name": "action", "action": "equals", "value": "form:action", @@ -10927,6 +11848,7 @@ [ { "type": "attribute", + "namespace": null, "name": "action", "action": "equals", "value": "form:action", @@ -10943,6 +11865,7 @@ [ { "type": "attribute", + "namespace": null, "name": "attr", "action": "equals", "value": "boosh", @@ -10954,6 +11877,7 @@ [ { "type": "attribute", + "namespace": null, "name": "attr", "action": "equals", "value": "foo", @@ -10965,6 +11889,7 @@ [ { "type": "attribute", + "namespace": null, "name": "attr", "action": "exists", "value": "", @@ -10976,6 +11901,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "any", "value": "component", @@ -10987,6 +11913,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "brothers", @@ -10998,6 +11925,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "internal", @@ -11009,6 +11937,7 @@ [ { "type": "attribute", + "namespace": null, "name": "constructor", "action": "equals", "value": "foo", @@ -11020,6 +11949,7 @@ [ { "type": "attribute", + "namespace": null, "name": "constructor", "action": "exists", "value": "", @@ -11031,6 +11961,7 @@ [ { "type": "attribute", + "namespace": null, "name": "foo", "action": "exists", "value": "", @@ -11042,6 +11973,7 @@ [ { "type": "attribute", + "namespace": null, "name": "foo", "action": "start", "value": "bar", @@ -11053,6 +11985,7 @@ [ { "type": "attribute", + "namespace": null, "name": "href", "action": "equals", "value": "#", @@ -11064,6 +11997,7 @@ [ { "type": "attribute", + "namespace": null, "name": "href", "action": "exists", "value": "", @@ -11075,6 +12009,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "any", "value": "option1", @@ -11086,6 +12021,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "any", "value": "option1", @@ -11093,6 +12029,7 @@ }, { "type": "attribute", + "namespace": null, "name": "type", "action": "not", "value": "checkbox", @@ -11104,6 +12041,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "select1", @@ -11132,6 +12070,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "select2", @@ -11162,6 +12101,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "option1a", @@ -11173,6 +12113,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "exists", "value": "", @@ -11184,6 +12125,7 @@ [ { "type": "attribute", + "namespace": null, "name": "multiple", "action": "exists", "value": "", @@ -11195,6 +12137,7 @@ [ { "type": "attribute", + "namespace": null, "name": "name", "action": "equals", "value": "id", @@ -11206,6 +12149,7 @@ [ { "type": "attribute", + "namespace": null, "name": "name", "action": "equals", "value": "select1", @@ -11217,6 +12161,7 @@ [ { "type": "attribute", + "namespace": null, "name": "name", "action": "equals", "value": "div", @@ -11228,6 +12173,7 @@ [ { "type": "attribute", + "namespace": null, "name": "name", "action": "equals", "value": "example", @@ -11239,6 +12185,7 @@ [ { "type": "attribute", + "namespace": null, "name": "name", "action": "equals", "value": "prop2", @@ -11250,6 +12197,7 @@ [ { "type": "attribute", + "namespace": null, "name": "name", "action": "equals", "value": "select1", @@ -11261,6 +12209,7 @@ [ { "type": "attribute", + "namespace": null, "name": "name", "action": "equals", "value": "tName1", @@ -11272,6 +12221,7 @@ [ { "type": "attribute", + "namespace": null, "name": "name", "action": "equals", "value": "tName2", @@ -11283,6 +12233,7 @@ [ { "type": "attribute", + "namespace": null, "name": "rel", "action": "end", "value": "nofollow", @@ -11294,6 +12245,7 @@ [ { "type": "attribute", + "namespace": null, "name": "rel", "action": "end", "value": "nofollow", @@ -11305,6 +12257,7 @@ [ { "type": "attribute", + "namespace": null, "name": "rel", "action": "start", "value": "external", @@ -11316,6 +12269,7 @@ [ { "type": "attribute", + "namespace": null, "name": "rel", "action": "element", "value": "nofollow", @@ -11327,6 +12281,7 @@ [ { "type": "attribute", + "namespace": null, "name": "test", "action": "equals", "value": "", @@ -11338,6 +12293,7 @@ [ { "type": "attribute", + "namespace": null, "name": "test", "action": "start", "value": "", @@ -11349,6 +12305,7 @@ [ { "type": "attribute", + "namespace": null, "name": "title", "action": "exists", "value": "", @@ -11360,6 +12317,7 @@ [ { "type": "attribute", + "namespace": null, "name": "type", "action": "equals", "value": "checkbox", @@ -11371,6 +12329,7 @@ [ { "type": "attribute", + "namespace": null, "name": "type", "action": "equals", "value": "radio", @@ -11382,6 +12341,7 @@ [ { "type": "attribute", + "namespace": null, "name": "watch", "action": "equals", "value": "bar", @@ -11393,6 +12353,7 @@ [ { "type": "attribute", + "namespace": null, "name": "watch", "action": "exists", "value": "", @@ -11404,6 +12365,7 @@ [ { "type": "attribute", + "namespace": null, "name": "xml:test", "action": "exists", "value": "", @@ -11415,6 +12377,7 @@ [ { "type": "tag", + "namespace": null, "name": "a" } ] @@ -11423,10 +12386,12 @@ [ { "type": "tag", + "namespace": null, "name": "a" }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "link_2", @@ -11434,6 +12399,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "internal", @@ -11445,12 +12411,14 @@ [ { "type": "tag", + "namespace": null, "name": "a" } ], [ { "type": "tag", + "namespace": null, "name": "b" } ] @@ -11459,18 +12427,21 @@ [ { "type": "tag", + "namespace": null, "name": "a" } ], [ { "type": "tag", + "namespace": null, "name": "b" } ], [ { "type": "tag", + "namespace": null, "name": "div" } ] @@ -11479,12 +12450,14 @@ [ { "type": "tag", + "namespace": null, "name": "a" } ], [ { "type": "tag", + "namespace": null, "name": "p" } ] @@ -11493,18 +12466,21 @@ [ { "type": "tag", + "namespace": null, "name": "a" } ], [ { "type": "tag", + "namespace": null, "name": "p" } ], [ { "type": "tag", + "namespace": null, "name": "b" } ] @@ -11513,10 +12489,12 @@ [ { "type": "tag", + "namespace": null, "name": "a" }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "GROUPS", @@ -11527,6 +12505,7 @@ }, { "type": "tag", + "namespace": null, "name": "code" }, { @@ -11534,6 +12513,7 @@ }, { "type": "tag", + "namespace": null, "name": "a" } ] @@ -11542,10 +12522,12 @@ [ { "type": "tag", + "namespace": null, "name": "a" }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "blog", @@ -11557,10 +12539,12 @@ [ { "type": "tag", + "namespace": null, "name": "a" }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "blog", @@ -11573,6 +12557,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "link", @@ -11587,10 +12572,12 @@ [ { "type": "tag", + "namespace": null, "name": "a" }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "highlight", @@ -11598,6 +12585,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "internal", @@ -11609,10 +12597,12 @@ [ { "type": "tag", + "namespace": null, "name": "a" }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "highlight", @@ -11620,6 +12610,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "internal", @@ -11627,6 +12618,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "nonexistent", @@ -11638,10 +12630,12 @@ [ { "type": "tag", + "namespace": null, "name": "a" }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "internal", @@ -11653,10 +12647,12 @@ [ { "type": "tag", + "namespace": null, "name": "a" }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "internal", @@ -11664,6 +12660,7 @@ }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "link_2", @@ -11675,10 +12672,12 @@ [ { "type": "tag", + "namespace": null, "name": "a" }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "internal", @@ -11686,6 +12685,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "highlight", @@ -11697,10 +12697,12 @@ [ { "type": "tag", + "namespace": null, "name": "a" }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "odd", @@ -11712,6 +12714,7 @@ [ { "type": "tag", + "namespace": null, "name": "a" }, { @@ -11725,6 +12728,7 @@ [ { "type": "tag", + "namespace": null, "name": "a" }, { @@ -11738,6 +12742,7 @@ [ { "type": "tag", + "namespace": null, "name": "a" }, { @@ -11751,6 +12756,7 @@ [ { "type": "tag", + "namespace": null, "name": "a" }, { @@ -11764,6 +12770,7 @@ [ { "type": "tag", + "namespace": null, "name": "a" }, { @@ -11777,6 +12784,7 @@ [ { "type": "tag", + "namespace": null, "name": "a" }, { @@ -11790,6 +12798,7 @@ [ { "type": "tag", + "namespace": null, "name": "a" }, { @@ -11803,6 +12812,7 @@ [ { "type": "tag", + "namespace": null, "name": "a" }, { @@ -11812,6 +12822,7 @@ [ { "type": "attribute", + "namespace": null, "name": "href", "action": "equals", "value": "#", @@ -11826,10 +12837,12 @@ [ { "type": "tag", + "namespace": null, "name": "a" }, { "type": "attribute", + "namespace": null, "name": "class", "action": "any", "value": "blog", @@ -11872,6 +12885,7 @@ [ { "type": "tag", + "namespace": null, "name": "br" }, { @@ -11883,6 +12897,7 @@ [ { "type": "tag", + "namespace": null, "name": "p" }, { @@ -11924,10 +12939,12 @@ [ { "type": "tag", + "namespace": null, "name": "a" }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "internal", @@ -11939,10 +12956,12 @@ [ { "type": "tag", + "namespace": null, "name": "a" }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "external", @@ -11955,6 +12974,7 @@ [ { "type": "attribute", + "namespace": null, "name": "href", "action": "equals", "value": "#", @@ -11969,10 +12989,12 @@ [ { "type": "tag", + "namespace": null, "name": "a" }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "external", @@ -11980,6 +13002,7 @@ }, { "type": "attribute", + "namespace": null, "name": "href", "action": "equals", "value": "#", @@ -11991,10 +13014,12 @@ [ { "type": "tag", + "namespace": null, "name": "a" }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "internal", @@ -12006,10 +13031,12 @@ [ { "type": "tag", + "namespace": null, "name": "a" }, { "type": "attribute", + "namespace": null, "name": "href", "action": "end", "value": "org/", @@ -12021,10 +13048,12 @@ [ { "type": "tag", + "namespace": null, "name": "a" }, { "type": "attribute", + "namespace": null, "name": "href", "action": "any", "value": "google", @@ -12036,10 +13065,12 @@ [ { "type": "tag", + "namespace": null, "name": "a" }, { "type": "attribute", + "namespace": null, "name": "href", "action": "start", "value": "http://www", @@ -12051,10 +13082,12 @@ [ { "type": "tag", + "namespace": null, "name": "a" }, { "type": "attribute", + "namespace": null, "name": "href", "action": "any", "value": "#", @@ -12066,10 +13099,12 @@ [ { "type": "tag", + "namespace": null, "name": "a" }, { "type": "attribute", + "namespace": null, "name": "href", "action": "equals", "value": "#", @@ -12081,10 +13116,12 @@ [ { "type": "tag", + "namespace": null, "name": "a" }, { "type": "attribute", + "namespace": null, "name": "href", "action": "exists", "value": "", @@ -12096,10 +13133,12 @@ [ { "type": "tag", + "namespace": null, "name": "a" }, { "type": "attribute", + "namespace": null, "name": "rel", "action": "start", "value": "external", @@ -12111,10 +13150,12 @@ [ { "type": "tag", + "namespace": null, "name": "a" }, { "type": "attribute", + "namespace": null, "name": "rel", "action": "start", "value": "external", @@ -12126,10 +13167,12 @@ [ { "type": "tag", + "namespace": null, "name": "a" }, { "type": "attribute", + "namespace": null, "name": "rel", "action": "start", "value": "external", @@ -12141,6 +13184,7 @@ [ { "type": "tag", + "namespace": null, "name": "body" } ] @@ -12149,6 +13193,7 @@ [ { "type": "tag", + "namespace": null, "name": "body" }, { @@ -12156,6 +13201,7 @@ }, { "type": "tag", + "namespace": null, "name": "div" }, { @@ -12163,6 +13209,7 @@ }, { "type": "tag", + "namespace": null, "name": "div" }, { @@ -12170,6 +13217,7 @@ }, { "type": "tag", + "namespace": null, "name": "div" } ] @@ -12178,10 +13226,12 @@ [ { "type": "tag", + "namespace": null, "name": "body" }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "body", @@ -12193,6 +13243,7 @@ [ { "type": "tag", + "namespace": null, "name": "body" }, { @@ -12200,6 +13251,7 @@ }, { "type": "tag", + "namespace": null, "name": "div" }, { @@ -12207,6 +13259,7 @@ }, { "type": "tag", + "namespace": null, "name": "div" }, { @@ -12214,6 +13267,7 @@ }, { "type": "tag", + "namespace": null, "name": "div" } ] @@ -12222,10 +13276,12 @@ [ { "type": "tag", + "namespace": null, "name": "cite" }, { "type": "attribute", + "namespace": null, "name": "title", "action": "equals", "value": "hello world!", @@ -12237,6 +13293,7 @@ [ { "type": "tag", + "namespace": null, "name": "code" } ] @@ -12245,6 +13302,7 @@ [ { "type": "tag", + "namespace": null, "name": "code" }, { @@ -12259,6 +13317,7 @@ [ { "type": "tag", + "namespace": null, "name": "component" } ] @@ -12267,10 +13326,12 @@ [ { "type": "tag", + "namespace": null, "name": "component" }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "seite1", @@ -12282,6 +13343,7 @@ [ { "type": "tag", + "namespace": null, "name": "div" } ] @@ -12290,6 +13352,7 @@ [ { "type": "tag", + "namespace": null, "name": "div" }, { @@ -12297,6 +13360,7 @@ }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "foo:bar", @@ -12308,6 +13372,7 @@ [ { "type": "tag", + "namespace": null, "name": "div" }, { @@ -12315,6 +13380,7 @@ }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "test.foo[5]bar", @@ -12326,6 +13392,7 @@ [ { "type": "tag", + "namespace": null, "name": "div" }, { @@ -12333,6 +13400,7 @@ }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "台北", @@ -12344,6 +13412,7 @@ [ { "type": "tag", + "namespace": null, "name": "div" }, { @@ -12351,6 +13420,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "foo:bar", @@ -12362,6 +13432,7 @@ [ { "type": "tag", + "namespace": null, "name": "div" }, { @@ -12369,6 +13440,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "test.foo[5]bar", @@ -12380,6 +13452,7 @@ [ { "type": "tag", + "namespace": null, "name": "div" }, { @@ -12387,6 +13460,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "tokens", @@ -12394,6 +13468,7 @@ }, { "type": "attribute", + "namespace": null, "name": "title", "action": "equals", "value": "one two three #%", @@ -12405,6 +13480,7 @@ [ { "type": "tag", + "namespace": null, "name": "div" }, { @@ -12412,6 +13488,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "tokens", @@ -12419,6 +13496,7 @@ }, { "type": "attribute", + "namespace": null, "name": "title", "action": "equals", "value": "one two three #%", @@ -12429,10 +13507,12 @@ }, { "type": "tag", + "namespace": null, "name": "a" }, { "type": "attribute", + "namespace": null, "name": "href", "action": "end", "value": "foo", @@ -12443,6 +13523,7 @@ }, { "type": "tag", + "namespace": null, "name": "div" } ] @@ -12451,6 +13532,7 @@ [ { "type": "tag", + "namespace": null, "name": "div" }, { @@ -12458,6 +13540,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "tokens", @@ -12465,6 +13548,7 @@ }, { "type": "attribute", + "namespace": null, "name": "title", "action": "equals", "value": "one two", @@ -12476,6 +13560,7 @@ [ { "type": "tag", + "namespace": null, "name": "div" }, { @@ -12483,6 +13568,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "tokens", @@ -12490,6 +13576,7 @@ }, { "type": "attribute", + "namespace": null, "name": "title", "action": "equals", "value": "one", @@ -12501,6 +13588,7 @@ [ { "type": "tag", + "namespace": null, "name": "div" }, { @@ -12508,6 +13596,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "tokens", @@ -12515,6 +13604,7 @@ }, { "type": "attribute", + "namespace": null, "name": "title", "action": "equals", "value": "one two three #%", @@ -12525,6 +13615,7 @@ }, { "type": "tag", + "namespace": null, "name": "a" } ] @@ -12533,6 +13624,7 @@ [ { "type": "tag", + "namespace": null, "name": "div" }, { @@ -12540,6 +13632,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "台北Táiběi", @@ -12551,6 +13644,7 @@ [ { "type": "tag", + "namespace": null, "name": "div" }, { @@ -12558,6 +13652,7 @@ }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "nonexistent", @@ -12569,6 +13664,7 @@ [ { "type": "tag", + "namespace": null, "name": "div" }, { @@ -12576,6 +13672,7 @@ }, { "type": "tag", + "namespace": null, "name": "div" }, { @@ -12583,6 +13680,7 @@ }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "tName1", @@ -12594,6 +13692,7 @@ [ { "type": "tag", + "namespace": null, "name": "div" }, { @@ -12601,6 +13700,7 @@ }, { "type": "tag", + "namespace": null, "name": "span" } ] @@ -12609,6 +13709,7 @@ [ { "type": "tag", + "namespace": null, "name": "div" }, { @@ -12616,6 +13717,7 @@ }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "level2_3", @@ -12627,6 +13729,7 @@ [ { "type": "tag", + "namespace": null, "name": "div" }, { @@ -12634,6 +13737,7 @@ }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "level3_2", @@ -12645,10 +13749,12 @@ [ { "type": "tag", + "namespace": null, "name": "div" }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "attr-child-boosh", @@ -12656,6 +13762,7 @@ }, { "type": "attribute", + "namespace": null, "name": "attr", "action": "equals", "value": "boosh", @@ -12667,10 +13774,12 @@ [ { "type": "tag", + "namespace": null, "name": "div" }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "attr-test3", @@ -12678,6 +13787,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "found", @@ -12685,6 +13795,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "you", @@ -12692,6 +13803,7 @@ }, { "type": "attribute", + "namespace": null, "name": "title", "action": "equals", "value": "whatup duders", @@ -12703,10 +13815,12 @@ [ { "type": "tag", + "namespace": null, "name": "div" }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "blargh", @@ -12718,10 +13832,12 @@ [ { "type": "tag", + "namespace": null, "name": "div" }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "fixtures", @@ -12732,6 +13848,7 @@ }, { "type": "tag", + "namespace": null, "name": "div" }, { @@ -12739,6 +13856,7 @@ }, { "type": "tag", + "namespace": null, "name": "a" } ] @@ -12747,10 +13865,12 @@ [ { "type": "tag", + "namespace": null, "name": "div" }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "fixtures", @@ -12761,6 +13881,7 @@ }, { "type": "tag", + "namespace": null, "name": "div" }, { @@ -12768,6 +13889,7 @@ }, { "type": "tag", + "namespace": null, "name": "a" }, { @@ -12775,6 +13897,7 @@ }, { "type": "tag", + "namespace": null, "name": "div" } ] @@ -12783,10 +13906,12 @@ [ { "type": "tag", + "namespace": null, "name": "div" }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "fixtures", @@ -12797,6 +13922,7 @@ }, { "type": "tag", + "namespace": null, "name": "p" } ] @@ -12805,10 +13931,12 @@ [ { "type": "tag", + "namespace": null, "name": "div" }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "fixtures", @@ -12819,6 +13947,7 @@ }, { "type": "tag", + "namespace": null, "name": "div" }, { @@ -12826,6 +13955,7 @@ }, { "type": "tag", + "namespace": null, "name": "a" } ] @@ -12834,10 +13964,12 @@ [ { "type": "tag", + "namespace": null, "name": "div" }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "form", @@ -12849,10 +13981,12 @@ [ { "type": "tag", + "namespace": null, "name": "div" }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "grandfather", @@ -12863,6 +13997,7 @@ }, { "type": "tag", + "namespace": null, "name": "div" } ] @@ -12871,12 +14006,14 @@ [ { "type": "tag", + "namespace": null, "name": "div" } ], [ { "type": "tag", + "namespace": null, "name": "span" } ] @@ -12885,10 +14022,12 @@ [ { "type": "tag", + "namespace": null, "name": "div" }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "blah", @@ -12899,6 +14038,7 @@ }, { "type": "tag", + "namespace": null, "name": "p" }, { @@ -12906,6 +14046,7 @@ }, { "type": "tag", + "namespace": null, "name": "a" } ] @@ -12914,10 +14055,12 @@ [ { "type": "tag", + "namespace": null, "name": "div" }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "brothers", @@ -12929,10 +14072,12 @@ [ { "type": "tag", + "namespace": null, "name": "div" }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "brothers", @@ -12943,6 +14088,7 @@ }, { "type": "tag", + "namespace": null, "name": "div" } ] @@ -12951,10 +14097,12 @@ [ { "type": "tag", + "namespace": null, "name": "div" }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "brothers", @@ -12965,10 +14113,12 @@ }, { "type": "tag", + "namespace": null, "name": "div" }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "brothers", @@ -12980,10 +14130,12 @@ [ { "type": "tag", + "namespace": null, "name": "div" }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "brothers", @@ -12996,6 +14148,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "brothers", @@ -13010,10 +14163,12 @@ [ { "type": "tag", + "namespace": null, "name": "div" }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "foo", @@ -13025,10 +14180,12 @@ [ { "type": "tag", + "namespace": null, "name": "div" }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "foo", @@ -13039,6 +14196,7 @@ }, { "type": "tag", + "namespace": null, "name": "span" }, { @@ -13046,6 +14204,7 @@ }, { "type": "tag", + "namespace": null, "name": "a" } ] @@ -13054,6 +14213,7 @@ [ { "type": "tag", + "namespace": null, "name": "div" }, { @@ -13063,6 +14223,7 @@ [ { "type": "tag", + "namespace": null, "name": "div" }, { @@ -13072,6 +14233,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "exists", "value": "", @@ -13089,6 +14251,7 @@ [ { "type": "tag", + "namespace": null, "name": "div" }, { @@ -13098,6 +14261,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "brothers", @@ -13112,6 +14276,7 @@ [ { "type": "tag", + "namespace": null, "name": "div" }, { @@ -13121,6 +14286,7 @@ [ { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "brothers", @@ -13135,6 +14301,7 @@ [ { "type": "tag", + "namespace": null, "name": "div" }, { @@ -13144,6 +14311,7 @@ [ { "type": "attribute", + "namespace": null, "name": "id", "action": "exists", "value": "", @@ -13158,10 +14326,12 @@ [ { "type": "tag", + "namespace": null, "name": "div" }, { "type": "attribute", + "namespace": null, "name": "class", "action": "end", "value": "men", @@ -13173,10 +14343,12 @@ [ { "type": "tag", + "namespace": null, "name": "div" }, { "type": "attribute", + "namespace": null, "name": "class", "action": "any", "value": "ers m", @@ -13188,10 +14360,12 @@ [ { "type": "tag", + "namespace": null, "name": "div" }, { "type": "attribute", + "namespace": null, "name": "class", "action": "start", "value": "bro", @@ -13203,10 +14377,12 @@ [ { "type": "tag", + "namespace": null, "name": "div" }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "brothers", @@ -13218,10 +14394,12 @@ [ { "type": "tag", + "namespace": null, "name": "div" }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "brothers", @@ -13229,6 +14407,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "brothers", @@ -13240,6 +14419,7 @@ [ { "type": "tag", + "namespace": null, "name": "dl" }, { @@ -13247,6 +14427,7 @@ }, { "type": "tag", + "namespace": null, "name": "ol" } ] @@ -13255,6 +14436,7 @@ [ { "type": "tag", + "namespace": null, "name": "dl" }, { @@ -13262,6 +14444,7 @@ }, { "type": "tag", + "namespace": null, "name": "ol" } ] @@ -13270,6 +14453,7 @@ [ { "type": "tag", + "namespace": null, "name": "elem" }, { @@ -13297,10 +14481,12 @@ [ { "type": "tag", + "namespace": null, "name": "em" }, { "type": "attribute", + "namespace": null, "name": "nopass", "action": "element", "value": "copyright", @@ -13312,10 +14498,12 @@ [ { "type": "tag", + "namespace": null, "name": "em" }, { "type": "attribute", + "namespace": null, "name": "rel", "action": "element", "value": "copyright", @@ -13327,6 +14515,7 @@ [ { "type": "tag", + "namespace": null, "name": "foo_bar" } ] @@ -13335,6 +14524,7 @@ [ { "type": "tag", + "namespace": null, "name": "form" } ] @@ -13343,6 +14533,7 @@ [ { "type": "tag", + "namespace": null, "name": "form" }, { @@ -13350,6 +14541,7 @@ }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "foo:bar", @@ -13361,6 +14553,7 @@ [ { "type": "tag", + "namespace": null, "name": "form" }, { @@ -13368,6 +14561,7 @@ }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "test.foo[5]bar", @@ -13379,6 +14573,7 @@ [ { "type": "tag", + "namespace": null, "name": "form" }, { @@ -13386,6 +14581,7 @@ }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "台北", @@ -13397,6 +14593,7 @@ [ { "type": "tag", + "namespace": null, "name": "form" }, { @@ -13404,6 +14601,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "foo:bar", @@ -13415,6 +14613,7 @@ [ { "type": "tag", + "namespace": null, "name": "form" }, { @@ -13422,6 +14621,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "test.foo[5]bar", @@ -13433,6 +14633,7 @@ [ { "type": "tag", + "namespace": null, "name": "form" }, { @@ -13440,6 +14641,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "台北Táiběi", @@ -13451,6 +14653,7 @@ [ { "type": "tag", + "namespace": null, "name": "form" }, { @@ -13458,10 +14661,12 @@ }, { "type": "tag", + "namespace": null, "name": "label" }, { "type": "attribute", + "namespace": null, "name": "for", "action": "exists", "value": "", @@ -13473,6 +14678,7 @@ [ { "type": "tag", + "namespace": null, "name": "form" }, { @@ -13486,6 +14692,7 @@ [ { "type": "tag", + "namespace": null, "name": "form" }, { @@ -13499,10 +14706,12 @@ [ { "type": "tag", + "namespace": null, "name": "form" }, { "type": "attribute", + "namespace": null, "name": "title", "action": "any", "value": "commas,", @@ -13512,10 +14721,12 @@ [ { "type": "tag", + "namespace": null, "name": "input" }, { "type": "attribute", + "namespace": null, "name": "value", "action": "equals", "value": "#commaOne,#commaTwo", @@ -13527,6 +14738,7 @@ [ { "type": "tag", + "namespace": null, "name": "h1" } ] @@ -13535,6 +14747,7 @@ [ { "type": "tag", + "namespace": null, "name": "h1" }, { @@ -13542,6 +14755,7 @@ }, { "type": "tag", + "namespace": null, "name": "ul" } ] @@ -13550,10 +14764,12 @@ [ { "type": "tag", + "namespace": null, "name": "h1" }, { "type": "attribute", + "namespace": null, "name": "class", "action": "exists", "value": "", @@ -13565,10 +14781,12 @@ [ { "type": "tag", + "namespace": null, "name": "h1" }, { "type": "attribute", + "namespace": null, "name": "class", "action": "exists", "value": "", @@ -13580,12 +14798,14 @@ [ { "type": "tag", + "namespace": null, "name": "h2" } ], [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -13596,6 +14816,7 @@ }, { "type": "tag", + "namespace": null, "name": "p" } ] @@ -13604,12 +14825,14 @@ [ { "type": "tag", + "namespace": null, "name": "h2" } ], [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -13620,6 +14843,7 @@ }, { "type": "tag", + "namespace": null, "name": "p" } ] @@ -13628,12 +14852,14 @@ [ { "type": "tag", + "namespace": null, "name": "h2" } ], [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -13644,6 +14870,7 @@ }, { "type": "tag", + "namespace": null, "name": "p" } ] @@ -13652,12 +14879,14 @@ [ { "type": "tag", + "namespace": null, "name": "h2" } ], [ { "type": "tag", + "namespace": null, "name": "h1" } ] @@ -13666,12 +14895,14 @@ [ { "type": "tag", + "namespace": null, "name": "h2" } ], [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -13682,6 +14913,7 @@ }, { "type": "tag", + "namespace": null, "name": "p" } ] @@ -13690,12 +14922,14 @@ [ { "type": "tag", + "namespace": null, "name": "h2" } ], [ { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "qunit-fixture", @@ -13706,6 +14940,7 @@ }, { "type": "tag", + "namespace": null, "name": "p" } ] @@ -13714,6 +14949,7 @@ [ { "type": "tag", + "namespace": null, "name": "html" } ] @@ -13722,6 +14958,7 @@ [ { "type": "tag", + "namespace": null, "name": "input" } ] @@ -13730,10 +14967,12 @@ [ { "type": "tag", + "namespace": null, "name": "input" }, { "type": "attribute", + "namespace": null, "name": "data-attr", "action": "equals", "value": "𝌆A", @@ -13745,10 +14984,12 @@ [ { "type": "tag", + "namespace": null, "name": "input" }, { "type": "attribute", + "namespace": null, "name": "data-comma", "action": "equals", "value": "0,1", @@ -13760,10 +15001,12 @@ [ { "type": "tag", + "namespace": null, "name": "input" }, { "type": "attribute", + "namespace": null, "name": "data-comma", "action": "equals", "value": "0,1", @@ -13775,10 +15018,12 @@ [ { "type": "tag", + "namespace": null, "name": "input" }, { "type": "attribute", + "namespace": null, "name": "data-pos", "action": "equals", "value": ":first", @@ -13790,10 +15035,12 @@ [ { "type": "tag", + "namespace": null, "name": "input" }, { "type": "attribute", + "namespace": null, "name": "data-pos", "action": "equals", "value": ":first", @@ -13805,10 +15052,12 @@ [ { "type": "tag", + "namespace": null, "name": "input" }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "idTest", @@ -13820,10 +15069,12 @@ [ { "type": "tag", + "namespace": null, "name": "input" }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "types_all", @@ -13835,10 +15086,12 @@ [ { "type": "tag", + "namespace": null, "name": "input" }, { "type": "attribute", + "namespace": null, "name": "name", "action": "end", "value": "[bar]", @@ -13850,10 +15103,12 @@ [ { "type": "tag", + "namespace": null, "name": "input" }, { "type": "attribute", + "namespace": null, "name": "name", "action": "end", "value": "bar]", @@ -13865,10 +15120,12 @@ [ { "type": "tag", + "namespace": null, "name": "input" }, { "type": "attribute", + "namespace": null, "name": "name", "action": "end", "value": "foo[bar]", @@ -13880,10 +15137,12 @@ [ { "type": "tag", + "namespace": null, "name": "input" }, { "type": "attribute", + "namespace": null, "name": "name", "action": "any", "value": "[bar]", @@ -13895,10 +15154,12 @@ [ { "type": "tag", + "namespace": null, "name": "input" }, { "type": "attribute", + "namespace": null, "name": "name", "action": "any", "value": "foo[bar]", @@ -13910,10 +15171,12 @@ [ { "type": "tag", + "namespace": null, "name": "input" }, { "type": "attribute", + "namespace": null, "name": "name", "action": "equals", "value": "action", @@ -13925,10 +15188,12 @@ [ { "type": "tag", + "namespace": null, "name": "input" }, { "type": "attribute", + "namespace": null, "name": "name", "action": "equals", "value": "action", @@ -13940,10 +15205,12 @@ [ { "type": "tag", + "namespace": null, "name": "input" }, { "type": "attribute", + "namespace": null, "name": "name", "action": "equals", "value": "foo[bar]", @@ -13955,10 +15222,12 @@ [ { "type": "tag", + "namespace": null, "name": "input" }, { "type": "attribute", + "namespace": null, "name": "name", "action": "equals", "value": "types[]", @@ -13970,10 +15239,12 @@ [ { "type": "tag", + "namespace": null, "name": "input" }, { "type": "attribute", + "namespace": null, "name": "name", "action": "equals", "value": "action", @@ -13985,10 +15256,12 @@ [ { "type": "tag", + "namespace": null, "name": "input" }, { "type": "attribute", + "namespace": null, "name": "name", "action": "equals", "value": "foo bar", @@ -14000,10 +15273,12 @@ [ { "type": "tag", + "namespace": null, "name": "input" }, { "type": "attribute", + "namespace": null, "name": "name", "action": "equals", "value": "foo.baz", @@ -14015,10 +15290,12 @@ [ { "type": "tag", + "namespace": null, "name": "input" }, { "type": "attribute", + "namespace": null, "name": "name", "action": "equals", "value": "foo[baz]", @@ -14030,10 +15307,12 @@ [ { "type": "tag", + "namespace": null, "name": "input" }, { "type": "attribute", + "namespace": null, "name": "name", "action": "start", "value": "foo[", @@ -14045,10 +15324,12 @@ [ { "type": "tag", + "namespace": null, "name": "input" }, { "type": "attribute", + "namespace": null, "name": "name", "action": "start", "value": "foo[bar]", @@ -14060,10 +15341,12 @@ [ { "type": "tag", + "namespace": null, "name": "input" }, { "type": "attribute", + "namespace": null, "name": "title", "action": "equals", "value": "Don't click me", @@ -14075,10 +15358,12 @@ [ { "type": "tag", + "namespace": null, "name": "input" }, { "type": "attribute", + "namespace": null, "name": "value", "action": "equals", "value": "Test", @@ -14090,6 +15375,7 @@ [ { "type": "tag", + "namespace": null, "name": "li" } ] @@ -14098,6 +15384,7 @@ [ { "type": "tag", + "namespace": null, "name": "li" }, { @@ -14105,6 +15392,7 @@ }, { "type": "tag", + "namespace": null, "name": "li" } ] @@ -14113,10 +15401,12 @@ [ { "type": "tag", + "namespace": null, "name": "li" }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "attr-child-boosh", @@ -14124,6 +15414,7 @@ }, { "type": "attribute", + "namespace": null, "name": "attr", "action": "equals", "value": "boosh", @@ -14135,10 +15426,12 @@ [ { "type": "tag", + "namespace": null, "name": "li" }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "item_1", @@ -14146,6 +15439,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "first", @@ -14157,10 +15451,12 @@ [ { "type": "tag", + "namespace": null, "name": "li" }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "item_1", @@ -14168,6 +15464,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "first", @@ -14175,6 +15472,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "nonexistent", @@ -14186,10 +15484,12 @@ [ { "type": "tag", + "namespace": null, "name": "li" }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "item_1", @@ -14197,6 +15497,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "nonexistent", @@ -14208,10 +15509,12 @@ [ { "type": "tag", + "namespace": null, "name": "li" }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "item_3", @@ -14219,6 +15522,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "exists", "value": "", @@ -14230,6 +15534,7 @@ [ { "type": "tag", + "namespace": null, "name": "li" }, { @@ -14243,6 +15548,7 @@ [ { "type": "tag", + "namespace": null, "name": "li" }, { @@ -14256,6 +15562,7 @@ [ { "type": "tag", + "namespace": null, "name": "li" }, { @@ -14269,6 +15576,7 @@ [ { "type": "tag", + "namespace": null, "name": "li" }, { @@ -14290,6 +15598,7 @@ [ { "type": "tag", + "namespace": null, "name": "meta" }, { @@ -14297,6 +15606,7 @@ }, { "type": "tag", + "namespace": null, "name": "property" }, { @@ -14304,6 +15614,7 @@ }, { "type": "tag", + "namespace": null, "name": "thing" } ] @@ -14312,6 +15623,7 @@ [ { "type": "tag", + "namespace": null, "name": "nonexistent" } ] @@ -14320,6 +15632,7 @@ [ { "type": "tag", + "namespace": null, "name": "ol" }, { @@ -14327,10 +15640,12 @@ }, { "type": "tag", + "namespace": null, "name": "li" }, { "type": "attribute", + "namespace": null, "name": "attr", "action": "equals", "value": "boosh", @@ -14347,6 +15662,7 @@ [ { "type": "tag", + "namespace": null, "name": "ol" }, { @@ -14354,6 +15670,7 @@ }, { "type": "tag", + "namespace": null, "name": "li" } ] @@ -14362,6 +15679,7 @@ [ { "type": "tag", + "namespace": null, "name": "ol" }, { @@ -14369,6 +15687,7 @@ }, { "type": "tag", + "namespace": null, "name": "ol" }, { @@ -14376,10 +15695,12 @@ }, { "type": "tag", + "namespace": null, "name": "li" }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "attr-child-boosh", @@ -14387,6 +15708,7 @@ }, { "type": "attribute", + "namespace": null, "name": "attr", "action": "equals", "value": "boosh", @@ -14398,10 +15720,12 @@ [ { "type": "tag", + "namespace": null, "name": "ol" }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "list", @@ -14412,10 +15736,12 @@ }, { "type": "tag", + "namespace": null, "name": "li" }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "attr-child-boosh", @@ -14423,6 +15749,7 @@ }, { "type": "attribute", + "namespace": null, "name": "attr", "action": "equals", "value": "boosh", @@ -14434,10 +15761,12 @@ [ { "type": "tag", + "namespace": null, "name": "ol" }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "list", @@ -14448,10 +15777,12 @@ }, { "type": "tag", + "namespace": null, "name": "li" }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "attr-child-boosh", @@ -14459,6 +15790,7 @@ }, { "type": "attribute", + "namespace": null, "name": "attr", "action": "equals", "value": "boosh", @@ -14470,6 +15802,7 @@ [ { "type": "tag", + "namespace": null, "name": "ol" }, { @@ -14483,6 +15816,7 @@ [ { "type": "tag", + "namespace": null, "name": "ol" }, { @@ -14496,6 +15830,7 @@ [ { "type": "tag", + "namespace": null, "name": "ol" }, { @@ -14509,6 +15844,7 @@ [ { "type": "tag", + "namespace": null, "name": "ol" }, { @@ -14516,6 +15852,7 @@ }, { "type": "tag", + "namespace": null, "name": "li" } ] @@ -14524,6 +15861,7 @@ [ { "type": "tag", + "namespace": null, "name": "ol" }, { @@ -14531,6 +15869,7 @@ }, { "type": "tag", + "namespace": null, "name": "li" }, { @@ -14538,6 +15877,7 @@ }, { "type": "tag", + "namespace": null, "name": "li" } ] @@ -14546,6 +15886,7 @@ [ { "type": "tag", + "namespace": null, "name": "option" } ] @@ -14554,6 +15895,7 @@ [ { "type": "tag", + "namespace": null, "name": "option" }, { @@ -14572,6 +15914,7 @@ [ { "type": "tag", + "namespace": null, "name": "p" } ] @@ -14580,6 +15923,7 @@ [ { "type": "tag", + "namespace": null, "name": "p" }, { @@ -14587,6 +15931,7 @@ }, { "type": "tag", + "namespace": null, "name": "p" } ] @@ -14595,6 +15940,7 @@ [ { "type": "tag", + "namespace": null, "name": "p" }, { @@ -14602,6 +15948,7 @@ }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "blog", @@ -14613,6 +15960,7 @@ [ { "type": "tag", + "namespace": null, "name": "p" }, { @@ -14620,6 +15968,7 @@ }, { "type": "tag", + "namespace": null, "name": "div" } ] @@ -14628,6 +15977,7 @@ [ { "type": "tag", + "namespace": null, "name": "p" }, { @@ -14648,6 +15998,7 @@ [ { "type": "tag", + "namespace": null, "name": "p" }, { @@ -14655,6 +16006,7 @@ }, { "type": "tag", + "namespace": null, "name": "a" } ] @@ -14663,6 +16015,7 @@ [ { "type": "tag", + "namespace": null, "name": "p" }, { @@ -14670,10 +16023,12 @@ }, { "type": "tag", + "namespace": null, "name": "a" }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "blog", @@ -14685,6 +16040,7 @@ [ { "type": "tag", + "namespace": null, "name": "p" }, { @@ -14692,6 +16048,7 @@ }, { "type": "tag", + "namespace": null, "name": "a" } ] @@ -14700,6 +16057,7 @@ [ { "type": "tag", + "namespace": null, "name": "p" }, { @@ -14707,10 +16065,12 @@ }, { "type": "tag", + "namespace": null, "name": "a" }, { "type": "attribute", + "namespace": null, "name": "href", "action": "any", "value": "#", @@ -14722,6 +16082,7 @@ [ { "type": "tag", + "namespace": null, "name": "p" }, { @@ -14729,10 +16090,12 @@ }, { "type": "tag", + "namespace": null, "name": "a" }, { "type": "attribute", + "namespace": null, "name": "href", "action": "start", "value": "#", @@ -14744,10 +16107,12 @@ [ { "type": "tag", + "namespace": null, "name": "p" }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "blargh", @@ -14759,10 +16124,12 @@ [ { "type": "tag", + "namespace": null, "name": "p" }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "firstp", @@ -14773,6 +16140,7 @@ }, { "type": "tag", + "namespace": null, "name": "p" } ] @@ -14781,10 +16149,12 @@ [ { "type": "tag", + "namespace": null, "name": "p" }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "strong", @@ -14796,12 +16166,14 @@ [ { "type": "tag", + "namespace": null, "name": "p" } ], [ { "type": "tag", + "namespace": null, "name": "div" }, { @@ -14809,6 +16181,7 @@ }, { "type": "tag", + "namespace": null, "name": "p" } ] @@ -14817,12 +16190,14 @@ [ { "type": "tag", + "namespace": null, "name": "p" } ], [ { "type": "tag", + "namespace": null, "name": "a" } ] @@ -14831,10 +16206,12 @@ [ { "type": "tag", + "namespace": null, "name": "p" }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "first", @@ -14845,6 +16222,7 @@ }, { "type": "tag", + "namespace": null, "name": "a" } ] @@ -14853,10 +16231,12 @@ [ { "type": "tag", + "namespace": null, "name": "p" }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "foo", @@ -14868,10 +16248,12 @@ [ { "type": "tag", + "namespace": null, "name": "p" }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "odd", @@ -14883,6 +16265,7 @@ [ { "type": "tag", + "namespace": null, "name": "p" }, { @@ -14896,6 +16279,7 @@ [ { "type": "tag", + "namespace": null, "name": "p" }, { @@ -14905,6 +16289,7 @@ }, { "type": "attribute", + "namespace": null, "name": "id", "action": "not", "value": ")", @@ -14916,6 +16301,7 @@ [ { "type": "tag", + "namespace": null, "name": "p" }, { @@ -14925,6 +16311,7 @@ }, { "type": "attribute", + "namespace": null, "name": "id", "action": "not", "value": ")", @@ -14936,6 +16323,7 @@ [ { "type": "tag", + "namespace": null, "name": "p" }, { @@ -14949,6 +16337,7 @@ [ { "type": "tag", + "namespace": null, "name": "p" }, { @@ -14958,6 +16347,7 @@ [ { "type": "tag", + "namespace": null, "name": "a" } ] @@ -14969,6 +16359,7 @@ [ { "type": "tag", + "namespace": null, "name": "p" }, { @@ -14978,6 +16369,7 @@ [ { "type": "tag", + "namespace": null, "name": "a" } ] @@ -14989,6 +16381,7 @@ [ { "type": "tag", + "namespace": null, "name": "p" }, { @@ -15002,6 +16395,7 @@ [ { "type": "tag", + "namespace": null, "name": "p" }, { @@ -15011,12 +16405,14 @@ [ { "type": "tag", + "namespace": null, "name": "a" } ], [ { "type": "tag", + "namespace": null, "name": "p" } ] @@ -15028,6 +16424,7 @@ [ { "type": "tag", + "namespace": null, "name": "p" }, { @@ -15037,18 +16434,21 @@ [ { "type": "tag", + "namespace": null, "name": "a" } ], [ { "type": "tag", + "namespace": null, "name": "p" } ], [ { "type": "tag", + "namespace": null, "name": "b" } ] @@ -15060,6 +16460,7 @@ [ { "type": "tag", + "namespace": null, "name": "p" }, { @@ -15069,6 +16470,7 @@ [ { "type": "tag", + "namespace": null, "name": "p" } ] @@ -15080,6 +16482,7 @@ [ { "type": "tag", + "namespace": null, "name": "p" }, { @@ -15089,12 +16492,14 @@ [ { "type": "tag", + "namespace": null, "name": "p" } ], [ { "type": "tag", + "namespace": null, "name": "a" } ] @@ -15106,6 +16511,7 @@ [ { "type": "tag", + "namespace": null, "name": "p" }, { @@ -15119,6 +16525,7 @@ [ { "type": "tag", + "namespace": null, "name": "p" }, { @@ -15132,6 +16539,7 @@ [ { "type": "tag", + "namespace": null, "name": "p" }, { @@ -15145,6 +16553,7 @@ [ { "type": "tag", + "namespace": null, "name": "p" }, { @@ -15152,6 +16561,7 @@ }, { "type": "tag", + "namespace": null, "name": "a" } ] @@ -15160,6 +16570,7 @@ [ { "type": "tag", + "namespace": null, "name": "p" }, { @@ -15167,6 +16578,7 @@ }, { "type": "tag", + "namespace": null, "name": "a" } ] @@ -15175,10 +16587,12 @@ [ { "type": "tag", + "namespace": null, "name": "p" }, { "type": "attribute", + "namespace": null, "name": "lang", "action": "equals", "value": "en", @@ -15189,6 +16603,7 @@ }, { "type": "tag", + "namespace": null, "name": "p" } ] @@ -15197,6 +16612,7 @@ [ { "type": "tag", + "namespace": null, "name": "param" } ] @@ -15205,10 +16621,12 @@ [ { "type": "tag", + "namespace": null, "name": "property" }, { "type": "attribute", + "namespace": null, "name": "name", "action": "equals", "value": "prop2", @@ -15220,6 +16638,7 @@ [ { "type": "tag", + "namespace": null, "name": "select" } ] @@ -15228,10 +16647,12 @@ [ { "type": "tag", + "namespace": null, "name": "select" }, { "type": "attribute", + "namespace": null, "name": "name", "action": "equals", "value": "select2", @@ -15242,6 +16663,7 @@ }, { "type": "tag", + "namespace": null, "name": "option" }, { @@ -15255,6 +16677,7 @@ [ { "type": "tag", + "namespace": null, "name": "soap:envelope" } ] @@ -15263,6 +16686,7 @@ [ { "type": "tag", + "namespace": null, "name": "span" } ] @@ -15271,6 +16695,7 @@ [ { "type": "tag", + "namespace": null, "name": "span" }, { @@ -15278,6 +16703,7 @@ }, { "type": "tag", + "namespace": null, "name": "span" } ] @@ -15286,6 +16712,7 @@ [ { "type": "tag", + "namespace": null, "name": "span" }, { @@ -15293,6 +16720,7 @@ }, { "type": "tag", + "namespace": null, "name": "span" } ] @@ -15301,6 +16729,7 @@ [ { "type": "tag", + "namespace": null, "name": "span" }, { @@ -15308,6 +16737,7 @@ }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "level3_2", @@ -15319,10 +16749,12 @@ [ { "type": "tag", + "namespace": null, "name": "span" }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "dupL1", @@ -15334,10 +16766,12 @@ [ { "type": "tag", + "namespace": null, "name": "span" }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "span_bar", @@ -15349,10 +16783,12 @@ [ { "type": "tag", + "namespace": null, "name": "span" }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "span_foo", @@ -15364,10 +16800,12 @@ [ { "type": "tag", + "namespace": null, "name": "span" }, { "type": "attribute", + "namespace": null, "name": "class", "action": "element", "value": "span_wtf", @@ -15379,6 +16817,7 @@ [ { "type": "tag", + "namespace": null, "name": "span" }, { @@ -15398,6 +16837,7 @@ [ { "type": "tag", + "namespace": null, "name": "span" }, { @@ -15411,6 +16851,7 @@ [ { "type": "tag", + "namespace": null, "name": "span" }, { @@ -15424,10 +16865,12 @@ [ { "type": "tag", + "namespace": null, "name": "span" }, { "type": "attribute", + "namespace": null, "name": "lang", "action": "equals", "value": "中文", @@ -15439,6 +16882,7 @@ [ { "type": "tag", + "namespace": null, "name": "strong" } ] @@ -15447,10 +16891,12 @@ [ { "type": "tag", + "namespace": null, "name": "strong" }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "strong", @@ -15462,10 +16908,12 @@ [ { "type": "tag", + "namespace": null, "name": "tostring" }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "toString", @@ -15477,6 +16925,7 @@ [ { "type": "tag", + "namespace": null, "name": "ul" }, { @@ -15484,6 +16933,7 @@ }, { "type": "tag", + "namespace": null, "name": "li" } ] @@ -15492,6 +16942,7 @@ [ { "type": "tag", + "namespace": null, "name": "ul" }, { @@ -15499,6 +16950,7 @@ }, { "type": "tag", + "namespace": null, "name": "li" }, { @@ -15512,6 +16964,7 @@ [ { "type": "tag", + "namespace": null, "name": "ul" }, { @@ -15519,6 +16972,7 @@ }, { "type": "tag", + "namespace": null, "name": "li" }, { @@ -15532,6 +16986,7 @@ [ { "type": "tag", + "namespace": null, "name": "ul" }, { @@ -15539,6 +16994,7 @@ }, { "type": "tag", + "namespace": null, "name": "li" }, { @@ -15552,6 +17008,7 @@ [ { "type": "tag", + "namespace": null, "name": "ul" }, { @@ -15559,6 +17016,7 @@ }, { "type": "tag", + "namespace": null, "name": "li" }, { @@ -15572,6 +17030,7 @@ [ { "type": "tag", + "namespace": null, "name": "ul" }, { @@ -15579,6 +17038,7 @@ }, { "type": "tag", + "namespace": null, "name": "li" }, { @@ -15592,6 +17052,7 @@ [ { "type": "tag", + "namespace": null, "name": "ul" }, { @@ -15599,6 +17060,7 @@ }, { "type": "tag", + "namespace": null, "name": "li" }, { @@ -15612,6 +17074,7 @@ [ { "type": "tag", + "namespace": null, "name": "ul" }, { @@ -15619,6 +17082,7 @@ }, { "type": "tag", + "namespace": null, "name": "li" }, { @@ -15632,6 +17096,7 @@ [ { "type": "tag", + "namespace": null, "name": "ul" }, { @@ -15639,6 +17104,7 @@ }, { "type": "tag", + "namespace": null, "name": "li" }, { @@ -15652,6 +17118,7 @@ [ { "type": "tag", + "namespace": null, "name": "ul" }, { @@ -15659,6 +17126,7 @@ }, { "type": "tag", + "namespace": null, "name": "li" }, { @@ -15672,6 +17140,7 @@ [ { "type": "tag", + "namespace": null, "name": "ul" }, { @@ -15679,6 +17148,7 @@ }, { "type": "tag", + "namespace": null, "name": "li" }, { @@ -15692,10 +17162,12 @@ [ { "type": "tag", + "namespace": null, "name": "ul" }, { "type": "attribute", + "namespace": null, "name": "id", "action": "equals", "value": "first", @@ -15707,6 +17179,7 @@ [ { "type": "tag", + "namespace": null, "name": "ul" }, { @@ -15720,6 +17193,7 @@ [ { "type": "tag", + "namespace": null, "name": "ul" }, { @@ -15727,6 +17201,7 @@ }, { "type": "tag", + "namespace": null, "name": "li" } ] diff --git a/src/__fixtures__/tests.ts b/src/__fixtures__/tests.ts index b6f96e36..16029271 100644 --- a/src/__fixtures__/tests.ts +++ b/src/__fixtures__/tests.ts @@ -13,6 +13,7 @@ export const tests: [ [ { type: "tag", + namespace: null, name: "div", }, ], @@ -38,6 +39,7 @@ export const tests: [ [ { type: "tag", + namespace: null, name: "div", }, { @@ -45,6 +47,7 @@ export const tests: [ }, { type: "tag", + namespace: null, name: "div", }, ], @@ -57,6 +60,7 @@ export const tests: [ [ { type: "tag", + namespace: null, name: "div", }, { @@ -64,6 +68,7 @@ export const tests: [ }, { type: "tag", + namespace: null, name: "div", }, ], @@ -76,6 +81,7 @@ export const tests: [ [ { type: "tag", + namespace: null, name: "div", }, { @@ -83,6 +89,7 @@ export const tests: [ }, { type: "tag", + namespace: null, name: "div", }, ], @@ -95,6 +102,7 @@ export const tests: [ [ { type: "tag", + namespace: null, name: "div", }, { @@ -102,6 +110,7 @@ export const tests: [ }, { type: "tag", + namespace: null, name: "div", }, ], @@ -114,6 +123,7 @@ export const tests: [ [ { type: "tag", + namespace: null, name: "p", }, { @@ -121,6 +131,7 @@ export const tests: [ }, { type: "tag", + namespace: null, name: "div", }, ], @@ -135,6 +146,7 @@ export const tests: [ [ { type: "attribute", + namespace: null, action: "equals", name: "id", value: " ", @@ -145,6 +157,7 @@ export const tests: [ }, { type: "tag", + namespace: null, name: "a", }, ], @@ -157,6 +170,7 @@ export const tests: [ [ { type: "attribute", + namespace: null, name: "class", action: "element", value: " ", @@ -172,6 +186,7 @@ export const tests: [ [ { type: "attribute", + namespace: null, name: "class", action: "element", value: "m™²³", @@ -187,6 +202,7 @@ export const tests: [ [ { type: "tag", + namespace: null, name: "a", }, ], @@ -199,6 +215,7 @@ export const tests: [ [ { type: "tag", + namespace: null, name: "\uD834\uDF06\uD834\uDF06", }, ], @@ -211,6 +228,7 @@ export const tests: [ [ { type: "attribute", + namespace: null, action: "equals", name: "id", value: "&B", @@ -228,6 +246,7 @@ export const tests: [ [ { type: "attribute", + namespace: null, name: "name", action: "start", value: "foo[", @@ -243,6 +262,7 @@ export const tests: [ [ { type: "attribute", + namespace: null, name: "name", action: "start", value: "foo[bar]", @@ -258,6 +278,7 @@ export const tests: [ [ { type: "attribute", + namespace: null, name: "name", action: "end", value: "[bar]", @@ -273,6 +294,7 @@ export const tests: [ [ { type: "attribute", + namespace: null, name: "href", action: "any", value: "google", @@ -288,6 +310,7 @@ export const tests: [ [ { type: "attribute", + namespace: null, name: "value", action: "equals", value: "\nsome text\n", @@ -303,6 +326,7 @@ export const tests: [ [ { type: "attribute", + namespace: null, name: "name", action: "equals", value: "foo.baz", @@ -318,6 +342,7 @@ export const tests: [ [ { type: "attribute", + namespace: null, name: "name", action: "equals", value: "foo[bar]", @@ -333,6 +358,7 @@ export const tests: [ [ { type: "attribute", + namespace: null, name: "xml:test", action: "exists", value: "", @@ -348,6 +374,7 @@ export const tests: [ [ { type: "attribute", + namespace: null, name: "name", action: "equals", value: "foo ~ < > , bar", @@ -365,6 +392,7 @@ export const tests: [ [ { type: "attribute", + namespace: null, action: "equals", name: "id", value: ".identifier", @@ -476,12 +504,14 @@ export const tests: [ [ { type: "tag", + namespace: null, name: "a", }, ], [ { type: "tag", + namespace: null, name: "b", }, ], @@ -500,12 +530,14 @@ export const tests: [ [ { type: "tag", + namespace: null, name: "h1", }, ], [ { type: "tag", + namespace: null, name: "p", }, ], @@ -526,6 +558,7 @@ export const tests: [ [ { type: "attribute", + namespace: null, action: "equals", name: "id", value: "types_all", @@ -541,6 +574,7 @@ export const tests: [ [ { type: "attribute", + namespace: null, action: "equals", name: "name", value: "foo bar", @@ -556,6 +590,7 @@ export const tests: [ [ { type: "attribute", + namespace: null, action: "equals", name: "name", value: "foo.baz", @@ -571,6 +606,7 @@ export const tests: [ [ { type: "attribute", + namespace: null, action: "equals", name: "name", value: "foo[baz]", @@ -586,6 +622,7 @@ export const tests: [ [ { type: "attribute", + namespace: null, action: "equals", name: "data-attr", value: "foo_baz']", @@ -601,6 +638,7 @@ export const tests: [ [ { type: "attribute", + namespace: null, action: "equals", name: "data-attr", value: "'", @@ -616,6 +654,7 @@ export const tests: [ [ { type: "attribute", + namespace: null, action: "equals", name: "data-attr", value: "\\", @@ -631,6 +670,7 @@ export const tests: [ [ { type: "attribute", + namespace: null, action: "equals", name: "data-attr", value: "\\'", @@ -646,6 +686,7 @@ export const tests: [ [ { type: "attribute", + namespace: null, action: "equals", name: "data-attr", value: "\\\\", @@ -661,6 +702,7 @@ export const tests: [ [ { type: "attribute", + namespace: null, action: "equals", name: "data-attr", value: "\\\\", @@ -676,6 +718,7 @@ export const tests: [ [ { type: "attribute", + namespace: null, action: "equals", name: "data-attr", value: "\\\\", @@ -691,6 +734,7 @@ export const tests: [ [ { type: "attribute", + namespace: null, action: "equals", name: "data-attr", value: "\\\\", @@ -706,6 +750,7 @@ export const tests: [ [ { type: "attribute", + namespace: null, action: "equals", name: "data-attr", value: "\u4e00", @@ -721,6 +766,7 @@ export const tests: [ [ { type: "attribute", + namespace: null, action: "equals", name: "data-attr", value: "\uD834\uDF06A", @@ -739,12 +785,14 @@ export const tests: [ { name: "fOo", type: "tag", + namespace: null, }, { action: "exists", ignoreCase: false, name: "baR", type: "attribute", + namespace: null, value: "", }, ], @@ -759,12 +807,14 @@ export const tests: [ { name: "foo", type: "tag", + namespace: null, }, { action: "exists", ignoreCase: false, name: "baR", type: "attribute", + namespace: null, value: "", }, ], @@ -779,12 +829,14 @@ export const tests: [ { name: "fOo", type: "tag", + namespace: null, }, { action: "exists", ignoreCase: false, name: "bar", type: "attribute", + namespace: null, value: "", }, ], @@ -792,4 +844,80 @@ export const tests: [ "`lowerCaseTags` option", { lowerCaseTags: false }, ], + + // Namespaces + [ + "foo|bar", + [ + [ + { + name: "bar", + type: "tag", + namespace: "foo", + }, + ], + ], + "basic tag namespace", + ], + [ + "*|bar", + [ + [ + { + name: "bar", + type: "tag", + namespace: "*", + }, + ], + ], + "star tag namespace", + ], + [ + "[foo|bar]", + [ + [ + { + action: "exists", + ignoreCase: false, + name: "bar", + type: "attribute", + namespace: "foo", + value: "", + }, + ], + ], + "basic attribute namespace, existential", + ], + [ + "[foo|bar='baz' i]", + [ + [ + { + action: "equals", + ignoreCase: true, + name: "bar", + type: "attribute", + namespace: "foo", + value: "baz", + }, + ], + ], + "basic attribute namespace, equality", + ], + [ + "[*|bar='baz' i]", + [ + [ + { + action: "equals", + ignoreCase: true, + name: "bar", + type: "attribute", + namespace: "*", + value: "baz", + }, + ], + ], + "star attribute namespace", + ], ]; diff --git a/src/parse.ts b/src/parse.ts index 2452a3ef..502c192f 100644 --- a/src/parse.ts +++ b/src/parse.ts @@ -30,6 +30,7 @@ export interface AttributeSelector { action: AttributeAction; value: string; ignoreCase: boolean; + namespace: string | null; } type DataType = Selector[][] | null | string; @@ -48,6 +49,7 @@ export interface PseudoElement { export interface TagSelector { type: "tag"; name: string; + namespace: string | null; } export interface UniversalSelector { @@ -78,7 +80,7 @@ export type TraversalType = const reName = /^[^\\]?(?:\\(?:[\da-f]{1,6}\s?|.)|[\w\-\u00b0-\uFFFF])+/; const reEscape = /\\([\da-f]{1,6}\s?|(\s)|.)/gi; // Modified version of https://github.com/jquery/sizzle/blob/master/src/sizzle.js#L87 -const reAttr = /^\s*((?:\\.|[\w\u00b0-\uFFFF-])+)\s*(?:(\S?)=\s*(?:(['"])((?:[^\\]|\\[^])*?)\3|(#?(?:\\.|[\w\u00b0-\uFFFF-])*)|)|)\s*(i)?\]/; +const reAttr = /^\s*(?:(\*|[-\w]*)\|)?((?:\\.|[\w\u00b0-\uFFFF-])+)\s*(?:(\S?)=\s*(?:(['"])((?:[^\\]|\\[^])*?)\4|(#?(?:\\.|[\w\u00b0-\uFFFF-])*)|)|)\s*([iI])?\]/; const actionTypes: { [key: string]: AttributeAction } = { undefined: "exists", @@ -173,7 +175,7 @@ export default function parse( const endIndex = parseSelector(subselects, `${selector}`, options, 0); if (endIndex < selector.length) { - throw new Error(`Unmatched selector: ${selector}`); + throw new Error(`Unmatched selector: ${selector.slice(endIndex)}`); } return subselects; @@ -249,10 +251,7 @@ function parseSelector( sawWS = false; } - if (firstChar === "*") { - selectorIndex += 1; - tokens.push({ type: "universal" }); - } else if (firstChar in attribSelectors) { + if (firstChar in attribSelectors) { const [name, action] = attribSelectors[firstChar]; tokens.push({ type: "attribute", @@ -260,6 +259,7 @@ function parseSelector( action, value: getName(1), ignoreCase: false, + namespace: null, }); } else if (firstChar === "[") { const attributeMatch = selector @@ -268,12 +268,15 @@ function parseSelector( if (!attributeMatch) { throw new Error( - `Malformed attribute selector: ${selector}` + `Malformed attribute selector: ${selector.slice( + selectorIndex + )}` ); } const [ completeSelector, + namespace = null, baseName, actionType, , @@ -294,6 +297,7 @@ function parseSelector( name, action: actionTypes[actionType], value: unescapeCSS(value), + namespace, ignoreCase: !!ignoreCase, }); } else if (firstChar === ":") { @@ -373,23 +377,47 @@ function parseSelector( } tokens.push({ type: "pseudo", name, data }); - } else if (reName.test(selector.slice(selectorIndex))) { - let name = getName(0); + } else { + let namespace = null; + let name: string; + + if (firstChar === "*") { + selectorIndex += 1; + name = "*"; + } else if (reName.test(selector.slice(selectorIndex))) { + name = getName(0); + } else { + /* + * We have finished parsing the selector. + * Remove descendant tokens at the end if they exist, + * and return the last index, so that parsing can be + * picked up from here. + */ + if ( + tokens.length && + tokens[tokens.length - 1].type === "descendant" + ) { + tokens.pop(); + } + addToken(subselects, tokens); + return selectorIndex; + } - if (options.lowerCaseTags ?? !options.xmlMode) { - name = name.toLowerCase(); + if (selector.charAt(selectorIndex) === "|") { + namespace = name; + name = getName(1); } - tokens.push({ type: "tag", name }); - } else { - if ( - tokens.length && - tokens[tokens.length - 1].type === "descendant" - ) { - tokens.pop(); + if (name === "*") { + // We cannot have a namespace at this point. + tokens.push({ type: "universal" }); + } else { + if (options.lowerCaseTags ?? !options.xmlMode) { + name = name.toLowerCase(); + } + + tokens.push({ type: "tag", name, namespace }); } - addToken(subselects, tokens); - return selectorIndex; } } } diff --git a/src/stringify.ts b/src/stringify.ts index 30ed9f3e..4fe48be4 100644 --- a/src/stringify.ts +++ b/src/stringify.ts @@ -53,7 +53,7 @@ function stringifyToken(token: Selector): string { return "*"; case "tag": - return escapeName(token.name); + return getNamespacedName(token); case "pseudo-element": return `::${escapeName(token.name)}`; @@ -65,31 +65,48 @@ function stringifyToken(token: Selector): string { } return `:${escapeName(token.name)}(${stringify(token.data)})`; - case "attribute": - if (token.action === "exists") { - return `[${escapeName(token.name)}]`; - } + case "attribute": { if ( token.name === "id" && token.action === "equals" && - !token.ignoreCase + !token.ignoreCase && + !token.namespace ) { return `#${escapeName(token.value)}`; } if ( token.name === "class" && token.action === "element" && - !token.ignoreCase + !token.ignoreCase && + !token.namespace ) { return `.${escapeName(token.value)}`; } - return `[${escapeName(token.name)}${ - actionTypes[token.action] - }='${escapeName(token.value)}'${token.ignoreCase ? "i" : ""}]`; + const name = getNamespacedName(token); + + if (token.action === "exists") { + return `[${name}]`; + } + + return `[${name}${actionTypes[token.action]}='${escapeName( + token.value + )}'${token.ignoreCase ? "i" : ""}]`; + } } } +function getNamespacedName(token: { + name: string; + namespace: string | null; +}): string { + return token.namespace + ? `${ + token.namespace === "*" ? "*" : escapeName(token.namespace) + }|${escapeName(token.name)}` + : escapeName(token.name); +} + function escapeName(str: string): string { return str .split("") From dc558611e547b0f0cca8cfdb752830e0eb6f45f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20B=C3=B6hm?= Date: Mon, 12 Oct 2020 23:53:37 -0700 Subject: [PATCH 10/12] feat(namespaces): Support universal selectors with namespaces --- src/__fixtures__/out.json | 186 +++++++++++++++++++++++++------------- src/__fixtures__/tests.ts | 13 +++ src/parse.ts | 11 ++- src/stringify.ts | 14 +-- 4 files changed, 153 insertions(+), 71 deletions(-) diff --git a/src/__fixtures__/out.json b/src/__fixtures__/out.json index e088c8e5..da529079 100644 --- a/src/__fixtures__/out.json +++ b/src/__fixtures__/out.json @@ -456,7 +456,8 @@ "data": [ [ { - "type": "universal" + "type": "universal", + "namespace": null } ] ] @@ -477,7 +478,8 @@ "data": [ [ { - "type": "universal" + "type": "universal", + "namespace": null } ] ] @@ -912,7 +914,8 @@ "type": "descendant" }, { - "type": "universal" + "type": "universal", + "namespace": null } ] ], @@ -1376,7 +1379,8 @@ "type": "child" }, { - "type": "universal" + "type": "universal", + "namespace": null } ] ], @@ -1460,7 +1464,8 @@ "type": "descendant" }, { - "type": "universal" + "type": "universal", + "namespace": null } ] ], @@ -1510,7 +1515,8 @@ "type": "child" }, { - "type": "universal" + "type": "universal", + "namespace": null } ] ], @@ -2888,7 +2894,8 @@ "type": "descendant" }, { - "type": "universal" + "type": "universal", + "namespace": null }, { "type": "pseudo", @@ -2911,7 +2918,8 @@ "type": "descendant" }, { - "type": "universal" + "type": "universal", + "namespace": null }, { "type": "pseudo", @@ -2934,7 +2942,8 @@ "type": "descendant" }, { - "type": "universal" + "type": "universal", + "namespace": null }, { "type": "pseudo", @@ -2957,7 +2966,8 @@ "type": "descendant" }, { - "type": "universal" + "type": "universal", + "namespace": null }, { "type": "attribute", @@ -2983,7 +2993,8 @@ "type": "descendant" }, { - "type": "universal" + "type": "universal", + "namespace": null }, { "type": "attribute", @@ -3009,7 +3020,8 @@ "type": "descendant" }, { - "type": "universal" + "type": "universal", + "namespace": null }, { "type": "attribute", @@ -3035,7 +3047,8 @@ "type": "descendant" }, { - "type": "universal" + "type": "universal", + "namespace": null }, { "type": "attribute", @@ -3061,7 +3074,8 @@ "type": "descendant" }, { - "type": "universal" + "type": "universal", + "namespace": null }, { "type": "attribute", @@ -3191,7 +3205,8 @@ "type": "child" }, { - "type": "universal" + "type": "universal", + "namespace": null }, { "type": "pseudo", @@ -3214,7 +3229,8 @@ "type": "child" }, { - "type": "universal" + "type": "universal", + "namespace": null }, { "type": "pseudo", @@ -3237,7 +3253,8 @@ "type": "child" }, { - "type": "universal" + "type": "universal", + "namespace": null }, { "type": "pseudo", @@ -3355,7 +3372,8 @@ "type": "adjacent" }, { - "type": "universal" + "type": "universal", + "namespace": null } ] ], @@ -3393,7 +3411,8 @@ "type": "child" }, { - "type": "universal" + "type": "universal", + "namespace": null } ] ], @@ -3411,7 +3430,8 @@ "type": "sibling" }, { - "type": "universal" + "type": "universal", + "namespace": null } ] ], @@ -3575,7 +3595,8 @@ "type": "adjacent" }, { - "type": "universal" + "type": "universal", + "namespace": null } ] ], @@ -3693,7 +3714,8 @@ "type": "adjacent" }, { - "type": "universal" + "type": "universal", + "namespace": null } ] ], @@ -3711,7 +3733,8 @@ "type": "sibling" }, { - "type": "universal" + "type": "universal", + "namespace": null } ] ], @@ -4038,7 +4061,8 @@ "data": [ [ { - "type": "universal" + "type": "universal", + "namespace": null } ] ] @@ -4059,7 +4083,8 @@ "data": [ [ { - "type": "universal" + "type": "universal", + "namespace": null } ] ] @@ -4115,7 +4140,8 @@ "type": "descendant" }, { - "type": "universal" + "type": "universal", + "namespace": null }, { "type": "pseudo", @@ -5424,7 +5450,8 @@ "type": "descendant" }, { - "type": "universal" + "type": "universal", + "namespace": null }, { "type": "attribute", @@ -5465,7 +5492,8 @@ "data": [ [ { - "type": "universal" + "type": "universal", + "namespace": null } ] ] @@ -6139,7 +6167,8 @@ "data": [ [ { - "type": "universal" + "type": "universal", + "namespace": null } ] ] @@ -6179,7 +6208,8 @@ "type": "child" }, { - "type": "universal" + "type": "universal", + "namespace": null }, { "type": "pseudo", @@ -7384,7 +7414,8 @@ "type": "descendant" }, { - "type": "universal" + "type": "universal", + "namespace": null }, { "type": "pseudo", @@ -8886,7 +8917,8 @@ "type": "descendant" }, { - "type": "universal" + "type": "universal", + "namespace": null } ] ], @@ -8994,7 +9026,8 @@ "type": "descendant" }, { - "type": "universal" + "type": "universal", + "namespace": null } ] ], @@ -9308,7 +9341,8 @@ "type": "descendant" }, { - "type": "universal" + "type": "universal", + "namespace": null }, { "type": "pseudo", @@ -9331,7 +9365,8 @@ "type": "descendant" }, { - "type": "universal" + "type": "universal", + "namespace": null }, { "type": "attribute", @@ -9357,7 +9392,8 @@ "type": "descendant" }, { - "type": "universal" + "type": "universal", + "namespace": null }, { "type": "attribute", @@ -9391,7 +9427,8 @@ "type": "child" }, { - "type": "universal" + "type": "universal", + "namespace": null }, { "type": "pseudo", @@ -9604,14 +9641,16 @@ "*": [ [ { - "type": "universal" + "type": "universal", + "namespace": null } ] ], "* :not(*) foo": [ [ { - "type": "universal" + "type": "universal", + "namespace": null }, { "type": "descendant" @@ -9622,7 +9661,8 @@ "data": [ [ { - "type": "universal" + "type": "universal", + "namespace": null } ] ] @@ -9640,20 +9680,23 @@ "* < *": [ [ { - "type": "universal" + "type": "universal", + "namespace": null }, { "type": "parent" }, { - "type": "universal" + "type": "universal", + "namespace": null } ] ], "*, foo": [ [ { - "type": "universal" + "type": "universal", + "namespace": null } ], [ @@ -9667,7 +9710,8 @@ "*,:contains(!)": [ [ { - "type": "universal" + "type": "universal", + "namespace": null } ], [ @@ -9681,7 +9725,8 @@ "*:contains(humans)": [ [ { - "type": "universal" + "type": "universal", + "namespace": null }, { "type": "pseudo", @@ -9693,7 +9738,8 @@ "*[id]": [ [ { - "type": "universal" + "type": "universal", + "namespace": null }, { "type": "attribute", @@ -9708,7 +9754,8 @@ "*[name=iframe]": [ [ { - "type": "universal" + "type": "universal", + "namespace": null }, { "type": "attribute", @@ -9723,7 +9770,8 @@ "*[type=checkbox]": [ [ { - "type": "universal" + "type": "universal", + "namespace": null }, { "type": "attribute", @@ -11187,7 +11235,8 @@ "data": [ [ { - "type": "universal" + "type": "universal", + "namespace": null } ] ] @@ -11202,7 +11251,8 @@ "data": [ [ { - "type": "universal" + "type": "universal", + "namespace": null } ], [ @@ -11236,7 +11286,8 @@ "data": [ [ { - "type": "universal" + "type": "universal", + "namespace": null } ] ] @@ -11475,7 +11526,8 @@ "data": [ [ { - "type": "universal" + "type": "universal", + "namespace": null } ] ] @@ -11495,7 +11547,8 @@ "data": [ [ { - "type": "universal" + "type": "universal", + "namespace": null } ] ] @@ -11523,7 +11576,8 @@ "data": [ [ { - "type": "universal" + "type": "universal", + "namespace": null } ] ] @@ -12051,7 +12105,8 @@ "type": "descendant" }, { - "type": "universal" + "type": "universal", + "namespace": null }, { "type": "pseudo", @@ -12080,7 +12135,8 @@ "type": "descendant" }, { - "type": "universal" + "type": "universal", + "namespace": null }, { "type": "pseudo", @@ -12859,7 +12915,8 @@ "data": [ [ { - "type": "universal" + "type": "universal", + "namespace": null } ], [ @@ -13309,7 +13366,8 @@ "type": "child" }, { - "type": "universal" + "type": "universal", + "namespace": null } ] ], @@ -14467,7 +14525,8 @@ "data": [ [ { - "type": "universal" + "type": "universal", + "namespace": null } ] ] @@ -15984,13 +16043,15 @@ "type": "child" }, { - "type": "universal" + "type": "universal", + "namespace": null }, { "type": "child" }, { - "type": "universal" + "type": "universal", + "namespace": null } ] ], @@ -16829,7 +16890,8 @@ "type": "child" }, { - "type": "universal" + "type": "universal", + "namespace": null } ] ], diff --git a/src/__fixtures__/tests.ts b/src/__fixtures__/tests.ts index 16029271..5d74e507 100644 --- a/src/__fixtures__/tests.ts +++ b/src/__fixtures__/tests.ts @@ -26,6 +26,7 @@ export const tests: [ [ { type: "universal", + namespace: null, }, ], ], @@ -872,6 +873,18 @@ export const tests: [ ], "star tag namespace", ], + [ + "*|*", + [ + [ + { + type: "universal", + namespace: "*", + }, + ], + ], + "universal with namespace", + ], [ "[foo|bar]", [ diff --git a/src/parse.ts b/src/parse.ts index 502c192f..86f71095 100644 --- a/src/parse.ts +++ b/src/parse.ts @@ -54,6 +54,7 @@ export interface TagSelector { export interface UniversalSelector { type: "universal"; + namespace: string | null; } export interface Traversal { @@ -405,12 +406,16 @@ function parseSelector( if (selector.charAt(selectorIndex) === "|") { namespace = name; - name = getName(1); + if (selector.charAt(selectorIndex + 1) === "*") { + name = "*"; + selectorIndex += 2; + } else { + name = getName(1); + } } if (name === "*") { - // We cannot have a namespace at this point. - tokens.push({ type: "universal" }); + tokens.push({ type: "universal", namespace }); } else { if (options.lowerCaseTags ?? !options.xmlMode) { name = name.toLowerCase(); diff --git a/src/stringify.ts b/src/stringify.ts index 4fe48be4..f7ba92ca 100644 --- a/src/stringify.ts +++ b/src/stringify.ts @@ -50,7 +50,7 @@ function stringifyToken(token: Selector): string { case "descendant": return " "; case "universal": - return "*"; + return `${getNamespace(token.namespace)}*`; case "tag": return getNamespacedName(token); @@ -100,11 +100,13 @@ function getNamespacedName(token: { name: string; namespace: string | null; }): string { - return token.namespace - ? `${ - token.namespace === "*" ? "*" : escapeName(token.namespace) - }|${escapeName(token.name)}` - : escapeName(token.name); + return `${getNamespace(token.namespace)}${escapeName(token.name)}`; +} + +function getNamespace(namespace: string | null): string { + return namespace + ? `${namespace === "*" ? "*" : escapeName(namespace)}|` + : ""; } function escapeName(str: string): string { From 7d1e95b314ef89c19e81e74af1c2c76520a82321 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20B=C3=B6hm?= Date: Tue, 13 Oct 2020 00:02:11 -0700 Subject: [PATCH 11/12] fix(parse): Disallow names starting with `#` Fixes #287 --- src/parse.spec.ts | 1 + src/parse.ts | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/parse.spec.ts b/src/parse.spec.ts index e5577a9e..02ddb55e 100644 --- a/src/parse.spec.ts +++ b/src/parse.spec.ts @@ -38,6 +38,7 @@ const broken = [ ":has(p", ":foo(p()", "#", + "##foo", ]; describe("Broken selectors", () => { diff --git a/src/parse.ts b/src/parse.ts index 86f71095..677a029d 100644 --- a/src/parse.ts +++ b/src/parse.ts @@ -78,7 +78,7 @@ export type TraversalType = | "parent" | "sibling"; -const reName = /^[^\\]?(?:\\(?:[\da-f]{1,6}\s?|.)|[\w\-\u00b0-\uFFFF])+/; +const reName = /^[^\\#]?(?:\\(?:[\da-f]{1,6}\s?|.)|[\w\-\u00b0-\uFFFF])+/; const reEscape = /\\([\da-f]{1,6}\s?|(\s)|.)/gi; // Modified version of https://github.com/jquery/sizzle/blob/master/src/sizzle.js#L87 const reAttr = /^\s*(?:(\*|[-\w]*)\|)?((?:\\.|[\w\u00b0-\uFFFF-])+)\s*(?:(\S?)=\s*(?:(['"])((?:[^\\]|\\[^])*?)\4|(#?(?:\\.|[\w\u00b0-\uFFFF-])*)|)|)\s*([iI])?\]/; From a868f3e0b284883721da97eb0deaadb0e857e630 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20B=C3=B6hm?= Date: Tue, 13 Oct 2020 00:04:33 -0700 Subject: [PATCH 12/12] 4.0.0 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index feee551b..b4f15647 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "css-what", - "version": "3.4.2", + "version": "4.0.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 68fc4ca5..5b0d7947 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "author": "Felix Böhm (http://feedic.com)", "name": "css-what", "description": "a CSS selector parser", - "version": "3.4.2", + "version": "4.0.0", "funding": "https://github.com/sponsors/fb55", "repository": { "url": "https://github.com/fb55/css-what"