mirror of
https://github.com/sasjs/lint.git
synced 2025-12-10 17:34:36 +00:00
159 lines
4.1 KiB
TypeScript
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')
|
|
})
|
|
})
|