UNPKG

linenumber

Version:

Get the line number of one or more matches in a file

252 lines (230 loc) 7.91 kB
describe 'linenumber with literal text', -> Given -> @linenumber = if typeof require == 'function' then require '../lib/linenumber' else window.linenumber Given -> @text = """ exports.eat = function(bites, size) { var banana = new Banana(size); var quantity = banana.length - bites; return 'You have ' + quantity + '/' banana.length + ' of a banana left'; }; exports.getColor = function() { return 'yellow'; }; """ context 'on a literal string', -> context 'and a single match', -> When -> @match = @linenumber @text, 'getColor' Then -> @match.should.eql [ line: 7 match: 'getColor' ] context 'and no match', -> When -> @match = @linenumber @text, 'peel' Then -> (@match == null).should.be.true context 'and multiple matches', -> When -> @match = @linenumber @text, 'exports' Then -> @match.should.eql [ line: 1 match: 'exports' , line: 7 match: 'exports' ] context 'on a regex as a string', -> When -> @match = @linenumber @text, 'var [^ ]+' Then -> @match.should.eql [ line: 2 match: 'var banana' , line: 3 match: 'var quantity' ] context 'on a regex object', -> When -> @match = @linenumber @text, /var [^ ]+/g Then -> @match.should.eql [ line: 2 match: 'var banana' , line: 3 match: 'var quantity' ] context 'linenumber.loaderSync', -> context 'with a function', -> Given -> @get = (file) => return """ #{@text} getColor """ Given -> @linenumber.loaderSync @get When -> @match = @linenumber "foo/bar/banana.js", 'getColor' Then -> @match.should.eql [ file: "foo/bar/banana.js" line: 7 match: 'getColor' , file: "foo/bar/banana.js" line: 10 match: 'getColor' ] context 'with an array', -> Given -> @sync = (file) => @text Given -> @async = (file, done) => done null, @text Given -> @linenumber.loaderSync [@sync, @async] When -> @matchSync = @linenumber "foo/bar/banana.js", 'getColor' And (done) -> @linenumber "foo/bar/banana.js", 'getColor', (err, @matchAsync) => done() Then -> @matchSync.should.eql [ file: "foo/bar/banana.js" line: 7 match: 'getColor' ] And -> @matchAsync.should.eql [ file: "foo/bar/banana.js" line: 7 match: 'getColor' ] context 'with an object', -> Given -> @sync = (file) => @text Given -> @async = (file, done) => done null, @text Given -> @linenumber.loaderSync { sync: @sync, async: @async } When -> @matchSync = @linenumber "foo/bar/banana.js", 'getColor' And (done) -> @linenumber "foo/bar/banana.js", 'getColor', (err, @matchAsync) => done() Then -> @matchSync.should.eql [ file: "foo/bar/banana.js" line: 7 match: 'getColor' ] And -> @matchAsync.should.eql [ file: "foo/bar/banana.js" line: 7 match: 'getColor' ] context 'with a different type', -> Given -> @called = false Given -> @get = (file) => @called = true return @text Given -> @linenumber.loaderSync @get Given -> @linenumber.loaderSync /foobar/ When -> @match = @linenumber 'foo/bar/banana.js', 'getColor' Then -> @called.should.be.true context 'with args', -> Given -> @args = [] Given -> @get = (file, @args...) => @text Given -> @linenumber.loaderSync @get, 'foo', 'bar' Given -> @linenumber.loaderSync /foobar/ When -> @match = @linenumber 'foo/bar/banana.js', 'getColor' Then -> @args.should.eql ['foo', 'bar'] context 'sets the context', -> Given -> @context = foo: 'bar' Given -> @get = (file, done) -> this.foo = 'baz' return @text Given -> @linenumber.loaderSync.apply @context, [@get] When -> context = @linenumber 'foo/bar/banana.js', 'getColor' Then -> @context.foo.should.eql 'baz' context 'linenumber.loader', -> context 'with a function', -> Given -> @get = (file, done) => done null, """ #{@text} getColor """ Given -> @linenumber.loader @get When (done) -> @linenumber "foo/bar/banana.js", 'getColor', (err, @match) => done() Then -> @match.should.eql [ file: "foo/bar/banana.js" line: 7 match: 'getColor' , file: "foo/bar/banana.js" line: 10 match: 'getColor' ] context 'with an array', -> Given -> @sync = (file) => @text Given -> @async = (file, done) => done null, @text Given -> @linenumber.loader [@sync, @async] When -> @matchSync = @linenumber 'foo/bar/banana.js', 'getColor' And (done) -> @linenumber 'foo/bar/banana.js', 'getColor', (err, @matchAsync) => done() Then -> @matchSync.should.eql [ file: 'foo/bar/banana.js' line: 7 match: 'getColor' ] And -> @matchAsync.should.eql [ file: 'foo/bar/banana.js' line: 7 match: 'getColor' ] context 'with an object', -> Given -> @sync = (file) => @text Given -> @async = (file, done) => done null, @text Given -> @linenumber.loader { sync: @sync, async: @async } When -> @matchSync = @linenumber 'foo/bar/banana.js', 'getColor' And (done) -> @linenumber 'foo/bar/banana.js', 'getColor', (err, @matchAsync) => done() Then -> @matchSync.should.eql [ file: 'foo/bar/banana.js' line: 7 match: 'getColor' ] And -> @matchAsync.should.eql [ file: 'foo/bar/banana.js' line: 7 match: 'getColor' ] context 'sets the context', -> Given -> @context = foo: 'bar' Given -> @get = (file, done) -> this.foo = 'baz' done null, @text Given -> @linenumber.loader.apply @context, [@get] When (done) -> @linenumber 'foo/bar/banana.js', 'getColor', (err, context) -> done() Then -> @context.foo.should.eql 'baz' context 'with a callback', -> context 'of length greater than 1', -> context 'with no error', -> Given -> @get = (file, done) => done null, """ #{@text} getColor """ Given -> @linenumber.loader @get When (done) -> @linenumber "foo/bar/banana.js", 'getColor', (err, @match) => done() Then -> @match.should.eql [ file: "foo/bar/banana.js" line: 7 match: 'getColor' , file: "foo/bar/banana.js" line: 10 match: 'getColor' ] context 'but no async operations', -> When (done) -> @linenumber @text, 'getColor', (err, @match) => done() Then -> @match.should.eql [ line: 7 match: 'getColor' ] context 'with an error', -> Given -> @get = (file, done) => done 'err', null Given -> @linenumber.loader @get When (done) -> @linenumber "foo/bar/banana.js", 'getColor', (@err, @match) => done() Then -> (@match == undefined).should.be.true And -> @err.should.eql 'err' context 'of length 1', -> context 'with no error', -> Given -> @get = (file, done) => done @text Given -> @linenumber.loader @get When (done) -> @linenumber "foo/bar/banana.js", 'getColor', (@match) => done() Then -> @match.should.eql [ file: "foo/bar/banana.js" line: 7 match: 'getColor' ] context 'but no async operations', -> When (done) -> @linenumber @text, 'getColor', (@match) => done() Then -> @match.should.eql [ line: 7 match: 'getColor' ]