Skip to content

Instantly share code, notes, and snippets.

@xero
Created June 25, 2025 15:11
Show Gist options
  • Save xero/29896084bc5881bab81a3ebe5c503bfa to your computer and use it in GitHub Desktop.
Save xero/29896084bc5881bab81a3ebe5c503bfa to your computer and use it in GitHub Desktop.
$ bun run build && vitest run
$ tsup src/index.ts --dts --format cjs,esm --out-dir dist
CLI Building entry: src/index.ts
CLI Using tsconfig: tsconfig.json
CLI tsup v8.5.0
CLI Target: es2020
CJS Build start
ESM Build start
ESM dist/index.js 6.50 KB
ESM ⚡️ Build success in 58ms
CJS dist/index.cjs 8.08 KB
CJS ⚡️ Build success in 62ms
DTS Build start
DTS ⚡️ Build success in 1121ms
DTS dist/index.d.cts 162.00 B
DTS dist/index.d.ts 162.00 B
RUN v3.2.4 /home/x0/.local/src/postcss-nest
❯ test/modern-selectors.test.js (1 test | 1 failed) 1622ms
× postcss-nest modern selector combos > handles :has, :not, attribute, and @container together 1620ms
→ Maximum call stack size exceeded
❯ test/multi-condition.test.js (1 test | 1 failed) 1516ms
× postcss-nest :has with multiple conditions > nests selectors with :has using multiple conditions 1514ms
→ expected '.menu:has(li.selected, li.active){bor…' to be '.menu{&:has(li.selected, li.active){b…' // Object.is equality
❯ test/pseudo-combo.test.js (1 test | 1 failed) 1020ms
× postcss-nest attribute + pseudo selectors > nests attribute and pseudo selectors together 1019ms
→ expected '.btn{color:black;}.btn[type="submit"]…' to be '.btn{color:black; &[type="submit"]:ho…' // Object.is equality
❯ test/combinator-chains.test.js (1 test | 1 failed) 1045ms
× postcss-nest combinator chains > handles multiple combinators in a selector 1043ms
→ Maximum call stack size exceeded
❯ test/nesting-combos.test.js (1 test | 1 failed) 546ms
× postcss-nest deep combinator chains > handles 3+ level deep selectors with combinators 544ms
→ expected '' to be '.a{.b{> .c{.d{color:red;}.e{color:blu…' // Object.is equality
❯ test/not-selector.test.js (1 test | 1 failed) 959ms
× postcss-nest :not selector > nests :not selectors under their base 958ms
→ Maximum call stack size exceeded
❯ test/complex-combo.test.js (1 test | 1 failed) 638ms
× postcss-nest complex combo > handles factoring, pseudo, descendant, and merging all in one 636ms
→ Maximum call stack size exceeded
❯ test/has-selector.test.js (1 test | 1 failed) 464ms
× postcss-nest :has selector > nests :has selectors under their base 463ms
→ expected '.card{background:white;}' to be '.card{background:white; &:has(img){bo…' // Object.is equality
❯ test/not-has-combo.test.js (1 test | 1 failed) 430ms
× postcss-nest :not and :has combo > nests :not(:has()) under base 428ms
→ expected '.list{padding:0; &{&{&{&{&{&{&{&{&{&{…' to be '.list{padding:0; &:not(:has(li)){disp…' // Object.is equality
❯ test/pseudo-elements.test.js (1 test | 1 failed) 370ms
× postcss-nest pseudo-elements > nests pseudo-elements under their base selectors 369ms
→ expected '.avatar{border-radius:50%; &{&{&{&{&{…' to be '.avatar{border-radius:50%; &::after{c…' // Object.is equality
❯ test/sibling-compointd-mix.test.js (1 test | 1 failed) 407ms
× postcss-nest sibling and compound combos > nests sibling selectors with compounds 405ms
→ expected '.foo{color:black; &{&{&{&{&{&{&{&{&{&…' to be '.foo{color:black; & + .foo.bar{color:…' // Object.is equality
❯ test/multi-pseudo-compound.test.js (1 test | 1 failed) 906ms
× postcss-nest compound + multiple pseudos > nests multiple pseudo-classes and compounds 905ms
→ Maximum call stack size exceeded
❯ test/adjacent-sibling.test.js (1 test | 1 failed) 401ms
× postcss-nest adjacent selectors > handles adjacent sibling selectors 399ms
→ expected '.item{margin:10px; &{&{&{&{&{&{&{&{&{…' to be '.item{margin:10px; & + .item{margin-t…' // Object.is equality
❯ test/pseudo-selectors.test.js (1 test | 1 failed) 353ms
× postcss-nest pseudo-classes > nests pseudo-classes under base selectors 351ms
→ expected '.button{color:black; &{&{&{&{&{&{&{&{…' to be '.button{color:black; &:hover{color:bl…' // Object.is equality
❯ test/universal-mix.test.js (1 test | 1 failed) 256ms
× postcss-nest id and universal selector combos > nests id and universal selectors with combinators and classes 255ms
→ expected '#main{&.widget{padding:0;}&.widget.ac…' to be '#main{.widget{padding:0; &.active{bac…' // Object.is equality
❯ test/nested-blocks.test.js (1 test | 1 failed) 31ms
× postcss-nest at-rule blocks with nesting > nests rules inside @media and processes all features 30ms
→ expected '@media (max-width:600px){.foo{&.bar{c…' to be '@media (max-width:600px){.foo{.bar, .…' // Object.is equality
❯ test/deep-nesting.test.js (1 test | 1 failed) 31ms
× postcss-nest deep level nesting > recursively nests and merges at multiple levels 30ms
→ expected '.a{&.b{&.c{color:red;}&.d{color:red;}…' to be '.a{.b{.c, .d{color:red;}}}' // Object.is equality
❯ test/basic.test.js (1 test | 1 failed) 27ms
× postcss-nest > unwraps nested selectors 26ms
→ expected '.a, .b{color:red;}.parent{&.a, &.b{fo…' to be '.a, .b{color:red;}.parent{.a, .b{font…' // Object.is equality
❯ test/container-queries.test.js (1 test | 1 failed) 26ms
× postcss-nest @container queries > handles @container with nested selectors 24ms
→ expected '.sidebar{width:300px;}@container (max…' to be '.sidebar{width:300px;}@container (max…' // Object.is equality
❯ test/compound-selectors.test.js (1 test | 1 failed) 28ms
× postcss-nest compound selectors > handles compound class selectors properly 26ms
→ expected '.btn.primary{background:blue;}.btn.se…' to be '.btn{color:white; &.primary{backgroun…' // Object.is equality
❯ test/descendant-grouping.test.js (1 test | 1 failed) 29ms
× postcss-nest descendant grouping > nests descendant selectors 27ms
→ expected '.foo{&.bar{color:black;}&.baz{color:b…' to be '.foo{.bar, .baz{color:black;}}' // Object.is equality
❯ test/media-nesting.test.js (1 test | 1 failed) 27ms
× postcss-nest media query recursion > handles nested @media queries with rules 26ms
→ expected '@media (min-width:600px){.foo{color:r…' to be '@media (min-width:600px){.foo, .bar{c…' // Object.is equality
✓ test/empty-nested.test.js (1 test) 12ms
✓ test/selector-factoring.test.js (1 test) 11ms
✓ test/identical-block-merge.test.js (1 test) 10ms
✓ test/factoring.test.js (1 test) 10ms
✓ test/rule-inside-nested.test.js (1 test) 10ms
✓ test/empty-comments.test.js (1 test) 10ms
⎯⎯⎯⎯⎯⎯ Failed Tests 22 ⎯⎯⎯⎯⎯⎯⎯
FAIL test/adjacent-sibling.test.js > postcss-nest adjacent selectors > handles adjacent sibling selectors
AssertionError: expected '.item{margin:10px; &{&{&{&{&{&{&{&{&{…' to be '.item{margin:10px; & + .item{margin-t…' // Object.is equality
Expected: ".item{margin:10px; & + .item{margin-top:0;}}"
Received: ".item{margin:10px; &{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{& + .item{margin-top:0;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}"
❯ testNest test/helpers.js:33:28
31| } catch (e) {
32| // Fallback to direct comparison for detailed errors
33| expect(normalizedResult).toBe(normalizedExpected)
| ^
34| }
35| }
❯ test/adjacent-sibling.test.js:16:5
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/22]⎯
FAIL test/basic.test.js > postcss-nest > unwraps nested selectors
AssertionError: expected '.a, .b{color:red;}.parent{&.a, &.b{fo…' to be '.a, .b{color:red;}.parent{.a, .b{font…' // Object.is equality
Expected: ".a, .b{color:red;}.parent{.a, .b{font-weight:bold;}}"
Received: ".a, .b{color:red;}.parent{&.a, &.b{font-weight:bold;}}"
❯ testNest test/helpers.js:33:28
31| } catch (e) {
32| // Fallback to direct comparison for detailed errors
33| expect(normalizedResult).toBe(normalizedExpected)
| ^
34| }
35| }
❯ test/basic.test.js:17:3
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[2/22]⎯
FAIL test/combinator-chains.test.js > postcss-nest combinator chains > handles multiple combinators in a selector
FAIL test/complex-combo.test.js > postcss-nest complex combo > handles factoring, pseudo, descendant, and merging all in one
FAIL test/modern-selectors.test.js > postcss-nest modern selector combos > handles :has, :not, attribute, and @container together
FAIL test/multi-pseudo-compound.test.js > postcss-nest compound + multiple pseudos > nests multiple pseudo-classes and compounds
FAIL test/not-selector.test.js > postcss-nest :not selector > nests :not selectors under their base
RangeError: Maximum call stack size exceeded
❯ Stringifier.beforeAfter node_modules/postcss/lib/stringifier.js:45:14
❯ Stringifier.raw node_modules/postcss/lib/stringifier.js:163:19
❯ Stringifier.body node_modules/postcss/lib/stringifier.js:100:25
❯ Stringifier.block node_modules/postcss/lib/stringifier.js:80:12
❯ Stringifier.rule node_modules/postcss/lib/stringifier.js:331:10
❯ Stringifier.stringify node_modules/postcss/lib/stringifier.js:348:20
❯ Stringifier.body node_modules/postcss/lib/stringifier.js:102:12
❯ Stringifier.block node_modules/postcss/lib/stringifier.js:80:12
❯ Stringifier.rule node_modules/postcss/lib/stringifier.js:331:10
❯ Stringifier.stringify node_modules/postcss/lib/stringifier.js:348:20
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[3/22]⎯
FAIL test/compound-selectors.test.js > postcss-nest compound selectors > handles compound class selectors properly
AssertionError: expected '.btn.primary{background:blue;}.btn.se…' to be '.btn{color:white; &.primary{backgroun…' // Object.is equality
Expected: ".btn{color:white; &.primary{background:blue;}&.secondary{background:gray;}}"
Received: ".btn.primary{background:blue;}.btn.secondary{background:gray;}.btn{color:white;}"
❯ testNest test/helpers.js:33:28
31| } catch (e) {
32| // Fallback to direct comparison for detailed errors
33| expect(normalizedResult).toBe(normalizedExpected)
| ^
34| }
35| }
❯ test/compound-selectors.test.js:17:5
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[4/22]⎯
FAIL test/container-queries.test.js > postcss-nest @container queries > handles @container with nested selectors
AssertionError: expected '.sidebar{width:300px;}@container (max…' to be '.sidebar{width:300px;}@container (max…' // Object.is equality
Expected: ".sidebar{width:300px;}@container (max-width:600px){.sidebar{width:100px; .widget{display:none;}}}"
Received: ".sidebar{width:300px;}@container (max-width:600px){.sidebar{width:100px; &.widget{display:none;}}}"
❯ testNest test/helpers.js:33:28
31| } catch (e) {
32| // Fallback to direct comparison for detailed errors
33| expect(normalizedResult).toBe(normalizedExpected)
| ^
34| }
35| }
❯ test/container-queries.test.js:21:3
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[5/22]⎯
FAIL test/deep-nesting.test.js > postcss-nest deep level nesting > recursively nests and merges at multiple levels
AssertionError: expected '.a{&.b{&.c{color:red;}&.d{color:red;}…' to be '.a{.b{.c, .d{color:red;}}}' // Object.is equality
Expected: ".a{.b{.c, .d{color:red;}}}"
Received: ".a{&.b{&.c{color:red;}&.d{color:red;}}}"
❯ testNest test/helpers.js:33:28
31| } catch (e) {
32| // Fallback to direct comparison for detailed errors
33| expect(normalizedResult).toBe(normalizedExpected)
| ^
34| }
35| }
❯ test/deep-nesting.test.js:17:3
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[6/22]⎯
FAIL test/descendant-grouping.test.js > postcss-nest descendant grouping > nests descendant selectors
AssertionError: expected '.foo{&.bar{color:black;}&.baz{color:b…' to be '.foo{.bar, .baz{color:black;}}' // Object.is equality
Expected: ".foo{.bar, .baz{color:black;}}"
Received: ".foo{&.bar{color:black;}&.baz{color:black;}}"
❯ testNest test/helpers.js:33:28
31| } catch (e) {
32| // Fallback to direct comparison for detailed errors
33| expect(normalizedResult).toBe(normalizedExpected)
| ^
34| }
35| }
❯ test/descendant-grouping.test.js:14:3
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[7/22]⎯
FAIL test/has-selector.test.js > postcss-nest :has selector > nests :has selectors under their base
AssertionError: expected '.card{background:white;}' to be '.card{background:white; &:has(img){bo…' // Object.is equality
Expected: ".card{background:white; &:has(img){border:1px solid;}&:has(.badge){padding:1em;}}"
Received: ".card{background:white;}"
❯ testNest test/helpers.js:33:28
31| } catch (e) {
32| // Fallback to direct comparison for detailed errors
33| expect(normalizedResult).toBe(normalizedExpected)
| ^
34| }
35| }
❯ test/has-selector.test.js:18:3
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[8/22]⎯
FAIL test/media-nesting.test.js > postcss-nest media query recursion > handles nested @media queries with rules
AssertionError: expected '@media (min-width:600px){.foo{color:r…' to be '@media (min-width:600px){.foo, .bar{c…' // Object.is equality
Expected: "@media (min-width:600px){.foo, .bar{color:red;}}"
Received: "@media (min-width:600px){.foo{color:red;}.bar{color:red;}}"
❯ testNest test/helpers.js:33:28
31| } catch (e) {
32| // Fallback to direct comparison for detailed errors
33| expect(normalizedResult).toBe(normalizedExpected)
| ^
34| }
35| }
❯ test/media-nesting.test.js:17:5
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[9/22]⎯
FAIL test/multi-condition.test.js > postcss-nest :has with multiple conditions > nests selectors with :has using multiple conditions
AssertionError: expected '.menu:has(li.selected, li.active){bor…' to be '.menu{&:has(li.selected, li.active){b…' // Object.is equality
Expected: ".menu{&:has(li.selected, li.active){border-color:blue;}&:has(li.selected):hover{background:#eee;}}"
Received: ".menu:has(li.selected, li.active){border-color:blue;}.menu{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&:has(li.selected):hover{background:#eee;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}"
❯ testNest test/helpers.js:33:28
31| } catch (e) {
32| // Fallback to direct comparison for detailed errors
33| expect(normalizedResult).toBe(normalizedExpected)
| ^
34| }
35| }
❯ test/multi-condition.test.js:16:3
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[10/22]⎯
FAIL test/nested-blocks.test.js > postcss-nest at-rule blocks with nesting > nests rules inside @media and processes all features
AssertionError: expected '@media (max-width:600px){.foo{&.bar{c…' to be '@media (max-width:600px){.foo{.bar, .…' // Object.is equality
Expected: "@media (max-width:600px){.foo{.bar, .baz{color:red;}.qux{color:blue;}}}"
Received: "@media (max-width:600px){.foo{&.bar{color:red;}&.baz{color:red;}&.qux{color:blue;}}}"
❯ testNest test/helpers.js:33:28
31| } catch (e) {
32| // Fallback to direct comparison for detailed errors
33| expect(normalizedResult).toBe(normalizedExpected)
| ^
34| }
35| }
❯ test/nested-blocks.test.js:21:3
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[11/22]⎯
FAIL test/nesting-combos.test.js > postcss-nest deep combinator chains > handles 3+ level deep selectors with combinators
AssertionError: expected '' to be '.a{.b{> .c{.d{color:red;}.e{color:blu…' // Object.is equality
- Expected
+ Received
- .a{.b{> .c{.d{color:red;}.e{color:blue;}}}}
❯ testNest test/helpers.js:33:28
31| } catch (e) {
32| // Fallback to direct comparison for detailed errors
33| expect(normalizedResult).toBe(normalizedExpected)
| ^
34| }
35| }
❯ test/nesting-combos.test.js:20:3
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[12/22]⎯
FAIL test/not-has-combo.test.js > postcss-nest :not and :has combo > nests :not(:has()) under base
AssertionError: expected '.list{padding:0; &{&{&{&{&{&{&{&{&{&{…' to be '.list{padding:0; &:not(:has(li)){disp…' // Object.is equality
Expected: ".list{padding:0; &:not(:has(li)){display:none;}}"
Received: ".list{padding:0; &{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&:not(:has(li)){display:none;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}"
❯ testNest test/helpers.js:33:28
31| } catch (e) {
32| // Fallback to direct comparison for detailed errors
33| expect(normalizedResult).toBe(normalizedExpected)
| ^
34| }
35| }
❯ test/not-has-combo.test.js:16:3
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[13/22]⎯
FAIL test/pseudo-combo.test.js > postcss-nest attribute + pseudo selectors > nests attribute and pseudo selectors together
AssertionError: expected '.btn{color:black;}.btn[type="submit"]…' to be '.btn{color:black; &[type="submit"]:ho…' // Object.is equality
Expected: ".btn{color:black; &[type="submit"]:hover{color:green;}&[aria-active="true"]:focus{outline:1px solid;}}"
Received: ".btn{color:black;}.btn[type="submit"]{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&:hover{color:green;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}"
❯ testNest test/helpers.js:33:28
31| } catch (e) {
32| // Fallback to direct comparison for detailed errors
33| expect(normalizedResult).toBe(normalizedExpected)
| ^
34| }
35| }
❯ test/pseudo-combo.test.js:18:3
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[14/22]⎯
FAIL test/pseudo-elements.test.js > postcss-nest pseudo-elements > nests pseudo-elements under their base selectors
AssertionError: expected '.avatar{border-radius:50%; &{&{&{&{&{…' to be '.avatar{border-radius:50%; &::after{c…' // Object.is equality
Expected: ".avatar{border-radius:50%; &::after{content:""; display:block;}}"
Received: ".avatar{border-radius:50%; &{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&::after{content:""; display:block;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}"
❯ testNest test/helpers.js:33:28
31| } catch (e) {
32| // Fallback to direct comparison for detailed errors
33| expect(normalizedResult).toBe(normalizedExpected)
| ^
34| }
35| }
❯ test/pseudo-elements.test.js:16:3
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[15/22]⎯
FAIL test/pseudo-selectors.test.js > postcss-nest pseudo-classes > nests pseudo-classes under base selectors
AssertionError: expected '.button{color:black; &{&{&{&{&{&{&{&{…' to be '.button{color:black; &:hover{color:bl…' // Object.is equality
Expected: ".button{color:black; &:hover{color:blue;}}"
Received: ".button{color:black; &{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&:hover{color:blue;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}"
❯ testNest test/helpers.js:33:28
31| } catch (e) {
32| // Fallback to direct comparison for detailed errors
33| expect(normalizedResult).toBe(normalizedExpected)
| ^
34| }
35| }
❯ test/pseudo-selectors.test.js:16:3
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[16/22]⎯
FAIL test/sibling-compointd-mix.test.js > postcss-nest sibling and compound combos > nests sibling selectors with compounds
AssertionError: expected '.foo{color:black; &{&{&{&{&{&{&{&{&{&…' to be '.foo{color:black; & + .foo.bar{color:…' // Object.is equality
Expected: ".foo{color:black; & + .foo.bar{color:red;}}"
Received: ".foo{color:black; &{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{&{& + .foo.bar{color:red;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}"
❯ testNest test/helpers.js:33:28
31| } catch (e) {
32| // Fallback to direct comparison for detailed errors
33| expect(normalizedResult).toBe(normalizedExpected)
| ^
34| }
35| }
❯ test/sibling-compointd-mix.test.js:16:3
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[17/22]⎯
FAIL test/universal-mix.test.js > postcss-nest id and universal selector combos > nests id and universal selectors with combinators and classes
AssertionError: expected '#main{&.widget{padding:0;}&.widget.ac…' to be '#main{.widget{padding:0; &.active{bac…' // Object.is equality
Expected: "#main{.widget{padding:0; &.active{background:yellow;}}}*{& + .alert{margin-top:2em;}}"
Received: "#main{&.widget{padding:0;}&.widget.active{background:yellow;}}"
❯ testNest test/helpers.js:33:28
31| } catch (e) {
32| // Fallback to direct comparison for detailed errors
33| expect(normalizedResult).toBe(normalizedExpected)
| ^
34| }
35| }
❯ test/universal-mix.test.js:21:3
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[18/22]⎯
Test Files 22 failed | 6 passed (28)
Tests 22 failed | 6 passed (28)
Start at 11:10:33
Duration 18.99s (transform 145ms, setup 0ms, collect 1.60s, tests 11.19s, environment 5ms, prepare 2.23s)
error: script "test" exited with code 1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment