0
0
mirror of https://github.com/renovatebot/renovate.git synced 2024-12-22 05:28:35 +00:00
renovatebot_renovate/lib/util/string-match.spec.ts
Rhys Arkins 69dab293f5 feat(packageRules)!: support regex or glob matching for all (#28591)
Co-authored-by: Michael Kriese <michael.kriese@visualon.de>
2024-07-25 15:28:16 +02:00

121 lines
3.7 KiB
TypeScript

import {
anyMatchRegexOrGlobList,
getRegexPredicate,
matchRegexOrGlob,
matchRegexOrGlobList,
} from './string-match';
describe('util/string-match', () => {
describe('matchRegexOrGlobList()', () => {
it('returns false if empty patterns', () => {
expect(matchRegexOrGlobList('test', [])).toBeFalse();
});
it('returns false if no match', () => {
expect(matchRegexOrGlobList('test', ['/test2/'])).toBeFalse();
});
it('returns true if star', () => {
expect(matchRegexOrGlobList('&&&', ['*'])).toBeTrue();
});
it('returns true if any match', () => {
expect(matchRegexOrGlobList('test', ['test', '/test2/'])).toBeTrue();
});
it('returns true if one match with negative patterns', () => {
expect(matchRegexOrGlobList('test', ['!/test2/'])).toBeTrue();
});
it('returns true if every match with negative patterns', () => {
expect(matchRegexOrGlobList('test', ['!/test2/', '!/test3/'])).toBeTrue();
});
it('returns true if matching positive and negative patterns', () => {
expect(matchRegexOrGlobList('test', ['test', '!/test3/'])).toBeTrue();
});
it('returns true case insensitive for glob', () => {
expect(matchRegexOrGlobList('TEST', ['t*'])).toBeTrue();
});
it('returns true if matching every negative pattern (regex)', () => {
expect(
matchRegexOrGlobList('test', ['test', '!/test3/', '!/test4/']),
).toBeTrue();
});
it('returns false if not matching every negative pattern (regex)', () => {
expect(matchRegexOrGlobList('test', ['!/test3/', '!/test/'])).toBeFalse();
});
it('returns true if matching every negative pattern (glob)', () => {
expect(
matchRegexOrGlobList('test', ['test', '!test3', '!test4']),
).toBeTrue();
});
it('returns false if not matching every negative pattern (glob)', () => {
expect(matchRegexOrGlobList('test', ['!test3', '!te*'])).toBeFalse();
});
});
describe('anyMatchRegexOrGlobList()', () => {
it('returns false if empty patterns', () => {
expect(anyMatchRegexOrGlobList(['test'], [])).toBeFalse();
});
it('returns false if empty inputs', () => {
expect(anyMatchRegexOrGlobList([], ['/test2/'])).toBeFalse();
});
it('returns true if both empty', () => {
expect(anyMatchRegexOrGlobList([], [])).toBeFalse();
});
it('returns true if any match with positive', () => {
expect(anyMatchRegexOrGlobList(['a', 'b'], ['b'])).toBeTrue();
});
it('returns true if any match with negative', () => {
expect(anyMatchRegexOrGlobList(['a', 'b'], ['!b'])).toBeTrue();
});
});
describe('getRegexPredicate()', () => {
it('allows valid regex pattern', () => {
expect(getRegexPredicate('/hello/')).not.toBeNull();
});
it('invalidates invalid regex pattern', () => {
expect(getRegexPredicate('/^test\\d+$/m')).toBeNull();
});
it('allows the i flag in regex pattern', () => {
expect(getRegexPredicate('/^test\\d+$/i')).not.toBeNull();
});
it('allows negative regex pattern', () => {
expect(getRegexPredicate('!/^test\\d+$/i')).not.toBeNull();
});
it('does not allow non-regex input', () => {
expect(getRegexPredicate('hello')).toBeNull();
});
});
describe('matchRegexOrGlob()', () => {
it('returns true if positive regex pattern matched', () => {
expect(matchRegexOrGlob('test', '/test/')).toBeTrue();
});
it('returns true if negative regex is not matched', () => {
expect(matchRegexOrGlob('test', '!/test3/')).toBeTrue();
});
it('returns false if negative pattern is matched', () => {
expect(matchRegexOrGlob('test', '!/te/')).toBeFalse();
});
});
});