Android Open Source - AudioBook Bookshelf Test






From Project

Back to project page AudioBook.

License

The source code is released under:

Creative Commons Legal Code Attribution-NonCommercial 3.0 Unported CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT C...

If you think the Android project AudioBook 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

/**
 *  This work is licensed under the Creative Commons Attribution-NonCommercial-
 *  NoDerivs 3.0 Unported License. To view a copy of this license, visit
 *  http://creativecommons.org/licenses/by-nc-nd/3.0/ or send a letter to 
 *  Creative Commons, 444 Castro Street, Suite 900, Mountain View, California, 
 *  94041, USA./*from   w w  w  .  ja va 2  s . c o m*/
 * 
 *  Use of this work is permitted only in accordance with license rights granted.
 *  Materials provided "AS IS"; no representations or warranties provided.
 * 
 *  Copyright ? 2012 Marcus Parkkinen, Aki K?kel?, Fredrik ?hs.
 **/

package edu.chalmers.dat255.audiobookplayer.model;

import junit.framework.TestCase;
import edu.chalmers.dat255.audiobookplayer.constants.Constants;

/**
 * Test for Bookshelf. Tests constructing and copying a bookshelf,
 * selecting/adding/moving/removing book(s), getting number of books and the
 * equals method for a bookshelf.
 * 
 * @author Aki K?kel?
 * @version 0.3
 * 
 */
public class BookshelfTest extends TestCase {

  // Bookshelf
  private Bookshelf bookshelf;

  // Tracks
  private static final String PATH0 = "path000";
  private static final String PATH1 = "path111";
  private static final String PATH2 = "path222";

  private static final int DURATION0 = 1234;
  private static final int DURATION1 = 2345;
  private static final int DURATION2 = 3456;

  private static final Track TRACK0 = new Track(PATH0, DURATION0);
  private static final Track TRACK1 = new Track(PATH1, DURATION1);
  private static final Track TRACK2 = new Track(PATH2, DURATION2);

  // Books
  private static final String TITLE0 = "title0";
  private static final String TITLE1 = "title1";
  private static final String TITLE2 = "title2";
  private static final String TITLE3 = "title3";
  private static final String TITLE4 = "title4";

  private static final String AUTHOR0 = "author0";
  private static final String AUTHOR1 = "author1";

  private static final Book BOOK0 = new Book(TITLE0, AUTHOR0);
  private static final Book BOOK1 = new Book(TITLE1, AUTHOR1);
  private static final Book BOOK2 = new Book(TITLE2);
  private static final Book BOOK3 = new Book(TITLE3);
  private static final Book BOOK4 = new Book(TITLE4);

  // Constant values; 'magic numbers'
  private static final int LEGAL_POSITIVE_INDEX = 1;
  private static final int OTHER_LEGAL_POSITIVE_INDEX = 3;

  private static final int ILLEGAL_POSITIVE_INDEX = 5;
  private static final int OTHER_ILLEGAL_POSITIVE_INDEX = 1000;

  private static final int ILLEGAL_NEGATIVE_INDEX = -2;

  private static final int STARTING_NUMBER_OF_BOOKS = 5;

  private static final String OUT_OF_BOUNDS_MESSAGE = "Index was out of bounds,"
      + " but the operation was still completed.";

  private static final int FIRST = 0;
  private static final int SECOND = 1;
  private static final int THIRD = 2;
  private static final int FOURTH = 3;
  private static final int LAST = 4;

  /*
   * (non-Javadoc)
   * 
   * @see junit.framework.TestCase#setUp()
   */
  @Override
  protected void setUp() {
    try {
      super.setUp();
    } catch (Exception e) {
      // catch exceptions from super.setUp() and fail
      fail("setUp failed + " + e.getMessage());
    }
    // NOTE: do not change these values; the tests depend on them

    // create a new bookshelf
    bookshelf = new Bookshelf();

    // Add tracks to one of the books
    BOOK0.addTrack(TRACK0);
    BOOK0.addTrack(TRACK1);
    BOOK0.addTrack(TRACK2);

    // Add books to the bookshelf (to add to the allowed indices)
    bookshelf.addBook(BOOK0);
    bookshelf.addBook(BOOK1);
    bookshelf.addBook(BOOK2);
    bookshelf.addBook(BOOK3);
    bookshelf.addBook(BOOK4);
  }

  /**
   * Tests the constructor.
   */
  public void testBookshelf() {
    /*
     * According to the design, the bookshelf should select only the first
     * book added. If it is empty, it will not have a selection. If it has
     * more than one book, it will still keep the first added book selected.
     */
    assertTrue(bookshelf.getSelectedBookIndex() == 0); // first one selected

    // now try an empty bookshelf
    bookshelf = new Bookshelf();

    // none selected:
    assertTrue(bookshelf.getSelectedBookIndex() == Constants.Value.NO_BOOK_SELECTED);

    // make sure that getting the book causes an exception.
    try {
      bookshelf.getSelectedBook();
      fail("()" + "Current book on an empty bookshelf should not exist.");
    } catch (IndexOutOfBoundsException e) {
      // expected
    }
  }

  /**
   * Tests the constructor.
   */
  public void testConstructor() {
    Bookshelf testBookshelf = new Bookshelf(bookshelf);

    // Assert that created bookshelves are not null
    assertTrue(bookshelf != null);
    assertTrue(testBookshelf != null);

    // Assert that bookshelves created through the copy constructor are
    // equal
    assertEquals(bookshelf, testBookshelf);

    // Test empty bookshelves
    bookshelf = new Bookshelf();
    testBookshelf = new Bookshelf(bookshelf);
    // Assert that bookshelves created through the copy constructor are
    // equal
    assertEquals(bookshelf, testBookshelf);
  }

  /**
   * Tests selecting a book.
   */
  public void testSetSelectedBook() {
    // Test the accessor
    bookshelf.setSelectedBookIndex(LEGAL_POSITIVE_INDEX);
    assertTrue(bookshelf.getSelectedBookIndex() == LEGAL_POSITIVE_INDEX);

    // Test a positive integer beyond the allowed indices
    bookshelf.setSelectedBookIndex(ILLEGAL_POSITIVE_INDEX);

    // ensure that nothing changed
    assertTrue(bookshelf.getSelectedBookIndex() == LEGAL_POSITIVE_INDEX);

    // Test a negative integer beyond the allowed indices (-1 is allowed)
    bookshelf.setSelectedBookIndex(ILLEGAL_NEGATIVE_INDEX);

    // ensure that nothing changed
    assertTrue(bookshelf.getSelectedBookIndex() == LEGAL_POSITIVE_INDEX);

    // Test deselecting (should work)
    bookshelf.setSelectedBookIndex(Constants.Value.NO_BOOK_SELECTED);

    // ensure that it changed
    assertTrue(bookshelf.getSelectedBookIndex() == Constants.Value.NO_BOOK_SELECTED);

  }

  /**
   * Tests adding a book.
   */
  public void testAddBook() {
    // Make a new (empty) bookshelf
    bookshelf = new Bookshelf();

    // Add a book
    bookshelf.addBook(BOOK0);

    // Assert that the book is added, and at the correct index
    assertEquals(bookshelf.getBookAt(0), BOOK0);

    // Also check that the number of books is correct
    assertTrue(bookshelf.getNumberOfBooks() == 1);

    // Since this is the first book, it should be the 'current' book
    assertTrue(bookshelf.getSelectedBook().equals(BOOK0));
  }

  /**
   * Tests removing a book.
   */
  public void testRemoveBook() {
    // Try to remove a book from an illegal index
    try {
      bookshelf.removeBookAt(ILLEGAL_NEGATIVE_INDEX);
      fail("(illegal negative)" + OUT_OF_BOUNDS_MESSAGE);
    } catch (IndexOutOfBoundsException e) {
    } // expected

    try {
      bookshelf.removeBookAt(ILLEGAL_POSITIVE_INDEX);
      fail("(illegal positive)" + OUT_OF_BOUNDS_MESSAGE);
    } catch (IndexOutOfBoundsException e) {
    } // expected

    // Assert that a book is removed and that it is the correct one
    bookshelf.removeBookAt(THIRD);
    assertTrue(bookshelf.getBookAt(FIRST).equals(BOOK0));
    assertTrue(bookshelf.getBookAt(SECOND).equals(BOOK1));

    // the other books should now have new indices
    assertTrue(bookshelf.getBookAt(THIRD).equals(BOOK3));
    assertTrue(bookshelf.getBookAt(FOURTH).equals(BOOK4));

    // Assert that the number of books is correct
    assertTrue(bookshelf.getNumberOfBooks() == STARTING_NUMBER_OF_BOOKS - 1);

    // Assert that removing a book does nothing to an empty bookshelf
    bookshelf = new Bookshelf();

    // copy to compare with
    Bookshelf testBookshelf = new Bookshelf(bookshelf);

    // remove from the original
    try {
      bookshelf.removeBookAt(0);
      fail("Removing " + OUT_OF_BOUNDS_MESSAGE);
    } catch (IndexOutOfBoundsException e) {
    } // expected

    // make sure they are still equal
    assertTrue(testBookshelf.equals(bookshelf));
  }

  /**
   * Tests moving a book.
   */
  public void testMoveBook() {
    // Make a copy to compare with
    Bookshelf orig = new Bookshelf(bookshelf);

    try {
      // Try to move from an illegal index to an illegal index
      bookshelf.moveBook(ILLEGAL_POSITIVE_INDEX,
          OTHER_ILLEGAL_POSITIVE_INDEX);
      assertTrue(orig.equals(bookshelf));
      fail("(illegal-illegal)" + OUT_OF_BOUNDS_MESSAGE);
    } catch (IndexOutOfBoundsException e) {
      // expected
    }

    try {
      // Try to move from an illegal index to a legal index
      bookshelf.moveBook(ILLEGAL_POSITIVE_INDEX,
          OTHER_LEGAL_POSITIVE_INDEX);
      assertTrue(orig.equals(bookshelf));
      fail("(illegal-legal)" + OUT_OF_BOUNDS_MESSAGE);
    } catch (IndexOutOfBoundsException e) {
      // expected
    }

    try {
      // Try to move from a legal index to an illegal index
      bookshelf.moveBook(LEGAL_POSITIVE_INDEX,
          OTHER_ILLEGAL_POSITIVE_INDEX);
      assertTrue(orig.equals(bookshelf));
      fail("(legal-illegal)" + OUT_OF_BOUNDS_MESSAGE);
    } catch (IndexOutOfBoundsException e) {
      // expected
    }

    // Try to move from a legal index to a legal index
    // in this case, from position 1 to 3 (indices 0, 4 remain as they were)
    bookshelf.moveBook(LEGAL_POSITIVE_INDEX, OTHER_LEGAL_POSITIVE_INDEX);

    // Test that something changed
    assertFalse(orig.equals(bookshelf));

    // The move also means that the other indices are changed.
    /*
     * Indices before the lowest index remain as they were. Indices between
     * will decrement. Indices after will remain as they were.
     * 
     * In this case we have that the first and last books will have the same
     * indices as before. book1 will be moved to book4, and books 2-3 will
     * decrement indices.
     */

    // first, last are as they were
    assertTrue(orig.getBookAt(FIRST).equals(bookshelf.getBookAt(FIRST)));
    assertTrue(orig.getBookAt(LAST).equals(bookshelf.getBookAt(LAST)));

    // second is moved to second last
    assertTrue(orig.getBookAt(SECOND).equals(bookshelf.getBookAt(LAST - 1)));

    /*
     * Those in between are moved one back since an earlier book was moved
     * ahead.
     */
    assertTrue(orig.getBookAt(THIRD).equals(bookshelf.getBookAt(THIRD - 1)));
    assertTrue(orig.getBookAt(FOURTH).equals(
        bookshelf.getBookAt(FOURTH - 1)));
  }

  /**
   * Tests getting the correct number of books.
   */
  public void testGetNumberOfBooks() {
    // Assert that the number of books is correct
    assertTrue(bookshelf.getNumberOfBooks() == STARTING_NUMBER_OF_BOOKS);

    // Assert that an empty bookshelf has zero books
    bookshelf = new Bookshelf();
    assertTrue(bookshelf.getNumberOfBooks() == 0);
  }

  /**
   * Tests if the equals method for bookshelves is correct.
   */
  public void testEqualsObject() {
    // Assert that they are equivalent (reflexive, symmetric and transitive)

    // Assert that it is reflexive
    assertTrue(bookshelf.equals(bookshelf));

    // Assert that it is symmetric
    Bookshelf testBookshelf = new Bookshelf(bookshelf);
    assertTrue(testBookshelf.equals(bookshelf));
    assertTrue(bookshelf.equals(testBookshelf));

    // Assert that it is transitive
    Bookshelf testBookshelf2 = new Bookshelf(testBookshelf);
    assertTrue(testBookshelf2.equals(bookshelf));
    assertTrue(bookshelf.equals(testBookshelf2));
  }

}




Java Source Code List

edu.chalmers.dat255.audiobookplayer.constants.Constants.java
edu.chalmers.dat255.audiobookplayer.constants.PlaybackStatus.java
edu.chalmers.dat255.audiobookplayer.ctrl.BookshelfControllerTest.java
edu.chalmers.dat255.audiobookplayer.ctrl.BookshelfController.java
edu.chalmers.dat255.audiobookplayer.ctrl.PlayerControllerTest.java
edu.chalmers.dat255.audiobookplayer.ctrl.PlayerController.java
edu.chalmers.dat255.audiobookplayer.instrumentation.AllTests.java
edu.chalmers.dat255.audiobookplayer.interfaces.IBookUpdates.java
edu.chalmers.dat255.audiobookplayer.interfaces.IBookshelfEvents.java
edu.chalmers.dat255.audiobookplayer.interfaces.IBookshelfGUIEvents.java
edu.chalmers.dat255.audiobookplayer.interfaces.IPlayerEvents.java
edu.chalmers.dat255.audiobookplayer.interfaces.ITrackUpdates.java
edu.chalmers.dat255.audiobookplayer.model.BookTest.java
edu.chalmers.dat255.audiobookplayer.model.Book.java
edu.chalmers.dat255.audiobookplayer.model.BookshelfTest.java
edu.chalmers.dat255.audiobookplayer.model.Bookshelf.java
edu.chalmers.dat255.audiobookplayer.model.TagTest.java
edu.chalmers.dat255.audiobookplayer.model.Tag.java
edu.chalmers.dat255.audiobookplayer.model.TrackTest.java
edu.chalmers.dat255.audiobookplayer.model.Track.java
edu.chalmers.dat255.audiobookplayer.util.BookCreatorTest.java
edu.chalmers.dat255.audiobookplayer.util.BookCreator.java
edu.chalmers.dat255.audiobookplayer.util.BookshelfHandlerTest.java
edu.chalmers.dat255.audiobookplayer.util.BookshelfHandler.java
edu.chalmers.dat255.audiobookplayer.util.FileParserTest.java
edu.chalmers.dat255.audiobookplayer.util.FileParser.java
edu.chalmers.dat255.audiobookplayer.util.JsonParserTest.java
edu.chalmers.dat255.audiobookplayer.util.JsonParser.java
edu.chalmers.dat255.audiobookplayer.util.TextFormatterTest.java
edu.chalmers.dat255.audiobookplayer.util.TextFormatter.java
edu.chalmers.dat255.audiobookplayer.util.TrackCreatorTest.java
edu.chalmers.dat255.audiobookplayer.util.TrackCreator.java
edu.chalmers.dat255.audiobookplayer.view.BookshelfFragment.java
edu.chalmers.dat255.audiobookplayer.view.BrowserActivityTest.java
edu.chalmers.dat255.audiobookplayer.view.BrowserActivity.java
edu.chalmers.dat255.audiobookplayer.view.MainActivity.java
edu.chalmers.dat255.audiobookplayer.view.PlayerFragment.java
edu.chalmers.dat255.audiobookplayer.view.ViewPagerAdapter.java