Write and debug tests easily, built on integration_test

Overview

flutter_convenient_test: Write and debug tests easily, built on integration_test

Flutter Package CI Post-release Codacy Badge

Quick demo

full_video.mov

Have questions?

Though used in production environment in my own 200kloc Flutter app, this package - especially the doc - is surely not yet perfect. Just create an issue and I usually reply quite quickly.

Features

Action history

See what actions are taken in the tests (in the left panel)


Time travel with screenshots

Tap an action to see its screenshots


Rapidly re-execute

Edit code, save, run - within seconds


Videos recorded

Watch what has happened in full detail (in right panel)

P.S. Highlighted action is in sync with the playing video. Tap action to seek video.


Being interactive

Temporarily play with the app, interactively. (Flutter originally cannot interact with app in test mode)


integration_test is still there

You can still use everything from integration_test, mockito, test, etc. This package is not a reinvented wheel, and has exposed the underlying integration_test to you.

If you want to migrate to this package from raw integration_test, have a look at Getting Started section below.

Flaky tests awareness

Flaky is flaky, and we are aware of it. It is neither failed nor success, so you will not be alarmed by false positives, and not completely ignore it.

Simpler and shorter code

  • No manual pump
  • No manual wait and retry
await t.get(find.byTooltip('Fetch Data From Backend')).tap();
// OK even if "fetch data" needs undeterministic time interval. Will automatically pump, wait and retry.
await t.get(find.text('New Data')).should(findsOneWidget);

More in quickstart and tutorials below.

Visually see target regions

Useful when replaying videos and screenshots

  • Marks have colored borders
  • Gestures have visual feedbacks

CI / headless mode

This tool can be run without GUI and only produce log data, making it suitable to be run in a CI. Just run flutter run integration_test/main_test.dart --dart-define CONVENIENT_TEST_CI_MODE=true.

If you want to examine the details with GUI, just open the generated artifact in the GUI using Open File button.

Run single test/group

Tap "Run" icon button after each test or group to re-run only that test/group, without running anything else.

Raw logs

Tap "Raw Logs" in the right panel to see raw outputs of a test.

Tutorial: Run examples

  1. Clone this repository and enter the packages/convenient_test/example folder.
  2. Run the example app (e.g. using iOS simulator) via flutter run /path/to/flutter_convenient_test/packages/convenient_test/example/integration_test/main_test.dart --host-vmservice-port 9753 --disable-service-auth-codes --dart-define CONVENIENT_TEST_APP_CODE_DIR=/path/to/this/app. Can also be run via VSCode or Android Studio with similar commands.
  3. Run the GUI located in packages/convenient_test_manager. It is nothing but a normal Flutter Windows/MacOS/Linux app, so run it follow Flutter official doc. Or run via flutter profile mode to speed up. Or execute cd macos && fastlane build and use the generated (release-version) application.
  4. Enjoy the GUI!

Getting started

  1. In pubspec.yaml, add convenient_test: ^1.0.0 to the dependencies section, and convenient_test_dev: ^1.0.0 to the dev_dependencies section. As normal, we need to flutter pub get.
  2. Create integration_test/main_test.dart file in your app. Fill it like void main() => convenientTestMain(MyConvenientTestSlot(), () { ... the normal test code you write });. See the example package for demonstration.
  3. Run your app (e.g. using iOS simulator) via flutter run /path/to/your/app/integration_test/main_test.dart --host-vmservice-port 9753 --disable-service-auth-codes --dart-define CONVENIENT_TEST_APP_CODE_DIR=/path/to/this/app. Can also be run via VSCode or Android Studio with similar commands.
  4. Run the GUI located in packages/convenient_test_manager. It is nothing but a normal Flutter Windows/MacOS/Linux app, so run it follow Flutter official doc. Or run via flutter profile mode to speed up. Or execute cd macos && fastlane build and use the generated (release-version) application.
  5. Enjoy the GUI!

Thanks for testing frameworks in JavaScript, especially Cypress, for giving inspirations!

You might also like...

This repository is meant to save all the code I may write about this course.

COD3R - Aprenda Flutter & Dart e Construa APPs iOS e Android 💡 Idea: This repository is meant to save all the code and projects I may write with this

Mar 9, 2022

The classic to-do application where a user can write down all the things he wants to accomplish. Android only.

The classic to-do application where a user can write down all the things he wants to accomplish. Android only.

todo-app The classic to-do application where a user can write down all the things he wants to accomplish. Android only. Table of Contents todo-app Tab

Sep 23, 2022

Sūpāhīrō is a demo app for the talk/write on super charging your navigation 1.0 in flutter apps

navhero A simple experiment to give nav1.0 super powers. Named routing in Nav 1.0 could get messy, with large router files here and there. This projec

Dec 3, 2022

🌈 Repository for a compass project, basically an App for displaying bank transfers, with API requests, Flag persistence, Infinite Scroll, Error Handling, Unit Tests, Extract Sharing working with SOLID, BLoC and Designer Patterns.

🌈 Repository for a compass project, basically an App for displaying bank transfers, with API requests, Flag persistence, Infinite Scroll, Error Handling, Unit Tests, Extract Sharing working with SOLID, BLoC and Designer Patterns.

💸 Green Bank Aplicação desenvolvida em Flutter com intuito de trabalhar conexão com API, Gerenciamento de estado usando BLoC, Refatoração, Arquitetur

Oct 7, 2022

Chance Dart is a free Open Source project that lets you create random strings, integers, and other things to help with tiresome tasks, especially when building automated tests or wherever else you require anything random.

 Chance Dart is a free Open Source project that lets you create random strings, integers, and other things to help with tiresome tasks, especially when building automated tests or wherever else you require anything random.

Chance Dart Random generator helper for Dart Homepage • Documentation Overview Chance Dart is a free Open Source project that lets you create random s

Dec 27, 2022

Ozzie is your testing friend. Ozzie will take an screenshot during integration tests whenever you need. Ozzie will capture performance reports for you.

Ozzie is your testing friend. Ozzie will take an screenshot during integration tests whenever you need. Ozzie will capture performance reports for you.

ozzie.flutter Ozzie is your testing friend. Ozzie will take an screenshot during integration tests whenever you need. Ozzie will capture performance r

Nov 3, 2022

Fake Firebase Performance for use during Flutter unit & widget tests.

Fake Firebase Performance Fakes to write unit tests for apps using Firebase Performance monitoring. Instantiate a FakeFirebasePerformance, then pass i

Apr 16, 2022

Quizlet-Flutter - A quiz app tests the analyzing Information on Financial Statements (True or False)

Quizlet-Flutter - A quiz app tests the analyzing Information on Financial Statements (True or False)

Quizlet-Flutter This is a simple Quizlet mobile application testing your financi

Jan 19, 2022

Integration Test Preview allows tests on multiple screen sizes in a single e2e test run.

Integration Test Preview allows tests on multiple screen sizes in a single e2e test run.

Integration Test Preview has pre-configured methods that allow for faster test deployment for end to end (e2e) test coverage (using Android and iOS pl

Aug 23, 2022
Comments
  • Bump intl from 0.17.0 to 0.18.0 in /packages/convenient_test_dev

    Bump intl from 0.17.0 to 0.18.0 in /packages/convenient_test_dev

    Bumps intl from 0.17.0 to 0.18.0.

    Changelog

    Sourced from intl's changelog.

    0.18.0

    • Add support for minimumSignificantDigits / maximumSignificantDigits in NumberFormat.
    • Add support for plural in NumberFormat.compact() ('2 milliards').
    • Fix negative number formatting / parsing in NumberFormat.compact().
    • Add optional parameter to NumberFormat.compact() to explicitly add sign even for positive values.
    • Add decimalPatternDigits to NumberFormat which supports specifying the number of decimal digits in a decimal pattern.
    • Update to cldr 40.
    • Migrate to package:lints/recommended.yaml.
    • Remove some instances of dynamic types from the API.
    • Fix a bug caused by a typo in the plural rules calculation.
    • Unify IntlStream and StringIterator into StringStack.
    • Update to CLDR v41.
    • Add new locales: as, bm, en_NZ, fur, mg, nyn.
    • Remove unimplemented formatDuration and formatDurationFrom.
    • Make shortLocale and canonicalizedLocale implementations smarter.
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • convenient_test_manager macos for Apple silicon

    convenient_test_manager macos for Apple silicon

    The macos manager application that is in CI can't run on my mac device that uses an Apple silicon chip because after I checked, it turns out that the macOS manager application is an application with Intel support

    opened by sahibul-nf 13
  • gRPC Error causes No tests found

    gRPC Error causes No tests found

    Describe the bug A clear and concise description of what the bug is.

    When trying to run the example case referenced in the README, I get the following error:

    E/flutter (30883): [ERROR:flutter/lib/ui/ui_dart_state.cc(198)] Unhandled Exception: gRPC Error (code: 14, codeName: UNAVAILABLE, message: Error connecting: SocketException: Connection refused (OS Error: Connection refused, errno = 111), address = 127.0.0.1, port = 51594, details: null, rawResponse: null, trailers: {})

    Due to that error the manager application is never able to find the integration tests and so it perpetually displays "No tests found. This may because the information is not loaded.".

    I do believe the manager is forming some kind of connection with the running client because pressing the button "Tap here to reload information" causes the client to perform a hot reload.

    The client just displays a blank white screen.

    To Reproduce Steps to reproduce the behavior:

    1. Clone flutter_convient_test
    2. Open 2 separate terminal windows.
    3. In the first terminal window execute the following commands:
    cd .\packages\convenient_test_manager\
    flutter run -d windows --release
    
    1. In the second terminal execute the following commands:
    cd .\packages\convenient_test\example\    
    flutter run ./integration_test/main_test.dart --host-vmservice-port 9753 --disable-service-auth-codes --dart-define CONVENIENT_TEST_APP_CODE_DIR=$($PWD | select -Expand Path)
    

    Expected behavior A clear and concise description of what you expected to happen.

    The manager application should find all the integration tests in the example and give the option to run the tests.

    Screenshots If applicable, add screenshots to help explain your problem.

    2022-08-16 11_09_44-NVIDIA GeForce Overlay DT

    Desktop (please complete the following information):

    • OS: [e.g. iOS] Windows
    • Version [e.g. 22] 11

    Smartphone (please complete the following information):

    • Device: [e.g. iPhone6] Android Virtual Emulator - Pixel 4
    • OS: [e.g. iOS8.1] Android
    • Version [e.g. 22] API 30

    Additional context Add any other context about the problem here.

    I tried to get around this issue by running the client within WSL ubuntu and trying to run the manager within WSL. Both result in the same error. I also had a coworker try this on his Mac machine. He said the issue still occurs for him while using an Android Emulator but not when using the IOS simulator. I have also tried this in our own repo instead of the example package, same error. I also tried adjusting the values in consts.dart. I changed kConvenientTestManagerHost to my local IP address and still the same error. When I set kWorkerVmServiceHost to my local IP, I can no longer cause a hot reload in the client, so I believe that is a regression.

    I have also read through pretty much every issue here: https://github.com/fzyzcjy/flutter_convenient_test/issues?q=is%3Aissue+grpc and still haven't found a solution. I know you mentioned in this comment that it was a generic network problem and not related to this package.

    I realize from the error message this is definitely network related ("Error connecting: SocketException") but I do not believe my setup is in any way non-standard and a coworker was able to replicate the issue.

    Could this be related to the fact that the Android Device Emulator defines the host machine on the constant address "10.0.2.2"? ref I am not sure how one would point the client to that host because we are only passing a port in through the startup args. I am not sure if the IOS simulator on Mac redirects 127.0.0.1 to the simulator or the development machine.

    By the way, thank you for such a great package! The design is great and is a wonderful contribution to the flutter ecosystem.

    Manager Logs:

    PS C:\Users\ethan\Documents\cadoo\flutter_convenient_test\packages\convenient_test_manager> flutter run -d windows --release
    Launching lib\main.dart on Windows in release mode...
    Building Windows application...                                         
    
    Flutter run key commands.
    h List all available interactive commands.
    c Clear the screen
    q Quit (terminate the application on the device).
    flutter: 2022-08-16T15:08:12.832046Z|debug|GlobalConfigNullable|parseConfigFile homeDirectory=null
    flutter: 2022-08-16T15:08:12.833048Z|debug|GlobalConfigNullable|parse call parseConfigFile config=GlobalConfigNullable(isolationMode: null, enableReportSaver: null, goldenDiffGitRepo: null)
    flutter: 2022-08-16T15:08:12.833048Z|debug|GlobalConfigNullable|parse call parseEnvironment config=GlobalConfigNullable(isolationMode: null, enableReportSaver: null, goldenDiffGitRepo: null)
    flutter: 2022-08-16T15:08:12.835043Z|info|VmServiceWrapperService|Connecting to vm service at ws://127.0.0.1:9753/ws. Please ensure your Flutter app has port=9753
    flutter: 2022-08-16T15:08:12.836042Z|info|setup|GlobalConfig: isolationMode: false,[NL]enableReportSaver: false,[NL]goldenDiffGitRepo: null[NL]    
    flutter: 2022-08-16T15:08:12.845042Z|debug|setWindowSize|window=PlatformWindow{frame: Rect.fromLTRB(17.0, 17.0, 2257.0, 1277.0), scaleFactor: 1.75, screen: Instance of 'Screen'} screen=Screen{frame: Rect.fromLTRB(0.0, 0.0, 3840.0, 2400.0), visibleFrame: Rect.fromLTRB(0.0, 0.0, 3840.0, 2316.0), scaleFactor: 1.75}
    flutter: 2022-08-16T15:08:12.846040Z|info|GoldenDiffPageStore|syncGitInfoFromRepo gitRepo=null
    flutter: 2022-08-16T15:08:14.884684Z|warn|VmServiceWrapperService|init failed e=SocketException: The remote computer refused the network connection.
    flutter: [NL] (OS Error: The remote computer refused the network connection.
    flutter: [NL], errno = 1225), address = 127.0.0.1, port = 57880 s=#0      _NativeSocket.startConnect (dart:io-patch/socket_patch.dart:682)[NL]#1      _RawSocket.startConnect (dart:io-patch/socket_patch.dart:1817)[NL]#2      RawSocket.startConnect (dart:io-patch/socket_patch.dart:27)[NL]#3      Socket._startConnect (dart:io-patch/socket_patch.dart:2038)[NL]#4      Socket.startConnect (dart:io/socket.dart:759)[NL]#5      _ConnectionTarget.connect (dart:_http/http_impl.dart:2453)[NL]#6      _HttpClient._getConnection.connect (dart:_http/http_impl.dart:2867)[NL]#7      _HttpClient._getConnection (dart:_http/http_impl.dart:2872)[NL]#8      _HttpClient._openUrl (dart:_http/http_impl.dart:2727)[NL]#9      _HttpClient.openUrl (dart:_http/http_impl.dart:2591)[NL]#10     _WebSocketImpl.connect (dart:_http/we
    flutter: bsocket_impl.dart:1021)[NL]#11     WebSocket.connect (dart:_http/websocket.dart:360)[NL]#12     vmServiceConnectUri (package:vm_service/vm_service_io.dart:32)[NL]#13     VmServiceWrapperService.connect (package:convenient_test_manager_dart/services/vm_service_wrapper_service.dart:30)[NL]#14     new VmServiceWrapperService (package:convenient_test_manager_dart/services/vm_service_wrapper_service.dart:20)[NL]#15     setup (package:convenient_test_manager_dart/misc/setup.dart:37)[NL]<asynchronous suspension>[NL]#16     setup (package:convenient_test_manager/misc/setup.dart:21)[NL]<asynchronous suspension>[NL]#17     main (package:convenient_test_manager/main.dart:7)[NL]<asynchronous suspension>[NL]       
    flutter: 2022-08-16T15:09:29.585945Z|info|VmServiceWrapperService|Connecting to vm service at ws://127.0.0.1:9753/ws. Please ensure your Flutter app has port=9753
    flutter: 2022-08-16T15:09:29.588943Z|info|_ServiceConnectionManager|vmServiceOpened
    flutter: 2022-08-16T15:09:29.654944Z|info|_ServiceConnectionManager|handleServiceEvent kind=ServiceRegistered service=reloadSources method=s0.reloadSources
    flutter: 2022-08-16T15:09:29.654944Z|info|_ServiceConnectionManager|handleServiceEvent kind=ServiceRegistered service=hotRestart method=s0.hotRestart
    flutter: 2022-08-16T15:09:29.655948Z|info|_ServiceConnectionManager|handleServiceEvent kind=ServiceRegistered service=flutterVersion method=s0.flutterVersion
    flutter: 2022-08-16T15:09:29.655948Z|info|_ServiceConnectionManager|handleServiceEvent kind=ServiceRegistered service=compileExpression method=s0.compileExpression
    flutter: 2022-08-16T15:09:29.655948Z|info|_ServiceConnectionManager|handleServiceEvent kind=ServiceRegistered service=flutterMemoryInfo method=s0.flutterMemoryInfo
    flutter: 2022-08-16T15:09:29.655948Z|info|_ServiceConnectionManager|handleServiceEvent kind=ServiceRegistered service=flutterGetSkSL method=s0.flutterGetSkSL
    flutter: 2022-08-16T15:09:33.120960Z|info|VmServiceWrapperService|hotRestartThrottled triggered
    flutter: 2022-08-16T15:09:33.120960Z|debug|SingleRunningExecutor|call runner() reason= triggerTime=2022-08-16 11:09:33.120960 arg=null
    flutter: 2022-08-16T15:09:33.120960Z|info|_ServiceConnectionManager|hotRestart start
    flutter: 2022-08-16T15:09:37.392235Z|info|_ServiceConnectionManager|hotRestart end resp={type: Success}
    flutter: 2022-08-16T15:09:37.392235Z|debug|VmServiceWrapperService|hotRestartThrottledExecutor deliberately extra wait  
    Application finished.
    Terminate batch job (Y/N)? Y
    

    Client Logs:

    PS C:\Users\ethan\Documents\cadoo\flutter_convenient_test\packages\convenient_test\example> flutter run .\integration_test\main_test.dart --host-vmservice-port 9753 --disable-service-auth-codes --dart-define CONVENIENT_TEST_APP_CODE_DIR=$($PWD | select -Expand Path)
    Using hardware rendering with device sdk gphone x86. If you notice graphics artifacts, consider enabling software      
    rendering with "--enable-software-rendering".
    Launching .\integration_test\main_test.dart on sdk gphone x86 in debug mode...
    Running Gradle task 'assembleDebug'...                              5.5s
    √  Built build\app\outputs\flutter-apk\app-debug.apk.
    E/flutter (30883): [ERROR:flutter/lib/ui/ui_dart_state.cc(198)] Unhandled Exception: gRPC Error (code: 14, codeName: UNAVAILABLE, message: Error connecting: SocketException: Connection refused (OS Error: Connection refused, errno = 111), address = 127.0.0.1, port = 51592, details: null, rawResponse: null, trailers: {})
    E/flutter (30883):
    Syncing files to device sdk gphone x86...                          218ms
    
    Flutter run key commands.
    r Hot reload.
    R Hot restart.
    h List all available interactive commands.
    d Detach (terminate "flutter run" but leave application running).
    c Clear the screen
    q Quit (terminate the application on the device).
    
     Running with sound null safety 
    
    An Observatory debugger and profiler on sdk gphone x86 is available at: http://127.0.0.1:9753/
    Performing hot restart...
    Restarted application in 4,263ms.
    E/flutter (30883): [ERROR:flutter/lib/ui/ui_dart_state.cc(198)] Unhandled Exception: gRPC Error (code: 14, codeName: UNAVAILABLE, message: Error connecting: SocketException: Connection refused (OS Error: Connection refused, errno = 111), address = 127.0.0.1, port = 51594, details: null, rawResponse: null, trailers: {})
    E/flutter (30883):
    Application finished.
    Terminate batch job (Y/N)? Y
    
    wontfix 
    opened by ethancadoo 30
Releases(v1.2.1)
  • v1.2.1(Oct 25, 2022)

  • v1.2.0(Sep 18, 2022)

    • Fix dependency resolution issues and improve Actions #274 (thanks @bartekpacia)
    • Adds a settle argument to tTestWidgets #273 (thanks @ronba)
    • Fix bug causing config switches to be covered #268 (thanks @ethancadoo)
    • flag to prevent pumpAndSettle for other commands #267 (thanks @ostk0069)
    • Build conventient_test_manager_dart on Linux #265 (thanks @vHanda)
    • Pass cmd args through to config #263 (thanks @ethancadoo)
    • Command line args for gRPC connection #258 (thanks @ethancadoo)
    • Add note about AVD in readme #257 (thanks @ethancadoo)
    • Added Linux CI #255 (thanks @ethancadoo)
    • Feature: add a settle flag to act method to prevent pumpAndSettle #252 (thanks @MCord)
    • crop golden images - when you only want a portion of the widget to be captured #251
    • Fix build issues in the CI pipeline #241 (thanks @Rohithgilla12)
    • send hot restart to main isolate #237
    • enhance golden comparator #233
    • Enhance golden comparator #232
    • Fix assertion failed when takeSnapshot: '!renderObject.debugNeedsPaint' is not true #234
    Source code(tar.gz)
    Source code(zip)
  • v1.1.1(May 22, 2022)

    • Fix when flutter build macos for Manager, it shows error: Undefined symbols for architecture arm64: "_g_players", referenced from: +[VideoOutlet outletForPlayer:withTextureRegistry:] in VideoOutlet.o #221
    • Allow configuration by reading a config file (e.g. ~/.config/convenient_test.json), useful for using precompiled Manager #220
    • Fix building Windows application... dart_vlc-0.1.9/lib/src/widgets/controls.dart(185,55): error G76A9B1F6: The method 'back' isn't defined for the class 'Player'. #217
    • Make initial window size bigger, otherwise many things overflowed #222
    • Make MacOS CI pass, such that we have precompiled binaries #186
    • Improve documentation
    Source code(tar.gz)
    Source code(zip)
  • v1.1.0(May 22, 2022)

    Issues closed:

    • create universal configuration, accept params from cmdargs, dart-define, etc #213
    • allow Manager to load and display a Report without existence of worker #211
    • GoldenDiffPage: set FilterQuality be none if zoom in (physical size much larger), and mid if zoom out #206
    • GoldenDiffPage: allow pan/zoom an image, and other images should synchronously pan/zoom the same location #205
    • GoldenDiffPage: compute pixelwise difference and show it #204
    • GoldenDiffPage: allow arrow up/down key to navigate #203
    • for updateGoldens, give a GUI to check golden files git diff #201
    • macos + flutter 3.0, fail to compile #199
    • migrate to flutter 3.0 #198
    • add "root finder" to easily find the root widget #197
    • Mark.repaintBoundary flag does not work when in combination with goldens #196
    • when golden fails because "image sizes do not match", should still provide visual diff #195
    • improve the "screenshot panel", especially when it is showing golden images #192
    • when generateFailureOutput (i.e. one golden fails), currently it outputs one log, so (1) it will not remove log if with retry it succeed (2) tons of log exists #191
    • create "super-run-id", and let Report and Video output to subfolders of a folder named by superRunId, such that different super-runs are naturally grouped #190
    • gRPC error on M1 Macos #182
    • configure macos Manager such that it can be compiled into release executables - currently can always use flutter run/flutter profile even without doing this #181
    • manage golden failures, generate them onto convenient_test data dirs #180
    • explicitly show which golden test fails, by marking them on LogEntry (or throwing exceptions at the locations expectLater fails) #179
    • visualize golden test failures clearly in our Manager #178
    • "match golden" errors if the match fails #177
    • display icon name instead of the default hex number if using find.byIcon #176
    • implement "append text to TextField" - current enterText will replace all text #175
    • add sticky header for log panel, such that know which test is looking at - possibly show group names & test name; only visible if the topmost visible item is a log entry #174
    • make route name matcher have better description #171
    • make text of matchers like findsOneWidget more brief #170
    • beautify "section" log entry UI, let users easily see this is section header #169
    • add Mark.repaintBoundary parameter to easily add RepaintBoundary at test time for goldens #168
    • implement two-finger gestures #167
    • add various gesture detection tests #166
    • in ci mode, when manager has started but worker has not yet started, should gracefully handle this case #165
    • improve logging in ci mode: at least know which test is executing and how many remain #163
    • add a hint text indicating "all tests finished" or "running some tests" #162
    • maybe improve grammar: t.get(find.text('hi')).tap()/.should(...) -> find.text('hi').tap()/.should(...) #159
    • make "logging reports to files" optional #157
    • make write-file paths into sub-directories, currently all into the root temp dir making it messy #156
    • further improve the top toolbar, since we are going to add more buttons and it will overflow #152
    • Using outdated get_it version #150
    • allow dynamically configure number of retries in panel #149
    • when test name has special char like "+", regex fails #148
    • exception when finished running tests in isolation mode #145
    • for flaky tests, the "play video" button only plays the first video among all, instead of all videos #142
    • do not show full error dialog, but collapse it by default and allow expand #141
    • use hashcode+conflict-then-change to generate Test/Group id that is stable across hot-restarts #140
    • add dart-code-metrics, especially check "access map operator[] with wrong key type", because things like #136 will easily have such problems #137
    • avoid referencing Test/Group via id, because they do not preserve across hot-restarts - use names instead #136
    • When tap to run a test, have NPE error for _GroupInfoSectionBuilder._buildHeader #135
    • bug: after tapping "play video" button, no video is shown #134
    • still use names to identify Test/Group instead of the newly proposed id; but throw error if there are duplicated names #133
    • Test/Group id should stay stable across hot-restarts - because in "isolation mode" and with #130, we use id to identify tests across hot restarts #132
    • protobuf should use int64 instead of int32 for (new) id, since we use snowflake which is 64bit #131
    • generate and use unique ids to determine tests and groups, since currently used test names can be duplicate #130
    • remove entryLocator, since test name is prefixed with group name, so no need to use group name to locate test name #129
    • flutter test seems to allow duplicated names (even in same groups), but we rely on names to locate tests #128
    • improve the "header panel" since too many items now #127
    • remove the ManagerRpcService (abstraction layer above grpc to Manager), since will use new approach for CI mode #126
    • let VideoDisplayStore/VideoPanel understand existence of multiple videos (currently only understand one) #125
    • add a boot time config to specify whether to enable "hot-restart for every test" mode #124
    • when in "hot-restart for every test" mode, also hot restart when a test is flaky and want to re-execute #123
    • make the to-be-implemented "hot-restart for every test" an configurable optional feature #119
    • refactor "ci mode" from pure-worker approach into the manager-aided approach #118
    • extract pure-dart "manager_dart" from the "manager" package, such that it can run without gui; extract common_dart from common as well #117
    • extensive golden support #116
    • make generated id in worker be unique even across VM hot restart, by using a snowflake-like approach #115
    • hot-restart every time a test is to be executed to improve isolation #113
    • the intro video uploaded to youtube is blur #112
    Source code(tar.gz)
    Source code(zip)
  • v1.0.1+2(May 6, 2022)

Owner
fzyzcjy
"Hello, world!\n"
fzyzcjy
A Dart Build Plugin that uploads debug symbols for Android, iOS/macOS and source maps for Web to Sentry via sentry-cli

Sentry Dart Plugin A Dart Build Plugin that uploads debug symbols for Android, iOS/macOS and source maps for Web to Sentry via sentry-cli. For doing i

Sentry 36 Jan 4, 2023
UIWidget is a Unity Package which helps developers to create, debug and deploy efficient, cross-platform Apps.

⚠️ The main repository of UIWidgets has been moved to https://github.com/Unity-Technologies/com.unity.uiwidgets. Please visit the new site if you have

Unity Technologies 1.9k Dec 27, 2022
Ouday 25 Dec 15, 2022
Android Debug Drawer for faster development

Android Debug Drawer Faster development with Debug Drawer Features DeviceModule - common information about your device BuildModule - app build informa

Mantas Palaima 1.2k Nov 21, 2022
Adds a side menu in all screens with debug information

Adds a side menu in all screens with debug information. You can decide which information to show and create new modules to include more information.

Sergi Martínez 27 Oct 7, 2022
Write iOS&Android Code using Dart. This package liberates you from redundant glue code and low performance of Flutter Channel.

Dart_Native Dart_Native operates as both a code generator tool and a bridge to communicate between Dart and native APIs. Replaces the low-performing F

DartNative 893 Jan 4, 2023
Klutter plugin makes it possible to write a Flutter plugin for both Android and iOS using Kotlin only.

The Klutter Framework makes it possible to write a Flutter plugin for both Android and iOS using Kotlin Multiplatform. Instead of writing platform spe

Gillian 33 Dec 18, 2022
A Todo Notes Application developed with flutter, with basic functionalities to write quick Notes.

Notes Application - Flutter A Todo Notes Application developed with flutter, with basic functionalities to write quick Notes. NOTES PASSWORD-PROTECTED

Uttam 22 Jan 1, 2023
The v2ex client write in flutter.

Language: English | 中文简体 V2LF V2LF is a v2ex unofficial app. 'V2LF' means 'way to love flutter'. The original intention of developing this app is to l

wml 465 Dec 30, 2022
This is an open source Tips & Tricks for Flutter, that helps flutter Developers write simple but powerful dart codes.

Showcasing-flutter - This is an open source Tips & Tricks for Flutter, that helps flutter Developers write simple but powerful dart codes.

Paul Edeme'kong - Flutter Fairy 1 Jan 4, 2022