diff --git a/tests/important-boolean.test.js b/tests/important-boolean.test.js index 20fc4d1ee598..c030b5e5b803 100644 --- a/tests/important-boolean.test.js +++ b/tests/important-boolean.test.js @@ -1,5 +1,6 @@ import fs from 'fs' import path from 'path' +import * as sharedState from '../src/lib/sharedState' import { run, css } from './util/run' @@ -63,3 +64,56 @@ test('important boolean', () => { expect(result.css).toMatchFormattedCss(expected) }) }) + +test('important rules are not duplicated when rebuilding', async () => { + let config = { + important: true, + content: [path.resolve(__dirname, './important-boolean-duplicates.test.html')], + } + + await fs.promises.writeFile(config.content[0], `
`) + + let input = css` + @tailwind utilities; + ` + + let result = await run(input, config) + let allContexts = Array.from(sharedState.contextMap.values()) + + let context = allContexts[allContexts.length - 1] + + let ruleCacheSize1 = context.ruleCache.size + + expect(result.css).toMatchFormattedCss(css` + .mt-2 { + margin-top: 0.5rem !important; + } + .pt-4 { + padding-top: 1rem !important; + } + `) + + await new Promise((resolve) => setTimeout(resolve, 1000)) + await fs.promises.writeFile(config.content[0], `
`) + + result = await run(input, config) + + let ruleCacheSize2 = context.ruleCache.size + + expect(result.css).toMatchFormattedCss(css` + .mt-2 { + margin-top: 0.5rem !important; + } + .pt-4 { + padding-top: 1rem !important; + } + .pt-6 { + padding-top: 1.5rem !important; + } + `) + + // The rule cache was effectively doubling in size previously + // because the rule cache was never de-duped + // This ensures this behavior doesn't return + expect(ruleCacheSize2 - ruleCacheSize1).toBeLessThan(10) +})