[add] tests for instantiation
This commit is contained in:
205
test/instantiation.spec.js
Normal file
205
test/instantiation.spec.js
Normal file
@@ -0,0 +1,205 @@
|
||||
import {assert} from 'chai'
|
||||
import tsm from 'ts-morph';
|
||||
import {} from '../src/tsCalls.mjs'
|
||||
import { LibraryTypesRecorder } from '../src/libcalls.mjs'
|
||||
|
||||
describe('Instantiation tests',function () {
|
||||
/**
|
||||
* @type {tsm.Project}
|
||||
*/
|
||||
let project
|
||||
/**
|
||||
* @type {LibraryTypesRecorder}
|
||||
*/
|
||||
let recorder;
|
||||
before(function () {
|
||||
project = new tsm.Project({ compilerOptions: { checkJs: true,allowJs: true } });
|
||||
recorder = new LibraryTypesRecorder(project.getTypeChecker());
|
||||
});
|
||||
it('should instantiate a literal',function(){
|
||||
const fileScript = `export const x = 5;`;
|
||||
const { exported, recorder } = getExportedVariablesFromScript(fileScript,'file1.ts');
|
||||
|
||||
assert.lengthOf(exported, 1);
|
||||
|
||||
const exportedVars = exported.get('x');
|
||||
assert.exists( exportedVars)
|
||||
|
||||
assert.lengthOf(exportedVars, 1);
|
||||
|
||||
const exportedVar = exportedVars[0];
|
||||
|
||||
const exportedVarType = exportedVar.getType();
|
||||
|
||||
assert.equal(exportedVarType.getText(), '5');
|
||||
assert.equal(exportedVarType.getLiteralValue(), 5);
|
||||
assert.isTrue(exportedVar.getType().isLiteral());
|
||||
|
||||
const ans = recorder.instantiateFakerOnType(exportedVarType,0);
|
||||
assert.equal(ans, 5);
|
||||
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
it.skip('should instantiate a literal boolean',function(){
|
||||
const fileScript = `export const x = false;`;
|
||||
const { exported, recorder } = getExportedVariablesFromScript(fileScript,'file2.ts');
|
||||
|
||||
assert.lengthOf(exported, 1);
|
||||
|
||||
const exportedVars = exported.get('x');
|
||||
assert.exists( exportedVars)
|
||||
|
||||
assert.lengthOf(exportedVars, 1);
|
||||
|
||||
const exportedVar = exportedVars[0];
|
||||
|
||||
const exportedVarType = exportedVar.getType();
|
||||
|
||||
assert.equal(exportedVarType.getText(), 'false');
|
||||
assert.equal(exportedVarType.getLiteralValue(), false);
|
||||
console.log(exportedVarType.getLiteralValue);
|
||||
assert.isTrue(exportedVar.getType().isLiteral());
|
||||
|
||||
const ans = recorder.instantiateFakerOnType(exportedVarType,0);
|
||||
assert.equal(ans, 5);
|
||||
|
||||
})
|
||||
|
||||
it('should instantiate an object', function() {
|
||||
const fileScript = `export const x = {x:true,y:5};`;
|
||||
const { exported, recorder } = getExportedVariablesFromScript(fileScript, 'file3.ts');
|
||||
|
||||
assert.lengthOf(exported, 1);
|
||||
|
||||
const exportedVars = exported.get('x');
|
||||
assert.exists( exportedVars)
|
||||
|
||||
assert.lengthOf(exportedVars, 1);
|
||||
|
||||
const exportedVar = exportedVars[0];
|
||||
|
||||
const exportedVarType = exportedVar.getType();
|
||||
|
||||
// console.log(exportedVarType.getLiteralValue);
|
||||
assert.isFalse(exportedVar.getType().isLiteral());
|
||||
|
||||
const ans = recorder.instantiateFakerOnType(exportedVarType,0);
|
||||
assert.isBoolean(ans.x);
|
||||
assert.isNumber(ans.y);
|
||||
|
||||
})
|
||||
it('should instantiate a tuple object', function() {
|
||||
const fileScript = `export const x = [10,'a'] as const;`;
|
||||
const { exported, recorder } = getExportedVariablesFromScript(fileScript, 'file-tuple.ts');
|
||||
|
||||
assert.lengthOf(exported, 1);
|
||||
|
||||
const exportedVars = exported.get('x');
|
||||
assert.exists( exportedVars)
|
||||
|
||||
assert.lengthOf(exportedVars, 1);
|
||||
|
||||
const exportedVar = exportedVars[0];
|
||||
|
||||
const exportedVarType = exportedVar.getType();
|
||||
|
||||
// console.log(exportedVarType.getLiteralValue);
|
||||
assert.isFalse(exportedVar.getType().isLiteral());
|
||||
|
||||
const ans = recorder.instantiateFakerOnType(exportedVarType);
|
||||
console.log(ans);
|
||||
assert.isArray(ans);
|
||||
assert.isArray([10, 'a'], ans);
|
||||
// assert.isBoolean(ans.x);
|
||||
// assert.isObject(ans.parent);
|
||||
// assert.isNumber(ans.data);
|
||||
|
||||
})
|
||||
|
||||
it('should instantiate a nested object', function() {
|
||||
const fileScript = `type A = {parent?:A,data:number}; export const x:A = {data:12};`;
|
||||
const { exported, recorder } = getExportedVariablesFromScript(fileScript, 'file4.ts');
|
||||
|
||||
assert.lengthOf(exported, 1);
|
||||
|
||||
const exportedVars = exported.get('x');
|
||||
assert.exists( exportedVars)
|
||||
|
||||
assert.lengthOf(exportedVars, 1);
|
||||
|
||||
const exportedVar = exportedVars[0];
|
||||
|
||||
const exportedVarType = exportedVar.getType();
|
||||
|
||||
// console.log(exportedVarType.getLiteralValue);
|
||||
assert.isFalse(exportedVar.getType().isLiteral());
|
||||
|
||||
const ans = recorder.instantiateFakerOnType(exportedVarType);
|
||||
console.log(ans);
|
||||
// assert.isBoolean(ans.x);
|
||||
assert.isObject(ans.parent);
|
||||
assert.isNumber(ans.data);
|
||||
|
||||
})
|
||||
|
||||
it('should instantiate a callback', function() {
|
||||
const fileScript = `export const x = ()=>{return 0;}`;
|
||||
const { exported, recorder } = getExportedVariablesFromScript(fileScript, 'file5.ts');
|
||||
|
||||
assert.lengthOf(exported, 1);
|
||||
|
||||
const exportedVars = exported.get('x');
|
||||
assert.exists( exportedVars)
|
||||
|
||||
assert.lengthOf(exportedVars, 1);
|
||||
|
||||
const exportedVar = exportedVars[0];
|
||||
|
||||
const exportedVarType = exportedVar.getType();
|
||||
|
||||
// console.log(exportedVarType.getLiteralValue);
|
||||
assert.isFalse(exportedVar.getType().isLiteral());
|
||||
|
||||
const ans = recorder.instantiateFakerOnType(exportedVarType);
|
||||
assert.isFunction(ans);
|
||||
assert.isNumber(ans());
|
||||
|
||||
})
|
||||
|
||||
it('should instantiate a buffer', function() {
|
||||
const fileScript = `export const x = Buffer.from('hello world');`;
|
||||
const { exported, recorder } = getExportedVariablesFromScript(fileScript, 'file6.ts');
|
||||
|
||||
assert.lengthOf(exported, 1);
|
||||
|
||||
const exportedVars = exported.get('x');
|
||||
assert.exists( exportedVars)
|
||||
|
||||
assert.lengthOf(exportedVars, 1);
|
||||
|
||||
const exportedVar = exportedVars[0];
|
||||
|
||||
const exportedVarType = exportedVar.getType();
|
||||
|
||||
// console.log(exportedVarType.getLiteralValue);
|
||||
assert.isFalse(exportedVar.getType().isLiteral());
|
||||
|
||||
const ans = recorder.instantiateFakerOnType(exportedVarType);
|
||||
|
||||
assert.isObject(ans);
|
||||
// assert.isNumber(ans());
|
||||
|
||||
})
|
||||
|
||||
|
||||
function getExportedVariablesFromScript(fileScript,label) {
|
||||
const sourceFile = project.createSourceFile(label, fileScript);
|
||||
|
||||
|
||||
const exported = sourceFile.getExportedDeclarations();
|
||||
return { exported, recorder };
|
||||
}
|
||||
})
|
Reference in New Issue
Block a user