From 84f10312e3eae493ec4beedd54c31b8ba792614c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Burak=20Han=C3=A7erli?= <burak.hancerli@qt.io>
Date: Fri, 28 Feb 2025 09:43:36 +0000
Subject: [PATCH] QDS-14556 Extend tests

---
 README.md                                     |   2 +-
 cicd/stages/build.yml                         | 108 ++++----
 cicd/stages/release.yml                       |   4 +-
 cicd/stages/test.yml                          |  50 +++-
 src/backend/backend.cpp                       |   8 +-
 src/backend/dsconnector/ds.cpp                |   6 +-
 src/backend/dsconnector/ds.h                  |   2 +-
 src/backend/dsconnector/dsmanager.cpp         |  39 ++-
 src/backend/dsconnector/dsmanager.h           |  11 +-
 src/backend/main.cpp                          |   3 +-
 src/backend/projectmanager.cpp                |  20 +-
 src/backend/projectmanager.h                  |   5 +-
 src/backend/settings.cpp                      |  12 +
 src/backend/settings.h                        |   2 +
 tests/CMakeLists.txt                          |  15 +-
 tests/android/AndroidManifest.xml             |   2 +-
 .../res/drawable/ic_launcher_background.xml   |  26 ++
 .../res/drawable/ic_launcher_foreground.xml   |  18 ++
 .../res/mipmap-anydpi-v26/ic_launcher.xml     |   5 +
 .../mipmap-anydpi-v26/ic_launcher_round.xml   |   5 +
 tests/android/res/mipmap-hdpi/app_icon.png    | Bin 4461 -> 0 bytes
 .../android/res/mipmap-hdpi/ic_launcher.webp  | Bin 0 -> 2088 bytes
 .../res/mipmap-hdpi/ic_launcher_round.webp    | Bin 0 -> 3586 bytes
 tests/android/res/mipmap-ldpi/app_icon.png    | Bin 798 -> 0 bytes
 tests/android/res/mipmap-mdpi/app_icon.png    | Bin 1758 -> 0 bytes
 .../android/res/mipmap-mdpi/ic_launcher.webp  | Bin 0 -> 1430 bytes
 .../res/mipmap-mdpi/ic_launcher_round.webp    | Bin 0 -> 2340 bytes
 tests/android/res/mipmap-xhdpi/app_icon.png   | Bin 6367 -> 0 bytes
 .../android/res/mipmap-xhdpi/ic_launcher.webp | Bin 0 -> 2686 bytes
 .../res/mipmap-xhdpi/ic_launcher_round.webp   | Bin 0 -> 4958 bytes
 tests/android/res/mipmap-xxhdpi/app_icon.png  | Bin 13363 -> 0 bytes
 .../res/mipmap-xxhdpi/ic_launcher.webp        | Bin 0 -> 3880 bytes
 .../res/mipmap-xxhdpi/ic_launcher_round.webp  | Bin 0 -> 7174 bytes
 tests/android/res/mipmap-xxxhdpi/app_icon.png | Bin 30716 -> 0 bytes
 .../res/mipmap-xxxhdpi/ic_launcher.webp       | Bin 0 -> 4762 bytes
 .../res/mipmap-xxxhdpi/ic_launcher_round.webp | Bin 0 -> 9514 bytes
 tests/android/res/values/strings.xml          |  18 ++
 .../test_project/Generated/Quick3DAssets.txt  |   1 +
 tests/data/test_project/qtquickcontrols2.conf |   8 +
 tests/data/test_project/temp.qrc              |  13 +
 .../data/test_project/test_project.qmlproject | 122 +++++++++
 .../test_project/test_project/Constants.qml   |  27 ++
 .../test_project/EventListModel.qml           |  12 +
 .../test_project/EventListSimulator.qml       |  22 ++
 .../test_project/designer/plugin.metainfo     |  13 +
 tests/data/test_project/test_project/qmldir   |   4 +
 .../test_project/test_projectContent/App.qml  |  16 ++
 .../test_projectContent/Screen01.ui.qml       | 254 ++++++++++++++++++
 .../test_projectContent/fonts/fonts.txt       |   1 +
 .../test_projectContent/images/images.txt     |   1 +
 .../data/test_project/test_project_fail.qmlrc | Bin 0 -> 4129 bytes
 .../test_project/test_project_success.qmlrc   | Bin 0 -> 4128 bytes
 tests/main.cpp                                |  33 ++-
 tests/mock_ds.cpp                             | 129 +++++++++
 tests/mock_ds.h                               |  43 +++
 tests/tst_dsmanager.cpp                       | 221 +++++++++++++++
 tests/tst_dsmanager.h                         |  54 ++++
 tests/tst_projectmanager.cpp                  | 211 +++++++++++++++
 tests/tst_projectmanager.h                    |  40 +++
 tests/tst_settings.cpp                        |  27 +-
 tests/tst_settings.h                          |   7 +
 61 files changed, 1497 insertions(+), 123 deletions(-)
 create mode 100644 tests/android/res/drawable/ic_launcher_background.xml
 create mode 100644 tests/android/res/drawable/ic_launcher_foreground.xml
 create mode 100644 tests/android/res/mipmap-anydpi-v26/ic_launcher.xml
 create mode 100644 tests/android/res/mipmap-anydpi-v26/ic_launcher_round.xml
 delete mode 100644 tests/android/res/mipmap-hdpi/app_icon.png
 create mode 100644 tests/android/res/mipmap-hdpi/ic_launcher.webp
 create mode 100644 tests/android/res/mipmap-hdpi/ic_launcher_round.webp
 delete mode 100644 tests/android/res/mipmap-ldpi/app_icon.png
 delete mode 100644 tests/android/res/mipmap-mdpi/app_icon.png
 create mode 100644 tests/android/res/mipmap-mdpi/ic_launcher.webp
 create mode 100644 tests/android/res/mipmap-mdpi/ic_launcher_round.webp
 delete mode 100644 tests/android/res/mipmap-xhdpi/app_icon.png
 create mode 100644 tests/android/res/mipmap-xhdpi/ic_launcher.webp
 create mode 100644 tests/android/res/mipmap-xhdpi/ic_launcher_round.webp
 delete mode 100644 tests/android/res/mipmap-xxhdpi/app_icon.png
 create mode 100644 tests/android/res/mipmap-xxhdpi/ic_launcher.webp
 create mode 100644 tests/android/res/mipmap-xxhdpi/ic_launcher_round.webp
 delete mode 100644 tests/android/res/mipmap-xxxhdpi/app_icon.png
 create mode 100644 tests/android/res/mipmap-xxxhdpi/ic_launcher.webp
 create mode 100644 tests/android/res/mipmap-xxxhdpi/ic_launcher_round.webp
 create mode 100644 tests/android/res/values/strings.xml
 create mode 100644 tests/data/test_project/Generated/Quick3DAssets.txt
 create mode 100644 tests/data/test_project/qtquickcontrols2.conf
 create mode 100644 tests/data/test_project/temp.qrc
 create mode 100644 tests/data/test_project/test_project.qmlproject
 create mode 100644 tests/data/test_project/test_project/Constants.qml
 create mode 100644 tests/data/test_project/test_project/EventListModel.qml
 create mode 100644 tests/data/test_project/test_project/EventListSimulator.qml
 create mode 100644 tests/data/test_project/test_project/designer/plugin.metainfo
 create mode 100644 tests/data/test_project/test_project/qmldir
 create mode 100644 tests/data/test_project/test_projectContent/App.qml
 create mode 100644 tests/data/test_project/test_projectContent/Screen01.ui.qml
 create mode 100644 tests/data/test_project/test_projectContent/fonts/fonts.txt
 create mode 100644 tests/data/test_project/test_projectContent/images/images.txt
 create mode 100644 tests/data/test_project/test_project_fail.qmlrc
 create mode 100644 tests/data/test_project/test_project_success.qmlrc
 create mode 100644 tests/mock_ds.cpp
 create mode 100644 tests/mock_ds.h
 create mode 100644 tests/tst_dsmanager.cpp
 create mode 100644 tests/tst_dsmanager.h
 create mode 100644 tests/tst_projectmanager.cpp
 create mode 100644 tests/tst_projectmanager.h

diff --git a/README.md b/README.md
index c1ec5ba..48349e9 100644
--- a/README.md
+++ b/README.md
@@ -110,7 +110,7 @@ Test results can be viewed with any JUnit compatible viewer. For example, you ca
 
 ```bash
 npm i -g xunit-viewer
-xunit-viewer -r output.junit.xml
+xunit-viewer -r output.junitxml -s -w
 ```
 
 It'll create a `report.html` file that can be opened in a web browser. For more information about `xunit-viewer` please visit the [GitHub repo][xunit-viewer].
diff --git a/cicd/stages/build.yml b/cicd/stages/build.yml
index 74aaa52..86cb904 100644
--- a/cicd/stages/build.yml
+++ b/cicd/stages/build.yml
@@ -3,23 +3,27 @@
 .build-components: &build-components
   - pushd 3rdparty/qtquickdesigner-components
   - |
-    cmake \
-    -S . \
-    -G Ninja \
-    -DCMAKE_BUILD_TYPE=Release \
-    -DCMAKE_TOOLCHAIN_FILE=${QDS_CI_JOB_QT_PATH}/lib/cmake/Qt6/qt.toolchain.cmake \
-    -DANDROID_SDK_ROOT=${DOCKER_ENV_ANDROID_SDK_ROOT} \
-    -DANDROID_NDK_ROOT=${DOCKER_ENV_ANDROID_NDK_ROOT} \
-    -DQT_HOST_PATH=${DOCKER_ENV_QT_PATH_LINUX_GCC_64} \
-    -DFLOWVIEW_AUTO_QMLDIR=ON \
-    -DCMAKE_INSTALL_PREFIX=${QDS_CI_JOB_QT_PATH}
-  - cmake --build .
-  - cmake --install .
+    for arch in ${QDS_CI_JOB_ARCHS}; do
+      QT_DIR_WITH_ARCH=${DOCKER_ENV_QT_PATH_WITH_VERSION}/${arch}
+      BUILD_PATH=${QDS_CI_JOB_BUILD_PATH}/components/${arch}
+      cmake \
+      -S . \
+      -G Ninja \
+      -B ${BUILD_PATH} \
+      -DCMAKE_BUILD_TYPE=Release \
+      -DCMAKE_TOOLCHAIN_FILE=${QT_DIR_WITH_ARCH}/lib/cmake/Qt6/qt.toolchain.cmake \
+      -DANDROID_SDK_ROOT=${DOCKER_ENV_ANDROID_SDK_ROOT} \
+      -DANDROID_NDK_ROOT=${DOCKER_ENV_ANDROID_NDK_ROOT} \
+      -DQT_HOST_PATH=${DOCKER_ENV_QT_PATH_LINUX_GCC_64} \
+      -DFLOWVIEW_AUTO_QMLDIR=ON \
+      -DCMAKE_INSTALL_PREFIX=${QT_DIR_WITH_ARCH}
+      cmake --build ${BUILD_PATH} --target install
+      rm -rf ${BUILD_PATH}
+    done
   - popd
 
-.build-android-apps: &build-android-apps
+.build-app: &build-app
   - export GOOGLE_PLAY_APP_VERSION=$(( $(git tag --list | wc -l) +11 ))
-  # where is this magic "$(git tag --list | wc -l) +11" coming from?
   # "git tag --list | wc -l" counts the number of tags in the repository.
   # The "+11" is a magic number which is the last GOOGLE_PLAY_APP_VERSION
   # that was released before starting to add tags to the repository. After
@@ -39,9 +43,11 @@
     -DCMAKE_INSTALL_PREFIX=${QDS_CI_JOB_QT_PATH} \
     -DANDROID_OPENSSL_PATH=${QDS_CI_JOB_OPENSSL_PATH} \
     -DGOOGLE_PLAY_APP_VERSION=${GOOGLE_PLAY_APP_VERSION} \
+    -DQT_ANDROID_BUILD_ALL_ABIS=ON \
+    -DQT_ANDROID_MULTI_ABI_FORWARD_VARS="GOOGLE_PLAY_APP_VERSION;ANDROID_OPENSSL_PATH" \
     -DBUILD_EXAMPLES=OFF
   - cat ${QDS_CI_JOB_BUILD_PATH}/src/dynamic_imports.qml
-  - cmake --build ${QDS_CI_JOB_BUILD_PATH} --target aab
+  - cmake --build ${QDS_CI_JOB_BUILD_PATH} --target ${QDS_CI_JOB_CMAKE_BUILD_TARGET}
 
 .copy-and-sign-apks: &copy-and-sign-apks
   - QDS_CI_KEYSTORE_PATH=$(pwd)/android_release.keystore
@@ -57,68 +63,54 @@
   - |
     if [[ -n ${CI_COMMIT_TAG} ]];
     then
+      QDS_CI_KEYSTORE_PATH=$(pwd)/android_release.keystore
+      echo ${QDS_VAR_KEYSTORE} | base64 -d > ${QDS_CI_KEYSTORE_PATH}
       cp -r ${QDS_CI_JOB_BUILD_PATH}/src/android-build/build/outputs/bundle/release/* ${QDS_CI_JOB_ARTIFACTS_PATH_APP}
-      /usr/bin/jarsigner -keystore ${CI_PROJECT_DIR}/cicd/android/android_release.keystore ${QDS_CI_JOB_ARTIFACTS_PATH_APP}/android-build-release.aab designviewer -storepass ${QDS_VAR_PASS}
+      /usr/bin/jarsigner -keystore ${QDS_CI_KEYSTORE_PATH} ${QDS_CI_JOB_ARTIFACTS_PATH_APP}/android-build-release.aab ${QDS_VAR_KEYSTORE_ALIAS} -storepass ${QDS_VAR_PASS}
     fi
 
-build-android:
+.build-common:
   extends: .pipeline_common
   stage: build
-  parallel:
-    matrix:
-      - QDS_CI_JOB_TARGET_ARCH: "arm64_v8a"
-        QDS_CI_JOB_OPENSSL_PATH: "/opt/openssl/ssl_3/arm64-v8a"
-      - QDS_CI_JOB_TARGET_ARCH: "armv7"
-        QDS_CI_JOB_OPENSSL_PATH: "/opt/openssl/ssl_3/armeabi-v7a"
-      - QDS_CI_JOB_TARGET_ARCH: "x86"
-        QDS_CI_JOB_OPENSSL_PATH: "/opt/openssl/ssl_3/x86"
-      - QDS_CI_JOB_TARGET_ARCH: "x86_64"
-        QDS_CI_JOB_OPENSSL_PATH: "/opt/openssl/ssl_3/x86_64"
-  variables:
-    QDS_CI_JOB_BUILD_PATH: "${QDS_CI_CACHE_PATH}/${QDS_CI_JOB_TARGET_ARCH}/build"
-    QDS_CI_JOB_ARTIFACTS_PATH: ${QDS_CI_ARTIFACTS_PATH}/${QDS_CI_JOB_TARGET_ARCH}
-    QDS_CI_JOB_ARTIFACTS_PATH_APP: ${QDS_CI_JOB_ARTIFACTS_PATH}/app
-    QDS_CI_JOB_ARTIFACTS_PATH_TEST: ${QDS_CI_JOB_ARTIFACTS_PATH}/test
   artifacts:
-    name: qt_ui_viewer-${CI_JOB_ID}-qt${QDS_CI_QT_VERSION}-${QDS_CI_JOB_TARGET_ARCH}
+    name: qt_ui_viewer-${CI_JOB_ID}-qt${QDS_CI_QT_VERSION}-${QDS_CI_JOB_TARGET_PLATFORM}
     expose_as: "build-artifacts"
     paths:
       - ${QDS_CI_ARTIFACTS_PATH}
     expire_in: 1 week
+
+build-android:
+  extends: .build-common
+  variables:
+    QDS_CI_JOB_TARGET_PLATFORM: "android"
+    QDS_CI_JOB_ARCHS: android_arm64_v8a android_armv7 android_x86 android_x86_64
+    QDS_CI_JOB_OPENSSL_PATH: "/opt/openssl/ssl_3/arm64-v8a"
+    QDS_CI_JOB_BUILD_PATH: "${CI_PROJECT_DIR}/${QDS_CI_JOB_TARGET_PLATFORM}/build"
+    QDS_CI_JOB_ARTIFACTS_PATH: ${QDS_CI_ARTIFACTS_PATH}/${QDS_CI_JOB_TARGET_PLATFORM}
+    QDS_CI_JOB_ARTIFACTS_PATH_APP: ${QDS_CI_JOB_ARTIFACTS_PATH}/app
+    QDS_CI_JOB_ARTIFACTS_PATH_TEST: ${QDS_CI_JOB_ARTIFACTS_PATH}/test
+    QDS_CI_JOB_CMAKE_BUILD_TARGET: "aab"
   script:
     - mkdir -p ${QDS_CI_JOB_ARTIFACTS_PATH_APP} ${QDS_CI_JOB_ARTIFACTS_PATH_TEST}
-    - export QDS_CI_JOB_QT_PATH="${DOCKER_ENV_QT_PATH_WITH_VERSION}/android_${QDS_CI_JOB_TARGET_ARCH}"
+    - export QDS_CI_JOB_QT_PATH="${DOCKER_ENV_QT_PATH_WITH_VERSION}/android_arm64_v8a"
     - *build-components
-    - *build-android-apps
+    - *build-app
     - *copy-and-sign-apks
     - *copy-and-sign-aab
 
 build-desktop:
-  extends: .pipeline_common
-  stage: build
+  extends: .build-common
   variables:
-    QDS_CI_JOB_TARGET_ARCH: "gcc_64"
-    QDS_CI_JOB_BUILD_PATH: "${QDS_CI_CACHE_PATH}/${QDS_CI_JOB_TARGET_ARCH}/build"
-    QDS_CI_JOB_ARTIFACTS_PATH: ${QDS_CI_ARTIFACTS_PATH}/${QDS_CI_JOB_TARGET_ARCH}
-  artifacts:
-    name: qt_ui_viewer-${CI_JOB_ID}-qt${QDS_CI_QT_VERSION}-${QDS_CI_JOB_TARGET_ARCH}
-    expose_as: "build-artifacts"
-    paths:
-      - ${QDS_CI_ARTIFACTS_PATH}
-    expire_in: 1 week
+    QDS_CI_JOB_TARGET_PLATFORM: "desktop"
+    QDS_CI_JOB_ARCHS: gcc_64
+    QDS_CI_JOB_BUILD_PATH: "${CI_PROJECT_DIR}/${QDS_CI_JOB_TARGET_PLATFORM}/build"
+    QDS_CI_JOB_ARTIFACTS_PATH: ${QDS_CI_ARTIFACTS_PATH}/${QDS_CI_JOB_TARGET_PLATFORM}
+    QDS_CI_JOB_CMAKE_BUILD_TARGET: "all"
   script:
     - mkdir -p ${QDS_CI_JOB_ARTIFACTS_PATH}
-    - export QDS_CI_JOB_QT_PATH="${DOCKER_ENV_QT_PATH_WITH_VERSION}/${QDS_CI_JOB_TARGET_ARCH}"
-    - *build-components
+    - export QDS_CI_JOB_QT_PATH="${DOCKER_ENV_QT_PATH_LINUX_GCC_64}"
     - apt-get update
     - apt-get install -y libpulse-dev
-    - |
-      cmake \
-      -S . \
-      -B ${QDS_CI_JOB_BUILD_PATH} \
-      -G Ninja \
-      -DCMAKE_BUILD_TYPE=Release \
-      -DCMAKE_PREFIX_PATH=${QDS_CI_JOB_QT_PATH} \
-      -DBUILD_EXAMPLES=OFF
-    - cat ${QDS_CI_JOB_BUILD_PATH}/src/dynamic_imports.qml
-    - cmake --build ${QDS_CI_JOB_BUILD_PATH}
+    - *build-components
+    - *build-app
+    - cp -r ${QDS_CI_JOB_BUILD_PATH}/src//qtuiviewer ${QDS_CI_JOB_ARTIFACTS_PATH}
diff --git a/cicd/stages/release.yml b/cicd/stages/release.yml
index e0deaef..171f8ad 100644
--- a/cicd/stages/release.yml
+++ b/cicd/stages/release.yml
@@ -5,7 +5,7 @@ create-packages:
   rules:
     - if: $CI_COMMIT_TAG
   needs:
-    - job: test-x86_64
+    - job: test-android
       optional: false
       artifacts: true
     - job: build-android
@@ -29,7 +29,7 @@ create-packages:
           cd "${arch}/app"
           tar -czf "${arch}.tar.gz" *
           echo "Uploading ${arch}.tar.gz to GitLab Package Registry"
-          curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file "${arch}.tar.gz" ${QDS_PACKAGE_URL}/qt-ui-viewer-${CI_COMMIT_TAG}-qt${QDS_CI_QT_VERSION}-${arch}.tar.gz
+          curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file "${arch}.tar.gz" ${QDS_PACKAGE_URL}/qt-ui-viewer-${CI_COMMIT_TAG}-qt${QDS_CI_QT_VERSION}-multiarch.tar.gz
           cd ${current_dir}
       done
   artifacts:
diff --git a/cicd/stages/test.yml b/cicd/stages/test.yml
index 1fd1728..f51db76 100644
--- a/cicd/stages/test.yml
+++ b/cicd/stages/test.yml
@@ -1,7 +1,18 @@
-# todo: run the tests for all architectures
-test-x86_64:
+.test-common:
   stage: test
   extends: .pipeline_common
+  variables:
+    GIT_SUBMODULE_STRATEGY: none
+    QDS_CI_JOB_TEST_RESULTS_PATH: ${CI_PROJECT_DIR}/test
+  artifacts:
+    paths:
+      - ${QDS_CI_JOB_TEST_RESULTS_PATH}/
+    reports:
+      junit: ${QDS_CI_JOB_TEST_RESULTS_PATH}/test.junit.xml
+    expire_in: 1 week
+
+test-android:
+  extends: .test-common
   tags:
     - qds-blade-server-shell
   needs:
@@ -11,9 +22,6 @@ test-x86_64:
     - job: build-desktop
       optional: false
       artifacts: true
-  variables:
-    GIT_SUBMODULE_STRATEGY: none
-    QDS_CI_JOB_TEST_RESULTS_PATH: ${CI_PROJECT_DIR}/test
   script:
     - |
       if [[ ${QDS_CI_SKIP_TESTS} == "false" ]]; then
@@ -35,7 +43,7 @@ test-x86_64:
         /opt/android/emulator/emulator -avd test -no-boot-anim -no-window -no-audio -no-snapshot -accel on & 2>&1 > /dev/null
         sleep 30
       fi
-    - cd ${QDS_CI_ARTIFACTS_PATH}/x86_64/test || exit 1
+    - cd ${QDS_CI_ARTIFACTS_PATH}/android/test || exit 1
     - mkdir -p ${QDS_CI_JOB_TEST_RESULTS_PATH}
     - adb install -r -g android-build-release.apk
     - adb shell pm clear io.qt.qtdesignviewer.test
@@ -71,9 +79,27 @@ test-x86_64:
     - mv output.junit.xml ${QDS_CI_JOB_TEST_RESULTS_PATH}/test.junit.xml
     - chmod +x ${CI_PROJECT_DIR}/tests/scripts/get_test_result.sh
     - ${CI_PROJECT_DIR}/tests/scripts/get_test_result.sh ${QDS_CI_JOB_TEST_RESULTS_PATH}/test.junit.xml
-  artifacts:
-    paths:
-      - ${QDS_CI_JOB_TEST_RESULTS_PATH}/
-    reports:
-      junit: ${QDS_CI_JOB_TEST_RESULTS_PATH}/test.junit.xml
-    expire_in: 1 week
+
+
+# it's not working as of because of the headless mode
+# possible bugs:
+# - https://bugreports.qt.io/browse/QTBUG-124467
+# - https://bugreports.qt.io/browse/QTBUG-126508
+.test-desktop:
+  extends: .test-common
+  needs:
+    - job: build-desktop
+      optional: false
+      artifacts: true
+  script:
+    - |
+      if [[ ${QDS_CI_SKIP_TESTS} == "false" ]]; then
+        echo "Running tests";
+      else
+        echo "Skipping tests";
+        exit 0;
+      fi
+    - cd ${QDS_CI_ARTIFACTS_PATH}/gcc_64 || exit 1
+    - apt update; apt install -y libxcb-cursor0
+    - ./qtuiviewer_test
+    - cp output.junitxml ${QDS_CI_JOB_TEST_RESULTS_PATH}/test.junit.xml
diff --git a/src/backend/backend.cpp b/src/backend/backend.cpp
index 78f62a7..fe564c3 100644
--- a/src/backend/backend.cpp
+++ b/src/backend/backend.cpp
@@ -173,7 +173,7 @@ void Backend::initProjectManager()
 void Backend::initDsManager()
 {
     qDebug() << "Design Studio Manager thread started. Initializing Design Studio Manager";
-    m_dsManager.reset(new DesignStudioManager(m_settings.deviceUuid(), this));
+    m_dsManager.reset(new DesignStudioManager(m_settings.deviceUuid()));
 
     connect(m_dsManager.get(), &DesignStudioManager::projectReceived, this, &Backend::runProject);
 
@@ -259,8 +259,10 @@ void Backend::runProject(const QString &id, const QByteArray &projectData)
 
         if (!retVal)
             QMetaObject::invokeMethod(m_dsManager.get(), "sendProjectStopped", Q_ARG(QString, id));
-        else
-            QMetaObject::invokeMethod(m_dsManager.get(), "sendProjectRunning", Q_ARG(QString, id));
+        else {
+            QMetaObject::invokeMethod(m_projectManager.get(), "showAppWindow");
+            QMetaObject::invokeMethod(m_dsManager.get(), "sendProjectStarted", Q_ARG(QString, id));
+        }
 
         emit popupClose();
     });
diff --git a/src/backend/dsconnector/ds.cpp b/src/backend/dsconnector/ds.cpp
index ba39bd5..08c2420 100644
--- a/src/backend/dsconnector/ds.cpp
+++ b/src/backend/dsconnector/ds.cpp
@@ -19,7 +19,7 @@ using namespace Qt::Literals;
 constexpr auto deviceInfo = "deviceInfo"_L1;
 constexpr auto projectReceivingProgress = "projectReceivingProgress"_L1;
 constexpr auto projectStarting = "projectStarting"_L1;
-constexpr auto projectRunning = "projectRunning"_L1;
+constexpr auto projectStarted = "projectRunning"_L1;
 constexpr auto projectStopped = "projectStopped"_L1;
 constexpr auto projectLogs = "projectLogs"_L1;
 }; // namespace PackageToDesignStudio
@@ -247,9 +247,9 @@ void DesignStudio::sendProjectStarting()
     sendData(PackageToDesignStudio::projectStarting);
 }
 
-void DesignStudio::sendProjectRunning()
+void DesignStudio::sendProjectStarted()
 {
-    sendData(PackageToDesignStudio::projectRunning);
+    sendData(PackageToDesignStudio::projectStarted);
 }
 
 void DesignStudio::sendProjectStopped()
diff --git a/src/backend/dsconnector/ds.h b/src/backend/dsconnector/ds.h
index 069c988..5034d3c 100644
--- a/src/backend/dsconnector/ds.h
+++ b/src/backend/dsconnector/ds.h
@@ -23,7 +23,7 @@ public:
     // Send data
     void sendDeviceInfo();
     void sendProjectStarting();
-    void sendProjectRunning();
+    void sendProjectStarted();
     void sendProjectStopped();
     void sendProjectLogs(const QString &logs);
 
diff --git a/src/backend/dsconnector/dsmanager.cpp b/src/backend/dsconnector/dsmanager.cpp
index 1c1e602..9ca0224 100644
--- a/src/backend/dsconnector/dsmanager.cpp
+++ b/src/backend/dsconnector/dsmanager.cpp
@@ -9,26 +9,32 @@
 #include <QJsonObject>
 #include <QUdpSocket>
 
-DesignStudioManager::DesignStudioManager(const QString &deviceUuid, QObject *parent)
+DesignStudioManager::DesignStudioManager(const QString &deviceUuid,
+                                         const quint16 port,
+                                         QObject *parent)
     : QObject(parent)
+    , m_port(port)
     , m_deviceUuid(deviceUuid)
     , m_webSocketServer("DesignStudio", QWebSocketServer::NonSecureMode)
 {}
 
-void DesignStudioManager::init()
+bool DesignStudioManager::init()
 {
-    static bool initialized = false;
-    if (initialized) {
-        return;
+    if (m_webSocketServer.isListening()) {
+        qWarning() << "TCP server is already running";
+        return false;
+    }
+
+    if (!m_webSocketServer.listen(QHostAddress::Any, m_port)) {
+        qWarning() << "Failed to start TCP server on port" << m_port;
+        return false;
     }
-    initialized = true;
 
-    m_webSocketServer.listen(QHostAddress::Any, 40000);
     connect(&m_webSocketServer,
             &QWebSocketServer::newConnection,
             this,
             &DesignStudioManager::incomingConnection);
-    qDebug() << "TCP server listening on port 40000";
+    qDebug() << "TCP server listening on port" << m_webSocketServer.serverPort();
 
     m_discoveryTimer.setInterval(10000);
     connect(&m_discoveryTimer, &QTimer::timeout, [this]() {
@@ -51,6 +57,18 @@ void DesignStudioManager::init()
         udpSocket.writeDatagram(datagram, QHostAddress("10.0.2.2"), port);
     });
     m_discoveryTimer.start();
+
+    return true;
+}
+
+QString DesignStudioManager::webSocketServerName() const
+{
+    return m_webSocketServer.serverName();
+}
+
+int DesignStudioManager::webSocketServerPort() const
+{
+    return m_webSocketServer.serverPort();
 }
 
 void DesignStudioManager::incomingConnection()
@@ -64,6 +82,7 @@ void DesignStudioManager::incomingConnection()
                                                      &QObject::deleteLater);
     connect(designStudio.data(), &DesignStudio::disconnected, this, [this, designStudio]() {
         m_designStudios.removeOne(designStudio);
+        emit designStudioDisconnected(designStudio->id(), designStudio->ipv4Addr());
         qDebug() << "Remaining Design Studios:" << m_designStudios.size();
         if (m_designStudios.isEmpty())
             emit allDesignStudiosDisconnected();
@@ -106,11 +125,11 @@ void DesignStudioManager::sendProjectStarting(const QString &id)
     }
 }
 
-void DesignStudioManager::sendProjectRunning(const QString &id)
+void DesignStudioManager::sendProjectStarted(const QString &id)
 {
     for (const auto &designStudio : m_designStudios) {
         if (designStudio->id() == id)
-            designStudio->sendProjectRunning();
+            designStudio->sendProjectStarted();
     }
 }
 
diff --git a/src/backend/dsconnector/dsmanager.h b/src/backend/dsconnector/dsmanager.h
index 661407a..7c8fa08 100644
--- a/src/backend/dsconnector/dsmanager.h
+++ b/src/backend/dsconnector/dsmanager.h
@@ -11,13 +11,17 @@ class DesignStudioManager : public QObject
 {
     Q_OBJECT
 public:
-    explicit DesignStudioManager(const QString &deviceUuid, QObject *parent = nullptr);
+    explicit DesignStudioManager(const QString &deviceUuid,
+                                 const quint16 port = 40000,
+                                 QObject *parent = nullptr);
 
-    void init();
+    bool init();
+    QString webSocketServerName() const;
+    int webSocketServerPort() const;
 
 public slots:
     void sendProjectStarting(const QString &id);
-    void sendProjectRunning(const QString &id);
+    void sendProjectStarted(const QString &id);
     void sendProjectStopped(const QString &id);
     void sendProjectLogs(const QString &id, const QString &logs);
     QString getDesignStudioIp(const QString &id) const;
@@ -28,6 +32,7 @@ private:
     // Network
     QWebSocketServer m_webSocketServer;
     QTimer m_discoveryTimer;
+    const quint16 m_port;
 
     // Connected Design Studios
     QList<QSharedPointer<DesignStudio>> m_designStudios;
diff --git a/src/backend/main.cpp b/src/backend/main.cpp
index 237cac5..3c4bc11 100644
--- a/src/backend/main.cpp
+++ b/src/backend/main.cpp
@@ -33,8 +33,6 @@
 int main(int argc, char *argv[])
 {
     Logger::instance();
-
-    qDebug() << "Starting Qt Design Viewer";
     qputenv("QML_COMPAT_RESOLVE_URLS_ON_ASSIGNMENT", "1");
 
     QApplication app(argc, argv);
@@ -52,6 +50,7 @@ int main(int argc, char *argv[])
 #ifdef Q_OS_ANDROID
     view.showMaximized();
 #else
+    QApplication::setWindowIcon(QIcon(QStringLiteral(":/images/appicon.svg")));
     view.show();
 #endif
 
diff --git a/src/backend/projectmanager.cpp b/src/backend/projectmanager.cpp
index 016e710..90a1e04 100644
--- a/src/backend/projectmanager.cpp
+++ b/src/backend/projectmanager.cpp
@@ -287,6 +287,8 @@ bool ProjectManager::runProjectInternal(const QByteArray &project)
 
     qDebug() << "Setting up the quickWindow";
     m_quickWindow.reset(qobject_cast<QQuickWindow *>(topLevel));
+    m_quickWindow->setVisible(false);
+
     if (m_quickWindow) {
         qDebug() << "Running with incubator controller";
         m_qmlEngine->setIncubationController(m_quickWindow->incubationController());
@@ -306,7 +308,7 @@ bool ProjectManager::runProjectInternal(const QByteArray &project)
         view->setResizeMode(QQuickView::SizeViewToRootObject);
         m_quickWindow->setBaseSize(QSize(contentItem->width(), contentItem->height()));
     }
-    showAppWindow();
+
     return true;
 }
 
@@ -344,7 +346,7 @@ void ProjectManager::orientateWindow(Qt::ScreenOrientation orientation)
              << m_quickWindow->width() << Qt::endl
              << "-- Child size: " << childItem->height() << " x " << childItem->width() << Qt::endl
              << "-- Child pos: " << childItem->x() << ", " << childItem->y() << Qt::endl
-             << "-- Child scale: " << childItem->scale();
+             << "-- Child scale: " << childItem->scale() << Qt::endl;
 
     const QSizeF newContentSize = childItem->size().scaled(screenGeometry.size().toSizeF(),
                                                            Qt::AspectRatioMode::KeepAspectRatio);
@@ -369,12 +371,15 @@ void ProjectManager::showAppWindow()
     qDebug("Initializing and showing the QML app window");
 
     QScreen *screen = QGuiApplication::primaryScreen();
-    connect(screen, &QScreen::orientationChanged, this, &ProjectManager::orientateWindow);
+    connect(screen, &QScreen::orientationChanged, this, [this](Qt::ScreenOrientation orientation) {
+        orientateWindow(orientation);
+    });
+
     orientateWindow(screen->orientation());
 
     connect(m_quickWindow.data(), &QQuickWindow::closing, this, [this, screen]() {
         qDebug() << "QML app window is closing";
-        disconnect(screen, &QScreen::orientationChanged, this, &ProjectManager::orientateWindow);
+        disconnect(screen, &QScreen::orientationChanged, this, nullptr);
         emit closingProject(m_sessionId);
         m_sessionId.clear();
     });
@@ -385,11 +390,16 @@ void ProjectManager::showAppWindow()
 
 void ProjectManager::stopProject()
 {
-    if (!m_quickWindow || !m_quickWindow->isVisible())
+    if (!m_quickWindow)
         return;
 
     qDebug("Stopping the QML app window");
     m_quickWindow->close();
+
+    m_qmlComponent.reset();
+    m_qmlEngine.reset();
+    m_quickWindow.reset();
+    m_sessionId.clear();
 }
 
 QString ProjectManager::sessionId() const
diff --git a/src/backend/projectmanager.h b/src/backend/projectmanager.h
index ae12e3c..269552b 100644
--- a/src/backend/projectmanager.h
+++ b/src/backend/projectmanager.h
@@ -41,8 +41,11 @@ public slots:
                     const bool autoScaleProject,
                     const QString &sessionId);
     void stopProject();
+    void showAppWindow();
 
 private:
+    friend class TestProjectManager;
+
     // Member variables
     QByteArray m_projectData;
     QString m_projectPath;
@@ -67,11 +70,9 @@ private:
     QString getMainQmlFile(const QString &projectPath, const QString &qmlProjectFileContent);
     QStringList getImportPaths(const QString &projectPath, const QString &qmlProjectFileContent);
     bool isQt6Project(const QString &qmlProjectFileContent);
-    void parseQmlProjectFile(const QString &fileName, QString *mainFile, QStringList *importPaths);
 
     // window management
     void orientateWindow(Qt::ScreenOrientation orientation);
-    void showAppWindow();
 
 signals:
     void closingProject(const QString &sessionId);
diff --git a/src/backend/settings.cpp b/src/backend/settings.cpp
index cb04596..408d0db 100644
--- a/src/backend/settings.cpp
+++ b/src/backend/settings.cpp
@@ -35,6 +35,18 @@ Settings::Settings()
     }
 }
 
+bool Settings::clearSettings()
+{
+    const auto backup = m_settings;
+    m_settings = QJsonObject();
+    const bool rV = saveSettings();
+    if (rV)
+        applyDefaultSettings();
+    else
+        m_settings = backup;
+    return rV;
+}
+
 void Settings::applyDefaultSettings()
 {
     m_settings["autoScale"] = true;
diff --git a/src/backend/settings.h b/src/backend/settings.h
index eb87bb2..739dfd7 100644
--- a/src/backend/settings.h
+++ b/src/backend/settings.h
@@ -10,6 +10,8 @@ class Settings
 public:
     Settings();
 
+    bool clearSettings();
+
     void setAutoScaleProject(const bool &enabled);
     void setDeviceUuid(const QString &deviceUuid);
     void setKeepScreenOn(const bool &enabled);
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 5c840f4..71d0840 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -1,10 +1,13 @@
 set(TARGET_NAME ${PROJECT_NAME}_test)
 
-find_package(Qt6 REQUIRED COMPONENTS Test Core Quick Gui Multimedia WebSockets)
+find_package(Qt6 REQUIRED COMPONENTS Test Core Quick Gui Widgets Multimedia WebSockets)
 
 enable_testing(true)
 qt_add_executable(${TARGET_NAME}
     tst_settings.cpp tst_settings.h
+    tst_dsmanager.cpp tst_dsmanager.h
+    tst_projectmanager.cpp tst_projectmanager.h
+    mock_ds.cpp mock_ds.h
     main.cpp
 )
 
@@ -12,10 +15,18 @@ add_test(NAME ${TARGET_NAME} COMMAND qtuiviewer_test)
 target_link_libraries(
     ${TARGET_NAME}
     PRIVATE
-    Qt::Test Qt::Core Qt::Quick Qt::Gui Qt::Multimedia Qt::WebSockets
+    Qt::Test Qt::Core Qt::Quick Qt::Gui Qt::Multimedia Qt::WebSockets Qt::Widgets
     qtuiviewerlib
 )
 
+qt_add_resources(${TARGET_NAME} "resources"
+    PREFIX
+        "/"
+    FILES
+        "data/test_project/test_project_success.qmlrc"
+        "data/test_project/test_project_fail.qmlrc"
+)
+
 set_target_properties(${TARGET_NAME} PROPERTIES QT_ANDROID_PACKAGE_NAME "io.qt.qtdesignviewer.test")
 set_property(TARGET ${TARGET_NAME}
     APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/android
diff --git a/tests/android/AndroidManifest.xml b/tests/android/AndroidManifest.xml
index 294377b..440774b 100644
--- a/tests/android/AndroidManifest.xml
+++ b/tests/android/AndroidManifest.xml
@@ -5,7 +5,7 @@
     <!-- %%INSERT_FEATURES -->
     <supports-screens android:anyDensity="true" android:largeScreens="true"
         android:normalScreens="true" android:smallScreens="true" />
-    <application android:icon="@mipmap/app_icon" android:debuggable="true"
+    <application android:icon="@mipmap/ic_launcher" android:debuggable="true"
         android:name="org.qtproject.qt.android.bindings.QtApplication"
         android:extractNativeLibs="true"
         android:hardwareAccelerated="true" android:label="Qt UI Viewer Test"
diff --git a/tests/android/res/drawable/ic_launcher_background.xml b/tests/android/res/drawable/ic_launcher_background.xml
new file mode 100644
index 0000000..e3c2454
--- /dev/null
+++ b/tests/android/res/drawable/ic_launcher_background.xml
@@ -0,0 +1,26 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:aapt="http://schemas.android.com/aapt"
+    android:width="108dp"
+    android:height="108dp"
+    android:viewportWidth="108"
+    android:viewportHeight="108">
+  <group android:scaleX="0.99"
+      android:scaleY="0.99"
+      android:translateX="0.54"
+      android:translateY="0.54">
+    <path
+        android:pathData="M0,13.5V108H94.5L108,94.5V0H13.5L0,13.5Z">
+      <aapt:attr name="android:fillColor">
+        <gradient 
+            android:startX="104.99"
+            android:startY="-26.62"
+            android:endX="11.55"
+            android:endY="126.08"
+            android:type="linear">
+          <item android:offset="0.14" android:color="#FF014B57"/>
+          <item android:offset="1" android:color="#FF0F7080"/>
+        </gradient>
+      </aapt:attr>
+    </path>
+  </group>
+</vector>
diff --git a/tests/android/res/drawable/ic_launcher_foreground.xml b/tests/android/res/drawable/ic_launcher_foreground.xml
new file mode 100644
index 0000000..f095325
--- /dev/null
+++ b/tests/android/res/drawable/ic_launcher_foreground.xml
@@ -0,0 +1,18 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="108dp"
+    android:height="108dp"
+    android:viewportWidth="108"
+    android:viewportHeight="108">
+  <group android:scaleX="0.66"
+      android:scaleY="0.66"
+      android:translateX="17.37"
+      android:translateY="17.04">
+    <group>
+      <clip-path
+          android:pathData="M0.25,0.13h107.75v107.75h-107.75z"/>
+      <path
+          android:pathData="M28.84,62.54C28.84,67.29 31.25,69.66 36.08,69.66C40.91,69.66 43.33,67.29 43.33,62.54V35.42H51.59V62.36C51.59,67.35 50.29,71.02 47.69,73.37C45.14,75.69 41.27,76.84 36.08,76.84C30.89,76.84 27,75.69 24.41,73.37C21.85,71.02 20.58,67.35 20.58,62.36V35.42H28.84V62.54ZM82.13,35.42H90.81L81.35,76.13H66.09L56.63,35.42H65.31L72.38,68.94H75.07L82.13,35.42Z"
+          android:fillColor="#2CDE85"/>
+    </group>
+  </group>
+</vector>
diff --git a/tests/android/res/mipmap-anydpi-v26/ic_launcher.xml b/tests/android/res/mipmap-anydpi-v26/ic_launcher.xml
new file mode 100644
index 0000000..bbd3e02
--- /dev/null
+++ b/tests/android/res/mipmap-anydpi-v26/ic_launcher.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
+    <background android:drawable="@drawable/ic_launcher_background"/>
+    <foreground android:drawable="@drawable/ic_launcher_foreground"/>
+</adaptive-icon>
\ No newline at end of file
diff --git a/tests/android/res/mipmap-anydpi-v26/ic_launcher_round.xml b/tests/android/res/mipmap-anydpi-v26/ic_launcher_round.xml
new file mode 100644
index 0000000..bbd3e02
--- /dev/null
+++ b/tests/android/res/mipmap-anydpi-v26/ic_launcher_round.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
+    <background android:drawable="@drawable/ic_launcher_background"/>
+    <foreground android:drawable="@drawable/ic_launcher_foreground"/>
+</adaptive-icon>
\ No newline at end of file
diff --git a/tests/android/res/mipmap-hdpi/app_icon.png b/tests/android/res/mipmap-hdpi/app_icon.png
deleted file mode 100644
index 74a188d073456264ab840da9314a48447fc95fcf..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 4461
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

diff --git a/tests/android/res/mipmap-hdpi/ic_launcher.webp b/tests/android/res/mipmap-hdpi/ic_launcher.webp
new file mode 100644
index 0000000000000000000000000000000000000000..45b059ae192f60f60ed2303339c36c294dbbfc3e
GIT binary patch
literal 2088
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
SzWTt&vVVF2{`nv9|I-C9wwQGQ

literal 0
HcmV?d00001

diff --git a/tests/android/res/mipmap-hdpi/ic_launcher_round.webp b/tests/android/res/mipmap-hdpi/ic_launcher_round.webp
new file mode 100644
index 0000000000000000000000000000000000000000..6478dcebfebd3dd0c861fa21138c69bc168fffc9
GIT binary patch
literal 3586
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
I22Joy0BTV65&!@I

literal 0
HcmV?d00001

diff --git a/tests/android/res/mipmap-ldpi/app_icon.png b/tests/android/res/mipmap-ldpi/app_icon.png
deleted file mode 100644
index a52520e2630446955333139ca069431c38b75376..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 798
zcmV+(1L6FMP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800009a7bBm000ie
z000ie0hKEb8vp<T&`Cr=R9M69mOV^UQ54624+<?UAdpg!PZa`~sNiJ6K%5*+4C?Bl
zMnmFGjIjn69bI5>(zqBCb#anJiHSxBjo*9-6tPHKT6jJv@AdUwhmuDhP%Vl&*#GqI
zJtsN8oOAAZ2Xe~kf0vTUu<NMb4_y2cLC5d-t+;uAJNR1V{mbA0j`YLMZvSQA{NL;W
z8-ThncgkH<tQR<)&hCR9bne~B*mRiwyH6}1Z>fjg6Ndn}cKZ?a)fF7++J}_TJ8++b
zDJ<XJja8gH+zG(dTMwCye)}<iVI+Kp5hLGGK#jLVwl~+VYtn*(eA=690dTtti7qT!
z=cbxUK2FVAz8x)fv^UohUrrF2*RtyYfTWo~*L4LzBn1d*W=i46=P-tu1fZ?4%4Tb8
zNS)tJ&X5!`dw_JA!Xy$6=f{^cq!jBw%w&?`KnQ@=MxV{rx+4Yfc6=uLSFn+!5Q?U0
z%!R}GOG}IE?C&Omselcu8SrlN;4SrR4S)rLRF>oM)l#kG_06XgK)tUVkE_sD4v`cL
z2fl6%z*?#5yrM45i`OI5NC}DpEe$>!!02>@xMBVo003QI&YKE;ArK79RNbp(I>6hN
z@@yJF)l#W0b-Qf$rNu?ocT8RFhZi3v6@aGdGR%ZdOPy~8VCL5VCW2uAS{kZ3+_fK%
z+euZ$HclTo2tdL#nTgC>{;x&?0PJb1RSvY(<1Q*(X~1CilQ3O_&)?H?EJjUbIelll
z>7(0bzxm)PNwGThUJg$IP+3;Om2<}dm<~l59h(%M;u7I<7dey-e!dwq5Z4WQuH4|+
zn=z!6w)^Y%9y4%f(B}Uo6eSe1kJ^{R0VFa{(^N+!Jj>#urb{7aGwuT=U1v5NSFS<_
z+r8z)b%Rh$MP!(2*)1T-Wp$|k!cR+(u4Titdg3>?pG)dczkf@g;pT!5__urx{7&$k
ca>@zdJ4T%*rBq*(lmGw#07*qoM6N<$g4j)O-T(jq

diff --git a/tests/android/res/mipmap-mdpi/app_icon.png b/tests/android/res/mipmap-mdpi/app_icon.png
deleted file mode 100644
index 36a356c0cec907702d1ecd5562586ca8ee72325c..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1758
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
At^fc4

diff --git a/tests/android/res/mipmap-mdpi/ic_launcher.webp b/tests/android/res/mipmap-mdpi/ic_launcher.webp
new file mode 100644
index 0000000000000000000000000000000000000000..f023c33ba54629232b36c2efda70367edc74dd99
GIT binary patch
literal 1430
zcmV;H1!?+HNk&GF1pok7MM6+kP&iD21pojqFTe{B2?cH2NJ@5pk3Zp&i0J<Wq>liY
zsK&GfH~{{FNZY1p`2OwQgrZ1NqZR?=6cGQ)c;-naZIg4<ztBnOe?kMG;Q^DKof{yg
zW@ZKmzyLe|_kogZ+oo-+&2#RvZQDioRsn4PYTVlVq>Z#~+t0jwXU02w?X@5C5+g}c
zB*~-q?wR$M@D<?gloZ>xYCB`z_ruLpTGYg6A|}3{rz2`m05dZ)<Ca_7wyI_GY~0<+
z=!hoh!c(Usix^bm*)N~m>%ftuxY-@UFkBn6!GA!(HR5;Lo;Yk>7h%8|9f8$t)Fyxi
zm+Tnrv+kodsXb`$vo{-K?=AHG=^f@50Ar}zz`y#;{S82?Js){KKku#UxN|(n6f|Z)
zf&q{Q40WTm0RY%Y0Hgo#mJe489G$O4J@>8K-a1MDK>`><r9i3M0AM6qdJag|u`}(@
z)Qe94MbL^ji1yv*=bK@U85o2n8J(mNO9qLd$P7Zx`~P+F`Qa4(E7z*A!`20-|9)MI
znNoT+Iha6+f}{Z#F{#%w8DOUPy9S4SsIoogM}?&WNfXEcZ4r!%nM9O`ajGIS6@Vnb
zXaI?e76C|7wSgogO`7p_l3;X@KnT=40FZ<MC8_OMl5!FNRKZF}U_e?Y)<%m|#Ckmo
zLXad)Jd7?8s*@mONI0d1kPwl?s3e8aVjW2!0A?ChF$4q&VI)XM0EiL+1OlYd6%hyl
zX!MXMqRt=$(tzuJWcvpaFZ`q-cicRAdHAwW$m2IpUGBYEuti`<Hsa}Lo_^+*n?MKw
z2n%nhq9KgsZ`k-gF#8061Xf`aHef~s7Re^rD+@p%5ZJzK#%9beSzt)28X2-QfDnMD
z4gmn7{BVFCR!D%5z+wP=cL)%GKpWQsny8B=fDoj0Vn<5`>{>`5Fr(~RAmeZg(F7K#
z)a>LS0)zn}0f0b2hz5bck7W|D5dA{POpEyef5mu&D59eoLPUh6m7O6V2mm3+T1*No
z#$qD^){OxCStbeu8d6V00wSb+LZpZ&<DY;fSR^E3CjkDJqNjTZ5u!vk0#NMv?Fqn2
zfqshx0QmL<0;Jwk4he*iR>TYdh!Et2ObKjXLgvUufisv0LIMHORkVL<AS4?=iqOTM
zakjv`2=vSRfbYvxiGYICETXIf01Jz_fDsuHNSWAzgiOX*1D48aY`zJ=iADyAC^D0s
zYDGkpMm#J4hfZD_$7N<Y5Ni%FjR^rDU$%g`Si9^p0KP3D0Wu^6I+_uL1il{U06R_|
zI5~w8S#=nZj4v;P2nm6sF+kwPu@i6}{~mw@U`U{jBJvY>`!WVt5&$rezs5TY0E8SV
zX9_I9EP+1`A!T-w9_kZ|$d%8xc;@D<%b~-p0>3TajbCIeqJ#h(D=$Ct>|^olBNzOQ
z6A=<9NVORt1PK5DBu+nR|3krOUjmRYfRO^E<KO`y<q73rK!r3cQRoH$R0}~uf<W;)
zp>~(00S44aGpP!JK%m&BxM=E=N-zXrQNJbw2$X4<XzCml5sZ|Qga}c)#{xhoAX;^z
zQ*1XwYDLeghX7JsO%O<Ql9V<9n5Evf-j)pfFKC89xp4KmgjSDH)aR`NP<*E_dhh+^
z!)31rU;9?8$sm{nMxr<i26T(ih|{#5nRJZDeEA3N83p!P_febK#b^I*W+Nnx_6KH2
z+9Fhwpg)sS{yDpEPv8EzI5%n&49f59s7<YQ<Y?mlnwi+o-(Jf^PN!-S00Y{@1^BOE
z1A0({Gvl+*FRwrUyYh|+1X_;ie?9*5;lB%y3$}0mJOHKvm*V5T4bJTI9_B`Ef?kPY
kpY<3Yn1D-lGriAx`cB)aMuE1%fwt4px@7y_?Z7qS07A)tF#rGn

literal 0
HcmV?d00001

diff --git a/tests/android/res/mipmap-mdpi/ic_launcher_round.webp b/tests/android/res/mipmap-mdpi/ic_launcher_round.webp
new file mode 100644
index 0000000000000000000000000000000000000000..a3cc2d08d9da07471aba193ffefba9328d3299aa
GIT binary patch
literal 2340
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
K%gGvjo0S5m!iuW^

literal 0
HcmV?d00001

diff --git a/tests/android/res/mipmap-xhdpi/app_icon.png b/tests/android/res/mipmap-xhdpi/app_icon.png
deleted file mode 100644
index e1f2e9dc1f2653cdb78f3392df37664615f811aa..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 6367
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
LsHIe?U>){<VW;Fx

diff --git a/tests/android/res/mipmap-xhdpi/ic_launcher.webp b/tests/android/res/mipmap-xhdpi/ic_launcher.webp
new file mode 100644
index 0000000000000000000000000000000000000000..0c33762a480bca1d329d2b90252297fdb106b8e6
GIT binary patch
literal 2686
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

literal 0
HcmV?d00001

diff --git a/tests/android/res/mipmap-xhdpi/ic_launcher_round.webp b/tests/android/res/mipmap-xhdpi/ic_launcher_round.webp
new file mode 100644
index 0000000000000000000000000000000000000000..6599d9b307275916df8e1da8a74c6ad9917fbf02
GIT binary patch
literal 4958
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

literal 0
HcmV?d00001

diff --git a/tests/android/res/mipmap-xxhdpi/app_icon.png b/tests/android/res/mipmap-xxhdpi/app_icon.png
deleted file mode 100644
index 652a8e9b7e4e7ebb31424805025b1a2bce8e708d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 13363
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
HM2G$lKY8wd

diff --git a/tests/android/res/mipmap-xxhdpi/ic_launcher.webp b/tests/android/res/mipmap-xxhdpi/ic_launcher.webp
new file mode 100644
index 0000000000000000000000000000000000000000..bb3c5ea66b3356bf2195068b3dc4a6d8b6466a12
GIT binary patch
literal 3880
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

literal 0
HcmV?d00001

diff --git a/tests/android/res/mipmap-xxhdpi/ic_launcher_round.webp b/tests/android/res/mipmap-xxhdpi/ic_launcher_round.webp
new file mode 100644
index 0000000000000000000000000000000000000000..001d3b0de54aa94df573dc740f0d45ea2e8f245b
GIT binary patch
literal 7174
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
IXt_R@C9{2J=l}o!

literal 0
HcmV?d00001

diff --git a/tests/android/res/mipmap-xxxhdpi/app_icon.png b/tests/android/res/mipmap-xxxhdpi/app_icon.png
deleted file mode 100644
index 7a404f6cbb8e0acc99545092319bea31c384ecca..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 30716
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
Ow{Gfc<f~ge|9=2ce@%A)

diff --git a/tests/android/res/mipmap-xxxhdpi/ic_launcher.webp b/tests/android/res/mipmap-xxxhdpi/ic_launcher.webp
new file mode 100644
index 0000000000000000000000000000000000000000..c60e7e17d4c43dfa63500e0bf30802ddfc1fbd46
GIT binary patch
literal 4762
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

literal 0
HcmV?d00001

diff --git a/tests/android/res/mipmap-xxxhdpi/ic_launcher_round.webp b/tests/android/res/mipmap-xxxhdpi/ic_launcher_round.webp
new file mode 100644
index 0000000000000000000000000000000000000000..a41bd7a2b444bd7108df57d4334afc50bc5ae025
GIT binary patch
literal 9514
zcmV+_CDqzeNk&E@B>(_dMM6+kP&iB#B>(^~zrZgL35RXlND^!dzHhGog6G>3BKki8
zy3FB?q_ac<5E2|DT5UH;+a9q<ddK4bkONYy8IS;5F2A2!%a+0RWEcA=<^daf8W$Y+
z>g}hN2N)@1`o(ORC8c0{_ckC&ElASzvET1<|Cx9&iS5^2R=&#4KzGWCX|*3mcDop3
zY!+@KNs^QlSL74#po94F-!f!0cIVav*o`D9vf}tLwnnAV_;1ZKf|(gV9JP@oNuE2D
zD3(9Qee{0<Q1uKm9dk|m_F$%WC^{xeb#o)<wgCS1CZ3pv@VDE8Ca8c0v~<)2G|+@)
z3P1=L^3x+@fH6H85P-ZxQ6gh7rYE5jYBK199)L3lJ1R0QV=&gS=X@$hJgY!UCX=Zo
z0PWlNTX;PKh-82<Xh945^hpF@*%FXvK$A+nDw&ppRM3J<);Vtp2s;3oilC*9Ad`Sj
zwg5SITLXZpDJlREJ9hlt=4b8!AzLsp#{eMQw(f18a~<T^j!my)=!YA%GiNZqlDR9R
zthte6sPfOZhdYFjJt5q<5wJCce9N;CF!qLmwr!+@KkR+ILl6-Y!0hjg8&KAh$Z?W$
zg9HU+>7t*ug{Z`QK+HGB&I&n<P`sH^dfh1tos8mZ0L!v%EtA~*S<TGdVrCf0_SjPz
zdgL)Z5Iq1s2&0&prD`nZs{952fA6{XZ_nsNh?N=s%y1p<XtB%;X|@=KX@)f0V#acG
zgd{hT97&>A&&+DQdz}A&aaE<kie%fh(nJ1@elURrEFm<f`xfNbwpB&z*{>phf}n`P
zWkwFn-J$!vCqa_rux*w|d9%^_4iJcgKsyh>H~;_QMsmKt2FbFA=`PI7%!&UCa}FQC
zRvyMYjywTo<}8GnlVwH^&)AZhesxl-)dJ7opTOu`=Sy{X5~<?4Z@^QYnLQ?F-GTir
z^X|b?`5WpwzR84Rha|R*BuNsZt9$nDj5z-t{HrU&uWj3^?b@~#b8Wr%F{H_h*RmL8
z%3UCH{lEl&@n7`sSZFOv_99Q-vY45faZqcmX8PMd8Iq)LL}s<BM?16X>G7<+d$w)c
zzWe$97~8gex3<08*fHDPRT<$>l5ILVSjTm7N%qR?3o-&fJmHev&h(4EPnhz660y_w
z6(8h*?sir}kDC3>y{|vee*cuygrqWw;9IwPfiLnVeZy%v${p*3{;u-}?}#N?`_8v#
z#;ALoy2Mq*0yP#MA_5X;M~$*qDN8l{m)e-C@&-?rh@i!y-Ol_pFPi7RT#iC``K@zA
z2mp8&zxHRonQy;KKP8>I?a|SrvMiu#BU-7NDSRSEn2~6R6wHL9azu?NYYK`P#k8&w
z6`80ql$@d4$??DI=ve^3)!t^`aM~PIB<I3!C;&`&DpvjIBbI4a>sm^>oS08^<ZX=7
zU>*P!;x-s!f*93tP&J2D?TOYrwDG^wL=C{S|C=cfXc93;i}t4tkpKMWH;ZlaEUNQ~
zb;MGl4Oj*#m`N4O02I_>nN~ofO`-q^X(c5D03ewrJxuK`Et_a{`-l90^U<cUw;lzW
zKh28<1yJ)sqH<fOxl+ZYB&+`c07#t{T|0h!UVxNBhC-hpQKdv;0L(`^VaZ;te`|jC
z--}&D1sL;BgJM>Dib-d4uCrsD<73|byJx9uxq<2$Vhs@mP&}dFKNU17<^gojh*z{o
zqly&J)HQo7{YB{yTi?s=C-7xHMGfO;ZQljpetT_yc-*47ojCXRF>h{uyH=9KWlBSC
zYl*E@Ecr5sI<ZB^muih~h?9Wz_rK<}nWcSywa4_V`xBQ(@vxQ~6!QR$d*V^8oV-pg
z3TcH&K_S|dIV}bt#;AUXl6SxU{rsPd=gvY;H^4@JNK`(DJ5)VEdO5&<{OGT0001%4
zv9K+HQi)Vf&H*HUQoZ4w;};KN(%HUzcJ(vBJNbKa@LWGg$+M(u04g`16FVf?!qUrx
z2vM)bH5wV71c*H<UQzq>J_fhW8X`{?co#qSgJ*q^(wB(k^IT{(f~yVV6c-c7lnssG
ziL(uL;$ZZ6V2f)X#gj5C@H8*-xy}yfI+OpocdLpge-#ZzN@#y3>IAz0vdm|dVdPh-
z^U0ZYam%^Rgx^}41=1-Gi1GCMlNXcmD6wIv(EriO0?Z?k1UOX_I-7N(5Uq;WP(1cU
z_lGYA&-J@-(%B4P|9By#mV1fIfI?wzTW&e;R53Y-kuDam)*3YCEbs!Vd+VM_VX)fQ
zQUJ7Fsp<wIg2CV2mgFoNis%$Gkm)`ToYZEBS1E3AR;~olzrv*fp8f5^J(R;uB)upI
z7652Zh?@d40VEqjl<-+l(yJ~veUT6MV6fDum;=HY=aXKHj6_KoK&sfLZ_Kz2TXHn4
zRROAt^;*vd=K4}?r|&Cv`a_F~ONoVzRvof|ld5B;D4702aoGcSgY=(T0q5S9tL6d)
zhEPJck;Di+OkhksJprKNJnz0*fnuru)O5xwq921-&V$68Y^uS_1kMg6d<)1NurpTm
zpVlO-WC@W31P$842r@H0O>N!u9{?FiT}yWQzCnNC7yY(XXAESSv_H-b2Qhhw;F9xp
zfMlTNrme3)U*;&%DBiw|6cKn|72;KdYLcLsYXwNt{?}!Dzd!(*v}opl2||`-oslRG
zOBFF0P|V{ugPJ+c99w$1g(^pO_F7u4BncJ(4T2689Ai4f$RH#N3SU<n-p~j5AP*GO
z>60c@;7qrCL9n`*L4XVaO@g}nINfvH^3@&_l^H?KoEaj04nu`c$|yL+<X4bX$RsE=
zTJ7KcqVH30am|%f8DV@8&a{ndfz1>F=IUcY1PaV?Z%J()M3~?%AX7wjrf@Q0NT!Q2
zOFb@6-KT5DGud6pCXdU(<Z_V(w^5Z<%=WZgzjn)bkdq^3@)E;qMfr-}JB4PtEr%I1
z+$;Q-v;H{db1wI<K@28_HKr*$9|F2MQ~iH6*`q<f&bN8J)N+W9G)jW0x|ocLOrlMM
z<Sy{#sh$kF+gSm{2|T(oYyrd4hD5)Z&<pG$=gV486N25orQPpi(%B-)IF#kw_Q0e{
zVkSiNz7(2Af+&t)(kr$HT|{TwPt0a7PH}Fz$Anfux0rGfB6K;bLeOn*_j}+&`|1ek
z39vGdWhv&Ls)-4d(d1l&w4oY=aeDgA!7g|3)gFs{yDt>AZjH}4gJzk7DbfE5^C}c6
zqV79?*jJ}<dpDKN@i7bC{0YLE^b<>!n38>wG>QsQ*oDykH_q`f%iY6%{}j~Mwo#Kq
zQgSxYvj`>6BBTvj2<=1qtpDI5Khf^V`0M_BW{BE<6u?rdlglX;w<6?i8b)@6){Woe
ziy1!G6W6t|Sn0R;z09JPK0eFZ;ah|p2xKZ|a*f7@AZUIdWYQzsCD9uYJ^NoIM@gUz
zmsw_@_jlFHMP<3RN#d5nI^muDH;^aj1{zPSzWmo`#>xC1q70CXFn6)SnC(hpDw9G*
zpue5(=FHRJK^M@tPYGszOq53k%p?IHd7NXKiRD|uWmKu?FhN!7$;W(|huj66>+J9q
z`%~Mr{tlBcLsfK+>6l*f$oS%K7=lp$JMaD9zxYXC4;>Cz5nbCmuc5Gv)?HI4E-{mB
z1*|ZpQe=EA0JX~p=FjbqH2I1@-}^zEo1hZ+n%98TU$B{%(c}?h@n0iF*zUM~|NjgA
zz7>afDL?FM_0awr))`5WBng_TyP~=x#J}eQFZ10CDIe&0uzvkXp9;Hwn`X6-np&Yp
zCNVSkdz3{kLTbnXo7Hr2#tpMcA(08612^rfcYe|1pu<lDzS$p)Ozs$`no^Bk93_pg
zr4Yc>C^r)^nhMQo;*<CL_SfVxFK~zXyL%ML+40M%CJ|8nEn2S<X-UNGj8h>-lM)vy
z{C3w4@A8j#l%4Ad%O`x^aU-X%VJ0bbkqyHW9(|nhs8lqY_+?(<gP*tDDO3JR9Y7u>
z*j|Un`El~1_LcIOYt0(7!Oc(vzLe(j;q`MpagrV%<zrT!{{6$}s*bCtA1Vz>Vhu&n
zPKXgi%!hR!aCLcrjpFLdoSZKHl>0-M%LjSUOON;TPZ8JQej*}mEfq2oiyr67{b`c*
z%^;=#n&w~3xgvDA#X9;>%)kz8x*^%dEe3M+jAhY-t|2~0U9zBrMBN;{a!wD(2jWs=
z(j)uT9_#0Se<h`QxEVDnn$ymkSG_(Gljy;l?!!i4V!Zs<$&0>@n8n(7-F+xx+XG+v
z6UG-LqR-*ihElfkTVDH`tHe}Z`4lig{J-M>r>Cnv*82wj^rJlV(u*rSU9Yqo8qM2I
zC<k2Asfd;`IxOb~MT|PxCDbA>B|IPUA9fFdrfV#Lo2DxF@mAT0ro?XeTqJk&_8}2!
zSlTa13p$SW*#|@|3K+$Dk&%zx0pGESFFc`)V@5)k*nuM`#SO3e`^9uP7nY|z_g5>q
z016(Zm{8c)YbI38Mv<Ho%1yceT_8d6D=UVK2^qM6w_>>soI2|h?#pxJn=$FI6BXw^
zUahp5kQ6zY2$8@D5km6x&P<7n?J#?RH<Js;tVPCo@$16iBBuX%o0}xd#&z<ZNGjxC
zjlMIUUDtw4O*#LR895cDLoPSuz_?GwE|>#w%Ng7y7K)5b7(wZL4Y)|v7Pwr#jl^%}
zsow0%$3FK~D%OJx0@9I8piIcH4rMBewGqdMjOqCWeq6K+vxkh0QXgalBxWS^kRvPJ
z`+oW?`6x^p9QKf;d>t=V+RPg2=wiJBl1k*1qGYoVNQ_*yvQWkc0(}2SDupOfCnH%g
zFB9?*Y05w8>n^vs45T9I-a{J3(k-*$u}#KK15I)I|H>=xAxRQ4iBfs1)8#_K`>#Ar
z`Ln-0m9}DS&+mdr5);>B6J*RU)1{0x@pU&%8D}=8vypilxS7j7>SHiX@lhF{!+Me~
zNE0q%+f_^)!0%)%AKL-U?~VVVjFXM&Y(!q+uyFibo+~x)B|VvqzOK1@9nQ)~L<<96
zr0pp(@wAY!7)y~zL_G8$<34TEqM42nVkfY#Y{+-|fppa4j&sr6(zBFep^NUA4krr?
zshwPugq9U1<ZPrS$Ayd@oE3#N2R4!FLr%w<SN-*iJtYlO{z~%cUoWIB7Gt=WwG#iB
zVQWKUTx9G4Y{D<X*^u$i{!Jk@-1Ly6y&v%ykO6N&!)e*TfT9z}u((K|K_nbZ%HlkR
z(?iD2h9pT%+!bGtv9<W|9X1_Xa%6sK?k$s1-$8*u+{>!m2msPYi~wRr1TNlk9%S6M
z7*Klq24x&^V34w?4U(~fOUWvk>!x=U{G_jIZr3tOK&d8N-B?89)2zV9w@2=iE6f2w
zsv`N4gN%tWFvv2&L{h!Y)y4S_)EDl+vtlt4pO!g@DXFHEpw!CUKh2DZh^v+(sFT<W
z%BFD$@^Yby8AyS@)zY_tQ6L$U9<hAj_sdpA53(kK#bhe`7E%`bagChLLYX-p(KDPS
z^F_wmGFp^*q{O@n$mT79GE%!-2J%rJns%C7rHiDkW!J<B=@AnaBOj+8Wb8SfWo?9(
z+8WFn@@K2RJVBBKO+(xT5>f_;<_&A>Xrm|_J!7O~=~5)2g?jPU#*ds>WGs-`3)$8l
zc<m{3Mc#BBRw!MVxHxq1?d#Mon>=gUDJn^2T2ugZU+A{G92rXG*{-OIW{P<da@Fsb
zMA9V6o2`UsbhgvH#_v=d(okrY0evgnSk@XD`xdJA)f{Jbh4RWK%R>OiTp@#~Ny(JI
zN-{3-Gs!JdN^vugp(nyr%G5+SgnlSnukx^zO|!=uk#TGo>j4!25NZoiEXeOmzUhFd
z>VSe4fh+|{J|w~{=1cd9j4v$>rX-I^JSAcZ_Yj$?viLm6l1&?7kSAdhlC2m@TA)Gu
z*MyaSOQjPlA!E5IOjA)jBq(A-xinZJhL}qv%^M^pALYQwn(ywuubO1S#f>TkBnIh|
zN=TTC`$Tjt^M>-loZM+6V=($e>I5z>sf_p*m(7yMreKu5cAvs;xlwc?3E4~{4=a*9
zm^0<fgPhWip(OaofBqw*4|T{V3p$A{!E00kl_kDelQ;+`lX8zSMXc)wl?VY6k;PLX
zW53XHU1^p=#`{jRzM{JcHKO5t8JEDD2?=;tNbJrCNu=E}B_WvgT-D>?BZ?S+{MWhT
zHf0pPu?X_X_`pJ{1Q1EFq%u5*XuFNaRZHTfIgAeL@mE}rM$R%rBImPzqolS3A>v%z
zl3d;)3(v(S+fjvt$|y{R9uRCU;9_qXEi!gS$lW_2DB`R#2Es!i&p;9mu@cxR33UkS
zK9~`*tb@N=wIYioALoT~dK_ZMlDw!lf7&EdvM;A3#_GY~DSl505P+=6)k!8Qq%xD5
zYB~F3LPl*l|3Vy+g)&Rz#}vmNim4{+x6~-v03=nHQ3>BwYgFjY4_0+ygB`z{5P9o+
z`XVky2Op+IOrQtATn)%X;zCqzv}tld<1%Xz@Y*Gy3X?1jjCGJl@x+Tnfh-$cLqu=n
z7xcL-Rh>N~5V@mdJHjkM#t;4}BZX9IN&_N;BO-mQor8Z+#G#G&nTj-sAq{N}lg+vw
zMPLmw`;uj%#e_%@8A^|{k@W?*sZ$}ldCqJnYSn2=BomZm%VZCHYXg?QX!1O2*Qu8C
zDW~T{B7g?%WYqiigiww)=7`Y0pUPE#1A0)}i|Is7L^t*DU8~8qI4Ji1yQ*dF<-RAR
z2T4g0Hz6M)W{lmVlp481P{d=U6Ib*Xm4sZE!>G>qdj*b@CgBnUm%FLd=b;a;)|^NX
zA!0>2J4AeMsR;esuP7&$Q<9Rs)**vdXtR2~pBHe2??|F0gmTnT=xCXMC8b@_$J(Pp
z?#SX&?n&3qEE+Q2b0C=<W?-fTQB%B|Ig#yzp&84P%|v1nYQf}4+HDStymj0g(<Lm5
zc_M%2>lq}O9DbND68M%WKARY!Ar5Oe-P6cqX%6HrAl1vB6|n|gO9?xdrAGeDcL}Kw
zSd0o`JI=?G%UdA!EF;iD?ba!1xUSlUF4RgoV*-fl$Dqi0t%(vAY^FsVANT3+84`0i
zghYxc9VT=W%!&4v5%yyk3SuD3d`xp>8Z>R22^oVxOx>Y8euyYw*O05uC-Z^KFyswX
z=vst&G0ca&T9Al6C?Ax(&L|Mzw6_ij=HNjv!=EmLjP;_=H?{JtDP)1{79xh^EE8et
zaw-9#mTI%-2vz>BiC`Dun|d74HF<^-v{;Lk=hhZE|7AfE5f@-*BjZm<5$ZQ`^7AoQ
z3K_@3Az~EYA_Ezywra{2f+`$5GJJPpGhBo4h5r;nG9cA-gheuD1|4J^5;aK>*)BrH
zlpt@~u$&JOJDAmy5*d3!Ir6xK==QIzw3{PEpu^X?nd0jZaALOA3q(keoB*H{XVSa+
zd3aR0r@rGq=z#RYWmzeW?JdgV%}XYM>;s0JIUDlLJ8zJQjSmbNA1I~!9x^FQ_^$_K
zi27E@0EqzC>j)Igz?nx-Qx`rd<M|gII93;GB+{|vKIQafV2}XmD^1<_y<>(v*1aIH
zLZF(Mgo6fkInLnZ#I{Auf!U5|X{>QaoB9y6qH@K7<KhXmom2*dGB!kyK>PXA<vtPn
zNZ|<c+#w>057-e=GbvFL3J9j#LuQ5BxVd}HbzM*E?)i>}48A|Kq^jWUhYv=RGFgbv
zQNem#LQ)sI@eL76Ml{JK*dpS5^g-^i<?L@EXh)BnyJN;e(WWrvug+Zf|7Oz9ats=6
zHLs22-zUn+H83vEKDc#a2xK|-J()YGARk8@z>c4D5HWikgkB+)A7Uu{IHiY3s&A?%
z*(>!7A$xFbayBnFwPtswgc-?1>%>uoRK+u5>*;b1E@2~<WA9icyO<S14c&)dOAth@
z^8Du&2fZgppEJ@pnPQUaeL=yuA0Qf=gbBy(G`FCH96ak@B3vU;z+gHt`h}j?Bo6Il
zVvrE&UoJ5vTbJ{Oa@)YcRNzs90(CQI?lI(9v{M8h!I>+&9t<ms*tH{U>Mo~+E7nG@
zLGyXEx0uj_9NJDD7AZlL!p}Z@)7Win|8?9>%=-w<#rtm3v+qINZrHRKyBkMrkKGFI
zBMFHw2@{Tr;wU+o{?)4^*V*!BKfyI>Gw%o$hh-B8?(EVlc5fCHH*_sK$&8&ziNwfD
z&R9@KkEBA;H=8*371POfBG}+*HrG(a457JUuiHY#5l4c>9l{Iw*gfWyzz@pz3JV5h
zYw@7mYRc|i@R;6zY&5q2g>Av$1BAs-yf>#k-Hj(eorsCd8_lbH&THE92mYpgh0j_r
z80&;A5`!t;YgG?la@GUIK?0`!55)#h9GU$uQdr8Viek)5hA$?D2k(<@rVoYl<lHb|
zNG9R)nT^o<>V=uHk!bu)!Pij#tA#7Bes4F1I<}@%J0vZparwc3G_AO0(=sZyW9B%c
z7;tEmZ#JW-&<OH$YH!!S3Wb;yiTMyA5&q1(Woqq~<>Al8F^5d~I1b0048w#8dHBeS
zk%hdd8N>mp3tn|LLfM=LPQ1cQv-h&oLqvF(kW>8(c0tA7@#`|dEqRNKnI_Az@y<Kv
z;m#)b`kry-;YeBUjFfAMs5lE_8@%d_i85VKg4O&_k97V)1QYJ_i4;E+5gVQcwR1C3
zk^Y#mHAA8?OZ%)DW5+J7aBff6_Qs4w#oBUc3~bJh+u7U#O*>@=dhjP^Uyy78X#DCl
zTtYG{=CW_8I0@Wq>GNkD^Q}5&Wf36(QU@Ec|GVRPy2VO5itR=y<wrz9a;E%fC03S2
za{a|<4c%<~%Z7j1_>VCW$2SwJNMfYHCP|vbRl9B7Y*|pH?znF~AON9eVeXt@s+=sz
z6f+u&qQ%sZS2;Bkyly0@*-1jks!rfUU->!|d@D*;D=C@ar5<$sY=w#I*#3>0T6u#B
z#R!PBAR>z<f;B5431<v0=dfU3_X!`|4@sR(U}SrgCaY%TTZJBCFUX=qjEw|{+pDbC
zDh_1ljq4c5I933prT5=|)odf9wfaV`&ScBI<s`B)lkF`7l)9SmwaK=rS#$UMP<jqv
zJ65`DGF7@rw@NEjVEH$%b|JyaObp})qoe%wK$we@mr-%gW1s_C1y%GNf6PW|yXAfo
zBW}&S`Di$_1nwN;`L)UJZyhTFs{~dObWk9dQ)Js(ib~R!u!7ngX-mwM^ifJQ#B7UV
zCBGi9xCpT`SS9l}<rrX|+d_6aG+dWdk*m(0D<uh)l15q$+kF0K3Hx;L5f_z`QlXaY
zr0J%)JrUSs(swtfT*1i3jB$%j3m$ebS4Gsba~oS9F(Km6Nm%K;iDm{BEX@ee09-r!
za9K%(QK*3G%(R%SB(NgnM6~C=83`#-jj^x9rn+U{6rdzK7IcUT%ueP>m2|9e%7eOD
z%;q+$yH>1(BBM=dmY)xHX#9f!xpit<a5JieKP1J&Bnih%y2&M`^a59rqPP^1aFXC)
z_etBOIn`-SUc+pGI(pUF_gfXEAPbj~{C@4JiWu!GVvr>6m`>tTbGI+FNy$dc*N_fh
zBBXLHS&EMP*a;${*GvqrRD9o=+G<w9n$~hN91%J$Oc!!e2qrAy)u4QPmdkAM6p{l<
zk%~CQBwmCZHuPUXf-NorTF6es&G0tgr%Q9~mLFTsg|ve(qY9BaJWhQ4%2_thiFVWb
z27OjQ5+O_urYuv6MS@7R1jb}-g{C?*Mszgl3PeWhE|JmuKbNaZF<>WH1JVkyQE(zb
zGF4#8vf)}e6Q!j4U7x2njI@i$`beY;0Aw^8y^i4RmJOD~l!$cqBW1&ayjjH52HA#`
zh;Ff+MKHOg(P$(9UB2X_F(P%aUa_yS1Uk|92yQW15-W;nByzK>D95VD{&0-wh~Spo
z<u&UXFMrpVXIpx00Az9E784>~G0mmd0d90Yb?MACc0I1-MDu)9!sJg~8Fb7Jm0+!F
z7lx+kfXDPKqi=Ttj?CF{XIV~8W|ZgBJv3=vPbi;w^;t>WQXoO-6|**~iD_QLZ?lPw
zO?z@}rM$_z>j*~c9uPMp{l70xGIjGWqh!+2j9N&cb^<rj;u#>kW=^^y&&ycJZDYZ3
zB?rk=i7DAl*mf9bOIWcAPRtt-R8|wK^@KE$k7V0(j9W>o1@h@Ng$(|tHckkb>`VCE
z$}22s*?LRLC~v^Ifl$fwyadUHb&*ukl)$ZaWs7s7|JjITfhvDurAf34&fC|zm7iS0
zGB!!h$mlD-CygSjjA=J%(Iq>HSv~q9acLz@B$t_wO0HDslbeZ^m}oNHS8|Gq>(+=!
zPaqN_U`@G>R-HgcQ!<*oi;z-+SRD*VthZkL05L+=t#xfRH;rp(H&q@Jxft36sf#iN
zzNkPFB-OkM8WQiQM^qOSM4$s<@;)00^Ju>&X53Piy?r67s%Ni@Yh{$bN3}xrnx%l^
zawNoPC&Wl~MJR&Q&ew*I%0ifw{3yjGoyr*)hu^Inb<T!`#W%Mf(`|E(uYmYazNSe?
zRV&>VY2nD(i|`#4=shO@Ug28Q{V@^=bOGo}Bj3%Wi7bR5sL@(fTb>bA-3q`<K}eA1
z?+pZCbkxWrreCpT_#lW{(3vwJtAf!dfx!ltHZnmv{w7jhK}U_8W3m_%TLG1*77i4C
z=S20A0SxyGI2JtIgfdU*@p?x#D1;3~qA8~09WyzYNR(7VC12rJ?x5SF?7A=>5}Pji
zhB6!Wcl3raHZ%4GR32AK_qvFzaz9^FBZItxSCv}2|HkQvzv(LBVv;@r46`o^9L&1C
zUZ=bULBoc7Hm0GBk|Jq-CWPytu9<_ejd7OQ^pONWGdIS#5MOxgpJ9iuRo_H}T|uwL
zBqS<rMX9Y9JgxcJcU^w2_Hkj1VZ(g|fSd3nC;=vd18)DVXFvQWK?@C5dp%|X|Fh0j
z+~+Ck?U6kl{}Ofne~-YJB-U5ehH%CgM;rK;Pj??a{;M%sYY{4IbX9u12_@hcELOE>
zC|m_IGJ0hEf7#f{v{(3qrZ9&44$O$5Xb6kz-2OH_b7NJ?zZ<D}bVUI4V$4UNT<*du
zv|*|ZYE_=DEjOgUp5PaF1Vs#BMnBS`D2i!9cZd0!Nq$f6zOUN0)hbYG?4Z@5v=fF=
zG<~L8)o3K9T9`3{>DaL+<NF&b%kIY0M%bKL0`EU!j3L6JI1%7z2j;@lU3+H#+DY0i
z7HA9G2{%Yv=io)!BxR;C)fQDVJTznHp62Vz&)jZq3B;W!ih*hJK232t7!)1>gQqID
zfufz!q-uU7)`qQsLLageA)n{I4?zOxzh<aS+qX}(UtT<Se>1ZuK`|J_dA~*g#>8(T
zBa<rbnQ%oh)tN2Fn3LhDv?FQ~bESZVKqn+rNb<f~5Jww-4E=A^cRddPuRz0jRZwN>
zNNv0+<D1LR+`-1(><j_X5I_hv27MivfjIG@$}lgIz3oU?r`#?9X>vSSREEb2ZUUV+
z1uaS<Nf!~K4OOLDRAB-^y+sW-ttY1IpKI!e8!N+vls1|+0-stgEF!|(=YRl!0K%v3
z!R`u0;IKJ+)2s*IZ*t)ly}ZJj3Jc4i9B>4N3eb?GRKN(Y0QrB`8`P($rNh(Bo&)V)
zmrVZ)k}A8v-w|KJyNR&nd2bFz--iSNB9sQZgQFD@*`=v>cyr#y^!zbdcFHwyi<7`A
z7>z3EI4O0Z5i8Xv*7D^5c!heQZVt~FhmK6QT%T;78hPgb`x{>xL`VdKyCwd72AC}g
zV1N-J3U)C5Cn|!Sq~G!F`tdAhS7h;6l5!>CCMXr`1QsAfqe=<OA}L8Ex-vwwE>!rP
z@PJ>HnmJT$jvi@u+{lip$}_XOQ6SEfdhr}~;>18Cmspxj1k3<o*Im4v9!ij4qMF}v
z9hYu4R*of0OAb9H=DX751YCgw>=c#&%&DTtT@i>BK_O81g+Pm*eYCEbYJ21W`)@qA
zho>`U!Au*Oe;|TEL)r*ME1O+}nHyLq%({zpG4xO$6_IieP49fCcVg0CxyE2gI$c@d
zM!VA_Y>C?eOJIXnyh0^t{qmsIXl==3VJQGnA=IiLm7sIdlaV@Ss<RzG(w@4$Jyp+E
zYWQXs`lG+`C1`8{%~TYHF>yBA2!k<-#Zg|ub1?KE9}x)hv5Ie8OWS6LuJKx6=g>ZO
z?enZIt!~<6l}{42i6}8Dtio7ItgGkLEdO<CeSY=&<lD=yg3dNmon<`eK2=SI4|dBR
znti$+6+*yZ7p6_`_aq?XIg(~72BzSaopM$Z=J+)|kMhxa3H}dpAMiokAd%dz=(t0|
zT_SEpw1q7g5u)tkCk_8-%-AYnQjcHAGT_4g1}MZseHw&FZV+?S$R&qh_6BafCmD?z
zByR>60~fpG<K&;(8t6iVx|lhi5HB@8VhCO4JiY;lNR!R}z}$#U7AKNRY(ZQYKn{Qq
z0Kdhi<qV0b0}_`AgpUSj3M9{EByq%|hyc=R7ROQpEp^DHDZx=AaKdx`SRRjvMFtog
z=WIAuhmIw))r$xOE&ayjkc9sxI4<WHgCv};M<Z1TTJ#gpq7DXncDO(EN~$F9PVuI#
I?fMJ^03%EQF8}}l

literal 0
HcmV?d00001

diff --git a/tests/android/res/values/strings.xml b/tests/android/res/values/strings.xml
new file mode 100644
index 0000000..004d018
--- /dev/null
+++ b/tests/android/res/values/strings.xml
@@ -0,0 +1,18 @@
+<!--
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~     https://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+<resources>
+    <string name="app_name">Qt UI Viewer</string>
+</resources>
diff --git a/tests/data/test_project/Generated/Quick3DAssets.txt b/tests/data/test_project/Generated/Quick3DAssets.txt
new file mode 100644
index 0000000..84c843f
--- /dev/null
+++ b/tests/data/test_project/Generated/Quick3DAssets.txt
@@ -0,0 +1 @@
+Imported 3D assets and components imported from bundles will be created in this folder.
diff --git a/tests/data/test_project/qtquickcontrols2.conf b/tests/data/test_project/qtquickcontrols2.conf
new file mode 100644
index 0000000..2ed8ad7
--- /dev/null
+++ b/tests/data/test_project/qtquickcontrols2.conf
@@ -0,0 +1,8 @@
+[Controls]
+Style=Basic
+
+[Material]
+Theme=Light
+
+[Universal]
+Theme=System
diff --git a/tests/data/test_project/temp.qrc b/tests/data/test_project/temp.qrc
new file mode 100644
index 0000000..16e081e
--- /dev/null
+++ b/tests/data/test_project/temp.qrc
@@ -0,0 +1,13 @@
+
+<RCC>
+<qresource>
+<file>qtquickcontrols2.conf</file>
+<file>test_project.qmlproject</file>
+<file>test_project/Constants.qml</file>
+<file>test_project/EventListModel.qml</file>
+<file>test_project/EventListSimulator.qml</file>
+<file>test_project/qmldir</file>
+<file>test_projectContent/App.qml</file>
+<file>test_projectContent/Screen01.ui.qml</file>
+</qresource>
+</RCC>
\ No newline at end of file
diff --git a/tests/data/test_project/test_project.qmlproject b/tests/data/test_project/test_project.qmlproject
new file mode 100644
index 0000000..9d41551
--- /dev/null
+++ b/tests/data/test_project/test_project.qmlproject
@@ -0,0 +1,122 @@
+import QmlProject
+
+Project {
+    mainFile: "test_projectContent/App.qml"
+    mainUiFile: "test_projectContent/Screen01.ui.qml"
+
+    /* Include .qml, .js, and image files from current directory and subdirectories */
+    QmlFiles {
+        directory: "test_project"
+    }
+
+    QmlFiles {
+        directory: "test_projectContent"
+    }
+
+    QmlFiles {
+        directory: "Generated"
+    }
+
+    JavaScriptFiles {
+        directory: "test_project"
+    }
+
+    JavaScriptFiles {
+        directory: "test_projectContent"
+    }
+
+    ImageFiles {
+        directory: "test_projectContent"
+    }
+
+    ImageFiles {
+        directory: "Generated"
+    }
+
+    Files {
+        filter: "*.conf"
+        files: ["qtquickcontrols2.conf"]
+    }
+
+    Files {
+        filter: "qmldir"
+        directory: "."
+    }
+
+    Files {
+        filter: "*.ttf;*.otf"
+    }
+
+    Files {
+        filter: "*.wav;*.mp3"
+    }
+
+    Files {
+        filter: "*.mp4"
+    }
+
+    Files {
+        filter: "*.glsl;*.glslv;*.glslf;*.vsh;*.fsh;*.vert;*.frag"
+    }
+
+    Files {
+        filter: "*.qsb"
+    }
+
+    Files {
+        filter: "*.json"
+    }
+
+    Files {
+        filter: "*.mesh"
+        directory: "Generated"
+    }
+
+    Files {
+        filter: "*.qad"
+        directory: "Generated"
+    }
+
+    Environment {
+        QT_QUICK_CONTROLS_CONF: "qtquickcontrols2.conf"
+        QML_COMPAT_RESOLVE_URLS_ON_ASSIGNMENT: "1"
+        QT_LOGGING_RULES: "qt.qml.connections=false"
+        QT_ENABLE_HIGHDPI_SCALING: "0"
+        /* Useful for debugging
+       QSG_VISUALIZE=batches
+       QSG_VISUALIZE=clip
+       QSG_VISUALIZE=changes
+       QSG_VISUALIZE=overdraw
+       */
+    }
+
+    qt6Project: true
+
+    /* List of plugin directories passed to QML runtime */
+    importPaths: [ "." ]
+
+    /* Required for deployment */
+    targetDirectory: "/opt/UntitledProject49"
+
+
+    qdsVersion: "4.7"
+
+    quickVersion: "6.8"
+
+    /* If any modules the project imports require widgets (e.g. QtCharts), widgetApp must be true */
+    widgetApp: true
+
+    /* args: Specifies command line arguments for qsb tool to generate shaders.
+       files: Specifies target files for qsb tool. If path is included, it must be relative to this file.
+              Wildcard '*' can be used in the file name part of the path.
+              e.g. files: [ "UntitledProject49Content/shaders/*.vert", "*.frag" ]  */
+    ShaderTool {
+        args: "-s --glsl \"100 es,120,150\" --hlsl 50 --msl 12"
+        files: [ "test_projectContent/shaders/*" ]
+    }
+
+    multilanguageSupport: true
+    supportedLanguages: ["en"]
+    primaryLanguage: "en"
+
+}
diff --git a/tests/data/test_project/test_project/Constants.qml b/tests/data/test_project/test_project/Constants.qml
new file mode 100644
index 0000000..e134a56
--- /dev/null
+++ b/tests/data/test_project/test_project/Constants.qml
@@ -0,0 +1,27 @@
+pragma Singleton
+import QtQuick
+import QtQuick.Studio.Application
+
+QtObject {
+    readonly property int width: 1920
+    readonly property int height: 1080
+
+    property string relativeFontDirectory: "fonts"
+
+    /* Edit this comment to add your custom font */
+    readonly property font font: Qt.font({
+                                             family: Qt.application.font.family,
+                                             pixelSize: Qt.application.font.pixelSize
+                                         })
+    readonly property font largeFont: Qt.font({
+                                                  family: Qt.application.font.family,
+                                                  pixelSize: Qt.application.font.pixelSize * 1.6
+                                              })
+
+    readonly property color backgroundColor: "#EAEAEA"
+
+
+    property StudioApplication application: StudioApplication {
+        fontPath: Qt.resolvedUrl("../UntitledProject49Content/" + relativeFontDirectory)
+    }
+}
diff --git a/tests/data/test_project/test_project/EventListModel.qml b/tests/data/test_project/test_project/EventListModel.qml
new file mode 100644
index 0000000..00c7065
--- /dev/null
+++ b/tests/data/test_project/test_project/EventListModel.qml
@@ -0,0 +1,12 @@
+import QtQuick
+
+ListModel {
+    id: eventListModel
+
+    ListElement {
+        eventId: "enterPressed"
+        eventDescription: "Emitted when pressing the enter button"
+        shortcut: "Return"
+        parameters: "Enter"
+    }
+}
diff --git a/tests/data/test_project/test_project/EventListSimulator.qml b/tests/data/test_project/test_project/EventListSimulator.qml
new file mode 100644
index 0000000..d26ae6d
--- /dev/null
+++ b/tests/data/test_project/test_project/EventListSimulator.qml
@@ -0,0 +1,22 @@
+import QtQuick
+import QtQuick.Studio.EventSimulator
+import QtQuick.Studio.EventSystem
+
+QtObject {
+    id: simulator
+    property bool active: true
+
+    property Timer __timer: Timer {
+        id: timer
+        interval: 100
+        onTriggered: {
+            EventSimulator.show()
+        }
+    }
+
+    Component.onCompleted: {
+        EventSystem.init(Qt.resolvedUrl("EventListModel.qml"))
+        if (simulator.active)
+            timer.start()
+    }
+}
diff --git a/tests/data/test_project/test_project/designer/plugin.metainfo b/tests/data/test_project/test_project/designer/plugin.metainfo
new file mode 100644
index 0000000..cef8690
--- /dev/null
+++ b/tests/data/test_project/test_project/designer/plugin.metainfo
@@ -0,0 +1,13 @@
+MetaInfo {
+    Type {
+        name: "UntitledProject49.EventListSimulator"
+        icon: ":/qtquickplugin/images/item-icon16.png"
+
+        Hints {
+            visibleInNavigator: true
+            canBeDroppedInNavigator: true
+            canBeDroppedInFormEditor: false
+            canBeDroppedInView3D: false
+        }
+    }
+}
diff --git a/tests/data/test_project/test_project/qmldir b/tests/data/test_project/test_project/qmldir
new file mode 100644
index 0000000..3fc49f8
--- /dev/null
+++ b/tests/data/test_project/test_project/qmldir
@@ -0,0 +1,4 @@
+module UntitledProject49
+singleton Constants 1.0 Constants.qml
+EventListSimulator 1.0 EventListSimulator.qml
+EventListModel 1.0 EventListModel.qml
diff --git a/tests/data/test_project/test_projectContent/App.qml b/tests/data/test_project/test_projectContent/App.qml
new file mode 100644
index 0000000..cadefcd
--- /dev/null
+++ b/tests/data/test_project/test_projectContent/App.qml
@@ -0,0 +1,16 @@
+import QtQuick
+import test_project
+
+Window {
+    width: mainScreen.width
+    height: mainScreen.height
+
+    visible: true
+    title: "test_project"
+
+    Screen01 {
+        id: mainScreen
+    }
+
+}
+
diff --git a/tests/data/test_project/test_projectContent/Screen01.ui.qml b/tests/data/test_project/test_projectContent/Screen01.ui.qml
new file mode 100644
index 0000000..ac24a0f
--- /dev/null
+++ b/tests/data/test_project/test_projectContent/Screen01.ui.qml
@@ -0,0 +1,254 @@
+
+
+/*
+This is a UI file (.ui.qml) that is intended to be edited in Qt Design Studio only.
+It is supposed to be strictly declarative and only uses a subset of QML. If you edit
+this file manually, you might introduce QML code that is not supported by Qt Design Studio.
+Check out https://doc.qt.io/qtcreator/creator-quick-ui-forms.html for details on .ui.qml files.
+*/
+import QtQuick
+import QtQuick.Controls
+import test_project
+import QtQuick.Studio.DesignEffects
+import QtQuick.Studio.Components
+import QtQuick.Studio.Effects
+import QtQuick.Studio.LogicHelper
+import QtQuick.Studio.MultiText
+import QtCharts
+import QtGraphs
+import QtQuick.Layouts
+import QtQuick3D
+import QtQuick.Controls.FluentWinUI3
+import QtQuick.Effects
+import QtQuick.Studio.Utils
+import QtQuick.Studio.Application
+import QtQuick.Timeline.BlendTrees
+import QtQuick.VectorImage
+import QtQuick.Window
+import QtQuick3D.AssetUtils
+import QtQuick3D.Effects
+import QtQuick3D.Helpers
+import QtQuick3D.Particles3D
+import QtQuick3D.Physics
+import QtQuick.Timeline
+import QtNetwork
+import QtQuick3D.Physics.Helpers
+import QtMultimedia
+import QtQuick3D.SpatialAudio
+import QtQuick3D.Xr
+import QtQuickUltralite.Extras
+import QtQuickUltralite.Studio.Components
+import QtQuickUltralite.Profiling
+import QtQuickUltralite.Layers
+import FlowView
+import test
+
+Rectangle {
+    id: rectangle
+    width: Constants.width
+    height: Constants.height
+
+    color: Constants.backgroundColor
+
+    Button {
+        id: button
+        text: qsTr("Press me")
+        anchors.verticalCenter: parent.verticalCenter
+        checkable: true
+        anchors.horizontalCenter: parent.horizontalCenter
+
+        Connections {
+            target: button
+            onClicked: animation.start()
+        }
+
+        DesignEffect {
+            backgroundLayer: button
+            backgroundBlurRadius: 5
+            layerBlurRadius: 2
+            effects: [
+                DesignDropShadow {},
+                DesignDropShadow {}
+            ]
+        }
+    }
+
+    Text {
+        id: label
+        text: qsTr("Hello UntitledProject49")
+        anchors.top: button.bottom
+        font.family: Constants.font.family
+        anchors.topMargin: 45
+        anchors.horizontalCenter: parent.horizontalCenter
+
+        SequentialAnimation {
+            id: animation
+
+            ColorAnimation {
+                id: colorAnimation1
+                target: rectangle
+                property: "color"
+                to: "#2294c6"
+                from: Constants.backgroundColor
+            }
+
+            ColorAnimation {
+                id: colorAnimation2
+                target: rectangle
+                property: "color"
+                to: Constants.backgroundColor
+                from: "#2294c6"
+            }
+        }
+    }
+
+    Button {
+        id: button1
+        x: 930
+        y: 466
+        text: qsTr("Button")
+    }
+
+    CheckBox {
+        id: checkBox
+        x: 918
+        y: 417
+        text: qsTr("Check Box")
+    }
+
+    ComboBox {
+        id: comboBox
+        x: 900
+        y: 563
+    }
+
+    RadioButton {
+        id: radioButton
+        x: 897
+        y: 632
+        text: qsTr("Radio Button")
+    }
+
+    RadioDelegate {
+        id: radioDelegate
+        x: 881
+        y: 677
+        text: qsTr("Radio Delegate")
+    }
+
+    RoundButton {
+        id: roundButton
+        x: 864
+        y: 490
+        text: "+"
+    }
+
+    Slider {
+        id: slider
+        x: 859
+        y: 375
+        value: 0.5
+    }
+
+    RangeSlider {
+        id: rangeSlider
+        x: 859
+        y: 333
+        second.value: 0.75
+        first.value: 0.25
+    }
+
+    Switch {
+        id: _switch
+        x: 845
+        y: 438
+        text: qsTr("Switch")
+    }
+
+    Button {
+        id: button2
+        x: 1090
+        y: 473
+        text: qsTr("Button")
+    }
+
+    ArcItem {
+        id: arc
+        x: 1090
+        y: 333
+        fillColor: "#00000000"
+    }
+
+    EllipseItem {
+        id: ellipse
+        x: 628
+        y: 333
+    }
+
+    BorderItem {
+        id: _border
+        x: 628
+        y: 508
+        adjustBorderRadius: true
+    }
+
+    FlipableItem {
+        id: flipable
+        x: 1066
+        y: 532
+    }
+
+    TriangleItem {
+        id: triangle
+        x: 669
+        y: 677
+    }
+
+    Item {
+        id: __materialLibrary__
+    }
+
+    ChartView {
+        id: bar
+        x: 1257
+        y: 340
+        width: 300
+        height: 300
+        BarSeries {
+            name: "BarSeries"
+            BarSet {
+                values: [2, 2, 3]
+                label: "Set1"
+            }
+
+            BarSet {
+                values: [5, 1, 2]
+                label: "Set2"
+            }
+
+            BarSet {
+                values: [3, 5, 8]
+                label: "Set3"
+            }
+        }
+    }
+
+    DesignEffect {
+        visible: true
+        effects: [
+            DesignInnerShadow {},
+            DesignDropShadow {}
+        ]
+    }
+    states: [
+        State {
+            name: "clicked"
+            when: button.checked
+
+            PropertyChanges {
+                target: label
+                text: qsTr("Button Checked")
+            }
+        }
+    ]
+}
diff --git a/tests/data/test_project/test_projectContent/fonts/fonts.txt b/tests/data/test_project/test_projectContent/fonts/fonts.txt
new file mode 100644
index 0000000..ab96122
--- /dev/null
+++ b/tests/data/test_project/test_projectContent/fonts/fonts.txt
@@ -0,0 +1 @@
+Fonts in this folder are loaded automatically.
diff --git a/tests/data/test_project/test_projectContent/images/images.txt b/tests/data/test_project/test_projectContent/images/images.txt
new file mode 100644
index 0000000..f8b9996
--- /dev/null
+++ b/tests/data/test_project/test_projectContent/images/images.txt
@@ -0,0 +1 @@
+Default folder for image assets.
diff --git a/tests/data/test_project/test_project_fail.qmlrc b/tests/data/test_project/test_project_fail.qmlrc
new file mode 100644
index 0000000000000000000000000000000000000000..ff815586b54fb2e038e38fb1965bac390af59b65
GIT binary patch
literal 4129
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

literal 0
HcmV?d00001

diff --git a/tests/data/test_project/test_project_success.qmlrc b/tests/data/test_project/test_project_success.qmlrc
new file mode 100644
index 0000000000000000000000000000000000000000..1b124cb3c43f3d6c054af130f5a5286e8da78273
GIT binary patch
literal 4128
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

literal 0
HcmV?d00001

diff --git a/tests/main.cpp b/tests/main.cpp
index 7076f50..dad1510 100644
--- a/tests/main.cpp
+++ b/tests/main.cpp
@@ -1,17 +1,20 @@
 // Copyright (C) 2024 The Qt Company Ltd.
 // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
 
-#include <QGuiApplication>
+#include <QApplication>
 #include <QTemporaryFile>
 #include <QTest>
 
+#include "tst_dsmanager.h"
+#include "tst_projectmanager.h"
 #include "tst_settings.h"
 
-#define DEBUG_LINE qDebug() << "Debugline:" << __LINE__
+#define DEBUG_LINE qDebug() << "Debug (" << __LINE__ << "):"
 
 int main(int argc, char *argv[])
 {
-    QGuiApplication app(argc, argv);
+    qputenv("QML_COMPAT_RESOLVE_URLS_ON_ASSIGNMENT", "1");
+    QApplication app(argc, argv);
 
     QStringList initialArgs = app.arguments();
     DEBUG_LINE << "Arguments:" << initialArgs;
@@ -33,14 +36,14 @@ int main(int argc, char *argv[])
     }
 
     if (outputFileName.isEmpty()) {
-        qDebug() << "Output file name not provided. Using the default name: output.junitxml";
+        DEBUG_LINE << "Output file name not provided. Using the default name: output.junitxml";
         outputFileName = "output.junitxml";
     }
 
     QFile outputFile{outputFileName};
-    if (!outputFile.open(QIODevice::Append)) {
+    if (!outputFile.open(QIODevice::Truncate | QIODevice::WriteOnly)) {
         DEBUG_LINE << "Failed to open the output file";
-        return 1;
+        return -1;
     }
 
     int status = 0;
@@ -48,8 +51,11 @@ int main(int argc, char *argv[])
         // temporary file to store the individual test results.
         // we'll append the results to the output file.
         QTemporaryFile file;
-        file.open();
-        DEBUG_LINE << "Temporary file:" << file.fileName();
+        if (!file.open()) {
+            DEBUG_LINE << "Failed to open the temporary file";
+            status = -1;
+            return;
+        }
 
         QStringList args{"-o", QString(file.fileName()).append(",junitxml")};
         args.prepend(appName);
@@ -60,15 +66,24 @@ int main(int argc, char *argv[])
 
         // append the test results to the output file
         file.readLine(); // skip the first line because it's the xml header
-        outputFile.write(file.readAll());
+        const int rV = outputFile.write(file.readAll());
+        if (rV == -1) {
+            DEBUG_LINE << "Failed to write the test results to the output file";
+            status = -1;
+            return;
+        }
     };
 
     outputFile.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
     outputFile.write("<testsuites>\n");
 
     runTest(new TestSettings);
+    runTest(new TestDesignStudioManager);
+    runTest(new TestProjectManager);
 
     outputFile.write("</testsuites>\n");
+    outputFile.flush();
+    outputFile.close();
 
     DEBUG_LINE << "Test suite finished with status:" << status;
     return status;
diff --git a/tests/mock_ds.cpp b/tests/mock_ds.cpp
new file mode 100644
index 0000000..1495595
--- /dev/null
+++ b/tests/mock_ds.cpp
@@ -0,0 +1,129 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "mock_ds.h"
+
+#include <QJsonParseError>
+#include <QJsonObject>
+#include <QJsonDocument>
+
+namespace PackageToDevice {
+using namespace Qt::Literals;
+constexpr auto designStudioReady = "designStudioReady"_L1;
+constexpr auto projectData = "projectData"_L1;
+constexpr auto stopRunningProject = "stopRunningProject"_L1;
+}; // namespace PackageToDevice
+
+namespace PackageFromDevice {
+using namespace Qt::Literals;
+constexpr auto deviceInfo = "deviceInfo"_L1;
+constexpr auto projectReceivingProgress = "projectReceivingProgress"_L1;
+constexpr auto projectStarting = "projectStarting"_L1;
+constexpr auto projectStarted = "projectRunning"_L1;
+constexpr auto projectStopped = "projectStopped"_L1;
+constexpr auto projectLogs = "projectLogs"_L1;
+}; // namespace PackageFromDevice
+
+MockDS::MockDS(const QString dsID,
+               const QString &serverAddr,
+               const QString &serverName,
+               QObject *parent)
+    : QObject(parent)
+    , m_dsID(dsID)
+    , m_serverAddr(serverAddr)
+{
+      m_socket.reset(new QWebSocket(serverName, QWebSocketProtocol::VersionLatest, this));
+      QObject::connect(m_socket.data(),
+                       &QWebSocket::textMessageReceived,
+                       this,
+                       &MockDS::textMessageReceived);
+      connect();
+}
+
+MockDS::~MockDS()
+{
+    m_socket->close();
+}
+
+void MockDS::connect()
+{
+    m_socket->open(QUrl(m_serverAddr));
+}
+
+void MockDS::disconnect()
+{
+    m_socket->close();
+    m_socket->abort();
+}
+
+bool MockDS::isConnected() const
+{
+    return m_socket->isValid();
+}
+
+bool MockDS::sendTextMessage(const QLatin1String &dataType, const QJsonValue &data)
+{
+    if (!isConnected())
+        return false;
+
+    QJsonObject message;
+    message["dataType"] = dataType;
+    message["data"] = data;
+    const QString jsonMessage = QString::fromLatin1(
+        QJsonDocument(message).toJson(QJsonDocument::Compact));
+    m_socket->sendTextMessage(jsonMessage);
+
+    return true;
+}
+
+bool MockDS::sendDesignStudioReady()
+{
+    QJsonObject data;
+    data["designStudioID"] = m_dsID;
+    data["commVersion"] = 1;
+    return sendTextMessage(PackageToDevice::designStudioReady, data);
+}
+
+bool MockDS::sendProjectData(const QByteArray &data, const QString &qtVersion)
+{
+    QJsonObject projectInfo;
+    projectInfo["projectSize"] = data.size();
+    projectInfo["qtVersion"] = qtVersion;
+
+    const bool rV = sendTextMessage(PackageToDevice::projectData, projectInfo);
+    if (!rV)
+        return false;
+
+    const int dataSent = m_socket->sendBinaryMessage(data);
+    return dataSent == data.size();
+}
+
+bool MockDS::sendProjectStopped()
+{
+    return sendTextMessage(PackageToDevice::stopRunningProject, {});
+}
+
+void MockDS::textMessageReceived(const QString &message){
+    qDebug () << "Message received: " << message;
+    QJsonParseError jsonError;
+    const QJsonDocument jsonDoc = QJsonDocument::fromJson(message.toLatin1(), &jsonError);
+
+    const QJsonObject jsonObj = jsonDoc.object();
+    const QString dataType = jsonObj.value("dataType").toString();
+    if (dataType == PackageFromDevice::deviceInfo) {
+        QJsonObject deviceInfo = jsonObj.value("data").toObject();
+        emit deviceInfoReady();
+    } else if (dataType == PackageFromDevice::projectStarted) {
+        emit projectStarted();
+    } else if (dataType == PackageFromDevice::projectStopped) {
+        emit projectStopped();
+    } else if (dataType == PackageFromDevice::projectLogs) {
+        const QString logs = jsonObj.value("data").toString();
+        emit projectLogsReceived(logs);
+    } else if (dataType == PackageFromDevice::projectStarting) {
+        emit projectStarting();
+    } else if (dataType == PackageFromDevice::projectReceivingProgress) {
+        const int progress = jsonObj.value("data").toInt();
+        emit projectSendingProgress(progress);
+    }
+}
diff --git a/tests/mock_ds.h b/tests/mock_ds.h
new file mode 100644
index 0000000..1214acc
--- /dev/null
+++ b/tests/mock_ds.h
@@ -0,0 +1,43 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#pragma once
+
+#include <QWebSocket>
+
+/**
+ * @brief This is a mock class to simulate the Design Studio connection.
+ * This one acts like a client and the DesignStudioManager acts like a server.
+ * This can be used to test the data coming from the Design Studio or the vice versa.
+ */
+class MockDS : public QObject
+{
+    Q_OBJECT
+public:
+    MockDS(const QString dsID, const QString &serverAddr, const QString &serverName, QObject *parent = nullptr);
+    ~MockDS();
+
+    void connect();
+    void disconnect();
+    bool isConnected() const;
+    bool sendDesignStudioReady();
+    bool sendProjectData(const QByteArray &data, const QString &qtVersion);
+    bool sendProjectStopped();
+
+private:
+    QScopedPointer<QWebSocket> m_socket;
+    const QString m_dsID;
+    const QString m_serverAddr;
+
+private:
+    void textMessageReceived(const QString &message);
+    bool sendTextMessage(const QLatin1String &dataType, const QJsonValue &data);
+
+signals:
+    void projectStarted();
+    void projectStarting();
+    void projectStopped();
+    void projectLogsReceived(const QString &logs);
+    void deviceInfoReady();
+    void projectSendingProgress(const int percentage);
+};
diff --git a/tests/tst_dsmanager.cpp b/tests/tst_dsmanager.cpp
new file mode 100644
index 0000000..d84669a
--- /dev/null
+++ b/tests/tst_dsmanager.cpp
@@ -0,0 +1,221 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+#include "tst_dsmanager.h"
+
+#include <QTest>
+#include <QSignalSpy>
+
+#define DEVICE_ID "1234567890"
+#define DS_ID "0987654321"
+#define CONNECTION_TIMEOUT 1000
+
+TestObjects::TestObjects(const quint16 port, QObject *parent)
+    : QObject(parent)
+{
+    m_dsManager.reset(new DesignStudioManager(DEVICE_ID, port));
+    m_dsManager->init();
+
+    m_mockDS.reset(new MockDS(DS_ID, QString("ws://localhost:%1").arg(port), "DesignStudio"));
+
+    const bool rV = QTest::qWaitFor([&]() { return m_mockDS->isConnected(); }, CONNECTION_TIMEOUT);
+    QVERIFY(rV == true);
+
+    QSignalSpy spy(m_mockDS.data(), &MockDS::deviceInfoReady);
+    QVERIFY(m_mockDS->sendDesignStudioReady() == true);
+    QTRY_COMPARE_WITH_TIMEOUT(spy.count(), 1, 1000);
+
+    m_mockDS2.reset(new MockDS(DS_ID "2", QString("ws://localhost:%1").arg(port), "DesignStudio"));
+    const bool rV2 = QTest::qWaitFor([&]() { return m_mockDS2->isConnected(); }, CONNECTION_TIMEOUT);
+    QVERIFY(rV2 == true);
+
+    QSignalSpy spy2(m_mockDS2.data(), &MockDS::deviceInfoReady);
+    QVERIFY(m_mockDS2->sendDesignStudioReady() == true);
+    QTRY_COMPARE_WITH_TIMEOUT(spy.count(), 1, 1000);
+}
+
+DesignStudioManager *TestObjects::designStudioManager()
+{
+    return m_dsManager.data();
+}
+
+MockDS *TestObjects::mockDS()
+{
+    return m_mockDS.data();
+}
+
+MockDS *TestObjects::mockDS2()
+{
+    return m_mockDS2.data();
+}
+
+void TestDesignStudioManager::initTestCase()
+{
+    QFile file(":/data/test_project/test_project_success.qmlrc");
+    qDebug() << "Reading file:" << file.fileName();
+    QVERIFY(file.open(QIODevice::ReadOnly));
+
+    m_projectData = file.readAll();
+    QVERIFY(m_projectData.size() > 0);
+
+    m_dsManager.reset(new DesignStudioManager(DEVICE_ID));
+    m_dsManager->init();
+
+    const QString serverName = m_dsManager->webSocketServerName();
+    const int serverPort = m_dsManager->webSocketServerPort();
+    // Important note:
+    // If the following 2 parameters change by a design decision,
+    // they have to be updated on Qt Design Studio side as well.
+    QVERIFY2(serverName == "DesignStudio",
+             "Default server name is not correct. Update the test and Design Studio side.");
+    QVERIFY2(serverPort == 40000,
+             "Default server port is not correct. Update the test and Design Studio side.");
+
+    const QString serverAddr = QString("ws://localhost:%1").arg(serverPort);
+
+    m_mockDS.reset(new MockDS(DS_ID, serverAddr, serverName));
+    const bool rV = QTest::qWaitFor([&]() { return m_mockDS->isConnected(); }, CONNECTION_TIMEOUT);
+    QVERIFY(rV == true);
+
+    QSignalSpy spy(m_mockDS.data(), &MockDS::deviceInfoReady);
+    QVERIFY(m_mockDS->sendDesignStudioReady() == true);
+    QTRY_COMPARE_WITH_TIMEOUT(spy.count(), 1, 1000);
+}
+
+void TestDesignStudioManager::testSendProjectStarting()
+{
+    QSignalSpy spy(m_mockDS.data(), &MockDS::projectStarting);
+    m_dsManager->sendProjectStarting(DS_ID);
+    QTRY_COMPARE_WITH_TIMEOUT(spy.count(), 1, 1000);
+}
+
+void TestDesignStudioManager::testSendProjectStarted()
+{
+    QSignalSpy spy(m_mockDS.data(), &MockDS::projectStarted);
+    m_dsManager->sendProjectStarted(DS_ID);
+    QTRY_COMPARE_WITH_TIMEOUT(spy.count(), 1, 1000);
+}
+
+void TestDesignStudioManager::testSendProjectStopped()
+{
+    QSignalSpy spy(m_mockDS.data(), &MockDS::projectStopped);
+    m_dsManager->sendProjectStopped(DS_ID);
+    QTRY_COMPARE_WITH_TIMEOUT(spy.count(), 1, 1000);
+}
+
+void TestDesignStudioManager::testSendProjectLogs()
+{
+    QSignalSpy spy(m_mockDS.data(), &MockDS::projectLogsReceived);
+    m_dsManager->sendProjectLogs(DS_ID, "Test logs");
+    QTRY_COMPARE_WITH_TIMEOUT(spy.count(), 1, 1000);
+}
+
+void TestDesignStudioManager::testProjectReceivingProgress()
+{
+    TestObjects testObjects(40001);
+    const QString qtVersion = "6.8.0";
+
+    QSignalSpy spy(testObjects.mockDS(), &MockDS::projectSendingProgress);
+    QVERIFY(testObjects.mockDS()->sendProjectData(m_projectData, qtVersion) == true);
+    QTRY_COMPARE_WITH_TIMEOUT(spy.count(), 1, 1000);
+}
+
+void TestDesignStudioManager::testGetDesignStudioIp()
+{
+    TestObjects testObjects(40001);
+    const QString ipAddr = testObjects.designStudioManager()->getDesignStudioIp(DS_ID);
+    const QString failMessage = QString("Design Studio IP is not correct. Expected: %1, Got: %2")
+                                    .arg("::1 or ::ffff:127.0.0.1")
+                                    .arg(ipAddr);
+
+    if (ipAddr != "::1" && ipAddr != "::ffff:127.0.0.1")
+        QFAIL(qPrintable(failMessage));
+
+    QVERIFY(testObjects.designStudioManager()->getDesignStudioIp("non-existing-id").isEmpty());
+}
+
+void TestDesignStudioManager::testProjectVersionMismatch()
+{
+    TestObjects testObjects(40002);
+    const QString qtVersion = "5.0.0";
+
+    QSignalSpy spy(testObjects.designStudioManager(), &DesignStudioManager::projectVersionMismatch);
+    QVERIFY(testObjects.mockDS()->sendProjectData(m_projectData, qtVersion) == true);
+    QTRY_COMPARE_WITH_TIMEOUT(spy.count(), 1, 1000);
+}
+
+void TestDesignStudioManager::testProjectIncoming()
+{
+    TestObjects testObjects(40003);
+    const QString qtVersion = "6.8.0";
+
+    QSignalSpy spy(testObjects.designStudioManager(), &DesignStudioManager::projectIncoming);
+    QVERIFY(testObjects.mockDS()->sendProjectData(m_projectData, qtVersion) == true);
+    QTRY_COMPARE_WITH_TIMEOUT(spy.count(), 1, 1000);
+}
+
+void TestDesignStudioManager::testProjectIncomingProgress()
+{
+    TestObjects testObjects(40004);
+
+    const QString qtVersion = "6.8.0";
+    QByteArray bigProjectdata;
+    bigProjectdata.fill('a', 1024 * 1024 * 10);
+
+    QSignalSpy spy(testObjects.designStudioManager(), &DesignStudioManager::projectIncomingProgress);
+    QVERIFY(testObjects.mockDS()->sendProjectData(bigProjectdata, qtVersion) == true);
+    QTRY_COMPARE_WITH_TIMEOUT(spy.count(), 1, 1000);
+}
+
+void TestDesignStudioManager::testProjectReceived()
+{
+    TestObjects testObjects(40005);
+    const QString qtVersion = "6.8.0";
+
+    QSignalSpy spy(testObjects.designStudioManager(), &DesignStudioManager::projectReceived);
+    QVERIFY(testObjects.mockDS()->sendProjectData(m_projectData, qtVersion) == true);
+    QTRY_COMPARE_WITH_TIMEOUT(spy.count(), 1, 1000);
+}
+
+void TestDesignStudioManager::testDesignStudioConnected()
+{
+    TestObjects testObjects(40006);
+
+    QSignalSpy spy(testObjects.designStudioManager(), &DesignStudioManager::designStudioConnected);
+    testObjects.mockDS()->disconnect();
+    testObjects.mockDS()->connect();
+    QTRY_COMPARE_WITH_TIMEOUT(spy.count(), 1, 1000);
+}
+
+void TestDesignStudioManager::testDesignStudioDisconnected()
+{
+    TestObjects testObjects(40007);
+
+    QSignalSpy spy(testObjects.designStudioManager(),
+                   &DesignStudioManager::designStudioDisconnected);
+    testObjects.mockDS()->disconnect();
+    QTRY_COMPARE_WITH_TIMEOUT(spy.count(), 1, 1000);
+}
+
+void TestDesignStudioManager::testAllDesignStudiosDisconnected()
+{
+    TestObjects testObjects(40008);
+
+    QSignalSpy spy(testObjects.designStudioManager(),
+                   &DesignStudioManager::designStudioDisconnected);
+    QSignalSpy spy2(testObjects.designStudioManager(),
+                    &DesignStudioManager::allDesignStudiosDisconnected);
+    testObjects.mockDS()->disconnect();
+    testObjects.mockDS2()->disconnect();
+    spy.wait(1000);
+    QCOMPARE(spy.count(), 2);
+    QCOMPARE(spy2.count(), 1);
+}
+
+void TestDesignStudioManager::testProjectStopRequested()
+{
+    TestObjects testObjects(40009);
+
+    QSignalSpy spy(testObjects.designStudioManager(), &DesignStudioManager::projectStopRequested);
+    testObjects.mockDS()->sendProjectStopped();
+    QTRY_COMPARE_WITH_TIMEOUT(spy.count(), 1, 1000);
+}
diff --git a/tests/tst_dsmanager.h b/tests/tst_dsmanager.h
new file mode 100644
index 0000000..e573518
--- /dev/null
+++ b/tests/tst_dsmanager.h
@@ -0,0 +1,54 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#pragma once
+
+#include <QObject>
+
+#include "backend/dsconnector/dsmanager.h"
+#include "mock_ds.h"
+
+class TestObjects : public QObject
+{
+    Q_OBJECT
+public:
+    TestObjects(const quint16 port = 40000, QObject *parent = nullptr);
+    DesignStudioManager *designStudioManager();
+    MockDS *mockDS();
+    MockDS *mockDS2();
+
+private:
+    QScopedPointer<DesignStudioManager> m_dsManager;
+    QScopedPointer<MockDS> m_mockDS;
+    QScopedPointer<MockDS> m_mockDS2;
+};
+
+class TestDesignStudioManager : public QObject
+{
+    Q_OBJECT
+private slots:
+    void initTestCase();
+
+    // to DesignStudio
+    void testSendProjectStarted();
+    void testSendProjectStarting();
+    void testSendProjectStopped();
+    void testSendProjectLogs();
+    void testProjectReceivingProgress();
+    void testGetDesignStudioIp();
+
+    // to Android
+    void testProjectVersionMismatch();
+    void testProjectIncoming();
+    void testProjectIncomingProgress();
+    void testProjectReceived();
+    void testDesignStudioConnected();
+    void testDesignStudioDisconnected();
+    void testAllDesignStudiosDisconnected();
+    void testProjectStopRequested();
+
+private:
+    QScopedPointer<DesignStudioManager> m_dsManager;
+    QScopedPointer<MockDS> m_mockDS;
+    QByteArray m_projectData;
+};
diff --git a/tests/tst_projectmanager.cpp b/tests/tst_projectmanager.cpp
new file mode 100644
index 0000000..1be6c91
--- /dev/null
+++ b/tests/tst_projectmanager.cpp
@@ -0,0 +1,211 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "tst_projectmanager.h"
+
+#include <QQuickItem>
+#include <QSignalSpy>
+#include <QTest>
+
+void TestProjectManager::initTestCase()
+{
+    QFile file(":/data/test_project/test_project_success.qmlrc");
+    QVERIFY(file.open(QIODevice::ReadOnly));
+
+    m_projectThatCanRun = file.readAll();
+    QVERIFY(m_projectThatCanRun.size() > 0);
+
+    file.setFileName(":/data/test_project/test_project_fail.qmlrc");
+    QVERIFY(file.open(QIODevice::ReadOnly));
+
+    m_projectThatCannotRun = file.readAll();
+    QVERIFY(m_projectThatCannotRun.size() > 0);
+}
+
+void TestProjectManager::testRunProject()
+{
+    ProjectManager projectManager;
+    bool result = projectManager.runProject(m_projectThatCanRun, true, "sessionId");
+
+    QVERIFY(projectManager.sessionId() == "sessionId");
+    QVERIFY(result);
+
+    result = projectManager.runProject(m_projectThatCannotRun, true, "sessionId");
+    QVERIFY(!result);
+    QVERIFY(projectManager.sessionId().isEmpty());
+}
+
+void TestProjectManager::testStopProject()
+{
+    ProjectManager projectManager;
+    const bool result = projectManager.runProject(m_projectThatCanRun, true, "sessionId");
+    QVERIFY(result);
+
+    projectManager.stopProject();
+    QVERIFY(projectManager.sessionId().isEmpty());
+    QVERIFY(projectManager.m_quickWindow.isNull());
+    QVERIFY(projectManager.m_qmlEngine.isNull());
+    QVERIFY(projectManager.m_qmlComponent.isNull());
+}
+
+void TestProjectManager::testRegisterResource()
+{
+    ProjectManager projectManager;
+    const QString resourcePath = ":/data/test_project_register";
+    bool result = projectManager.registerResource(m_projectThatCanRun, resourcePath);
+    QVERIFY(result);
+
+    QFile file(resourcePath + "/test_project.qmlproject");
+    QVERIFY(file.open(QIODevice::ReadOnly));
+    QByteArray data = file.readAll();
+    QVERIFY(data.size() > 0);
+    QVERIFY(data.contains("import QmlProject"));
+    QVERIFY(data.contains("mainFile: \"test_projectContent/App.qml\""));
+
+    file.close();
+    file.setFileName(resourcePath + "/qtquickcontrols2.conf");
+    QVERIFY(file.open(QIODevice::ReadOnly));
+    data = file.readAll();
+    QVERIFY(data.size() > 0);
+    QVERIFY(data.contains("Style=Basic"));
+}
+
+void TestProjectManager::testUnregisterResource()
+{
+    ProjectManager projectManager;
+    const QString resourcePath = ":/data/test_project_unregister";
+    bool result = projectManager.registerResource(m_projectThatCanRun, resourcePath);
+    QVERIFY(result);
+
+    result = projectManager.unregisterResource(m_projectThatCanRun, resourcePath);
+    QVERIFY(result);
+
+    const QFile file(resourcePath + "/test_project.qmlproject");
+    QVERIFY(!file.exists());
+}
+
+void TestProjectManager::testCopyResourceToFs()
+{
+    ProjectManager projectManager;
+    const QString resourcePath = ":/data/test_project_copy";
+    bool result = projectManager.registerResource(m_projectThatCanRun, resourcePath);
+    QVERIFY(result);
+
+    const QString destinationPath = QDir::tempPath() + "/test_project_copy";
+    result = projectManager.copyResourceToFs(resourcePath, destinationPath);
+    QVERIFY(result);
+
+    const QStringList sourceFiles = QDir(resourcePath).entryList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot);
+    const QStringList destFiles = QDir(destinationPath).entryList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot);
+
+    QVERIFY(sourceFiles.size() == destFiles.size());
+    QCOMPARE(sourceFiles, destFiles);
+}
+
+void TestProjectManager::testUnpackProject()
+{
+    ProjectManager projectManager;
+    const QString projectPath = projectManager.unpackProject(m_projectThatCanRun);
+    QVERIFY(!projectPath.isEmpty());
+    QVERIFY(QFile::exists(projectPath + "/test_project.qmlproject"));
+    QVERIFY(QFile::exists(projectPath + "/qtquickcontrols2.conf"));
+}
+
+void TestProjectManager::testRunProjectInternal()
+{
+    ProjectManager projectManager;
+
+    const bool result = projectManager.runProjectInternal(m_projectThatCanRun);
+
+    QVERIFY(result);
+    QVERIFY(projectManager.m_qmlEngine);
+    QVERIFY(projectManager.m_qmlComponent);
+    QVERIFY(projectManager.m_quickWindow);
+    QVERIFY(projectManager.m_quickWindow->isVisible() == false);
+}
+
+void TestProjectManager::testFindFile()
+{
+    ProjectManager projectManager;
+    const QString projectPath = projectManager.unpackProject(m_projectThatCanRun);
+    QVERIFY(!projectPath.isEmpty());
+
+    const QString qmlProjectFile = projectManager.findFile(projectPath, "*.qmlproject", false);
+    QVERIFY(!qmlProjectFile.isEmpty());
+    QVERIFY(qmlProjectFile.contains("test_project.qmlproject"));
+}
+
+void TestProjectManager::testReadQmlProjectFile()
+{
+    ProjectManager projectManager;
+    const QString projectPath = projectManager.unpackProject(m_projectThatCanRun);
+    QVERIFY(!projectPath.isEmpty());
+
+    const QString qmlProjectFile = projectManager.findFile(projectPath, "*.qmlproject", false);
+    QVERIFY(!qmlProjectFile.isEmpty());
+
+    const QString qmlProjectFileContent = projectManager.readQmlProjectFile(qmlProjectFile);
+    QVERIFY(!qmlProjectFileContent.isEmpty());
+    QVERIFY(qmlProjectFileContent.contains("mainFile: \"test_projectContent/App.qml\""));
+}
+
+void TestProjectManager::testGetMainQmlFile()
+{
+    ProjectManager projectManager;
+    const QString projectPath = projectManager.unpackProject(m_projectThatCanRun);
+    QVERIFY(!projectPath.isEmpty());
+
+    const QString qmlProjectFile = projectManager.findFile(projectPath, "*.qmlproject", false);
+    QVERIFY(!qmlProjectFile.isEmpty());
+
+    const QString qmlProjectFileContent = projectManager.readQmlProjectFile(qmlProjectFile);
+    QVERIFY(!qmlProjectFileContent.isEmpty());
+
+    const QString mainQmlFile = projectManager.getMainQmlFile(projectPath, qmlProjectFileContent);
+    QVERIFY(!mainQmlFile.isEmpty());
+    QCOMPARE(mainQmlFile, projectPath + "/test_projectContent/App.qml");
+}
+
+void TestProjectManager::testGetImportPaths()
+{
+    ProjectManager projectManager;
+    const QString projectPath = projectManager.unpackProject(m_projectThatCanRun);
+    QVERIFY(!projectPath.isEmpty());
+
+    const QString qmlProjectFile = projectManager.findFile(projectPath, "*.qmlproject", false);
+    QVERIFY(!qmlProjectFile.isEmpty());
+
+    const QString qmlProjectFileContent = projectManager.readQmlProjectFile(qmlProjectFile);
+    QVERIFY(!qmlProjectFileContent.isEmpty());
+
+    const QStringList importPaths = projectManager.getImportPaths(projectPath, qmlProjectFileContent);
+    QVERIFY(importPaths.size() == 1);
+    QCOMPARE(importPaths.at(0), projectPath + "/.");
+}
+
+void TestProjectManager::testIsQt6Project()
+{
+    ProjectManager projectManager;
+    const QString projectPath = projectManager.unpackProject(m_projectThatCanRun);
+    QVERIFY(!projectPath.isEmpty());
+
+    const QString qmlProjectFile = projectManager.findFile(projectPath, "*.qmlproject", false);
+    QVERIFY(!qmlProjectFile.isEmpty());
+
+    const QString qmlProjectFileContent = projectManager.readQmlProjectFile(qmlProjectFile);
+    QVERIFY(!qmlProjectFileContent.isEmpty());
+
+    const bool result = projectManager.isQt6Project(qmlProjectFileContent);
+    QVERIFY(result);
+}
+
+void TestProjectManager::testShowAppWindow()
+{
+    ProjectManager projectManager;
+
+    projectManager.runProject(m_projectThatCanRun, true, "sessionId");
+    QVERIFY(projectManager.m_quickWindow->isVisible() == false);
+
+    projectManager.showAppWindow();
+    QVERIFY(projectManager.m_quickWindow->isVisible());
+}
diff --git a/tests/tst_projectmanager.h b/tests/tst_projectmanager.h
new file mode 100644
index 0000000..a9c5b60
--- /dev/null
+++ b/tests/tst_projectmanager.h
@@ -0,0 +1,40 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#pragma once
+
+#include <QObject>
+
+#include "backend/projectmanager.h"
+
+class TestProjectManager : public QObject
+{
+    Q_OBJECT
+private slots:
+    void initTestCase();
+
+    // public methods
+    void testRunProject();
+    void testStopProject();
+
+    // protected methods - resource management
+    void testRegisterResource();
+    void testUnregisterResource();
+    void testCopyResourceToFs();
+    void testUnpackProject();
+
+    // protected methods - project management
+    void testRunProjectInternal();
+    void testFindFile();
+    void testReadQmlProjectFile();
+    void testGetMainQmlFile();
+    void testGetImportPaths();
+    void testIsQt6Project();
+
+    // protected methods - window management
+    void testShowAppWindow();
+
+private:
+    QByteArray m_projectThatCanRun;
+    QByteArray m_projectThatCannotRun;
+};
diff --git a/tests/tst_settings.cpp b/tests/tst_settings.cpp
index a8922db..f860d33 100644
--- a/tests/tst_settings.cpp
+++ b/tests/tst_settings.cpp
@@ -5,22 +5,31 @@
 
 #include <QTest>
 
-#include "backend/settings.h"
+void TestSettings::initTestCase()
+{
+    QVERIFY(m_settings.clearSettings());
+}
 
 void TestSettings::testAutoScaleProject()
 {
-    Settings settings;
-    QVERIFY(settings.autoScaleProject());
+    QVERIFY(m_settings.autoScaleProject());
 
-    settings.setAutoScaleProject(false);
-    QVERIFY(!settings.autoScaleProject());
+    m_settings.setAutoScaleProject(false);
+    QVERIFY(!m_settings.autoScaleProject());
 }
 
 void TestSettings::testDeviceUuid()
 {
-    Settings settings;
-    QVERIFY(settings.deviceUuid().isEmpty());
+    QVERIFY(m_settings.deviceUuid().isEmpty());
+
+    m_settings.setDeviceUuid("1234567890");
+    QCOMPARE(m_settings.deviceUuid(), QString("1234567890"));
+}
+
+void TestSettings::testKeepScreenOn()
+{
+    QVERIFY(!m_settings.keepScreenOn());
 
-    settings.setDeviceUuid("1234567890");
-    QCOMPARE(settings.deviceUuid(), QString("1234567890"));
+    m_settings.setKeepScreenOn(true);
+    QVERIFY(m_settings.keepScreenOn());
 }
diff --git a/tests/tst_settings.h b/tests/tst_settings.h
index 6c70c64..92cfed7 100644
--- a/tests/tst_settings.h
+++ b/tests/tst_settings.h
@@ -5,11 +5,18 @@
 
 #include <QObject>
 
+#include "backend/settings.h"
+
 class TestSettings : public QObject
 {
     Q_OBJECT
 private slots:
+    void initTestCase();
 
     void testAutoScaleProject();
     void testDeviceUuid();
+    void testKeepScreenOn();
+
+private:
+    Settings m_settings;
 };
-- 
GitLab