mardi 8 novembre 2016

Android testing for item in List View

So even though there are numerous questions that are similar to this one, none of the answers seem to fix my error. I'm simply trying to check that an item that my test puts into a list view is in fact in it.

Test

@RunWith(AndroidJUnit4.class)
public class StartNewGameEspressoTest {
    @Rule
    public ActivityTestRule<ModeratorActivity> mActivityTestRule = new ActivityTestRule<>(ModeratorActivity.class);

    @Test
    public void startNewGameEspressoTest() {

        ViewInteraction appCompatButton = onView(
                allOf(withId(R.id.new_game_button), withText("New Game"),
                        withParent(withId(R.id.content_moderator)),
                        isDisplayed()));
        appCompatButton.perform(click());

        ViewInteraction appCompatButton2 = onView(
                allOf(withId(R.id.add),
                        withParent(withId(R.id.content_start_new_game)),
                        isDisplayed()));
        appCompatButton2.perform(click());

        onView(withId(R.id.edit_text_name))
                .perform(typeText("Test Name"), closeSoftKeyboard());
        onView(withText("Add")).perform(click());


        DataInteraction listView = onData(anything())
                .inAdapterView(withId(R.id.Players))
                .atPosition(0);
        listView.check(matches(withText("Test Name")));

    }

Start New Game Activity

public class StartNewGameActivity extends AppCompatActivity
        implements CreatePlayerDialogFragment.PlayerDialogListener {

    private ListView lv;
    List<String> playerNames = new ArrayList<String>();
    ArrayList<Player> players = new ArrayList<Player>();


    public void addNewPlayer(View view) {
        DialogFragment newFragment = new CreatePlayerDialogFragment();
        newFragment.show(getSupportFragmentManager(), "Player");
    }

    @Override
    public void onDialogPositiveClick(String name) {
        playerNames.add(name);
        //players.add(new Player());
    }


    public void beginGame(View view) {
        EditText gameNameField = (EditText) findViewById(R.id.gameName);
        String gameName = gameNameField.getText().toString().trim();
        Collections.shuffle(players);
        if (gameName.isEmpty()) {
            CharSequence text = "No Game Name Entered";
            int duration = Toast.LENGTH_LONG;

            Toast toast = Toast.makeText(getApplicationContext(), text, duration);
            toast.show();

        }
        else if (playerNames.size() < 2) {
            CharSequence text = "Not Enough Players";
            int duration = Toast.LENGTH_LONG;

            Toast toast = Toast.makeText(getApplicationContext(), text, duration);
            toast.show();
        }
        else {
            for (int i = 0; i < players.size(); i++) {
                if (i != (players.size() - 1)) {
                    players.get(i).target = players.get(i + 1);
                } else {
                    players.get(i).target = players.get(0);
                }
            }
            Game game = new Game(gameName, players);
        }
    }

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_start_new_game);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        lv = (ListView) findViewById(R.id.Players);
        final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(
                this,
                android.R.layout.simple_list_item_1,
                playerNames );

        lv.setAdapter(arrayAdapter);

        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> a, View v, int position, long id) {
                AlertDialog.Builder adb=new AlertDialog.Builder(StartNewGameActivity.this);
                adb.setTitle("Delete?");
                adb.setMessage("Are you sure you want to remove " + "\"" + playerNames.get(position).toString() + "\"" + " From the game?");
                final int positionToRemove = position;
                adb.setNegativeButton("Cancel", null);
                adb.setPositiveButton("Ok", new AlertDialog.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        playerNames.remove(positionToRemove);
                        arrayAdapter.notifyDataSetChanged();
                    }});
                adb.show();
            }
        });

    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        setContentView(R.layout.activity_start_new_game);

        lv = (ListView) findViewById(R.id.Players);
        ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(
                this,
                android.R.layout.simple_list_item_1,
                playerNames );

        lv.setAdapter(arrayAdapter);
    }

}

XML File

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/content_start_new_game"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="com.example.hunte.assassin.StartNewGameActivity"
    tools:showIn="@layout/activity_start_new_game">

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="textCapWords"
        android:ems="10"
        android:id="@+id/gameName"
        android:textAlignment="center"
        android:hint="Name Of Game"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:textColorLink="?attr/colorPrimaryDark"
        android:selectAllOnFocus="true" />

    <ListView
        android:layout_marginTop="15dp"
        android:layout_height="300dp"
        android:layout_width="250dp"
        android:layout_below="@+id/gameName"
        android:layout_alignLeft="@+id/gameName"
        android:layout_alignStart="@+id/gameName"
        android:id="@+id/Players" />

    <TextView
        android:text=" Players:"
        android:id="@+id/textView3"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:layout_marginTop="62dp"
        android:layout_alignTop="@+id/listView"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

    <ImageButton
        android:text="Button"
        android:id="@+id/add"
        android:foreground="@android:drawable/ic_input_add"
        android:layout_marginTop="6dp"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:layout_below="@+id/textView3"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:onClick="addNewPlayer"/>

    <Button
        android:text="Begin!"
        android:layout_width="100dp"
        android:layout_height="50dp"
        android:id="@+id/begin"
        android:layout_marginBottom="50dp"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:onClick="beginGame"/>

</RelativeLayout>

Just to be clear, the test does in fact manage to put the item in the list view. Im getting the error "android.support.test.espresso.PerformException: Error performing 'load adapter data' on view 'Animations or transitions are enabled on the target device."

Aucun commentaire:

Enregistrer un commentaire