소스 검색

Observer tests;

bjorn 10 년 전
부모
커밋
ee98e897a3
3개의 변경된 파일56개의 추가작업 그리고 21개의 파일을 삭제
  1. 5 4
      tests/lust.lua
  2. 50 16
      tests/observer.lua
  3. 1 1
      tests/runner.lua

+ 5 - 4
tests/lust.lua

@@ -78,14 +78,14 @@ end
 
 local paths = {
   [''] = {'to', 'to_not'},
-  to = {'have', 'equal', 'be', 'exist'},
-  to_not = {'have', 'equal', 'be', 'exist', chain = function(a) a.negate = not a.negate end},
+  to = {'have', 'equal', 'be', 'exist', 'fail'},
+  to_not = {'have', 'equal', 'be', 'exist', 'fail', chain = function(a) a.negate = not a.negate end},
   be = {'a', 'an', 'truthy', 'falsy', f = function(v, x)
     return v == x, tostring(v) .. ' and ' .. tostring(x) .. ' are not equal'
   end},
   a = {f = isa},
   an = {f = isa},
-  exist = {f = function(v) return v == nil, tostring(v) .. ' is nil' end},
+  exist = {f = function(v) return v ~= nil, tostring(v) .. ' is nil' end},
   truthy = {f = function(v) return v, tostring(v) .. ' is not truthy' end},
   falsy = {f = function(v) return not v, tostring(v) .. ' is not falsy' end},
   equal = {f = function(v, x) return strict_eq(v, x), tostring(v) .. ' and ' .. tostring(x) .. ' are not strictly equal' end},
@@ -94,7 +94,8 @@ local paths = {
       if type(v) ~= 'table' then return false, 'table "' .. tostring(v) .. '" is not a table' end
       return has(v, x), 'table "' .. tostring(v) .. '" does not have ' .. tostring(x)
     end
-  }
+  },
+  fail = {f = function(v) return not pcall(v), tostring(v) .. ' did not fail' end}
 }
 
 function lust.expect(v)

+ 50 - 16
tests/observer.lua

@@ -21,37 +21,71 @@ describe('Observer', function()
     end)
   end)
 
-  describe('.onNext', function()
+  describe('onNext', function()
     it('calls _onNext', function()
       local observer = Rx.Observer.create()
       local function run() observer:onNext() end
-      local calls = spy(observer, '_onNext', run)
-      expect(#calls).to.equal(1)
+      expect(#spy(observer, '_onNext', run)).to.equal(1)
     end)
 
     it('passes all arguments to _onNext', function()
       local observer = Rx.Observer.create()
       local function run() observer:onNext(1, '2', 3, nil, 5) end
-      local calls = spy(observer, '_onNext', run)
-      expect(calls).to.equal({{1, '2', 3, nil, 5}})
+      expect(spy(observer, '_onNext', run)).to.equal({{1, '2', 3, nil, 5}})
     end)
 
-    it('does not call _onNext if onComplete has been called', function()
+    it('does not call _onNext if stopped is true', function()
       local observer = Rx.Observer.create()
-      local function run()
-        observer:onComplete()
-        observer:onNext()
-      end
+      observer.stopped = true
+      local function run() observer:onNext() end
       expect(#spy(observer, '_onNext', run)).to.equal(0)
     end)
+  end)
 
-    it('does not call _onNext if onError has been called', function()
+  describe('onError', function()
+    it('calls _onError with the first argument it was passed', function()
       local observer = Rx.Observer.create(_, function() end, _)
-      local function run()
-        observer:onError()
-        observer:onNext()
-      end
-      expect(#spy(observer, '_onNext', run)).to.equal(0)
+      local function run() observer:onError('sheeit', 1) end
+      expect(spy(observer, '_onError', run)).to.equal({{'sheeit'}})
+    end)
+
+    it('sets stopped to true', function()
+      local observer = Rx.Observer.create(_, function() end, _)
+      observer:onError()
+      expect(observer.stopped).to.equal(true)
+    end)
+
+    it('does not call _onError if stopped is already true', function()
+      local observer = Rx.Observer.create(_, function() end, _)
+      observer.stopped = true
+      local function run() observer:onError() end
+      expect(#spy(observer, '_onError', run)).to.equal(0)
+    end)
+
+    it('causes an error by default', function()
+      local observer = Rx.Observer.create()
+      expect(observer.onError).to.fail()
+    end)
+  end)
+
+  describe('onComplete', function()
+    it('calls _onComplete with no arguments', function()
+      local observer = Rx.Observer.create()
+      local function run() observer:onComplete(1, 2, 3) end
+      expect(spy(observer, '_onComplete', run)).to.equal({{}})
+    end)
+
+    it('sets stopped to true', function()
+      local observer = Rx.Observer.create()
+      observer:onComplete()
+      expect(observer.stopped).to.equal(true)
+    end)
+
+    it('does not call _onComplete if stopped is already true', function()
+      local observer = Rx.Observer.create()
+      observer.stopped = true
+      local function run() observer:onComplete() end
+      expect(#spy(observer, '_onComplete', run)).to.equal(0)
     end)
   end)
 end)

+ 1 - 1
tests/runner.lua

@@ -1,7 +1,7 @@
 lust = require 'tests/lust'
 Rx = require 'rx'
 
-for _, fn in pairs({'describe', 'it', 'test', 'expect', 'spy'}) do
+for _, fn in pairs({'describe', 'it', 'test', 'expect', 'spy', 'before', 'after'}) do
   _G[fn] = lust[fn]
 end