UNPKG

@quintaaa/eslint-plugin-starlims

Version:

Eslint plugin to parse and lint starlims form code successfully

330 lines (328 loc) 13 kB
/* 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")', }, ], }); });