123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- lust = require 'tests/lust'
- Rx = require 'rx'
- for _, fn in pairs({'describe', 'it', 'test', 'expect', 'spy', 'before', 'after'}) do
- _G[fn] = lust[fn]
- end
- -- helper function to safely accumulate errors which will be displayed when done testing
- function tryCall(fn, errorsAccumulator)
- local errNum = #errorsAccumulator
- xpcall(fn, function (err)
- table.insert(errorsAccumulator, err)
- end)
- return #errorsAccumulator == errNum
- end
- function throwErrorsIfAny(errorsAccumulator)
- if #errorsAccumulator > 0 then
- error(table.concat(errorsAccumulator, '\n\t' .. string.rep('\t', lust.level)))
- end
- end
- observableSpy = function(observable)
- local onNextSpy = spy()
- local onErrorSpy = spy()
- local onCompletedSpy = spy()
- local observer = Rx.Observer.create(
- function (...) onNextSpy(...) end,
- function (...) onErrorSpy(...) end,
- function () onCompletedSpy() end
- )
- observable:subscribe(observer)
- return onNextSpy, onErrorSpy, onCompletedSpy
- end
- lust.paths['produce'] = {
- 'nothing',
- 'error',
- test = function(observable, ...)
- local args = {...}
- local values
- if type(args[1]) ~= 'table' then
- values = {}
- for i = 1, math.max(#args, 1) do
- table.insert(values, {args[i]})
- end
- else
- values = args[1]
- end
- local onNext, onError, onCompleted = observableSpy(observable)
- expect(observable).to.be.an(Rx.Observable)
- expect(onNext).to.equal(values)
- expect(#onError).to.equal(0)
- expect(#onCompleted).to.equal(1)
- return true
- end
- }
- lust.paths['nothing'] = {
- test = function(observable)
- local onNext, onError, onCompleted = observableSpy(observable)
- expect(observable).to.be.an(Rx.Observable)
- expect(#onNext).to.equal(0)
- expect(#onError).to.equal(0)
- expect(#onCompleted).to.equal(1)
- return true
- end
- }
- lust.paths['error'] = {
- test = function(observable)
- local _, onError = observableSpy(observable)
- expect(observable).to.be.an(Rx.Observable)
- expect(#onError).to.equal(1)
- return true
- end
- }
- table.insert(lust.paths['to'], 'produce')
- if arg[1] then
- arg[1] = arg[1]:gsub('^(tests/)', ''):gsub('%.lua$', '')
- dofile('tests/' .. arg[1] .. '.lua')
- else
- local files = {
- 'observer',
- 'observable',
- 'subscription',
- 'subject',
- 'asyncsubject',
- 'behaviorsubject',
- 'replaysubject'
- }
- for i, file in ipairs(files) do
- dofile('tests/' .. file .. '.lua')
- if next(files, i) then
- print()
- end
- end
- end
- local red = string.char(27) .. '[31m'
- local green = string.char(27) .. '[32m'
- local normal = string.char(27) .. '[0m'
- if lust.errors > 0 then
- io.write(red .. lust.errors .. normal .. ' failed, ')
- end
- print(green .. lust.passes .. normal .. ' passed')
- if lust.errors > 0 then os.exit(1) end
|