Skip to content

Commit

Permalink
test(type-utils): add test for IndexSignature internals
Browse files Browse the repository at this point in the history
  • Loading branch information
RebeccaStevens committed Jan 9, 2022
1 parent a137c76 commit 9ffd4f7
Showing 1 changed file with 67 additions and 6 deletions.
73 changes: 67 additions & 6 deletions packages/type-utils/tests/isTypeReadonly.test.ts
Expand Up @@ -176,13 +176,48 @@ describe('isTypeReadonly', () => {

describe('Intersection', () => {
describe('is readonly', () => {
it('handles an intersection of 2', () => {
const { type, checker } = getType(
`type Test = Readonly<{ foo: string; bar: number; }> & Readonly<{ bar: number; }>;`,
);
describe('default options', () => {
it('handles an intersection of 2 records', () => {
const { type, checker } = getType(
`type Test = Readonly<{ foo: string; bar: number; }> & Readonly<{ bar: number; }>;`,
);

const result = isTypeReadonly(checker, type);
expect(result).toBe(true);
const result = isTypeReadonly(checker, type);
expect(result).toBe(true);
});

it('handles a readonly intersection of readonly array and readonly record', () => {
const { type, checker } = getType(
`type Test = Readonly<ReadonlyArray<string> & { readonly foo: string; }>;`,
);

const result = isTypeReadonly(checker, type);
expect(result).toBe(true);
});

it('handles a intersection of readonly readonly array and readonly record', () => {
const { type, checker } = getType(
`type Test = Readonly<ReadonlyArray<string>> & Readonly<{ readonly foo: string; }>;`,
);

const result = isTypeReadonly(checker, type);
expect(result).toBe(true);
});
});

describe('treatMethodsAsReadonly', () => {
const options: ReadonlynessOptions = {
treatMethodsAsReadonly: true,
};

it('handles an intersection of readonly array and readonly record', () => {
const { type, checker } = getType(
`type Test = ReadonlyArray<string> & { readonly foo: string; };`,
);

const result = isTypeReadonly(checker, type, options);
expect(result).toBe(true);
});
});
});

Expand Down Expand Up @@ -215,5 +250,31 @@ describe('isTypeReadonly', () => {
});
});
});

describe('IndexSignature', () => {
describe('is readonly', () => {
it('handles readonly PropertySignature inside a readonly IndexSignature', () => {
const { type, checker } = getType(
`type Test = { readonly [key: string]: { readonly foo: readonly string[]; }; };`,
);

const result = isTypeReadonly(checker, type);
expect(result).toBe(true);
});
});

describe('is not readonly', () => {
describe('default options', () => {
it('fails with a mutable PropertySignature inside a readonly IndexSignature', () => {
const { type, checker } = getType(
`type Test = { readonly [key: string]: { foo: string[]; }; };`,
);

const result = isTypeReadonly(checker, type);
expect(result).toBe(false);
});
});
});
});
});
});

0 comments on commit 9ffd4f7

Please sign in to comment.