                 expect(o).notTo(beNil())
             }
             
+            it("fetches the existing source") {
+                // given
+                let e1 = sut.createEmitter(self.target, propertyName: "name", initValue: 1)
+                
+                // when
+                let e2 = sut.source(self.target, propertyName: "name", initValue: 1)
+                
+                // then
+                expect(e1) == e2
+            }
+            
+            it("creates a new source") {
+                // given
+                let e1 = sut.createEmitter(self.target, propertyName: "name", initValue: 1)
+                
+                // when
+                let e2 = sut.source(self.target, propertyName: "not-name", initValue: 1)
+                
+                // then
+                expect(e1).notTo(equal(e2))
+            }
+            
+            it("creates a new source and calls the initilizer immediately") {
+                // when
+                let e2 = sut.source(self.target, propertyName: "not-name", initValue: 1) {
+                    $0.update(3)
+                }
+                
+                // then
+                expect(e2.value()) == 3
+            }
+            
+            it("creates a property") {
+                // when
+                let o = sut.property(self.target, propertyName: "name", initValue: 1) {
+                    $0.update(4)
+                }
+                
+                // then
+                expect(o.value()) == 4
+            }
         }
         
     }

                expect(o).notTo(beNil())
            }
            
            it("creates an observer") {
                // when
                let o = sut.createObserver(FooReactive(), propertyName: "name", initValue: 1)

*/

class ReactivePropertyGeneratorSpec: QuickSpec {
    let target = FooReactive()

    override func spec() {
        
        describe("basic") {
