import junit.framework.Assert;
import junit.framework.TestCase;

public class ItemTest extends TestCase
{

 //public static void main( String[] args )
 //{
 // junit.swingui.TestRunner.run( ItemTest.class );
 //}

 public void testGetPrice( )
 {
  Item anItem = new Item( Item.BOOK, "Harry Potter", 20, 3 );

  int expected = 20;
  int returned = anItem.getPrice( );
  Assert.assertEquals( expected, returned );
 }

 public void testSetPrice( )
 {
  Item anItem = new Item( Item.BOOK, "Harry Potter", 20, 3 );

  int expected = 20;
  int returned = anItem.getPrice( );
  Assert.assertEquals( expected, returned );

  anItem.setPrice( 18 );

  expected = 18;
  returned = anItem.getPrice( );
  Assert.assertEquals( expected, returned );

 }

 public void testGetCopiesAvailable( )
 {
  Item anItem = new Item( Item.BOOK, "Harry Potter", 20, 3 );

  int expected = 3;
  int returned = anItem.getCopiesAvailable( );
  Assert.assertEquals( expected, returned );
 }

 public void testGetTitle( )
 {
  Item anItem = new Item( Item.BOOK, "Harry Potter", 20, 3 );

  String expected = "Harry Potter";
  String returned = anItem.getTitle( );
  Assert.assertEquals( expected, returned );
 }

 public void testGetTypeBook( )
 {
  Item anItem = new Item( Item.BOOK, "Harry Potter", 20, 3 );

  int expected = Item.BOOK;
  int returned = anItem.getType( );
  Assert.assertEquals( expected, returned );
 }

 public void testGetTypeDVD( )
 {
  Item anItem = new Item( Item.DVD, "Harry Potter", 20, 3 );

  int expected = Item.DVD;
  int returned = anItem.getType( );
  Assert.assertEquals( expected, returned );
 }

 public void testGetTypeGame( )
 {
  Item anItem = new Item( Item.GAME, "Tomb Raider", 33, 3 );

  int expected = Item.GAME;
  int returned = anItem.getType( );
  Assert.assertEquals( expected, returned );
 }

 public void testDecrementCopiesNormal1( )
 {
  Item anItem = new Item( Item.BOOK, "Harry Potter", 20, 3 );

  int expected = 3;
  int returned = anItem.getCopiesAvailable( );
  Assert.assertEquals( expected, returned );

  boolean bExpected = true;
  boolean bActual = anItem.decrementCopies( );
  Assert.assertEquals( bExpected, bActual );

  expected = 2;
  returned = anItem.getCopiesAvailable( );
  Assert.assertEquals( expected, returned );

 }

 public void testDecrementCopiesNormal2( )
 {
  Item anItem = new Item( Item.BOOK, "Harry Potter", 20, 1 );

  int expected = 1;
  int returned = anItem.getCopiesAvailable( );
  Assert.assertEquals( expected, returned );

  boolean bExpected = true;
  boolean bActual = anItem.decrementCopies( );
  Assert.assertEquals( bExpected, bActual );

  expected = 0;
  returned = anItem.getCopiesAvailable( );
  Assert.assertEquals( expected, returned );

 }

 public void testDecrementeCopiesNoAvail( )
 {
  Item anItem = new Item( Item.BOOK, "Harry Potter", 20, 0 );

  int expected = 0;
  int returned = anItem.getCopiesAvailable( );
  Assert.assertEquals( expected, returned );

  boolean bExpected = false;
  boolean bActual = anItem.decrementCopies( );
  Assert.assertEquals( bExpected, bActual );

  expected = 0;
  returned = anItem.getCopiesAvailable( );
  Assert.assertEquals( expected, returned );

 }

 public void testIncrementCopies( )
 {
  Item anItem = new Item( Item.BOOK, "Harry Potter", 20, 3 );

  int expected = 3;
  int returned = anItem.getCopiesAvailable( );
  Assert.assertEquals( expected, returned );

  anItem.incrementCopies( );

  expected = 4;
  returned = anItem.getCopiesAvailable( );
  Assert.assertEquals( expected, returned );

 }

 public void testTypeToStringGame( )
 {
  String expected = "Video game";
  String returned = Item.typeToString( Item.GAME );
  Assert.assertEquals( expected, returned );
 }

 public void testTypeToStringDVD( )
 {
  String expected = "DVD";
  String returned = Item.typeToString( Item.DVD );
  Assert.assertEquals( expected, returned );
 }

 public void testTypeToStringBook( )
 {
  String expected = "Book";
  String returned = Item.typeToString( Item.BOOK );
  Assert.assertEquals( expected, returned );
 }

}
