test: verify native chat mode transitions

This commit is contained in:
kris
2026-03-28 08:50:57 +08:00
parent 64ad401d0c
commit a3a7f43626
3 changed files with 82 additions and 1 deletions

View File

@@ -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"
}

View File

@@ -155,7 +155,13 @@ public class ProjectDetailActivity extends BossScreenActivity {
});
updateComposerSendButtonState();
updateSelectionUi();
reload(true);
if (shouldLoadOnCreate()) {
reload(true);
}
}
boolean shouldLoadOnCreate() {
return true;
}
@Override

View File

@@ -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;
}
}
}