From 72e3e0c2d67933502ffb5192b69b68b16b1447e8 Mon Sep 17 00:00:00 2001 From: "Jay.Udey" Date: Mon, 27 Apr 2015 15:10:20 -0500 Subject: [PATCH 1/2] adding native events --- lib/react_test_utils.dart | 16 ++++++++++++++++ test/react_test_utils_test.dart | 2 ++ 2 files changed, 18 insertions(+) diff --git a/lib/react_test_utils.dart b/lib/react_test_utils.dart index 35fe15e3..9d11f9a3 100644 --- a/lib/react_test_utils.dart +++ b/lib/react_test_utils.dart @@ -16,6 +16,8 @@ JsObject _TestUtils = _getNestedJsObject( JsObject _Simulate = _TestUtils['Simulate']; +JsObject _SimulateNative = _TestUtils['SimulateNative']; + _getNestedJsObject( JsObject base, List keys, [String errorIfNotFound='']) { JsObject object = base; @@ -150,6 +152,20 @@ class Simulate { } +/// Native event simulation interface. +/// +/// Provides methods that allow for simulation of mouseEnter and mouseLeave + +class SimulateNative { + + static void mouseOut(JsObject element, [Map eventData = const{}]) => + _SimulateNative.callMethod('mouseOut', [element, new JsObject.jsify(eventData)]); + + static void mouseOver(JsObject element, [Map eventData = const{}]) => + _SimulateNative.callMethod('mouseOver', [element, new JsObject.jsify(eventData)]); + +} + /// Traverse all components in tree and accumulate all components where /// test(component) is true. This is not that useful on its own, but it's /// used as a primitive for other test utils diff --git a/test/react_test_utils_test.dart b/test/react_test_utils_test.dart index 8e84103e..8de70b4e 100644 --- a/test/react_test_utils_test.dart +++ b/test/react_test_utils_test.dart @@ -61,7 +61,9 @@ void main() { test('mouseDown', () => testEvent(Simulate.mouseDown, 'mouseDown')); test('mouseMove', () => testEvent(Simulate.mouseMove, 'mouseMove')); test('mouseOut', () => testEvent(Simulate.mouseOut, 'mouseOut')); + test('mouseOut native', () => testEvent(SimulateNative.mouseOut, 'mouseOut')); test('mouseOver', () => testEvent(Simulate.mouseOver, 'mouseOver')); + test('mouseOver native', () => testEvent(SimulateNative.mouseOver, 'mouseOver')); test('mouseUp', () => testEvent(Simulate.mouseUp, 'mouseUp')); test('paste', () => testEvent(Simulate.paste, 'paste')); test('scroll', () => testEvent(Simulate.scroll, 'scroll')); From cb8b0487ab594c99708f84c81ac81902e60cd3bd Mon Sep 17 00:00:00 2001 From: "Jay.Udey" Date: Thu, 30 Apr 2015 13:36:49 -0500 Subject: [PATCH 2/2] adding additional native event support --- lib/react_test_utils.dart | 94 ++++++++++++++++++++++++++++++++- test/react_test_utils_test.dart | 40 +++++++++++++- 2 files changed, 131 insertions(+), 3 deletions(-) diff --git a/lib/react_test_utils.dart b/lib/react_test_utils.dart index 9d11f9a3..f569fb68 100644 --- a/lib/react_test_utils.dart +++ b/lib/react_test_utils.dart @@ -154,16 +154,108 @@ class Simulate { /// Native event simulation interface. /// -/// Provides methods that allow for simulation of mouseEnter and mouseLeave +/// Current implementation does not support change and keyPress native events +/// +/// Provides methods for each type of event that can be handled by a React +/// component. All methods are used in the same way: +/// +/// SimulateNative.{eventName}([JsObject] element, [Map] eventData) class SimulateNative { + static void blur(JsObject element, [Map eventData = const{}]) => + _SimulateNative.callMethod('blur', [element, new JsObject.jsify(eventData)]); + + static void click(JsObject element, [Map eventData = const{}]) => + _SimulateNative.callMethod('click', [element, new JsObject.jsify(eventData)]); + + static void contextMenu(JsObject element, [Map eventData = const{}]) => + _SimulateNative.callMethod('contextMenu', [element, new JsObject.jsify(eventData)]); + + static void copy(JsObject element, [Map eventData = const{}]) => + _SimulateNative.callMethod('copy', [element, new JsObject.jsify(eventData)]); + + static void cut(JsObject element, [Map eventData = const{}]) => + _SimulateNative.callMethod('cut', [element, new JsObject.jsify(eventData)]); + + static void doubleClick(JsObject element, [Map eventData = const{}]) => + _SimulateNative.callMethod('doubleClick', [element, new JsObject.jsify(eventData)]); + + static void drag(JsObject element, [Map eventData = const{}]) => + _SimulateNative.callMethod('drag', [element, new JsObject.jsify(eventData)]); + + static void dragEnd(JsObject element, [Map eventData = const{}]) => + _SimulateNative.callMethod('dragEnd', [element, new JsObject.jsify(eventData)]); + + static void dragEnter(JsObject element, [Map eventData = const{}]) => + _SimulateNative.callMethod('dragEnter', [element, new JsObject.jsify(eventData)]); + + static void dragExit(JsObject element, [Map eventData = const{}]) => + _SimulateNative.callMethod('dragExit', [element, new JsObject.jsify(eventData)]); + + static void dragLeave(JsObject element, [Map eventData = const{}]) => + _SimulateNative.callMethod('dragLeave', [element, new JsObject.jsify(eventData)]); + + static void dragOver(JsObject element, [Map eventData = const{}]) => + _SimulateNative.callMethod('dragOver', [element, new JsObject.jsify(eventData)]); + + static void dragStart(JsObject element, [Map eventData = const{}]) => + _SimulateNative.callMethod('dragStart', [element, new JsObject.jsify(eventData)]); + + static void drop(JsObject element, [Map eventData = const{}]) => + _SimulateNative.callMethod('drop', [element, new JsObject.jsify(eventData)]); + + static void focus(JsObject element, [Map eventData = const{}]) => + _SimulateNative.callMethod('focus', [element, new JsObject.jsify(eventData)]); + + static void input(JsObject element, [Map eventData = const{}]) => + _SimulateNative.callMethod('input', [element, new JsObject.jsify(eventData)]); + + static void keyDown(JsObject element, [Map eventData = const{}]) => + _SimulateNative.callMethod('keyDown', [element, new JsObject.jsify(eventData)]); + + static void keyUp(JsObject element, [Map eventData = const{}]) => + _SimulateNative.callMethod('keyUp', [element, new JsObject.jsify(eventData)]); + + static void mouseDown(JsObject element, [Map eventData = const{}]) => + _SimulateNative.callMethod('mouseDown', [element, new JsObject.jsify(eventData)]); + + static void mouseMove(JsObject element, [Map eventData = const{}]) => + _SimulateNative.callMethod('mouseMove', [element, new JsObject.jsify(eventData)]); + static void mouseOut(JsObject element, [Map eventData = const{}]) => _SimulateNative.callMethod('mouseOut', [element, new JsObject.jsify(eventData)]); static void mouseOver(JsObject element, [Map eventData = const{}]) => _SimulateNative.callMethod('mouseOver', [element, new JsObject.jsify(eventData)]); + static void mouseUp(JsObject element, [Map eventData = const{}]) => + _SimulateNative.callMethod('mouseUp', [element, new JsObject.jsify(eventData)]); + + static void paste(JsObject element, [Map eventData = const{}]) => + _SimulateNative.callMethod('paste', [element, new JsObject.jsify(eventData)]); + + static void scroll(JsObject element, [Map eventData = const{}]) => + _SimulateNative.callMethod('scroll', [element, new JsObject.jsify(eventData)]); + + static void submit(JsObject element, [Map eventData = const{}]) => + _SimulateNative.callMethod('submit', [element, new JsObject.jsify(eventData)]); + + static void touchCancel(JsObject element, [Map eventData = const{}]) => + _SimulateNative.callMethod('touchCancel', [element, new JsObject.jsify(eventData)]); + + static void touchEnd(JsObject element, [Map eventData = const{}]) => + _SimulateNative.callMethod('touchEnd', [element, new JsObject.jsify(eventData)]); + + static void touchMove(JsObject element, [Map eventData = const{}]) => + _SimulateNative.callMethod('touchMove', [element, new JsObject.jsify(eventData)]); + + static void touchStart(JsObject element, [Map eventData = const{}]) => + _SimulateNative.callMethod('touchStart', [element, new JsObject.jsify(eventData)]); + + static void wheel(JsObject element, [Map eventData = const{}]) => + _SimulateNative.callMethod('wheel', [element, new JsObject.jsify(eventData)]); + } /// Traverse all components in tree and accumulate all components where diff --git a/test/react_test_utils_test.dart b/test/react_test_utils_test.dart index 8de70b4e..7b7f62b7 100644 --- a/test/react_test_utils_test.dart +++ b/test/react_test_utils_test.dart @@ -61,9 +61,7 @@ void main() { test('mouseDown', () => testEvent(Simulate.mouseDown, 'mouseDown')); test('mouseMove', () => testEvent(Simulate.mouseMove, 'mouseMove')); test('mouseOut', () => testEvent(Simulate.mouseOut, 'mouseOut')); - test('mouseOut native', () => testEvent(SimulateNative.mouseOut, 'mouseOut')); test('mouseOver', () => testEvent(Simulate.mouseOver, 'mouseOver')); - test('mouseOver native', () => testEvent(SimulateNative.mouseOver, 'mouseOver')); test('mouseUp', () => testEvent(Simulate.mouseUp, 'mouseUp')); test('paste', () => testEvent(Simulate.paste, 'paste')); test('scroll', () => testEvent(Simulate.scroll, 'scroll')); @@ -75,6 +73,44 @@ void main() { test('wheel', () => testEvent(Simulate.wheel, 'wheel')); }); + group('Simulate native event', () { + tearDown(() { + component = null; + domNode = null; + }); + + test('blur', () => testEvent(SimulateNative.blur, 'blur')); + test('click', () => testEvent(SimulateNative.click, 'click')); + test('copy', () => testEvent(SimulateNative.copy, 'copy')); + test('cut', () => testEvent(SimulateNative.cut, 'cut')); + test('doubleClick', () => testEvent(SimulateNative.doubleClick, 'doubleClick')); + test('drag', () => testEvent(SimulateNative.drag, 'drag')); + test('dragEnd', () => testEvent(SimulateNative.dragEnd, 'dragEnd')); + test('dragEnter', () => testEvent(SimulateNative.dragEnter, 'dragEnter')); + test('dragExit', () => testEvent(SimulateNative.dragExit, 'dragExit')); + test('dragLeave', () => testEvent(SimulateNative.dragLeave, 'dragLeave')); + test('dragOver', () => testEvent(SimulateNative.dragOver, 'dragOver')); + test('dragStart', () => testEvent(SimulateNative.dragStart, 'dragStart')); + test('drop', () => testEvent(SimulateNative.drop, 'drop')); + test('focus', () => testEvent(SimulateNative.focus, 'focus')); + test('input', () => testEvent(SimulateNative.input, 'input')); + test('keyDown', () => testEvent(SimulateNative.keyDown, 'keyDown')); + test('keyUp', () => testEvent(SimulateNative.keyUp, 'keyUp')); + test('mouseDown', () => testEvent(SimulateNative.mouseDown, 'mouseDown')); + test('mouseMove', () => testEvent(SimulateNative.mouseMove, 'mouseMove')); + test('mouseOut', () => testEvent(SimulateNative.mouseOut, 'mouseOut')); + test('mouseOver', () => testEvent(SimulateNative.mouseOver, 'mouseOver')); + test('mouseUp', () => testEvent(SimulateNative.mouseUp, 'mouseUp')); + test('paste', () => testEvent(SimulateNative.paste, 'paste')); + test('scroll', () => testEvent(SimulateNative.scroll, 'scroll')); + test('submit', () => testEvent(SimulateNative.submit, 'submit')); + test('touchCancel', () => testEvent(SimulateNative.touchCancel, 'touchCancel')); + test('touchEnd', () => testEvent(SimulateNative.touchEnd, 'touchEnd')); + test('touchMove', () => testEvent(SimulateNative.touchMove, 'touchMove')); + test('touchStart', () => testEvent(SimulateNative.touchStart, 'touchStart')); + test('wheel', () => testEvent(SimulateNative.wheel, 'wheel')); + }); + test('findRenderedDOMComponentWithClass', () { component = renderIntoDocument(sampleComponent({})); var spanComponent = findRenderedDOMComponentWithClass(component, 'span1');