@quintaaa/eslint-plugin-starlims
Version:
Eslint plugin to parse and lint starlims form code successfully
330 lines (328 loc) • 13 kB
JavaScript
/* eslint-disable mocha/no-setup-in-describe */
const RuleTester = require('eslint').RuleTester;
const rule = require('../../src/rules/check-unconverted-functions');
const ruleTester = new RuleTester({
languageOptions: {
ecmaVersion: 2022,
},
});
describe('check-unconverted-functions', () => {
ruleTester.run('Convert object', rule, {
valid: [],
invalid: [
{
name: 'Convert.ToInt() to parseInt()',
code: `Convert.ToInt("123")`,
errors: [
{
message: `This function is a legacy function, in HTML you should use 'parseInt'.`,
type: 'CallExpression',
},
],
output: `parseInt("123")`,
},
{
name: 'Convert.ToInt32() to parseInt()',
code: `Convert.ToInt32("123")`,
errors: [
{
message: `This function is a legacy function, in HTML you should use 'parseInt'.`,
type: 'CallExpression',
},
],
output: `parseInt("123")`,
},
{
name: 'Convert.ToDecimal() to parseFloat()',
code: `Convert.ToDecimal("123.456")`,
errors: [
{
message: `This function is a legacy function, in HTML you should use 'parseFloat'.`,
type: 'CallExpression',
},
],
output: `parseFloat("123.456")`,
},
{
name: 'Convert.ToDouble() to parseFloat()',
code: `Convert.ToDouble("123.456")`,
errors: [
{
message: `This function is a legacy function, in HTML you should use 'parseFloat'.`,
type: 'CallExpression',
},
],
output: `parseFloat("123.456")`,
},
],
});
ruleTester.run('lims object', rule, {
valid: [],
invalid: [
{
name: 'lims.AAdd() to array.push()',
code: 'arr = lims.AAdd(arr, 1)',
errors: [
{
message: `This function is a legacy function, in HTML you should use 'arr.push(1)'.`,
type: 'CallExpression',
},
],
output: `arr.push(1)`,
},
{
name: 'lims.AAdd() to array.push() with a variable',
code: 'arr = lims.AAdd(arr, one)',
errors: [
{
message: `This function is a legacy function, in HTML you should use 'arr.push(one)'.`,
type: 'CallExpression',
},
],
output: 'arr.push(one)',
},
{
name: 'lims.AAdd() to array.push(), previously declared',
code: `
let arr = []
arr = lims.AAdd(arr, one)
`,
errors: [
{
message: `This function is a legacy function, in HTML you should use 'arr.push(one)'.`,
type: 'CallExpression',
},
],
output: `
let arr = []
arr.push(one)
`,
},
{
name: 'lims.AAdd() but not reassigned to same var',
code: `otherarr = lims.AAdd(arr, one)`,
errors: [
{
message: `This function is a legacy function, in HTML you should use 'arr.push(one)'.`,
type: 'CallExpression',
},
],
output: null,
},
{
name: 'lims.AAdd() of issue #26',
code: `a[0] = lims.AAdd(a[0], row[sColumn])`,
errors: [
{
message: `This function is a legacy function, in HTML you should use 'a[0].push(row[sColumn])'.`,
type: 'CallExpression',
},
],
output: `a[0].push(row[sColumn])`,
},
{
name: 'lims.ConvertToInt32 to parseInt()',
code: 'lims.ConvertToInt32("123")',
errors: [
{
message: `This function is a legacy function, in HTML you should use 'parseInt'.`,
type: 'CallExpression',
},
],
output: 'parseInt("123")',
},
{
name: 'lims.ConvertToDouble to parseFloat()',
code: 'lims.ConvertToDouble("123.456")',
errors: [
{
message: `This function is a legacy function, in HTML you should use 'parseFloat'.`,
type: 'CallExpression',
},
],
output: 'parseFloat("123.456")',
},
{
name: 'lims.ConvertToString to .toString()',
code: 'lims.ConvertToString(myObj)',
errors: [
{
message: `This function is a legacy function, in HTML you should use 'myObj.toString()'.`,
type: 'CallExpression',
},
],
output: 'myObj.toString()',
},
{
name: 'lims.Len to obj.length',
code: 'lims.Len(myObj)',
errors: [
{
message: `This function is a legacy function, in HTML you should use 'myObj.length'.`,
type: 'CallExpression',
},
],
output: 'myObj.length',
},
{
name: 'lims.Len to obj.prop.length',
code: 'lims.Len(myObj.prop)',
errors: [
{
message: `This function is a legacy function, in HTML you should use 'myObj.prop.length'.`,
type: 'CallExpression',
},
],
output: 'myObj.prop.length',
},
{
name: 'lims.JsonParse to JSON.parse() variable',
code: `lims.JsonParse(myJsonString)`,
errors: [
{
message: `This function is a legacy function, in HTML you should use 'JSON.parse(myJsonString)'.`,
type: 'CallExpression',
},
],
output: `JSON.parse(myJsonString)`,
},
{
name: 'lims.JsonParse to JSON.parse() literal',
code: `lims.JsonParse('{"foo": "bar"}')`,
errors: [
{
message: `This function is a legacy function, in HTML you should use 'JSON.parse('{"foo": "bar"}')'.`,
type: 'CallExpression',
},
],
output: `JSON.parse('{"foo": "bar"}')`,
},
{
name: 'lims.FromJson to JSON.parse() variable',
code: `lims.FromJson(myJsonString)`,
errors: [
{
message: `This function is a legacy function, in HTML you should use 'JSON.parse(myJsonString)'.`,
type: 'CallExpression',
},
],
output: `JSON.parse(myJsonString)`,
},
{
name: 'lims.FromJson to JSON.parse() literal',
code: `lims.FromJson('{"foo": "bar"}')`,
errors: [
{
message: `This function is a legacy function, in HTML you should use 'JSON.parse('{"foo": "bar"}')'.`,
type: 'CallExpression',
},
],
output: `JSON.parse('{"foo": "bar"}')`,
},
{
name: 'lims.AScan to arr.indexOf()',
code: `lims.AScan(array, 'foo')`,
errors: [
{
message: `This function is a legacy function, in HTML you should use 'array.indexOf('foo')'.`,
type: 'CallExpression',
},
],
output: `array.indexOf('foo')`,
},
{
name: 'lims.AScan to arr.indexOf() missing parameter',
code: `lims.AScan(array)`,
errors: [
{
message: `This function is a legacy function, in HTML you should use 'array.indexOf()'.`,
type: 'CallExpression',
},
],
output: `array.indexOf()`,
},
{
name: 'lims.AScan similar to #26',
code: `lims.AScan(a[0], b[someColumn])`,
errors: [
{
message: `This function is a legacy function, in HTML you should use 'a[0].indexOf(b[someColumn])'.`,
type: 'CallExpression',
},
],
output: `a[0].indexOf(b[someColumn])`,
},
{
name: 'lims.ExtractCol to arr.map',
code: `lims.ExtractCol(array, 0)`,
errors: [
{
message: `This function is a legacy function, in HTML you should use 'array.map(e => e[0])'.`,
type: 'CallExpression',
},
],
output: `array.map(e => e[0])`,
},
{
name: 'lims.ExtractCol to arr.map missing parameter',
code: `lims.ExtractCol(array)`,
errors: [
{
message: `This function is a legacy function, in HTML you should use 'array.map(e => e[COL_NUMBER])'.`,
type: 'CallExpression',
},
],
output: `array.map(e => e[COL_NUMBER])`,
},
{
name: 'lims.ExtractCol no params',
code: `lims.ExtractCol()`,
errors: [
{
message: `This function is a legacy function, in HTML you should use 'Array.map'.`,
type: 'CallExpression',
},
],
output: null,
},
],
});
ruleTester.run('others', rule, {
valid: [],
invalid: [
{
name: 'int() to parseInt()',
code: 'int("3")',
errors: [
{
message: `This function is a legacy function, in HTML you should use 'parseInt'.`,
type: 'CallExpression',
},
],
output: 'parseInt("3")',
},
{
name: 'Int32.Parse() to parseInt()',
code: 'Int32.Parse("3")',
errors: [
{
message: `This function is a legacy function, in HTML you should use 'parseInt'.`,
type: 'CallExpression',
},
],
output: 'parseInt("3")',
},
{
name: 'System.Diagnostics.Process.Start to window.open',
code: 'System.Diagnostics.Process.Start("http://www.google.com")',
errors: [
{
message: `This function is a legacy function, in HTML you should use 'window.open (only to open a new page, otherwise you need an alternative solution)'.`,
type: 'CallExpression',
},
],
output: 'window.open("http://www.google.com")',
},
],
});
});