diff --git a/spec/build-spec.js b/spec/build-spec.js index 7d64d403..18b13722 100644 --- a/spec/build-spec.js +++ b/spec/build-spec.js @@ -24,6 +24,8 @@ describe('Build', function() { var syntaxErrorAtomBuildFile = __dirname + '/fixture/.atom-build.syntax-error.json'; var errorMatchAtomBuildFile = __dirname + '/fixture/.atom-build.error-match.json'; var errorMatchNLCAtomBuildFile = __dirname + '/fixture/.atom-build.error-match-no-line-col.json'; + var errorMatchMultiAtomBuildFile = __dirname + '/fixture/.atom-build.error-match-multiple.json'; + var errorMatchMultiFirstAtomBuildFile = __dirname + '/fixture/.atom-build.error-match-multiple-first.json'; var directory = null; var workspaceElement = null; @@ -788,6 +790,128 @@ describe('Build', function() { expect(editor.getTitle()).toEqual('.atom-build.json'); }); }); + + it('should cycle through the file if multiple error occurred', function () { + expect(workspaceElement.querySelector('.build-confirm')).not.toExist(); + + fs.writeFileSync(directory + '.atom-build.json', fs.readFileSync(errorMatchMultiAtomBuildFile)); + atom.commands.dispatch(workspaceElement, 'build:trigger'); + + waitsFor(function() { + return workspaceElement.querySelector('.build .title').classList.contains('error'); + }); + + runs(function() { + atom.commands.dispatch(workspaceElement, 'build:error-match'); + }); + + waitsFor(function() { + return atom.workspace.getActiveTextEditor(); + }); + + runs(function() { + var editor = atom.workspace.getActiveTextEditor(); + var bufferPosition = editor.getCursorBufferPosition(); + expect(editor.getTitle()).toEqual('.atom-build.json'); + expect(bufferPosition.row).toEqual(2); + expect(bufferPosition.column).toEqual(7); + atom.workspace.getActivePane().destroyActiveItem(); + }); + + runs(function() { + atom.commands.dispatch(workspaceElement, 'build:error-match'); + }); + + waitsFor(function() { + return atom.workspace.getActiveTextEditor(); + }); + + runs(function() { + var editor = atom.workspace.getActiveTextEditor(); + var bufferPosition = editor.getCursorBufferPosition(); + expect(editor.getTitle()).toEqual('.atom-build.json'); + expect(bufferPosition.row).toEqual(1); + expect(bufferPosition.column).toEqual(4); + atom.workspace.getActivePane().destroyActiveItem(); + }); + + runs(function() { + atom.commands.dispatch(workspaceElement, 'build:error-match'); + }); + + waitsFor(function() { + return atom.workspace.getActiveTextEditor(); + }); + + runs(function() { + var editor = atom.workspace.getActiveTextEditor(); + var bufferPosition = editor.getCursorBufferPosition(); + expect(editor.getTitle()).toEqual('.atom-build.json'); + expect(bufferPosition.row).toEqual(2); + expect(bufferPosition.column).toEqual(7); + }); + }); + + it('should jump to first error', function () { + expect(workspaceElement.querySelector('.build-confirm')).not.toExist(); + + fs.writeFileSync(directory + '.atom-build.json', fs.readFileSync(errorMatchMultiFirstAtomBuildFile)); + atom.commands.dispatch(workspaceElement, 'build:trigger'); + + waitsFor(function() { + return workspaceElement.querySelector('.build .title').classList.contains('error'); + }); + + runs(function() { + atom.commands.dispatch(workspaceElement, 'build:error-match-first'); + }); + + waitsFor(function() { + return atom.workspace.getActiveTextEditor(); + }); + + runs(function() { + var editor = atom.workspace.getActiveTextEditor(); + var bufferPosition = editor.getCursorBufferPosition(); + expect(editor.getTitle()).toEqual('.atom-build.json'); + expect(bufferPosition.row).toEqual(2); + expect(bufferPosition.column).toEqual(7); + atom.workspace.getActivePane().destroyActiveItem(); + }); + + runs(function() { + atom.commands.dispatch(workspaceElement, 'build:error-match'); + }); + + waitsFor(function() { + return atom.workspace.getActiveTextEditor(); + }); + + runs(function() { + var editor = atom.workspace.getActiveTextEditor(); + var bufferPosition = editor.getCursorBufferPosition(); + expect(editor.getTitle()).toEqual('.atom-build.json'); + expect(bufferPosition.row).toEqual(1); + expect(bufferPosition.column).toEqual(4); + atom.workspace.getActivePane().destroyActiveItem(); + }); + + runs(function() { + atom.commands.dispatch(workspaceElement, 'build:error-match-first'); + }); + + waitsFor(function() { + return atom.workspace.getActiveTextEditor(); + }); + + runs(function() { + var editor = atom.workspace.getActiveTextEditor(); + var bufferPosition = editor.getCursorBufferPosition(); + expect(editor.getTitle()).toEqual('.atom-build.json'); + expect(bufferPosition.row).toEqual(2); + expect(bufferPosition.column).toEqual(7); + }); + }); }); describe('when multiple project roots are open', function () { diff --git a/spec/fixture/.atom-build.error-match-multiple-first.json b/spec/fixture/.atom-build.error-match-multiple-first.json new file mode 100644 index 00000000..9e8d77b5 --- /dev/null +++ b/spec/fixture/.atom-build.error-match-multiple-first.json @@ -0,0 +1,4 @@ +{ + "cmd": "echo 'file:.atom-build.json,line:3,column:8\nfile:.atom-build.json,line:2,column:5\nfile:.atom-build.json,line:1,column:1' && return 1", + "errorMatch": "file:(?[^,]+),line:(?\\d+),column:(?\\d+)" +} diff --git a/spec/fixture/.atom-build.error-match-multiple.json b/spec/fixture/.atom-build.error-match-multiple.json new file mode 100644 index 00000000..f4e44d4b --- /dev/null +++ b/spec/fixture/.atom-build.error-match-multiple.json @@ -0,0 +1,4 @@ +{ + "cmd": "echo 'file:.atom-build.json,line:3,column:8\nfile:.atom-build.json,line:2,column:5' && return 1", + "errorMatch": "file:(?[^,]+),line:(?\\d+),column:(?\\d+)" +}