fix: exercise native chat actions via ui callbacks
This commit is contained in:
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user