Android Open Source - Musicdroid Piano Activity Ui Test






From Project

Back to project page Musicdroid.

License

The source code is released under:

GNU General Public License

If you think the Android project Musicdroid listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*
 * Musicdroid: An on-device music generator for Android
 * Copyright (C) 2010-2014 The Catrobat Team
 * (<http://developer.catrobat.org/credits>)
 *//  w w  w.  ja  v  a 2  s  .com
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as
 * published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version.
 *
 * An additional term exception under section 7 of the GNU Affero
 * General Public License, version 3, is available at
 * http://developer.catrobat.org/license_additional_term
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

package org.catrobat.musicdroid.pocketmusic.uitest.instrument.piano;

import android.test.ActivityInstrumentationTestCase2;

import com.robotium.solo.Solo;

import org.catrobat.musicdroid.pocketmusic.R;
import org.catrobat.musicdroid.pocketmusic.instrument.InstrumentActivity;
import org.catrobat.musicdroid.pocketmusic.instrument.piano.PianoActivity;
import org.catrobat.musicdroid.pocketmusic.note.Track;
import org.catrobat.musicdroid.pocketmusic.note.midi.MidiException;
import org.catrobat.musicdroid.pocketmusic.note.midi.ProjectToMidiConverter;
import org.catrobat.musicdroid.pocketmusic.test.note.midi.ProjectToMidiConverterTestDataFactory;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class PianoActivityUiTest extends ActivityInstrumentationTestCase2<PianoActivity> {

    private static final String PIANO_BUTTON = "C";

    private PianoActivity pianoActivity;
    private Solo solo;

    public PianoActivityUiTest() {
        super(PianoActivity.class);
    }

    @Override
    protected void setUp() {
        pianoActivity = getActivity();
        solo = new Solo(getInstrumentation(), getActivity());
    }

    @Override
    protected void tearDown() {
        if (ProjectToMidiConverter.MIDI_FOLDER.isDirectory()) {
            for(File file: ProjectToMidiConverter.MIDI_FOLDER.listFiles())
                file.delete();
        }

        pianoActivity.getMidiPlayer().stop();

        solo.finishOpenedActivities();
    }

    public void testExportMidi() {
        String filename = "music";
        boolean saveFile = true;
        boolean expectedFileExists = true;

        exportMidi(filename, saveFile);

        assertFileExists(filename, expectedFileExists);
    }

    public void testExportMidiInvalidName() {
        String invalidFilename = "";
        boolean saveFile = true;
        boolean expectedFileExists = false;

        exportMidi(invalidFilename, saveFile);

        assertFileExists(invalidFilename, expectedFileExists);
    }

    public void testExportMidiCancel() {
        String filename = "music";
        boolean saveFile = false;
        boolean expectedFileExists = false;

        exportMidi(filename, saveFile);

        assertFileExists(filename, expectedFileExists);
    }

    private void assertFileExists(String filename, boolean expectedExistResult) {
        File file = new File(ProjectToMidiConverter.MIDI_FOLDER, filename + ProjectToMidiConverter.MIDI_FILE_EXTENSION);

        assertEquals(expectedExistResult, file.exists());
    }

    private void exportMidi(String filename, boolean clickOnSaveButton) {
        solo.clickOnButton(PIANO_BUTTON);
        solo.clickOnActionBarItem(R.id.action_export_midi);
        solo.waitForDialogToOpen();
        solo.clearEditText(pianoActivity.getEditTextMidiExportNameDialogPrompt());
        solo.enterText(pianoActivity.getEditTextMidiExportNameDialogPrompt(), filename);

        if(clickOnSaveButton) {
            solo.clickOnButton(pianoActivity.getString(R.string.action_export_dialog_positive_button));

            if ((filename != null) && (false == filename.equals(""))) {
                solo.waitForText(pianoActivity.getString(R.string.action_export_midi_success));
            } else {
                solo.waitForText(pianoActivity.getString(R.string.action_export_midi_cancel));
            }
        } else {
            solo.clickOnButton(pianoActivity.getString(R.string.action_export_dialog_negative_button));
        }
    }

    private void importMidi(String filename) {
        solo.clickOnActionBarItem(R.id.action_import_midi);
        solo.waitForDialogToOpen();
        solo.clickOnText(filename);
        solo.waitForText(pianoActivity.getString(R.string.action_import_midi_success));
    }

    public void testImportMidi() throws IOException, MidiException {
        boolean expectedFileExists = true;
        String filename = "testFile";
        ProjectToMidiConverterTestDataFactory.writeTestProject(filename);
        assertFileExists(filename, expectedFileExists);
        importMidi(filename);
    }

    public void testClear() {
        solo.clickOnButton(PIANO_BUTTON);
        solo.clickOnActionBarItem(R.id.action_clear_midi);
        solo.waitForText(pianoActivity.getString(R.string.action_delete_midi_success));

        Track newTrack = getActivity().getTrack();

        assertEquals(0, newTrack.size());
    }

    public void testUndo() {
        int expectedTrackSize = 0;

        solo.clickOnButton(PIANO_BUTTON);
        solo.clickOnActionBarItem(R.id.action_undo_midi);

        assertEquals(expectedTrackSize, pianoActivity.getTrack().size());
    }

    public void testRotateWithSymbolsDrawn() {
        int expectedTrackSize = 4;

        solo.clickOnButton(PIANO_BUTTON);
        rotateAndReturnActivity(Solo.LANDSCAPE);
        solo.clickOnButton(PIANO_BUTTON);

        int actualTrackSize = pianoActivity.getTrack().size();

        assertEquals(expectedTrackSize, actualTrackSize);
    }

    private void rotateAndReturnActivity(int orientation) {
        solo.setActivityOrientation(orientation);
        getInstrumentation().waitForIdleSync();

        pianoActivity = (PianoActivity) solo.getCurrentActivity();
    }

    public void testRotateAndUndo() {
        int expectedTrackSize = 0;

        solo.clickOnButton(PIANO_BUTTON);
        rotateAndReturnActivity(Solo.LANDSCAPE);
        solo.clickOnButton(PIANO_BUTTON);
        rotateAndReturnActivity(Solo.PORTRAIT);

        solo.clickOnActionBarItem(R.id.action_undo_midi);
        solo.clickOnActionBarItem(R.id.action_undo_midi);

        int actualTrackSize = pianoActivity.getTrack().size();

        assertEquals(expectedTrackSize, actualTrackSize);
    }

    public void testPlayMidi() {
        clickSomePianoButtonsForLargeTrack();
        solo.clickOnActionBarItem(R.id.action_play_midi);
        solo.waitForDialogToOpen();

        assertTrue(pianoActivity.getMidiPlayer().isPlaying());
    }

    private void clickSomePianoButtonsForLargeTrack() {
        int numberOfNotes = 5;

        for (int i = 0; i < numberOfNotes; i++) {
            solo.clickOnButton(PIANO_BUTTON);
        }
    }

    private void clickSomePianoButtonsFastForLargeTrack() {

        int threadCount = 3;
        List<Thread> playThreads = new ArrayList<>();
        for(int i = 0; i < threadCount; i++){
            playThreads.add(new Thread() {
                public void run() {
                    clickSomePianoButtonsForLargeTrack();
                }
            });
            playThreads.get(i).start();
        }

        clickSomePianoButtonsForLargeTrack();

    }

    public void testPlayMidiStop() {
        clickSomePianoButtonsForLargeTrack();
        solo.clickOnActionBarItem(R.id.action_play_midi);
        solo.waitForDialogToOpen();
        solo.clickOnButton(pianoActivity.getString(R.string.action_play_midi_dialog_stop));
        solo.waitForDialogToClose();

        assertFalse(pianoActivity.getMidiPlayer().isPlaying());
    }

    public void testPlayMidiEmptyTrack() {
        solo.clickOnActionBarItem(R.id.action_play_midi);

        assertFalse(pianoActivity.getMidiPlayer().isPlaying());
    }

    public void testPlayMidiFinishedPlaying() throws InterruptedException {
        solo.clickOnButton(PIANO_BUTTON);
        solo.clickOnActionBarItem(R.id.action_play_midi);
        solo.waitForDialogToOpen();
        solo.waitForDialogToClose();

        assertFalse(pianoActivity.getMidiPlayer().isPlaying());
    }

    public void testPlayMidiWhileRotating() throws InterruptedException {
        solo.setActivityOrientation(Solo.PORTRAIT);
        clickSomePianoButtonsFastForLargeTrack();
        assertTrue(pianoActivity.getMidiPlayer().getPlayQueue().size() > 0);

        solo.setActivityOrientation(Solo.LANDSCAPE);
        clickSomePianoButtonsFastForLargeTrack();
        assertTrue(pianoActivity.getMidiPlayer().getPlayQueue().size() > 0);

        solo.setActivityOrientation(Solo.PORTRAIT);
        clickSomePianoButtonsFastForLargeTrack();
        assertTrue(pianoActivity.getMidiPlayer().getPlayQueue().size() > 0);

    }

    public void testPlayMidiBackButtonPress() throws InterruptedException {
        solo.setActivityOrientation(Solo.PORTRAIT);
        clickSomePianoButtonsFastForLargeTrack();
        assertTrue(pianoActivity.getMidiPlayer().getPlayQueue().size() > 0);

        solo.setActivityOrientation(Solo.LANDSCAPE);
        clickSomePianoButtonsFastForLargeTrack();
        assertTrue(pianoActivity.getMidiPlayer().getPlayQueue().size() > 0);

        solo.goBack();
        assertTrue(pianoActivity.getMidiPlayer().getPlayQueue().size() == 0);
    }

    public void testClickOnButtonMaxTrackSize() {
        int buttonPressCount = InstrumentActivity.MAX_TRACK_SIZE_IN_SYMBOLS;

        for (int i = 0; i < buttonPressCount; i++) {
            solo.clickOnButton(PIANO_BUTTON);
        }

        solo.clickOnButton(PIANO_BUTTON);

        int expectedTrackCount = InstrumentActivity.MAX_TRACK_SIZE_IN_NOTE_EVENTS;
        int actualTrackCount = pianoActivity.getTrack().size();

        assertEquals(expectedTrackCount, actualTrackCount);
    }
    public void testMaxTrackSizeTextView() {
        int buttonPressCount = 6;

        for (int i = 0; i < buttonPressCount; i++) {
            solo.clickOnButton(PIANO_BUTTON);
        }

        String expectedTextViewText = buttonPressCount + " / " + InstrumentActivity.MAX_TRACK_SIZE_IN_SYMBOLS;
        String actualTextViewText = pianoActivity.getTrackSizeString();

        assertEquals(expectedTextViewText, actualTextViewText);
    }
}




Java Source Code List

org.catrobat.musicdroid.pocketmusic.instrument.InstrumentActivity.java
org.catrobat.musicdroid.pocketmusic.instrument.noteSheet.NoteSheetViewFragment.java
org.catrobat.musicdroid.pocketmusic.instrument.noteSheet.NoteSheetView.java
org.catrobat.musicdroid.pocketmusic.instrument.piano.PianoActivity.java
org.catrobat.musicdroid.pocketmusic.instrument.piano.PianoViewFragment.java
org.catrobat.musicdroid.pocketmusic.instrument.tempo.AbstractTickProvider.java
org.catrobat.musicdroid.pocketmusic.instrument.tempo.SimpleTickProvider.java
org.catrobat.musicdroid.pocketmusic.note.MusicalInstrument.java
org.catrobat.musicdroid.pocketmusic.note.MusicalKey.java
org.catrobat.musicdroid.pocketmusic.note.NoteEvent.java
org.catrobat.musicdroid.pocketmusic.note.NoteLength.java
org.catrobat.musicdroid.pocketmusic.note.NoteName.java
org.catrobat.musicdroid.pocketmusic.note.Octave.java
org.catrobat.musicdroid.pocketmusic.note.Project.java
org.catrobat.musicdroid.pocketmusic.note.TrackMementoStack.java
org.catrobat.musicdroid.pocketmusic.note.Track.java
org.catrobat.musicdroid.pocketmusic.note.draw.NoteBodyDrawer.java
org.catrobat.musicdroid.pocketmusic.note.draw.NoteCrossDrawer.java
org.catrobat.musicdroid.pocketmusic.note.draw.NoteDrawer.java
org.catrobat.musicdroid.pocketmusic.note.draw.NotePositionInformation.java
org.catrobat.musicdroid.pocketmusic.note.draw.NoteSheetCanvas.java
org.catrobat.musicdroid.pocketmusic.note.draw.NoteSheetDrawPosition.java
org.catrobat.musicdroid.pocketmusic.note.draw.NoteSheetDrawer.java
org.catrobat.musicdroid.pocketmusic.note.draw.NoteStemDrawer.java
org.catrobat.musicdroid.pocketmusic.note.draw.SymbolDrawer.java
org.catrobat.musicdroid.pocketmusic.note.draw.TrackDrawer.java
org.catrobat.musicdroid.pocketmusic.note.midi.MidiException.java
org.catrobat.musicdroid.pocketmusic.note.midi.MidiPlayer.java
org.catrobat.musicdroid.pocketmusic.note.midi.MidiToProjectConverter.java
org.catrobat.musicdroid.pocketmusic.note.midi.NoteEventToMidiEventConverter.java
org.catrobat.musicdroid.pocketmusic.note.midi.ProjectToMidiConverter.java
org.catrobat.musicdroid.pocketmusic.note.symbol.BreakSymbol.java
org.catrobat.musicdroid.pocketmusic.note.symbol.NoteEventListToSymbolConverter.java
org.catrobat.musicdroid.pocketmusic.note.symbol.NoteSymbol.java
org.catrobat.musicdroid.pocketmusic.note.symbol.Symbol.java
org.catrobat.musicdroid.pocketmusic.note.symbol.TrackToSymbolsConverter.java
org.catrobat.musicdroid.pocketmusic.uitest.BaseActivityInstrumentationTestCase2.java
org.catrobat.musicdroid.pocketmusic.uitest.BaseInstrumentationTestCase.java
org.catrobat.musicdroid.pocketmusic.uitest.PianoActivityTest.java
org.catrobat.musicdroid.pocketmusic.uitest.instrument.piano.PianoActivityUiTest.java