1
0
mirror of https://github.com/sasjs/lint.git synced 2025-12-10 17:34:36 +00:00
Files
lint/src/lint.spec.ts
2021-03-29 09:26:20 +01:00

159 lines
4.1 KiB
TypeScript

import { lintFile, lintText, splitText } from './lint'
import { Severity } from './types/Severity'
import path from 'path'
describe('lintText', () => {
it('should identify trailing spaces', async () => {
const text = `/**
@file
**/
%put 'hello';
%put 'world'; `
const results = await lintText(text)
expect(results.length).toEqual(2)
expect(results[0]).toEqual({
message: 'Line contains trailing spaces',
lineNumber: 4,
startColumnNumber: 18,
endColumnNumber: 18,
severity: Severity.Warning
})
expect(results[1]).toEqual({
message: 'Line contains trailing spaces',
lineNumber: 5,
startColumnNumber: 22,
endColumnNumber: 23,
severity: Severity.Warning
})
})
it('should identify encoded passwords', async () => {
const text = `/**
@file
**/
%put '{SAS001}';`
const results = await lintText(text)
expect(results.length).toEqual(1)
expect(results[0]).toEqual({
message: 'Line contains encoded password',
lineNumber: 4,
startColumnNumber: 11,
endColumnNumber: 19,
severity: Severity.Error
})
})
it('should identify missing doxygen header', async () => {
const text = `%put 'hello';`
const results = await lintText(text)
expect(results.length).toEqual(1)
expect(results[0]).toEqual({
message: 'File missing Doxygen header',
lineNumber: 1,
startColumnNumber: 1,
endColumnNumber: 1,
severity: Severity.Warning
})
})
it('should return an empty list with an empty file', async () => {
const text = `/**
@file
**/`
const results = await lintText(text)
expect(results.length).toEqual(0)
})
})
describe('lintFile', () => {
it('should identify lint issues in a given file', async () => {
const results = await lintFile(path.join(__dirname, 'Example File.sas'))
expect(results.length).toEqual(8)
expect(results).toContainEqual({
message: 'Line contains trailing spaces',
lineNumber: 1,
startColumnNumber: 1,
endColumnNumber: 2,
severity: Severity.Warning
})
expect(results).toContainEqual({
message: 'Line contains trailing spaces',
lineNumber: 2,
startColumnNumber: 1,
endColumnNumber: 2,
severity: Severity.Warning
})
expect(results).toContainEqual({
message: 'File name contains spaces',
lineNumber: 1,
startColumnNumber: 1,
endColumnNumber: 1,
severity: Severity.Warning
})
expect(results).toContainEqual({
message: 'File name contains uppercase characters',
lineNumber: 1,
startColumnNumber: 1,
endColumnNumber: 1,
severity: Severity.Warning
})
expect(results).toContainEqual({
message: 'File missing Doxygen header',
lineNumber: 1,
startColumnNumber: 1,
endColumnNumber: 1,
severity: Severity.Warning
})
expect(results).toContainEqual({
message: 'Line contains encoded password',
lineNumber: 5,
startColumnNumber: 10,
endColumnNumber: 18,
severity: Severity.Error
})
expect(results).toContainEqual({
message: 'Line is indented with a tab',
lineNumber: 7,
startColumnNumber: 1,
endColumnNumber: 1,
severity: Severity.Warning
})
expect(results).toContainEqual({
message: 'Line has incorrect indentation - 3 spaces',
lineNumber: 6,
startColumnNumber: 1,
endColumnNumber: 1,
severity: Severity.Warning
})
})
})
describe('splitText', () => {
it('should return an empty array when text is falsy', () => {
const lines = splitText('')
expect(lines.length).toEqual(0)
})
it('should return an array of lines from text', () => {
const lines = splitText(`line 1\nline 2`)
expect(lines.length).toEqual(2)
expect(lines[0]).toEqual('line 1')
expect(lines[1]).toEqual('line 2')
})
it('should work with CRLF line endings', () => {
const lines = splitText(`line 1\r\nline 2`)
expect(lines.length).toEqual(2)
expect(lines[0]).toEqual('line 1')
expect(lines[1]).toEqual('line 2')
})
})