// Boilerplate import org.junit.*; import static org.junit.Assert.*; public class CartTest { @Test public void testCount1() { Cart cart = new Cart(); Item item = new Applesauce(); cart.add(item); int numItems = cart.getItemCount(); assertEquals(1, numItems); } @Test public void testCount2() { Cart cart = new Cart(); cart.add(new Applesauce()); cart.add(new Applesauce()); int numItems = cart.getItemCount(); assertEquals(2, numItems); } @Test public void testCount3() { Cart cart = new Cart(); int numItems; cart.add(new Applesauce()); numItems = cart.getItemCount(); assertEquals(1, numItems); cart.add(new Applesauce()); numItems = cart.getItemCount(); assertEquals(2, numItems); } // As written, this test WILL FAIL. // The compiler will give you advice about how to fix it. // @Test public void testTotal1() { Cart cart = new Cart(); Item item = new Applesauce(); cart.add(item); double total = cart.getTotal(); assertEquals(3.80, total); } @Test public void testTotal2() { Cart cart = new Cart(); Item item = new Chicken(); cart.add(item); double total = cart.getTotal(); assertEquals(6.99, total, 0.01); } @Test public void testCoupon1() { Cart cart = new Cart(); cart.add(new Applesauce()); Coupon coupon = new ApplesauceCoupon(); cart.add(coupon); double total = cart.getTotal(); assertEquals(2.80, total, 0.01); } @Test public void chickenIsMeat() { Chicken chicken = new Chicken(); assertTrue(chicken instanceof Chicken); assertTrue(chicken instanceof Meat); } @Test public void meatIsChicken() { Meat chicken = new Chicken(); assertTrue(chicken instanceof Chicken); assertTrue(chicken instanceof Meat); } @Test public void testMeatCoupon() { Cart cart = new Cart(); cart.add(new Chicken()); cart.add(new MeatCoupon()); double total = cart.getTotal(); assertEquals(3.50, total, 0.01); } @Test public void testMultipleCoupons() { Cart cart = new Cart(); cart.add(new Chicken()); cart.add(new Applesauce()); cart.add(new MeatCoupon()); double total = cart.getTotal(); assertEquals(7.30, total, 0.01); } @Test public void applesauceIsNotMeat1() { Item applesauce = new Applesauce(); assertFalse(applesauce instanceof Chicken); } @Test(expected=ClassCastException.class) public void applesauceIsNotMeat2() { Item applesauce = new Applesauce(); Chicken chicken = (Chicken) applesauce; } // You don't have to do anything with this one. @Test @Ignore public void applesauceIsNotMeat3() { // Doesn't even compile -- why not? // Applesauce applesauce = new Applesauce(); // Chicken chicken = (Chicken) applesauce; } @Test public void idempotent() { Cart cart = new Cart(); cart.add(new Chicken()); cart.add(new Applesauce()); cart.add(new MeatCoupon()); double total = cart.getTotal(); assertEquals(7.30, total, 0.01); double total2 = cart.getTotal(); assertEquals(total, total2, 0.0001); } }