Skip to content

Commit

Permalink
test(type-utils): add unit tests for requiresQuoting (#8691)
Browse files Browse the repository at this point in the history
* test: add testCase

* test: fix test case result

* docs: add comment in testcase and function
  • Loading branch information
developer-bandi committed Apr 23, 2024
1 parent 1763889 commit ba1eb20
Show file tree
Hide file tree
Showing 2 changed files with 87 additions and 1 deletion.
2 changes: 1 addition & 1 deletion packages/type-utils/src/requiresQuoting.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import * as ts from 'typescript';

/*** Indicates whether identifiers require the use of quotation marks when accessing property definitions and dot notation. */
function requiresQuoting(
name: string,
target: ts.ScriptTarget = ts.ScriptTarget.ESNext,
Expand Down
86 changes: 86 additions & 0 deletions packages/type-utils/tests/requiresQuoting.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
import { requiresQuoting } from '../src';

describe('getDeclaration', () => {
describe('valid identifier', () => {
it('upper and lower case alphabet', () => {
const name = 'c';
const result = requiresQuoting(name);
expect(result).toBe(false);
});

it('upper and lower case alphabet with number not first', () => {
const name = 'foo1234Bar';
const result = requiresQuoting(name);
expect(result).toBe(false);
});

it('start with dollorSign', () => {
const name = '$bar';
const result = requiresQuoting(name);
expect(result).toBe(false);
});
it('include dollorSign not start position', () => {
const name = 'foo$bar';
const result = requiresQuoting(name);
expect(result).toBe(false);
});

it('start with underScore', () => {
const name = '_bar';
const result = requiresQuoting(name);
expect(result).toBe(false);
});
it('include underScore not start position', () => {
const name = 'foo_bar';
const result = requiresQuoting(name);
expect(result).toBe(false);
});

it('non-alphabet characters', () => {
const name = 'café';
const result = requiresQuoting(name);
expect(result).toBe(false);
});
});

describe('invalid identifier', () => {
// This test case is written because it is possible to access object properties, but dot annotation is not accessible.
it('only number', () => {
const name = '12345';
const result = requiresQuoting(name);
expect(result).toBe(true);
});
it('start with number', () => {
const name = '1axcef';
const result = requiresQuoting(name);
expect(result).toBe(true);
});
it('start with dash', () => {
const name = '-bar';
const result = requiresQuoting(name);
expect(result).toBe(true);
});
it('include dash not start position', () => {
const name = 'foo-bar';
const result = requiresQuoting(name);
expect(result).toBe(true);
});
it('empty string', () => {
const name = '';
const result = requiresQuoting(name);
expect(result).toBe(true);
});
it('include special symbol at first', () => {
const name = '!asdfs';
const result = requiresQuoting(name);
expect(result).toBe(true);
});

it('include special symbol at middle', () => {
const name = 'asd!fs';
const result = requiresQuoting(name);

expect(result).toBe(true);
});
});
});

0 comments on commit ba1eb20

Please sign in to comment.