11import { expect , test } from 'vitest' ;
2- import { deepEqual } from '../util' ;
2+ import { combinePatterns , deepEqual } from '../util' ;
33
44test ( 'deepEqual' , ( ) => {
55 expect ( deepEqual ( null , null ) ) . toBe ( true ) ;
@@ -22,3 +22,41 @@ test('deepEqual', () => {
2222 false ,
2323 ) ;
2424} ) ;
25+
26+ test ( 'combinePatterns' , ( ) => {
27+ // Empty pattern
28+ expect ( combinePatterns ( [ ] ) ) . toBeUndefined ( ) ;
29+
30+ // Single pattern
31+ expect ( combinePatterns ( [ / [ A - Z ] / ] ) ) . toBe ( '^(?=.*(?:[A-Z])).*$' ) ;
32+ expect ( combinePatterns ( [ / ^ [ A - Z ] + $ / ] ) ) . toBe ( '^(?=.*(?:^[A-Z]+$)).*$' ) ;
33+
34+ // Multiple patterns without flags
35+ expect ( combinePatterns ( [ / [ A - Z ] / , / [ 0 - 9 ] / ] ) ) . toBe (
36+ '^(?=.*(?:[A-Z]))(?=.*(?:[0-9])).*$' ,
37+ ) ;
38+
39+ // Unsupported flags
40+ expect ( combinePatterns ( [ / [ A - Z ] / g] ) ) . toBeUndefined ( ) ;
41+ expect ( combinePatterns ( [ / [ A - Z ] / , / [ 0 - 9 ] / i] ) ) . toBeUndefined ( ) ;
42+
43+ // Supported flags
44+ expect ( combinePatterns ( [ / [ A - Z ] / u] ) ) . toBe ( '^(?=.*(?:[A-Z])).*$' ) ;
45+
46+ // Semantic validation: single pattern (uppercase-only)
47+ const single = combinePatterns ( [ / ^ [ A - Z ] + $ / ] ) ;
48+ expect ( single ) . toBeDefined ( ) ;
49+ const singleRegex = new RegExp ( single || '' ) ;
50+ expect ( singleRegex . test ( 'ABC' ) ) . toBe ( true ) ;
51+ expect ( singleRegex . test ( 'abc' ) ) . toBe ( false ) ;
52+ expect ( singleRegex . test ( 'ABC123' ) ) . toBe ( false ) ;
53+
54+ // Semantic validation: multiple patterns (uppercase AND digit)
55+ const multi = combinePatterns ( [ / [ A - Z ] / , / [ 0 - 9 ] / ] ) ;
56+ expect ( multi ) . toBeDefined ( ) ;
57+ const multiRegex = new RegExp ( multi || '' ) ;
58+ expect ( multiRegex . test ( 'ABC' ) ) . toBe ( false ) ;
59+ expect ( multiRegex . test ( '123' ) ) . toBe ( false ) ;
60+ expect ( multiRegex . test ( 'ABC123' ) ) . toBe ( true ) ;
61+ expect ( multiRegex . test ( 'abc123' ) ) . toBe ( false ) ;
62+ } ) ;
0 commit comments