diff --git a/__tests__/setup-go.test.ts b/__tests__/setup-go.test.ts index d81a2aa..3734b3f 100644 --- a/__tests__/setup-go.test.ts +++ b/__tests__/setup-go.test.ts @@ -9,6 +9,9 @@ import * as main from '../src/main'; import * as im from '../src/installer'; let goJsonData = require('./data/golang-dl.json'); +let matchers = require('../matchers.json'); +let matcherPattern = matchers.problemMatcher[0].pattern[0]; +let matcherRegExp = new RegExp(matcherPattern.regexp); describe('setup-go', () => { let inputs = {} as any; @@ -322,6 +325,72 @@ describe('setup-go', () => { expect(added).toBeTruthy; }); + interface Annotation { + file: string, + line: number, + column: number, + message: string + } + + // + // problem matcher regex pattern tests + + function testMatch(line: string): Annotation { + let annotation = {}; + + let match = matcherRegExp.exec(line); + if (match) { + annotation.line = parseInt(match[matcherPattern.line], 10); + annotation.column = parseInt(match[matcherPattern.column], 10); + annotation.file = match[matcherPattern.file].trim(); + annotation.message = match[matcherPattern.message].trim(); + } + + return annotation; + } + + it('matches on rooted unix path', async () => { + let line = '/assert.go:4:1: missing return at end of function'; + let annotation = testMatch(line); + expect(annotation).toBeDefined(); + expect(annotation.line).toBe(4); + expect(annotation.column).toBe(1); + expect(annotation.file).toBe('/assert.go'); + expect(annotation.message).toBe('missing return at end of function'); + }); + + it('matches on relative unix path', async () => { + let line = './a/path/assert.go:6:1: missing return at end of function'; + let annotation = testMatch(line); + expect(annotation).toBeDefined(); + expect(annotation.line).toBe(6); + expect(annotation.column).toBe(1); + expect(annotation.file).toBe('./a/path/assert.go'); + expect(annotation.message).toBe('missing return at end of function'); + }); + + it('matches on rooted unix path', async () => { + let line = '/assert.go:4:1: missing return at end of function'; + let annotation = testMatch(line); + expect(annotation).toBeDefined(); + expect(annotation.line).toBe(4); + expect(annotation.column).toBe(1); + expect(annotation.file).toBe('/assert.go'); + expect(annotation.message).toBe('missing return at end of function'); + }); + + it('matches on rooted unix path with whitespace', async () => { + let line = ' /assert.go:5:2: missing return at end of function '; + let annotation = testMatch(line); + expect(annotation).toBeDefined(); + expect(annotation.line).toBe(5); + expect(annotation.column).toBe(2); + expect(annotation.file).toBe('/assert.go'); + expect(annotation.message).toBe('missing return at end of function'); + }); + + + // 1.13.1 => 1.13.1 // 1.13 => 1.13.0 // 1.10beta1 => 1.10.0-beta1, 1.10rc1 => 1.10.0-rc1 diff --git a/matchers.json b/matchers.json index f370917..69e8427 100644 --- a/matchers.json +++ b/matchers.json @@ -4,11 +4,11 @@ "owner": "go", "pattern": [ { - "regexp": "^([^:]*: )?((.:)?[^:]*):(\\d+)(:(\\d+))?: (.*)$", - "file": 2, - "line": 4, - "column": 6, - "message": 7 + "regexp": "((?:.{0,2}\\/|.{0,2}\\\\)(?:.+\\.go)):(?:(\\d+):(\\d+):)? (.*)", + "file": 1, + "line": 2, + "column": 3, + "message": 4 } ] }