@afixt/test-utils 1.1.8 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.local.json +5 -1
- package/.github/workflows/pr-check.yml +88 -0
- package/.github/workflows/security.yml +0 -3
- package/eslint.config.mjs +1 -1
- package/package.json +2 -1
- package/src/constants.js +231 -0
- package/src/cssUtils.js +77 -0
- package/src/domUtils.js +268 -12
- package/src/formUtils.js +175 -0
- package/src/getCSSGeneratedContent.js +39 -17
- package/src/index.js +18 -2
- package/src/stringUtils.js +168 -21
- package/src/tableUtils.js +180 -0
- package/src/testContrast.js +137 -22
- package/src/testLang.js +514 -444
- package/test/cssUtils.test.js +248 -0
- package/test/domUtils.test.js +815 -297
- package/test/formUtils.test.js +389 -0
- package/test/getCSSGeneratedContent.test.js +187 -232
- package/test/hasCSSGeneratedContent.test.js +37 -147
- package/test/playwright/css-pseudo-elements.spec.js +224 -91
- package/test/playwright/fixtures/css-pseudo-elements.html +6 -0
- package/test/stringUtils.test.js +609 -343
- package/test/tableUtils.test.js +340 -0
- package/test/testContrast.test.js +801 -651
- package/vitest.config.js +28 -28
- package/.github/dependabot.yml +0 -36
- package/test/getCSSGeneratedContent.browser.test.js +0 -125
package/vitest.config.js
CHANGED
|
@@ -1,33 +1,33 @@
|
|
|
1
1
|
import { defineConfig } from 'vitest/config';
|
|
2
2
|
|
|
3
3
|
export default defineConfig({
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
4
|
+
test: {
|
|
5
|
+
globals: true,
|
|
6
|
+
environment: 'jsdom',
|
|
7
|
+
env: {
|
|
8
|
+
NODE_ENV: 'test',
|
|
9
|
+
},
|
|
10
|
+
setupFiles: './test/setup.js',
|
|
11
|
+
include: ['test/**/*.test.js'],
|
|
12
|
+
exclude: ['test/_template.test.js'],
|
|
13
|
+
deps: {
|
|
14
|
+
optimizer: {
|
|
15
|
+
web: {
|
|
16
|
+
include: [/^(?!.*vitest).*$/],
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
interopDefault: true,
|
|
20
|
+
},
|
|
21
|
+
environmentOptions: {
|
|
22
|
+
jsdom: {
|
|
23
|
+
resources: 'usable',
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
coverage: {
|
|
27
|
+
provider: 'istanbul',
|
|
28
|
+
include: ['src/**'],
|
|
29
|
+
reporter: ['text', 'json', 'html'],
|
|
30
|
+
reportsDirectory: './coverage',
|
|
17
31
|
},
|
|
18
|
-
},
|
|
19
|
-
interopDefault: true,
|
|
20
|
-
},
|
|
21
|
-
environmentOptions: {
|
|
22
|
-
jsdom: {
|
|
23
|
-
resources: 'usable',
|
|
24
|
-
},
|
|
25
|
-
},
|
|
26
|
-
coverage: {
|
|
27
|
-
provider: 'v8',
|
|
28
|
-
reporter: ['text', 'json', 'html'],
|
|
29
|
-
exclude: ['**/node_modules/**', 'test/**'],
|
|
30
|
-
reportsDirectory: './coverage',
|
|
31
32
|
},
|
|
32
|
-
|
|
33
|
-
});
|
|
33
|
+
});
|
package/.github/dependabot.yml
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
version: 2
|
|
2
|
-
updates:
|
|
3
|
-
# npm dependencies
|
|
4
|
-
- package-ecosystem: "npm"
|
|
5
|
-
directory: "/"
|
|
6
|
-
schedule:
|
|
7
|
-
interval: "weekly"
|
|
8
|
-
day: "monday"
|
|
9
|
-
time: "09:00"
|
|
10
|
-
timezone: "America/New_York"
|
|
11
|
-
open-pull-requests-limit: 5
|
|
12
|
-
groups:
|
|
13
|
-
# Group all minor and patch updates together
|
|
14
|
-
minor-and-patch:
|
|
15
|
-
patterns:
|
|
16
|
-
- "*"
|
|
17
|
-
update-types:
|
|
18
|
-
- "minor"
|
|
19
|
-
- "patch"
|
|
20
|
-
labels:
|
|
21
|
-
- "dependencies"
|
|
22
|
-
- "automated"
|
|
23
|
-
commit-message:
|
|
24
|
-
prefix: "chore(deps)"
|
|
25
|
-
|
|
26
|
-
# GitHub Actions
|
|
27
|
-
- package-ecosystem: "github-actions"
|
|
28
|
-
directory: "/"
|
|
29
|
-
schedule:
|
|
30
|
-
interval: "weekly"
|
|
31
|
-
day: "monday"
|
|
32
|
-
labels:
|
|
33
|
-
- "dependencies"
|
|
34
|
-
- "ci"
|
|
35
|
-
commit-message:
|
|
36
|
-
prefix: "chore(ci)"
|
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, beforeEach } from 'vitest';
|
|
2
|
-
import { getCSSGeneratedContent } from '../src/getCSSGeneratedContent';
|
|
3
|
-
|
|
4
|
-
describe('getCSSGeneratedContent (Browser)', () => {
|
|
5
|
-
beforeEach(() => {
|
|
6
|
-
document.body.innerHTML = '';
|
|
7
|
-
|
|
8
|
-
// Create a style element for pseudo-elements
|
|
9
|
-
const style = document.createElement('style');
|
|
10
|
-
style.innerHTML = `
|
|
11
|
-
.with-before::before {
|
|
12
|
-
content: "Before Content";
|
|
13
|
-
}
|
|
14
|
-
.with-after::after {
|
|
15
|
-
content: "After Content";
|
|
16
|
-
}
|
|
17
|
-
.with-both::before {
|
|
18
|
-
content: "Before Text";
|
|
19
|
-
}
|
|
20
|
-
.with-both::after {
|
|
21
|
-
content: "After Text";
|
|
22
|
-
}
|
|
23
|
-
.with-quotes::before {
|
|
24
|
-
content: "'Quoted Text'";
|
|
25
|
-
}
|
|
26
|
-
.empty-content::before {
|
|
27
|
-
content: "";
|
|
28
|
-
}
|
|
29
|
-
.no-content::before {
|
|
30
|
-
content: none;
|
|
31
|
-
}
|
|
32
|
-
.url-content::before {
|
|
33
|
-
content: url('data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7');
|
|
34
|
-
}
|
|
35
|
-
`;
|
|
36
|
-
document.head.appendChild(style);
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
describe('::before pseudo-element', () => {
|
|
40
|
-
it('should detect text content in ::before pseudo-element', () => {
|
|
41
|
-
const div = document.createElement('div');
|
|
42
|
-
div.className = 'with-before';
|
|
43
|
-
document.body.appendChild(div);
|
|
44
|
-
|
|
45
|
-
const result = getCSSGeneratedContent(div);
|
|
46
|
-
expect(result).toBe('Before Content');
|
|
47
|
-
});
|
|
48
|
-
|
|
49
|
-
it('should detect quoted text content in ::before pseudo-element', () => {
|
|
50
|
-
const div = document.createElement('div');
|
|
51
|
-
div.className = 'with-quotes';
|
|
52
|
-
document.body.appendChild(div);
|
|
53
|
-
|
|
54
|
-
const result = getCSSGeneratedContent(div);
|
|
55
|
-
expect(result).toBe('Quoted Text');
|
|
56
|
-
});
|
|
57
|
-
|
|
58
|
-
it('should return false for empty content in ::before', () => {
|
|
59
|
-
const div = document.createElement('div');
|
|
60
|
-
div.className = 'empty-content';
|
|
61
|
-
document.body.appendChild(div);
|
|
62
|
-
|
|
63
|
-
const result = getCSSGeneratedContent(div);
|
|
64
|
-
expect(result).toBe(false);
|
|
65
|
-
});
|
|
66
|
-
|
|
67
|
-
it('should return false for content: none in ::before', () => {
|
|
68
|
-
const div = document.createElement('div');
|
|
69
|
-
div.className = 'no-content';
|
|
70
|
-
document.body.appendChild(div);
|
|
71
|
-
|
|
72
|
-
const result = getCSSGeneratedContent(div);
|
|
73
|
-
expect(result).toBe(false);
|
|
74
|
-
});
|
|
75
|
-
});
|
|
76
|
-
|
|
77
|
-
describe('::after pseudo-element', () => {
|
|
78
|
-
it('should detect text content in ::after pseudo-element', () => {
|
|
79
|
-
const div = document.createElement('div');
|
|
80
|
-
div.className = 'with-after';
|
|
81
|
-
document.body.appendChild(div);
|
|
82
|
-
|
|
83
|
-
const result = getCSSGeneratedContent(div);
|
|
84
|
-
expect(result).toBe('After Content');
|
|
85
|
-
});
|
|
86
|
-
});
|
|
87
|
-
|
|
88
|
-
describe('multiple pseudo-elements', () => {
|
|
89
|
-
it('should detect content when both ::before and ::after have content', () => {
|
|
90
|
-
const div = document.createElement('div');
|
|
91
|
-
div.className = 'with-both';
|
|
92
|
-
document.body.appendChild(div);
|
|
93
|
-
|
|
94
|
-
const result = getCSSGeneratedContent(div);
|
|
95
|
-
expect(result).toBe('Before Text After Text');
|
|
96
|
-
});
|
|
97
|
-
});
|
|
98
|
-
|
|
99
|
-
describe('no generated content', () => {
|
|
100
|
-
it('should return false for elements with no generated content', () => {
|
|
101
|
-
const div = document.createElement('div');
|
|
102
|
-
document.body.appendChild(div);
|
|
103
|
-
|
|
104
|
-
const result = getCSSGeneratedContent(div);
|
|
105
|
-
expect(result).toBe(false);
|
|
106
|
-
});
|
|
107
|
-
|
|
108
|
-
it('should return false for elements that do not exist', () => {
|
|
109
|
-
const result = getCSSGeneratedContent(null);
|
|
110
|
-
expect(result).toBe(false);
|
|
111
|
-
});
|
|
112
|
-
});
|
|
113
|
-
|
|
114
|
-
describe('complex content types', () => {
|
|
115
|
-
it('should handle URL content', () => {
|
|
116
|
-
const div = document.createElement('div');
|
|
117
|
-
div.className = 'url-content';
|
|
118
|
-
document.body.appendChild(div);
|
|
119
|
-
|
|
120
|
-
const result = getCSSGeneratedContent(div);
|
|
121
|
-
// URL content is preserved as-is (no quote stripping for URLs)
|
|
122
|
-
expect(result).toBe('url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")');
|
|
123
|
-
});
|
|
124
|
-
});
|
|
125
|
-
});
|