Clean up type tests

This commit is contained in:
Junyoung Choi
2018-11-27 14:40:34 +09:00
parent 2df4d59400
commit 1da614b335
+68 -48
View File
@@ -2,56 +2,38 @@ import vfile = require('vfile');
import * as Unist from 'unist';
// Instantiation
vfile();
const file: vfile.VFile = vfile();
vfile('string');
vfile(Buffer.from('string'));
vfile(vfile());
vfile({ stem: 'readme', extname: '.md' });
try {
vfile({ extname: '.md' });
} catch (e) {
console.log('Error: set extname without path');
}
interface CustomVFile extends vfile.VFile {
custom: string;
data: {
custom: number;
};
}
const file = vfile<CustomVFile>({
path: '~/example.txt',
contents: 'Alpha *braavo* charlie.',
custom: 'Custom tango',
data: {
custom: 12345
}
});
const customIsString: string = file.custom;
const dataCustomIsNumber: number = file.data.custom;
const copiedFile: CustomVFile = vfile(file);
file.path; // => '~/example.txt'
file.dirname; // => '~'
vfile({ path: 1234 }); // $ExpectError
file.path = '~/test.txt';
file.dirname = '~';
file.extname = '.md';
file.basename = 'test.text';
file.history = ['~/test.txt']; // => ['~/example.txt', '~/example.md', '~/index.text']
file.messages = [{
file: '~/test.txt',
ruleId: '',
reason: '',
line: 1,
column: 1,
location: {
start: {
line: 1,
column: 1,
},
end: {
line: 1,
column: 1,
}
},
source: ''
}];
file.basename; // => 'example.md'
file.basename = 'index.text';
file.history; // => ['~/example.txt', '~/example.md', '~/index.text']
file.message('`braavo` is misspelt; did you mean `bravo`?', {line: 1, column: 8});
console.log(file.messages);
// Typings of the custom data can be resolved from the parameters above
const custom: string = file.custom; // 'Custom tango'
const dataCustom: number = file.data.custom; // 12345
// message method accept any Stringifiable Position(e.g. point, position, node with position)
const startPoint: Unist.Point = {
line: 1,
column: 1,
@@ -63,18 +45,56 @@ const position: Unist.Position = {
column: 2,
},
};
// Accept Point
file.message('test', startPoint);
// Accept Position
file.message('test', position);
// Accept Node with extra value
file.message('test', {
type: 'ramdom node',
position,
extraValue: 'extra tango',
});
// But, it must reject any malformed position
file.message('test', { start: 'invalid point' }); // $ExpectError
// Typings of original properties must be kept
const fileWithWrongParams = vfile({ path: 1234 }); // $ExpectError
// Using `data` prop
interface CustomData {
message: string;
}
function isCustomData(data: any): data is CustomData {
return data != null && typeof data.message === 'string';
}
function doSomethingWithCustomData(data: CustomData) {
}
const customData: CustomData = {
message: 'tango'
};
const fileWithData = vfile({
data: customData
});
if (isCustomData(fileWithData.data)) {
doSomethingWithCustomData(fileWithData.data);
}
doSomethingWithCustomData(fileWithData.data); // $ExpectError
// Extending vfile
interface CustomVFile extends vfile.VFile {
custom: string;
data: {
custom: number;
};
}
const customVFile = vfile<CustomVFile>({
path: '~/example.txt',
contents: 'Alpha *braavo* charlie.',
custom: 'Custom tango',
data: {
custom: 12345
}
});
customVFile.custom = 'test';
customVFile.data.custom = 1234;
const copiedFile: CustomVFile = vfile(customVFile);