All Downloads are FREE. Search and download functionalities are using the official Maven repository.

japgolly.scalajs.react.test.Simulation.scala Maven / Gradle / Ivy

The newest version!
package japgolly.scalajs.react.test

import scala.scalajs.js.Object
import ReactTestUtils.Simulate

/**
 * Allows composition and abstraction of `ReactTestUtils.Simulate` procedures.
 */
class Simulation(_run: (() => ReactOrDomNode) => Unit) {

  def run(n: => ReactOrDomNode): Unit =
    _run(() => n)

  def andThen(f: Simulation) =
    new Simulation(n => { _run(n); f.run(n()) })

  @inline final def >>     (f: Simulation) = this andThen f
  @inline final def compose(f: Simulation) = f andThen this

  final def runN(cs: ReactOrDomNode*): Unit =
    cs foreach (run(_))
}

object Simulation {

  def apply(run: (=> ReactOrDomNode) => Unit): Simulation =
    new Simulation(n => run(n()))

  // Don't use default arguments - they force parentheses on to caller.
  // Eg. Simulation.blur >> Simulation.focus becomes Simulation.blur() >> Simulation.focus(). Yuk.

  def beforeInput      = Simulation(Simulate.beforeInput      (_))
  def blur             = Simulation(Simulate.blur             (_))
  def change           = Simulation(Simulate.change           (_))
  def click            = Simulation(Simulate.click            (_, MouseEventData()))
  def compositionEnd   = Simulation(Simulate.compositionEnd   (_))
  def compositionStart = Simulation(Simulate.compositionStart (_))
  def compositionUpdate= Simulation(Simulate.compositionUpdate(_))
  def contextMenu      = Simulation(Simulate.contextMenu      (_))
  def copy             = Simulation(Simulate.copy             (_))
  def cut              = Simulation(Simulate.cut              (_))
  def doubleClick      = Simulation(Simulate.doubleClick      (_, MouseEventData()))
  def drag             = Simulation(Simulate.drag             (_, MouseEventData()))
  def dragEnd          = Simulation(Simulate.dragEnd          (_, MouseEventData()))
  def dragEnter        = Simulation(Simulate.dragEnter        (_, MouseEventData()))
  def dragExit         = Simulation(Simulate.dragExit         (_, MouseEventData()))
  def dragLeave        = Simulation(Simulate.dragLeave        (_, MouseEventData()))
  def dragOver         = Simulation(Simulate.dragOver         (_, MouseEventData()))
  def dragStart        = Simulation(Simulate.dragStart        (_, MouseEventData()))
  def drop             = Simulation(Simulate.drop             (_, MouseEventData()))
  def error            = Simulation(Simulate.error            (_))
  def focus            = Simulation(Simulate.focus            (_))
  def input            = Simulation(Simulate.input            (_))
  def keyDown          = Simulation(Simulate.keyDown          (_, KeyboardEventData()))
  def keyPress         = Simulation(Simulate.keyPress         (_, KeyboardEventData()))
  def keyUp            = Simulation(Simulate.keyUp            (_, KeyboardEventData()))
  def load             = Simulation(Simulate.load             (_))
  def mouseDown        = Simulation(Simulate.mouseDown        (_, MouseEventData()))
  def mouseEnter       = Simulation(Simulate.mouseEnter       (_, MouseEventData()))
  def mouseLeave       = Simulation(Simulate.mouseLeave       (_, MouseEventData()))
  def mouseMove        = Simulation(Simulate.mouseMove        (_, MouseEventData()))
  def mouseOut         = Simulation(Simulate.mouseOut         (_, MouseEventData()))
  def mouseOver        = Simulation(Simulate.mouseOver        (_, MouseEventData()))
  def mouseUp          = Simulation(Simulate.mouseUp          (_, MouseEventData()))
  def paste            = Simulation(Simulate.paste            (_))
  def reset            = Simulation(Simulate.reset            (_))
  def scroll           = Simulation(Simulate.scroll           (_))
  def select           = Simulation(Simulate.select           (_))
  def submit           = Simulation(Simulate.submit           (_))
  def touchCancel      = Simulation(Simulate.touchCancel      (_))
  def touchEnd         = Simulation(Simulate.touchEnd         (_))
  def touchMove        = Simulation(Simulate.touchMove        (_))
  def touchStart       = Simulation(Simulate.touchStart       (_))
  def wheel            = Simulation(Simulate.wheel            (_))

  def beforeInput      (eventData: Object) = Simulation(Simulate.beforeInput      (_, eventData))
  def blur             (eventData: Object) = Simulation(Simulate.blur             (_, eventData))
  def change           (eventData: Object) = Simulation(Simulate.change           (_, eventData))
  def click            (eventData: Object) = Simulation(Simulate.click            (_, eventData))
  def compositionEnd   (eventData: Object) = Simulation(Simulate.compositionEnd   (_, eventData))
  def compositionStart (eventData: Object) = Simulation(Simulate.compositionStart (_, eventData))
  def compositionUpdate(eventData: Object) = Simulation(Simulate.compositionUpdate(_, eventData))
  def contextMenu      (eventData: Object) = Simulation(Simulate.contextMenu      (_, eventData))
  def copy             (eventData: Object) = Simulation(Simulate.copy             (_, eventData))
  def cut              (eventData: Object) = Simulation(Simulate.cut              (_, eventData))
  def doubleClick      (eventData: Object) = Simulation(Simulate.doubleClick      (_, eventData))
  def drag             (eventData: Object) = Simulation(Simulate.drag             (_, eventData))
  def dragEnd          (eventData: Object) = Simulation(Simulate.dragEnd          (_, eventData))
  def dragEnter        (eventData: Object) = Simulation(Simulate.dragEnter        (_, eventData))
  def dragExit         (eventData: Object) = Simulation(Simulate.dragExit         (_, eventData))
  def dragLeave        (eventData: Object) = Simulation(Simulate.dragLeave        (_, eventData))
  def dragOver         (eventData: Object) = Simulation(Simulate.dragOver         (_, eventData))
  def dragStart        (eventData: Object) = Simulation(Simulate.dragStart        (_, eventData))
  def drop             (eventData: Object) = Simulation(Simulate.drop             (_, eventData))
  def error            (eventData: Object) = Simulation(Simulate.error            (_, eventData))
  def focus            (eventData: Object) = Simulation(Simulate.focus            (_, eventData))
  def input            (eventData: Object) = Simulation(Simulate.input            (_, eventData))
  def keyDown          (eventData: Object) = Simulation(Simulate.keyDown          (_, eventData))
  def keyPress         (eventData: Object) = Simulation(Simulate.keyPress         (_, eventData))
  def keyUp            (eventData: Object) = Simulation(Simulate.keyUp            (_, eventData))
  def load             (eventData: Object) = Simulation(Simulate.load             (_, eventData))
  def mouseDown        (eventData: Object) = Simulation(Simulate.mouseDown        (_, eventData))
  def mouseEnter       (eventData: Object) = Simulation(Simulate.mouseEnter       (_, eventData))
  def mouseLeave       (eventData: Object) = Simulation(Simulate.mouseLeave       (_, eventData))
  def mouseMove        (eventData: Object) = Simulation(Simulate.mouseMove        (_, eventData))
  def mouseOut         (eventData: Object) = Simulation(Simulate.mouseOut         (_, eventData))
  def mouseOver        (eventData: Object) = Simulation(Simulate.mouseOver        (_, eventData))
  def mouseUp          (eventData: Object) = Simulation(Simulate.mouseUp          (_, eventData))
  def paste            (eventData: Object) = Simulation(Simulate.paste            (_, eventData))
  def reset            (eventData: Object) = Simulation(Simulate.reset            (_, eventData))
  def scroll           (eventData: Object) = Simulation(Simulate.scroll           (_, eventData))
  def select           (eventData: Object) = Simulation(Simulate.select           (_, eventData))
  def submit           (eventData: Object) = Simulation(Simulate.submit           (_, eventData))
  def touchCancel      (eventData: Object) = Simulation(Simulate.touchCancel      (_, eventData))
  def touchEnd         (eventData: Object) = Simulation(Simulate.touchEnd         (_, eventData))
  def touchMove        (eventData: Object) = Simulation(Simulate.touchMove        (_, eventData))
  def touchStart       (eventData: Object) = Simulation(Simulate.touchStart       (_, eventData))
  def wheel            (eventData: Object) = Simulation(Simulate.wheel            (_, eventData))

  // Helpers for common scenarios

  def focusSimBlur(s: Simulation) =
    focus >> s >> blur

  def focusChangeBlur(newValue: String) =
    focusSimBlur(ChangeEventData(value = newValue).simulation)
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy