Skip to content
Merged
Show file tree
Hide file tree
Changes from 11 commits
Commits
Show all changes
71 commits
Select commit Hold shift + click to select a range
7df4543
Early prototype
FeodorFitsner Jul 22, 2025
c409b03
Tester service and basic functionality
FeodorFitsner Jul 22, 2025
3b7ba75
Cleanup, being able to test app's main
FeodorFitsner Jul 23, 2025
118cf0c
guess platform
FeodorFitsner Jul 23, 2025
6db221c
Fix passing FLET_TEST_APP_URL
FeodorFitsner Jul 23, 2025
5793c37
Update Flet client Android template
FeodorFitsner Jul 23, 2025
8f8ef75
The most of tester methods are implemented
FeodorFitsner Jul 23, 2025
881f270
Run pytest packages/flet/tests only
FeodorFitsner Jul 23, 2025
e5056a2
Screenshot control
FeodorFitsner Jul 23, 2025
6b8c0ff
Taking and comparing control screenshots
FeodorFitsner Jul 24, 2025
6c23893
Golden images per platform
FeodorFitsner Jul 24, 2025
841672b
Try macOS integration tests on CI
FeodorFitsner Jul 24, 2025
130a9ea
Fix flutter install
FeodorFitsner Jul 24, 2025
4581bcb
Run tests with debug output
FeodorFitsner Jul 24, 2025
a1da308
install cocoapods
FeodorFitsner Jul 24, 2025
e8f7b91
Simulate mouse hover event
FeodorFitsner Jul 24, 2025
1b1e704
Add more logging
FeodorFitsner Jul 24, 2025
6386f05
Try this trick
FeodorFitsner Jul 24, 2025
4af002b
Try this
FeodorFitsner Jul 25, 2025
4d85778
Merge branch 'main' into feodor/v1-tests
FeodorFitsner Jul 25, 2025
de98f2e
Fix windows build in yaml
FeodorFitsner Jul 25, 2025
361188a
Enable ignore_cleanup_errors for temp dirs
FeodorFitsner Jul 26, 2025
1707088
Fix artifacts
FeodorFitsner Jul 26, 2025
1d51263
Run all CI jobs
FeodorFitsner Jul 26, 2025
21bc579
Fix last job
FeodorFitsner Jul 26, 2025
b3ce4dd
Enable integration tests
FeodorFitsner Jul 26, 2025
736f252
Fix integration test
FeodorFitsner Jul 26, 2025
340bdae
brew install cocoapods
FeodorFitsner Jul 26, 2025
1cd7581
Run all integration tests
FeodorFitsner Jul 26, 2025
3521ec2
Save actual image
FeodorFitsner Jul 26, 2025
69a8b66
Fix artifacts section
FeodorFitsner Jul 26, 2025
2334ef3
Update .appveyor.yml
FeodorFitsner Jul 26, 2025
e0fe858
Merge branch 'main' into feodor/v1-tests
FeodorFitsner Jul 26, 2025
93707b0
Push images on failure
FeodorFitsner Jul 26, 2025
19fc553
Fix find path
FeodorFitsner Jul 26, 2025
4c8317f
Try pixel_ratio=2.0
FeodorFitsner Jul 26, 2025
8933265
More reliably close connection
FeodorFitsner Jul 26, 2025
0d0bc31
Run all tests
FeodorFitsner Jul 27, 2025
65be79a
Fix env var
FeodorFitsner Jul 27, 2025
77479d5
Add duration to pump
FeodorFitsner Jul 27, 2025
fb741f3
More logging to close method
FeodorFitsner Jul 27, 2025
f338d43
Allow tasks to be cancelled
FeodorFitsner Jul 27, 2025
ab0fd32
Cancel wait timeout
FeodorFitsner Jul 27, 2025
663ee27
Properly shutdown TCP server
FeodorFitsner Jul 27, 2025
f3790c9
More check on server close
FeodorFitsner Jul 27, 2025
236a47b
Improve handle_connection()
FeodorFitsner Jul 27, 2025
e37ba3d
More logging to handle_connection()
FeodorFitsner Jul 27, 2025
b62d930
Some logging cleanup
FeodorFitsner Jul 28, 2025
76f0dc5
Implement ScreenshotKey instead of Screenshot control
FeodorFitsner Jul 29, 2025
e7fe6f6
Use FVM to run Flutter, add more to readme
FeodorFitsner Jul 29, 2025
4e3a103
Remove fvm
FeodorFitsner Jul 29, 2025
0440504
TextField test and readme
FeodorFitsner Jul 29, 2025
a33e6f9
Fix accuracy of image compare algo
FeodorFitsner Jul 30, 2025
bb4c400
Re-enable all CI jobs
FeodorFitsner Jul 30, 2025
b83b728
Simplify integration tests
FeodorFitsner Jul 30, 2025
075c25a
Text test baseline
FeodorFitsner Jul 30, 2025
3c89256
`page.test` property
FeodorFitsner Jul 30, 2025
f4d162e
Copilot fix: The task cancellation loop with individual timeout
FeodorFitsner Jul 31, 2025
99d5619
Fix double key check
FeodorFitsner Jul 31, 2025
6cc79e0
Merge branch 'feodor/v1-tests' of https://github.com/flet-dev/flet in…
FeodorFitsner Jul 31, 2025
b9ed1cb
Configurable threshold value
FeodorFitsner Jul 31, 2025
70cea5d
Fix backend imports
FeodorFitsner Jul 31, 2025
5a2f4a3
Disable pgsl repo
FeodorFitsner Jul 31, 2025
0e93442
Find apt for pgsql
FeodorFitsner Jul 31, 2025
09e2af8
Fix pgsql
FeodorFitsner Jul 31, 2025
a0e37c9
Re-enable all CI jobs
FeodorFitsner Jul 31, 2025
23f9d5d
Docs: Added services and testing classes
FeodorFitsner Jul 31, 2025
719e936
Rollback Screenshot control
FeodorFitsner Aug 1, 2025
d501ad5
Fix tests to use Screenshot control
FeodorFitsner Aug 1, 2025
278fadb
Docs, examples for testing and Screenshot, cleanup
FeodorFitsner Aug 1, 2025
90a5e01
Fixed review notes
FeodorFitsner Aug 1, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .appveyor.yml
Original file line number Diff line number Diff line change
Expand Up @@ -433,7 +433,7 @@ for:
build: off

test_script:
- uv run pytest
- uv run pytest packages/flet/tests

######################
# Python Build #
Expand Down
12 changes: 6 additions & 6 deletions client/.metadata
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
# This file should be version controlled and should not be manually edited.

version:
revision: "5dcb86f68f239346676ceb1ed1ea385bd215fba1"
revision: "6fba2447e95c451518584c35e25f5433f14d888c"
channel: "stable"

project_type: app
Expand All @@ -13,11 +13,11 @@ project_type: app
migration:
platforms:
- platform: root
create_revision: 5dcb86f68f239346676ceb1ed1ea385bd215fba1
base_revision: 5dcb86f68f239346676ceb1ed1ea385bd215fba1
- platform: linux
create_revision: 5dcb86f68f239346676ceb1ed1ea385bd215fba1
base_revision: 5dcb86f68f239346676ceb1ed1ea385bd215fba1
create_revision: 6fba2447e95c451518584c35e25f5433f14d888c
base_revision: 6fba2447e95c451518584c35e25f5433f14d888c
- platform: android
create_revision: 6fba2447e95c451518584c35e25f5433f14d888c
base_revision: 6fba2447e95c451518584c35e25f5433f14d888c

# User provided section

Expand Down
3 changes: 2 additions & 1 deletion client/android/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,10 @@ gradle-wrapper.jar
/gradlew.bat
/local.properties
GeneratedPluginRegistrant.java
.cxx/

# Remember to never publicly share your keystore.
# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app
# See https://flutter.dev/to/reference-keystore
key.properties
**/*.keystore
**/*.jks
68 changes: 0 additions & 68 deletions client/android/app/build.gradle

This file was deleted.

44 changes: 44 additions & 0 deletions client/android/app/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
plugins {
id("com.android.application")
id("kotlin-android")
// The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins.
id("dev.flutter.flutter-gradle-plugin")
}

android {
namespace = "com.appveyor.flet_client"
compileSdk = flutter.compileSdkVersion
ndkVersion = "27.0.12077973"

compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}

kotlinOptions {
jvmTarget = JavaVersion.VERSION_11.toString()
}

defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId = "com.appveyor.flet_client"
// You can update the following values to match your application needs.
// For more information, see: https://flutter.dev/to/review-gradle-config.
minSdk = 23
targetSdk = flutter.targetSdkVersion
versionCode = flutter.versionCode
versionName = flutter.versionName
}

buildTypes {
release {
// TODO: Add your own signing config for the release build.
// Signing with the debug keys for now, so `flutter run --release` works.
signingConfig = signingConfigs.getByName("debug")
}
}
}

flutter {
source = "../.."
}
22 changes: 19 additions & 3 deletions client/android/app/src/debug/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,9 +1,25 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.appveyor.flet">
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<!-- The INTERNET permission is required for development. Specifically,
the Flutter tool needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.INTERNET" />
<!-- Media access permissions.
Android 13 or higher.
https://developer.android.com/about/versions/13/behavior-changes-13#granular-media-permissions -->
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
<!-- Storage access permissions. Android 12 or lower. -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_LOCATION" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<!-- Google TV -->
<uses-feature android:name="android.software.leanback" android:required="false" />
<uses-feature android:name="android.hardware.touchscreen" android:required="false" />
</manifest>
37 changes: 23 additions & 14 deletions client/android/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.appveyor.flet">
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.INTERNET" />
<!-- Media access permissions.
Android 13 or higher.
Expand All @@ -18,19 +18,17 @@
<!-- Google TV -->
<uses-feature android:name="android.software.leanback" android:required="false" />
<uses-feature android:name="android.hardware.touchscreen" android:required="false" />

<application
android:label="Flet"
android:label="flet_client"
android:name="${applicationName}"
android:enableOnBackInvokedCallback="true"
android:icon="@mipmap/ic_launcher">
<meta-data
android:name="io.flutter.embedding.android.EnableImpeller"
android:value="false"/>
android:icon="@mipmap/ic_launcher"
android:enableOnBackInvokedCallback="true">
<activity
android:name=".MainActivity"
android:exported="true"
android:launchMode="singleTop"
android:taskAffinity=""
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
Expand All @@ -40,12 +38,12 @@
while the Flutter UI initializes. After that, this theme continues
to determine the Window background behind the Flutter UI. -->
<meta-data
android:name="io.flutter.embedding.android.NormalTheme"
android:resource="@style/NormalTheme"
/>
android:name="io.flutter.embedding.android.NormalTheme"
android:resource="@style/NormalTheme"
/>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
<category android:name="android.intent.category.LEANBACK_LAUNCHER"/> <!-- Google TV -->
</intent-filter>
</activity>
Expand All @@ -60,4 +58,15 @@
android:name="flutterEmbedding"
android:value="2" />
</application>
</manifest>
<!-- Required to query activities that can process text, see:
https://developer.android.com/training/package-visibility and
https://developer.android.com/reference/android/content/Intent#ACTION_PROCESS_TEXT.

In particular, this is used by the Flutter engine in io.flutter.plugin.text.ProcessTextPlugin. -->
<queries>
<intent>
<action android:name="android.intent.action.PROCESS_TEXT"/>
<data android:mimeType="text/plain"/>
</intent>
</queries>
</manifest>

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.appveyor.flet_client

import io.flutter.embedding.android.FlutterActivity

class MainActivity : FlutterActivity()
22 changes: 19 additions & 3 deletions client/android/app/src/profile/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,9 +1,25 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.appveyor.flet">
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<!-- The INTERNET permission is required for development. Specifically,
the Flutter tool needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.INTERNET" />
<!-- Media access permissions.
Android 13 or higher.
https://developer.android.com/about/versions/13/behavior-changes-13#granular-media-permissions -->
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
<!-- Storage access permissions. Android 12 or lower. -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_LOCATION" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<!-- Google TV -->
<uses-feature android:name="android.software.leanback" android:required="false" />
<uses-feature android:name="android.hardware.touchscreen" android:required="false" />
</manifest>
30 changes: 0 additions & 30 deletions client/android/build.gradle

This file was deleted.

21 changes: 21 additions & 0 deletions client/android/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
allprojects {
repositories {
google()
mavenCentral()
}
}

val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get()
rootProject.layout.buildDirectory.value(newBuildDir)

subprojects {
val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name)
project.layout.buildDirectory.value(newSubprojectBuildDir)
}
subprojects {
project.evaluationDependsOn(":app")
}

tasks.register<Delete>("clean") {
delete(rootProject.layout.buildDirectory)
}
2 changes: 1 addition & 1 deletion client/android/gradle.properties
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
org.gradle.jvmargs=-Xmx1536M
org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError
android.useAndroidX=true
android.enableJetifier=true
3 changes: 1 addition & 2 deletions client/android/gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
#Fri Jun 23 08:50:38 CEST 2017
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-all.zip
29 changes: 0 additions & 29 deletions client/android/settings.gradle

This file was deleted.

Loading