浏览代码

Test Observable.last;

bjorn 10 年之前
父节点
当前提交
ccf0df002f
共有 3 个文件被更改,包括 26 次插入1 次删除
  1. 6 1
      rx.lua
  2. 19 0
      tests/last.lua
  3. 1 0
      tests/observable.lua

+ 6 - 1
rx.lua

@@ -397,9 +397,11 @@ end
 function Observable:last()
   return Observable.create(function(observer)
     local value
+    local empty = true
 
     local function onNext(...)
       value = {...}
+      empty = false
     end
 
     local function onError(e)
@@ -407,7 +409,10 @@ function Observable:last()
     end
 
     local function onComplete()
-      observer:onNext(unpack(value or {}))
+      if not empty then
+        observer:onNext(unpack(value or {}))
+      end
+
       return observer:onComplete()
     end
 

+ 19 - 0
tests/last.lua

@@ -0,0 +1,19 @@
+describe('last', function()
+  it('produces an error if its parent errors', function()
+    local observable = Rx.Observable.fromValue(''):map(function(x) return x() end)
+    expect(observable.subscribe).to.fail()
+    expect(observable:last().subscribe).to.fail()
+  end)
+
+  it('produces no elements if its parent produces no elements', function()
+    local observable = Rx.Observable.create(function(observer) return observer:onComplete() end):last()
+    expect(observable).to.produce({})
+  end)
+
+  it('produces the last element of its parent and immediately completes', function()
+    local observable = Rx.Observable.fromRange(5):last()
+    expect(observable).to.produce(5)
+  end)
+end)
+
+

+ 1 - 0
tests/observable.lua

@@ -159,4 +159,5 @@ describe('Observable', function()
   dofile('tests/find.lua')
   dofile('tests/first.lua')
   dofile('tests/flatten.lua')
+  dofile('tests/last.lua')
 end)