import static org.junit.Assert.*; import java.util.ArrayList; import java.util.List; import org.junit.Test; public class SmartANZAsia10CardTest { @Test public void testCostPerMin() { SmartANZAsia10Card card = new SmartANZAsia10Card(7362100, 1234); double expected = SmartANZAsia10Card.COST_PER_MIN_TO_ANZ; assertEquals("costPerMin: wrong cost per minute to ANZ", expected, card.costPerMin(CallZone.ANZ), Math.ulp(expected)); expected = SmartANZAsia10Card.COST_PER_MIN_TO_ASIA; assertEquals("costPerMin: wrong cost per minute to Asia", expected, card.costPerMin(CallZone.ASIA), Math.ulp(expected)); } @Test public void testCharge() { SmartANZAsia10Card card = new SmartANZAsia10Card(7362100, 1234); assertTrue("charge: 2 minute call to ANZ failed", card.charge(2, CallZone.ANZ)); double balance = 10.0 - 2 * SmartANZAsia10Card.COST_PER_MIN_TO_ANZ; assertEquals("charge: wrong balance after 2 minute call to ANZ", balance, card.getBalance(), Math.ulp(balance)); assertFalse("charge: 1000 minute call to ANZ succeeded", card.charge(1000, CallZone.ANZ)); assertTrue("charge: 2 minute call to ASIA failed", card.charge(2, CallZone.ASIA)); balance = balance - 2 * SmartANZAsia10Card.COST_PER_MIN_TO_ASIA; assertEquals("charge: wrong balance after 1 minute call to ASIA", balance, card.getBalance(), Math.ulp(balance)); assertFalse("charge: 1000 minute call to ASIA succeeded", card.charge(1000, CallZone.ASIA)); } @Test public void testDeductWeeklyFee() { SmartANZAsia10Card card = new SmartANZAsia10Card(7362100, 1234); card.deductWeeklyFee(); double expected = 10.0 - SmartANZAsia10Card.WEEKLY_FEES; assertEquals("deductWeeklyFee: wrong card balance after deducting weekly fee", expected, card.getBalance(), Math.ulp(expected)); card.setBalance(SmartANZAsia10Card.WEEKLY_FEES - 0.01); card.deductWeeklyFee(); expected = 0.0; assertEquals("deductWeeklyFee: wrong card balance after deducting weekly fee", expected, card.getBalance(), Math.ulp(expected)); } @Test public void testEquals() { SmartANZAsia10Card card1 = new SmartANZAsia10Card(7362100, 1234); SmartANZAsia10Card card2 = new SmartANZAsia10Card(7362100, 1234); assertEquals("equals: cards should be equal", card1, card2); card1.charge(5, CallZone.ANZ); card2.charge(5, CallZone.ANZ); assertEquals("equals: cards should be equal", card1, card2); card1.charge(5, CallZone.ASIA); assertFalse("equals: cards should not be equal", card1.equals(card2)); assertFalse("equals: cards should not be equal", card2.equals(card1)); } @Test public void testCtor() { SmartANZAsia10Card card1 = new SmartANZAsia10Card(7362100, 1234); SmartANZAsia10Card card2 = new SmartANZAsia10Card(card1); assertEquals("copy ctor: cards have different numbers", card1.getNumber(), card2.getNumber()); assertEquals("copy ctor: cards have different passwords", card1.getPassword(), card2.getPassword()); assertEquals("copy ctor: cards have different balances", card1.getBalance(), card2.getBalance(), Math.ulp(10.0)); } @Test public void testGetChargeHistory() { SmartANZAsia10Card card = new SmartANZAsia10Card(7362100, 1234); List expected = new ArrayList(); assertEquals("getChargeHistory: history should be the empty list", expected, card.getChargeHistory()); card.deductWeeklyFee(); expected.add(SmartANZAsia10Card.WEEKLY_FEES); assertEquals("getChargeHistory: wrong history", expected, card.getChargeHistory()); card.charge(1, CallZone.ANZ); expected.add(SmartANZAsia10Card.COST_PER_MIN_TO_ANZ); assertEquals("getChargeHistory: wrong history", expected, card.getChargeHistory()); List history = card.getChargeHistory(); history.clear(); assertFalse("getChargeHistory: the client can change the card call history", history.equals(card.getChargeHistory())); } }