       ) where T.Update: AsyncNinjaOptionalAdaptor, T.Update.AsyncNinjaWrapped: Equatable
     {
       testEventsDestination(stream, object: object, keyPathOrGet: keyPathOrGetSet.mapRight { $0.getter },
-                     values: values, file: file, line: line)
+                            values: values, file: file, line: line)
       testEventsSource(stream, object: object, keyPathOrSet: keyPathOrGetSet.mapRight { $0.setter },
-                    values: values, file: file, line: line)
+                       values: values, file: file, line: line)
     }
 
     func testEventsDestination<T: EventsDestination, Object: NSObject>(

        case let .right(setter):
          setter(object, value)
        }

        XCTAssertEqual((updatingIterator.next() as! T.Update?)?.asyncNinjaOptionalValue , value.asyncNinjaOptionalValue, file: file, line: line)
      }
    }
  }

  extension UIImage {
    class func draw(size: CGSize, opaque: Bool = false, scale: CGFloat = 0.0, drawer: (CGContext) -> Void) -> UIImage {
      UIGraphicsBeginImageContextWithOptions(size, opaque, scale);


    func testUIView() {
      let object = UIView()
      testEventsStream(object.rp.alpha,
                       object: object,
                       keyPathOrGetSet: .left("alpha"),
                       values: iOSTests.cgFloatFixture)
      testEventsStream(object.rp.tintColor,
                       object: object,
                       keyPathOrGetSet: .left("tintColor"),
                       values: iOSTests.colorsFiture)
      testEventsStream(object.rp.isHidden,
                       object: object,
                       keyPathOrGetSet: .left("hidden"),
                       values: iOSTests.boolFixture)
      testEventsStream(object.rp.isOpaque,
                       object: object,
                       keyPathOrGetSet: .left("opaque"),
                       values: iOSTests.boolFixture)
      testEventsStream(object.rp.isUserInteractionEnabled,
                       object: object,
                       keyPathOrGetSet: .left("userInteractionEnabled"),
                       values: iOSTests.boolFixture)
    }

    func testUIControl() {
      let object = UIControl()
      testEventsStream(object.rp.isEnabled,
                       object: object,
                       keyPathOrGetSet: .left("enabled"),
                       values: iOSTests.boolFixture)
      testEventsStream(object.rp.isSelected,
                       object: object,
                       keyPathOrGetSet: .left("selected"),
                       values: iOSTests.boolFixture)
    }

    func testUITextField() {
      let object = UITextField()
      let attributedStringsFixture = iOSTests.stringsFixture
        .map { NSAttributedString(string: $0, attributes: object.defaultTextAttributes) }
      testEventsStream(object.rp.text,
                       object: object,
                       keyPathOrGetSet: .left("text"),
                       values: iOSTests.stringsFixture)
      testEventsStream(object.rp.attributedText,
                       object: object,
                       keyPathOrGetSet: .left("attributedText"),
                       values: attributedStringsFixture)
      testEventsStream(object.rp.textColor,
                       object: object,
                       keyPathOrGetSet: .left("textColor"),
                       values: iOSTests.colorsFiture)
      testEventsStream(object.rp.font,
                       object: object,
                       keyPathOrGetSet: .left("font"),
                       values: iOSTests.fontsFiture)
      testEventsStream(object.rp.textAlignment,
                       object: object,
                       keyPathOrGetSet: .right(getter: { $0.textAlignment }, setter: { $0.textAlignment = $1! }),
                       values: iOSTests.textAlignementFixture)
      testEventsStream(object.rp.placeholder,
                       object: object,
                       keyPathOrGetSet: .left("placeholder"),
                       values: iOSTests.stringsAndNilsFixture)
      testEventsStream(object.rp.attributedPlaceholder,
                       object: object,
                       keyPathOrGetSet: .left("attributedPlaceholder"),
                       values: attributedStringsFixture)
      testEventsStream(object.rp.background,
                       object: object,
                       keyPathOrGetSet: .left("background"),
                       values: iOSTests.imagesAndNilsFixture)
      testEventsStream(object.rp.disabledBackground,
                       object: object,
                       keyPathOrGetSet: .left("disabledBackground"),
                       values: iOSTests.imagesAndNilsFixture)
    }

    func testUISearchBar() {
      #if os(iOS)
        let object = UISearchBar()

        testEventsStream(object.rp.barStyle,
                         object: object,
                         keyPathOrGetSet: .right(getter: { $0.barStyle }, setter: { $0.barStyle = $1! }),
                         values: [.default, .default, .black, .black, .default, .black])
        testEventsStream(object.rp.text,
                         object: object,
                         keyPathOrGetSet: .left("text"),
                         values: iOSTests.stringsFixture)
        testEventsStream(object.rp.prompt,
                         object: object,
                         keyPathOrGetSet: .left("prompt"),
                         values: iOSTests.stringsAndNilsFixture)
        testEventsStream(object.rp.placeholder,
                         object: object,
                         keyPathOrGetSet: .left("placeholder"),
                         values: iOSTests.stringsAndNilsFixture)
        testEventsStream(object.rp.showsBookmarkButton,
                         object: object,
                         keyPathOrGetSet: .left("showsBookmarkButton"),
                         values: iOSTests.boolFixture)
        testEventsStream(object.rp.showsCancelButton,
                         object: object,
                         keyPathOrGetSet: .left("showsCancelButton"),
                         values: iOSTests.boolFixture)
        testEventsStream(object.rp.showsSearchResultsButton,
                         object: object,
                         keyPathOrGetSet: .left("showsSearchResultsButton"),
                         values: iOSTests.boolFixture)
        testEventsStream(object.rp.isSearchResultsButtonSelected,
                         object: object,
                         keyPathOrGetSet: .left("searchResultsButtonSelected"),
                         values: iOSTests.boolFixture)
        testEventsStream(object.rp.barTintColor,
                         object: object,
                         keyPathOrGetSet: .left("barTintColor"),
                         values: iOSTests.colorsFiture)
        testEventsStream(object.rp.searchBarStyle,
                         object: object,
                         keyPathOrGetSet: .right(getter: { $0.searchBarStyle }, setter: { $0.searchBarStyle = $1! }),
                         values: [.default, .default, .prominent, .minimal, .minimal, .default])
      #endif
    }

    func testUIImageView() {
      let object = UIImageView()

      testEventsStream(object.rp.image,
                       object: object,
                       keyPathOrGetSet: .left("image"),
                       values: iOSTests.imagesAndNilsFixture)
      testEventsStream(object.rp.highlightedImage,
                       object: object,
                       keyPathOrGetSet: .left("highlightedImage"),
                       values: iOSTests.imagesAndNilsFixture)
      testEventsStream(object.rp.isHighlighted,
                       object: object,
                       keyPathOrGetSet: .left("highlighted"),
                       values: iOSTests.boolFixture)
      //      self.testEventsDestination(updatable: object.rp.animationImages,
      //                                 object: object,
      //                                 keyPath: "animationImages",
      //                                 values: iOSTests.arraysOfImagesAndNilsFixture)
      //      self.testEventsDestination(updatable: object.rp.highlightedAnimationImages,
      //                                 object: object,
      //                                 keyPath: "highlightedAnimationImages",
      //                                 values: iOSTests.arraysOfImagesAndNilsFixture)
      testEventsStream(object.rp.animationDuration,
                       object: object,
                       keyPathOrGetSet: .left("animationDuration"),
                       values: iOSTests.timeIntervalFixture)
      testEventsStream(object.rp.animationRepeatCount,
                       object: object,
                       keyPathOrGetSet: .left("animationRepeatCount"),
                       values: iOSTests.intFixture)
      //      self.testEventsDestination(updatable: object.rp.isAnimating,
      //                                 object: object,
      //                                 keyPath: "animating",
      //                                 values: iOSTests.boolFixture,
      //                                 customGetter: { $0.isAnimating },
      //                                 customSetter:
      //        {
      //          if let newValue = $1 {
      //            if newValue {
      //              $0.startAnimating()
      //            } else {
      //              $0.stopAnimating()
      //            }
      //          }
      //      })
    }

    func testUIButton() {
