Skip to content

Commit

Permalink
fix(ensure): ignore word delimiters for case matching #291
Browse files Browse the repository at this point in the history
  • Loading branch information
marionebl committed Feb 22, 2018
1 parent 7082d33 commit fa69299
Show file tree
Hide file tree
Showing 3 changed files with 394 additions and 40 deletions.
31 changes: 20 additions & 11 deletions @commitlint/ensure/src/case.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,33 +8,42 @@ export default ensureCase;

function ensureCase(raw = '', target = 'lowercase') {
const input = String(raw);
const transformed = toCase(input, target);

if (transformed === '') {
return true;
}

return transformed === input;
}

function toCase(input, target) {
switch (target) {
case 'camel-case':
return camelCase(input) === input;
return camelCase(input);
case 'kebab-case':
return kebabCase(input) === input;
return kebabCase(input);
case 'snake-case':
return snakeCase(input) === input;
return snakeCase(input);
case 'pascal-case':
return upperFirst(camelCase(input)) === input;
return upperFirst(camelCase(input));
case 'start-case':
return startCase(input) === input;
return startCase(input);
case 'upper-case':
case 'uppercase':
return input.toUpperCase() === input;
return input.toUpperCase();
case 'sentence-case':
case 'sentencecase': {
const word = input.split(' ')[0];
return (
ensureCase(word.charAt(0), 'upper-case') &&
ensureCase(word.slice(1), 'lower-case')
);
return `${toCase(word.charAt(0), 'upper-case')}${toCase(
word.slice(1),
'lower-case'
)}${input.slice(word.length)}`;
}
case 'lower-case':
case 'lowercase':
case 'lowerCase': // Backwards compat config-angular v4
return input.toLowerCase() === input;
return input.toLowerCase();
default:
throw new TypeError(`ensure-case: Unknown target case "${target}"`);
}
Expand Down
45 changes: 43 additions & 2 deletions @commitlint/ensure/src/case.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,22 +31,33 @@ test('false for uppercase on lowercase', t => {
t.is(actual, false);
});

test('true for * on lowercase', t => {
const actual = ensure('*', 'lowercase');
console.log({actual});
t.is(actual, true);
});

test('true for uppercase on uppercase', t => {
const actual = ensure('A', 'uppercase');
t.is(actual, true);
});

test('false for lowercase on lowercase', t => {
test('false for lowercase on uppercase', t => {
const actual = ensure('a', 'uppercase');
t.is(actual, false);
});

test('true for * on uppercase', t => {
const actual = ensure('*', 'uppercase');
t.is(actual, true);
});

test('true for sentencecase on sentencecase', t => {
const actual = ensure('Sentence case', 'sentence-case');
t.is(actual, true);
});

test('false for lowsercase on sentencecase', t => {
test('false for lowercase on sentencecase', t => {
t.is(ensure('sentence case', 'sentence-case'), false);
});

Expand All @@ -73,3 +84,33 @@ test('false for snake_case on sentencecase', t => {
test('false for camelCase on sentencecase', t => {
t.is(ensure('camelCase', 'sentence-case'), false);
});

test('true for * on sentence-case', t => {
const actual = ensure('*', 'sentence-case');
t.is(actual, true);
});

test('true for * on camel-case', t => {
const actual = ensure('*', 'camel-case');
t.is(actual, true);
});

test('true for * on kebab-case', t => {
const actual = ensure('*', 'kebab-case');
t.is(actual, true);
});

test('true for * on snake-case', t => {
const actual = ensure('*', 'snake-case');
t.is(actual, true);
});

test('true for * on pascal-case', t => {
const actual = ensure('*', 'snake-case');
t.is(actual, true);
});

test('true for * on start-case', t => {
const actual = ensure('*', 'snake-case');
t.is(actual, true);
});
Loading

0 comments on commit fa69299

Please sign in to comment.