1. 22 Aug, 2017 1 commit
    • Carlo Bernaschina's avatar
      Add log to understand flakiness of commands_test (#11720) · a8aff388
      Carlo Bernaschina authored
      The flakiness of commands_test is generally visible via:
      
      ```
      drive:stdout:   Expected: 'log: paint'
      drive:stdout:     Actual: ''
      drive:stdout:      Which: is different. Both strings start the same, but the actual value is missing the following trailing characters: log: paint ...
      ```
      
      By returning the name of the test we will be able to understand if
      another test is running by reading the `Actual` value
      a8aff388
  2. 01 Aug, 2017 2 commits
  3. 28 Jul, 2017 1 commit
  4. 21 Jul, 2017 1 commit
    • Ian Hickson's avatar
      Add documentation and clean up code. (#11330) · 8f56f6fd
      Ian Hickson authored
      Mainly, this adds documentation to members that were previously
      lacking documentation.
      
      It also adds a big block of documentation about improving performance
      of widgets.
      
      This also removes some references to package:collection and adds
      global setEquals and listEquals methods in foundation that we can use.
      (setEquals in particular should be much faster than the
      package:collection equivalent, though both should be faster as they
      avoid allocating new objects.) All remaining references now qualify
      the import so we know what our remaining dependencies are.
      
      Also lots of code reordering in Flutter driver to make the code
      consistent and apply the style guide more thoroughly.
      8f56f6fd
  5. 19 Jul, 2017 1 commit
  6. 23 Jun, 2017 1 commit
    • Ian Hickson's avatar
      Deep linking: automatically push the route hiearchy on load. (#10894) · 9adb4a78
      Ian Hickson authored
      The main purpose of this PR is to make it so that when you set the
      initial route and it's a hierarchical route (e.g. `/a/b/c`), it
      implies multiple pushes, one for each step of the route (so in that
      case, `/`, `/a`, `/a/b`, and `/a/b/c`, in that order). If any of those
      routes don't exist, it falls back to '/'.
      
      As part of doing that, I:
      
       * Changed the default for MaterialApp.initialRoute to honor the
         actual initial route.
      
       * Added a MaterialApp.onUnknownRoute for handling bad routes.
      
       * Added a feature to flutter_driver that allows the host test script
         and the device test app to communicate.
      
       * Added a test to make sure `flutter drive --route` works.
         (Hopefully that will also prove `flutter run --route` works, though
         this isn't testing the `flutter` tool's side of that. My main
         concern is over whether the engine side works.)
      
       * Fixed `flutter drive` to output the right target file name.
      
       * Changed how the stocks app represents its data, so that we can
         show a page for a stock before we know if it exists.
      
       * Made it possible to show a stock page that doesn't exist. It shows
         a progress indicator if we're loading the data, or else shows a
         message saying it doesn't exist.
      
       * Changed the pathing structure of routes in stocks to work more
         sanely.
      
       * Made search in the stocks app actually work (before it only worked
         if we happened to accidentally trigger a rebuild). Added a test.
      
       * Replaced some custom code in the stocks app with a BackButton.
      
       * Added a "color" feature to BackButton to support the stocks use case.
      
       * Spaced out the ErrorWidget text a bit more.
      
       * Added `RouteSettings.copyWith`, which I ended up not using.
      
       * Improved the error messages around routing.
      
      While I was in some files I made a few formatting fixes, fixed some
      code health issues, and also removed `flaky: true` from some devicelab
      tests that have been stable for a while. Also added some documentation
      here and there.
      9adb4a78
  7. 13 Jun, 2017 1 commit
  8. 09 Jun, 2017 1 commit
  9. 05 May, 2017 1 commit
  10. 12 Apr, 2017 1 commit
    • Ian Hickson's avatar
      Move Point to Offset (#9277) · bf017b79
      Ian Hickson authored
      * Manually fix every use of Point.x and Point.y
      
      Some of these were moved to dx/dy, but not all.
      
      * Manually convert uses of the old gradient API
      
      * Remove old reference to Point.
      
      * Mechanical changes
      
      I applied the following at the root of the Flutter repository:
      
      git ls-files -z | xargs -0 sed -i 's/\bPoint[.]origin\b/Offset.zero/g'
      git ls-files -z | xargs -0 sed -i 's/\bPoint[.]lerp\b/Offset.lerp/g'
      git ls-files -z | xargs -0 sed -i 's/\bnew Point\b/new Offset/g'
      git ls-files -z | xargs -0 sed -i 's/\bconst Point\b/const Offset/g'
      git ls-files -z | xargs -0 sed -i 's/\bstatic Point /static Offset /g'
      git ls-files -z | xargs -0 sed -i 's/\bfinal Point /final Offset /g'
      git ls-files -z | xargs -0 sed -i 's/^\( *\)Point /\1Offset /g'
      git ls-files -z | xargs -0 sed -i 's/ui[.]Point\b/ui.Offset/g'
      git ls-files -z | xargs -0 sed -i 's/(Point\b/(Offset/g'
      git ls-files -z | xargs -0 sed -i 's/\([[{,]\) Point\b/\1 Offset/g'
      git ls-files -z | xargs -0 sed -i 's/@required Point\b/@required Offset/g'
      git ls-files -z | xargs -0 sed -i 's/<Point>/<Offset>/g'
      git ls-files -z | xargs -0 sed -i 's/[.]toOffset()//g'
      git ls-files -z | xargs -0 sed -i 's/[.]toPoint()//g'
      git ls-files -z | xargs -0 sed -i 's/\bshow Point, /show /g'
      git ls-files -z | xargs -0 sed -i 's/\bshow Point;/show Offset;/g'
      
      * Mechanical changes - dartdocs
      
      I applied the following at the root of the Flutter repository:
      
      git ls-files -z | xargs -0 sed -i 's/\ba \[Point\]/an [Offset]/g'
      git ls-files -z | xargs -0 sed -i 's/\[Point\]/[Offset]/g'
      
      * Further improvements and a test
      
      * Fix minor errors from rebasing...
      
      * Roll engine
      bf017b79
  11. 11 Apr, 2017 1 commit
    • xster's avatar
      Rename State.config to widget everywhere (#9273) · 89a7fdfc
      xster authored
      Rename State.config to State.widget
      Rename State.didUpdateConfig to State.didUpdateWidget
      Renamed all State subclasses' local variables named config to something else
      89a7fdfc
  12. 02 Apr, 2017 1 commit
    • Adam Barth's avatar
      Rationalize text input widgets (#9119) · ae899486
      Adam Barth authored
      After this patch, there are three major text input widgets:
      
       * EditableText. This widget is a low-level editing control that
         interacts with the IME and displays a blinking cursor.
      
       * TextField. This widget is a Material Design text field, with all the
         bells and whistles. It is highly configurable and can be reduced down
         to a fairly simple control by setting its `decoration` property to
         null.
      
       * TextFormField. This widget is a FormField that wraps a TextField.
      
      This patch also replaces the InputValue data model for these widgets
      with a Listenable TextEditingController, which is much more flexible.
      
      Fixes #7031
      ae899486
  13. 04 Mar, 2017 1 commit
  14. 28 Feb, 2017 1 commit
  15. 23 Feb, 2017 1 commit
  16. 17 Feb, 2017 2 commits
    • Adam Barth's avatar
      Two becomes one (#8253) · e0b12ca1
      Adam Barth authored
      Rename all the "2" classes related to scrolling to remove the "2". Now that the
      old scrolling code is gone, we don't need to use the suffix.
      e0b12ca1
    • Adam Barth's avatar
      Remove Scrollable1 (#8225) · 90574b04
      Adam Barth authored
      All the clients have migrated to Scrollable2.
      90574b04
  17. 09 Feb, 2017 1 commit
  18. 08 Feb, 2017 1 commit
  19. 31 Jan, 2017 2 commits
  20. 13 Jan, 2017 2 commits
  21. 11 Jan, 2017 2 commits
  22. 09 Jan, 2017 1 commit
  23. 28 Nov, 2016 1 commit
  24. 08 Nov, 2016 1 commit
  25. 18 Oct, 2016 1 commit
    • Yegor's avatar
      add description to by-predicate finders (#6362) · 995fcdc9
      Yegor authored
      Add an option to provide a custom description to predicate
      finders. Without a custom description we default to printing the
      predicate function's signature, which is not all that useful.
      
      Use this new option in the driver extension to print the text of the
      sought after tooltip.
      995fcdc9
  26. 13 Sep, 2016 1 commit
  27. 09 Sep, 2016 1 commit
  28. 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
  29. 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
  30. 04 May, 2016 1 commit
  31. 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
  32. 22 Apr, 2016 1 commit
  33. 21 Apr, 2016 2 commits
  34. 20 Apr, 2016 1 commit