diff --git a/android/app/src/test/java/com/hyzq/boss/ProjectDetailActivityUiTest.java b/android/app/src/test/java/com/hyzq/boss/ProjectDetailActivityUiTest.java index 135607f..1034b1e 100644 --- a/android/app/src/test/java/com/hyzq/boss/ProjectDetailActivityUiTest.java +++ b/android/app/src/test/java/com/hyzq/boss/ProjectDetailActivityUiTest.java @@ -1,17 +1,22 @@ package com.hyzq.boss; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; import android.content.Intent; +import android.view.Gravity; import android.view.View; import android.widget.Button; import android.widget.LinearLayout; - +import android.widget.ListView; +import android.widget.TextView; +import androidx.appcompat.app.AlertDialog; 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.shadows.ShadowDialog; import org.robolectric.util.ReflectionHelpers; @RunWith(RobolectricTestRunner.class) @@ -31,16 +36,21 @@ public class ProjectDetailActivityUiTest { 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 contentLayout = activity.findViewById(R.id.screen_content); + View firstMessage = buildBoundMessageView(activity, "m1", "第一条消息"); + View secondMessage = buildBoundMessageView(activity, "m2", "第二条消息"); + contentLayout.addView(firstMessage); + contentLayout.addView(secondMessage); + + assertEquals(View.VISIBLE, activity.findViewById(R.id.project_chat_composer_row).getVisibility()); + + firstMessage.performLongClick(); + android.app.Dialog latestDialog = ShadowDialog.getLatestDialog(); + assertTrue(latestDialog instanceof AlertDialog); + AlertDialog actionDialog = (AlertDialog) latestDialog; + ListView listView = actionDialog.getListView(); + View multiSelectItem = listView.getAdapter().getView(1, null, listView); + listView.performItemClick(multiSelectItem, 1, listView.getAdapter().getItemId(1)); LinearLayout composerRow = activity.findViewById(R.id.project_chat_composer_row); LinearLayout multiSelectActions = activity.findViewById(R.id.project_chat_multi_select_actions); @@ -52,9 +62,12 @@ public class ProjectDetailActivityUiTest { assertEquals(View.VISIBLE, multiSelectActions.getVisibility()); assertEquals("取消", backButton.getText().toString()); assertEquals(View.GONE, refreshButton.getVisibility()); - assertEquals(true, forwardButton.isEnabled()); + assertEquals(false, forwardButton.isEnabled()); - ReflectionHelpers.callInstanceMethod(activity, "exitMultiSelect"); + secondMessage.performClick(); + assertTrue(forwardButton.isEnabled()); + + backButton.performClick(); assertEquals(View.VISIBLE, composerRow.getVisibility()); assertEquals(View.GONE, multiSelectActions.getVisibility()); @@ -62,6 +75,20 @@ public class ProjectDetailActivityUiTest { assertEquals(View.VISIBLE, refreshButton.getVisibility()); } + private static View buildBoundMessageView(TestProjectDetailActivity activity, String messageId, String body) { + TextView messageView = new TextView(activity); + messageView.setText(body); + messageView.setGravity(Gravity.START); + ReflectionHelpers.callInstanceMethod( + activity, + "bindMessageInteractions", + ReflectionHelpers.ClassParameter.from(View.class, messageView), + ReflectionHelpers.ClassParameter.from(String.class, messageId), + ReflectionHelpers.ClassParameter.from(String.class, body) + ); + return messageView; + } + public static class TestProjectDetailActivity extends ProjectDetailActivity { @Override boolean shouldLoadOnCreate() {