1. 13 Sep, 2016 1 commit
  2. 09 Sep, 2016 1 commit
  3. 08 Sep, 2016 1 commit
    • Phil Quitslund's avatar
      Update to Dart `1.20.0-dev.1.0`. (#5689) · d2fda677
      Phil Quitslund authored
      * Udpate to Dart `1.20.0-dev.1.0`.
      
      Udpate to Dart `1.20.0-dev.1.0` and corresponding `analyzer` package.
      
      * Added `--no-packages-dir`.
      
      * Revert extension to master.
      
      * Added ignores.
      
      * Review nits.
      
      * More nits.
      d2fda677
  4. 14 Jul, 2016 1 commit
    • YoungSeok Yoon's avatar
      Flutter driver commands for controlling the Input widget (#4913) · a10cd03b
      YoungSeok Yoon authored
      * Driver commands for controlling the Input widget
      
      This commit introduces two new driver commands for controlling the
      material Input widget.
      
      * setInputText(SerializableFinder finder, String text)
      * submitInputText(SerializableFinder finder)
      
      Since it is not possible to directly modify the Input widget text,
      these driver commands invokes the handler functions of the Input
      widget: onChanged and onSubmitted, respectively. The `submitInputText`
      command returns the submitted String as a result.
      
      * Make input command handler methods private
      
      Addressing comments from @yjbanov.
      a10cd03b
  5. 04 May, 2016 1 commit
  6. 29 Apr, 2016 1 commit
    • Ian Hickson's avatar
      Refactor the test framework (#3622) · 91dd9699
      Ian Hickson authored
      * Refactor widget test framework
      
      Instead of:
      
      ```dart
        test("Card Collection smoke test", () {
          testWidgets((WidgetTester tester) {
      ```
      
      ...you now say:
      
      ```dart
        testWidgets("Card Collection smoke test", (WidgetTester tester) {
      ```
      
      Instead of:
      
      ```dart
        expect(tester, hasWidget(find.text('hello')));
      ```
      
      ...you now say:
      
      ```dart
        expect(find.text('hello'), findsOneWidget);
      ```
      
      Instead of the previous API (exists, widgets, widget, stateOf,
      elementOf, etc), you now have the following comprehensive API. All these
      are functions that take a Finder, except the all* properties.
      
      * `any()` - true if anything matches, c.f. `Iterable.any`
      * `allWidgets` - all the widgets in the tree
      * `widget()` - the one and only widget that matches the finder
      * `firstWidget()` - the first widget that matches the finder
      * `allElements` - all the elements in the tree
      * `element()` - the one and only element that matches the finder
      * `firstElement()` - the first element that matches the finder
      * `allStates` - all the `State`s in the tree
      * `state()` - the one and only state that matches the finder
      * `firstState()` - the first state that matches the finder
      * `allRenderObjects` - all the render objects in the tree
      * `renderObject()` - the one and only render object that matches the finder
      * `firstRenderObject()` - the first render object that matches the finder
      
      There's also `layers' which returns the list of current layers.
      
      `tap`, `fling`, getCenter, getSize, etc, take Finders, like the APIs
      above, and expect there to only be one matching widget.
      
      The finders are:
      
       * `find.text(String text)`
       * `find.widgetWithText(Type widgetType, String text)`
       * `find.byKey(Key key)`
       * `find.byType(Type type)`
       * `find.byElementType(Type type)`
       * `find.byConfig(Widget config)`
       * `find.byWidgetPredicate(WidgetPredicate predicate)`
       * `find.byElementPredicate(ElementPredicate predicate)`
      
      The matchers (for `expect`) are:
      
       * `findsNothing`
       * `findsWidgets`
       * `findsOneWidget`
       * `findsNWidgets(n)`
       * `isOnStage`
       * `isOffStage`
       * `isInCard`
       * `isNotInCard`
      
      Benchmarks now use benchmarkWidgets instead of testWidgets.
      
      Also, for those of you using mockers, `serviceMocker` now automatically
      handles the binding initialization.
      
      This patch also:
      
      * changes how tests are run so that we can more easily swap the logic
        out for a "real" mode instead of FakeAsync.
      
      * introduces CachingIterable.
      
      * changes how flutter_driver interacts with the widget tree to use the
        aforementioned new API rather than ElementTreeTester, which is gone.
      
      * removes ElementTreeTester.
      
      * changes the semantics of a test for scrollables because we couldn't
        convince ourselves that the old semantics made sense; it only worked
        before because flushing the microtasks after every event was broken.
      
      * fixes the flushing of microtasks after every event.
      
      * Reindent the tests
      
      * Fix review comments
      91dd9699
  7. 22 Apr, 2016 1 commit
  8. 21 Apr, 2016 2 commits
  9. 20 Apr, 2016 1 commit
  10. 19 Apr, 2016 2 commits
    • Ian Hickson's avatar
      Refactor service extensions (#3397) · 261923e5
      Ian Hickson authored
      Bindings now have a debugRegisterServiceExtensions() method that is
      invoked in debug mode (only). (Once we have a profile mode, there'll be
      a registerProfileServiceExtensions() method that gets called in that
      mode only to register extensions that apply then.)
      
      The BindingBase class provides convenience methods for registering
      service extensions that do the equivalent of:
      
      ```dart
      void extension() { ... }
      bool extension([bool enabled]) { ... }
      double extension([double extension])  { ... }
      Map<String, String> extension([Map<String, String> parameters]) { ... }
      ```
      
      The BindingBase class also itself registers ext.flutter.reassemble,
      which it has call a function on the binding called
      reassembleApplication().
      
      The Scheduler binding now exposes the preexisting
      ext.flutter.timeDilation.
      
      The Renderer binding now exposes the preexisting ext.flutter.debugPaint.
      
      The Renderer binding hooks reassembleApplication to trigger the
      rendering tree to be reprocessed (in particular, to fix up the
      optimisation closures).
      
      All the logic from rendering/debug.dart about service extensions is
      replaced by the above.
      
      I moved basic_types to foundation.
      
      The FlutterWidgets binding hooks reassembleApplication to trigger the
      widget tree to be entirely rebuilt.
      
      Flutter Driver now uses ext.flutter.driver instead of
      ext.flutter_driver, and is hooked using the same binding mechanism.
      Eventually we'll probably move the logic into the Flutter library so
      that you just get it without having to invoke a special method first.
      261923e5
    • Yegor's avatar
      [driver] "waitFor" command in place of broken "exists" (#3373) · e7657b94
      Yegor authored
      * [driver] "waitFor" command in place of broken "exits"
      
      * [driver] wait using frame callback
      e7657b94
  11. 15 Apr, 2016 1 commit
  12. 08 Apr, 2016 1 commit
  13. 30 Mar, 2016 1 commit
  14. 03 Mar, 2016 2 commits
  15. 01 Mar, 2016 1 commit
  16. 24 Feb, 2016 1 commit
  17. 18 Feb, 2016 1 commit
    • Yegor Jbanov's avatar
      add flutter_driver package · b0e45594
      Yegor Jbanov authored
      This commit contains:
      
      - FlutterDriver API for e2e tests usable in conjunction with package:test
      - FlutterDriverExtension to be enabled by the application in order to
        allow an external agent to connect to it and drive user interactions and
        probe into the element tree
      - initial implementations of tap, findByValueKey and getText commands (to
        be expanded in future PRs)
      b0e45594