From a3a7f436267c48ea717525ba21bc0240d46939cd Mon Sep 17 00:00:00 2001 From: kris Date: Sat, 28 Mar 2026 08:50:57 +0800 Subject: [PATCH] test: verify native chat mode transitions --- android/app/build.gradle | 4 ++ .../com/hyzq/boss/ProjectDetailActivity.java | 8 ++- .../boss/ProjectDetailActivityUiTest.java | 71 +++++++++++++++++++ 3 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 android/app/src/test/java/com/hyzq/boss/ProjectDetailActivityUiTest.java diff --git a/android/app/build.gradle b/android/app/build.gradle index 07f9d4b..d533f52 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -13,6 +13,9 @@ android { buildFeatures { buildConfig true } + testOptions { + unitTests.includeAndroidResources = true + } compileOptions { sourceCompatibility JavaVersion.VERSION_21 targetCompatibility JavaVersion.VERSION_21 @@ -56,6 +59,7 @@ dependencies { implementation "androidx.core:core-splashscreen:$coreSplashScreenVersion" implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0" testImplementation "junit:junit:$junitVersion" + testImplementation "org.robolectric:robolectric:4.14.1" androidTestImplementation "androidx.test.ext:junit:$androidxJunitVersion" androidTestImplementation "androidx.test.espresso:espresso-core:$androidxEspressoCoreVersion" } diff --git a/android/app/src/main/java/com/hyzq/boss/ProjectDetailActivity.java b/android/app/src/main/java/com/hyzq/boss/ProjectDetailActivity.java index 845ef8f..5ece433 100644 --- a/android/app/src/main/java/com/hyzq/boss/ProjectDetailActivity.java +++ b/android/app/src/main/java/com/hyzq/boss/ProjectDetailActivity.java @@ -155,7 +155,13 @@ public class ProjectDetailActivity extends BossScreenActivity { }); updateComposerSendButtonState(); updateSelectionUi(); - reload(true); + if (shouldLoadOnCreate()) { + reload(true); + } + } + + boolean shouldLoadOnCreate() { + return true; } @Override diff --git a/android/app/src/test/java/com/hyzq/boss/ProjectDetailActivityUiTest.java b/android/app/src/test/java/com/hyzq/boss/ProjectDetailActivityUiTest.java new file mode 100644 index 0000000..135607f --- /dev/null +++ b/android/app/src/test/java/com/hyzq/boss/ProjectDetailActivityUiTest.java @@ -0,0 +1,71 @@ +package com.hyzq.boss; + +import static org.junit.Assert.assertEquals; + +import android.content.Intent; +import android.view.View; +import android.widget.Button; +import android.widget.LinearLayout; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.Robolectric; +import org.robolectric.RobolectricTestRunner; +import org.robolectric.annotation.Config; +import org.robolectric.util.ReflectionHelpers; + +@RunWith(RobolectricTestRunner.class) +@Config(sdk = 34) +public class ProjectDetailActivityUiTest { + @Test + public void multiSelectModeUpdatesRealChatChrome() { + Intent intent = new Intent() + .putExtra(ProjectDetailActivity.EXTRA_PROJECT_ID, "project-1") + .putExtra(ProjectDetailActivity.EXTRA_PROJECT_NAME, "北区试产线回归"); + TestProjectDetailActivity activity = Robolectric + .buildActivity(TestProjectDetailActivity.class, intent) + .setup() + .get(); + + ReflectionHelpers.setField(activity, "conversationInfoReady", true); + ReflectionHelpers.setField(activity, "currentScreenTitle", "北区试产线回归"); + ReflectionHelpers.setField(activity, "currentScreenSubtitle", "归档确认"); + + ReflectionHelpers.callInstanceMethod( + activity, + "enterMultiSelectFromMessage", + ReflectionHelpers.ClassParameter.from(String.class, "m1") + ); + ReflectionHelpers.callInstanceMethod( + activity, + "toggleMultiSelectMessage", + ReflectionHelpers.ClassParameter.from(String.class, "m2") + ); + + LinearLayout composerRow = activity.findViewById(R.id.project_chat_composer_row); + LinearLayout multiSelectActions = activity.findViewById(R.id.project_chat_multi_select_actions); + Button backButton = activity.findViewById(R.id.screen_back_button); + Button refreshButton = activity.findViewById(R.id.screen_refresh_button); + Button forwardButton = activity.findViewById(R.id.project_chat_multi_forward); + + assertEquals(View.GONE, composerRow.getVisibility()); + assertEquals(View.VISIBLE, multiSelectActions.getVisibility()); + assertEquals("取消", backButton.getText().toString()); + assertEquals(View.GONE, refreshButton.getVisibility()); + assertEquals(true, forwardButton.isEnabled()); + + ReflectionHelpers.callInstanceMethod(activity, "exitMultiSelect"); + + assertEquals(View.VISIBLE, composerRow.getVisibility()); + assertEquals(View.GONE, multiSelectActions.getVisibility()); + assertEquals("返回", backButton.getText().toString()); + assertEquals(View.VISIBLE, refreshButton.getVisibility()); + } + + public static class TestProjectDetailActivity extends ProjectDetailActivity { + @Override + boolean shouldLoadOnCreate() { + return false; + } + } +}