Listing 23: TestBOMReport.java

import junit.framework.*;
import java.util.*;

public class TestBOMReport extends TestCase
{
   public TestBOMReport(String name)
   {
      super(name);
   }

   private PiecePart p1;
   private PiecePart p2;
   private Assembly a;

   public void setUp()
   {
      p1 = new PiecePart("997624", "MyPart", 3.20);
      p2 = new PiecePart("7734", "Hell", 666);
      a = new Assembly("5879", "MyAssembly");
   }

   public void testCreatePart()
   {
      assertEquals("997624", p1.getPartNumber());
      assertEquals("MyPart", p1.getDescription());
      assertEquals(3.20, p1.getCost(), .01);
   }

   public void testCreateAssembly()
   {
      assertEquals("5879", a.getPartNumber());
      assertEquals("MyAssembly", a.getDescription());
   }

   public void testAssembly()
   {
      a.add(p1);
      a.add(p2);
      Iterator i = a.getParts();
      PiecePart p = (PiecePart)i.next();
      assertEquals(p, p1);
      p = (PiecePart)i.next();
      assertEquals(p, p2);
      assert(i.hasNext() == false);
   }

   public void testAssemblyOfAssemblies()
   {
      Assembly subAssembly = new Assembly("1324", "SubAssembly");
      subAssembly.add(p1);
      a.add(subAssembly);

      Iterator i = a.getParts();
      assertEquals(subAssembly, i.next());
   }

   private boolean p1Found = false;
   private boolean p2Found = false;
   private boolean aFound = false;

   public void testVisitorCoverage()
   {
      a.add(p1);
      a.add(p2);
      a.accept(new PartVisitor(){
         public void visit(PiecePart p)
         {
            if (p == p1)
              p1Found = true;
            else if (p == p2)
              p2Found = true;
         }

      public void visit(Assembly
      {
         if (assy == a)
            aFound = true;
         }
      });
      assert(p1Found);
      assert(p2Found);
      assert(aFound);
   }

   private Assembly cellphone;

   void setUpReportDatabase()
   {
      cellphone = new Assembly("CP-7734", "Cell Phone");
      PiecePart display = new PiecePart("DS-1428",
                                        "LCD Display",
                                        14.37);
      PiecePart speaker = new PiecePart("SP-92",
                                        "Speaker",
                                        3.50);
      PiecePart microphone = new PiecePart("MC-28",
                                           "Microphone",
                                           5.30);
      PiecePart cellRadio = new PiecePart("CR-56",
                                          "Cell Radio",
                                          30);
      PiecePart frontCover = new PiecePart("FC-77",
                                           "Front Cover",
                                           1.4);
      PiecePart backCover = new PiecePart("RC-77",
                                          "RearCover",
                                          1.2);
      Assembly keypad = new Assembly("KP-62", "Keypad");
      Assembly button = new Assembly("B52", "Button");
      PiecePart buttonCover = new PiecePart("CV-15",
                                            "Cover",
                                            .5);
      PiecePart buttonContact = new PiecePart("CN-2",
                                              "Contact",
                                              1.2);
      button.add(buttonCover);
      button.add(buttonContact);
      for (int i=0; i<15; i++)
         keypad.add(button);
      cellphone.add(display);
      cellphone.add(speaker);
      cellphone.add(microphone);
      cellphone.add(cellRadio);
      cellphone.add(frontCover);
      cellphone.add(backCover);
      cellphone.add(keypad);
   }

   public void testExplodedCost()
   {
      setUpReportDatabase();
      ExplodedCostVisitor v = new ExplodedCostVisitor();
      cellphone.accept(v);
      assertEquals(81.27, v.cost(), .001);
   }

   public void testPartCount()
   {
      setUpReportDatabase();
      PartCountVisitor v = new PartCountVisitor();
      cellphone.accept(v);
      assertEquals(36, v.getPieceCount());
      assertEquals(8, v.getPartNumberCount());
      assertEquals("DS-1428", 1, v.getCountForPart("DS-1428"));
      assertEquals("SP-92", 1, v.getCountForPart("SP-92"));
      assertEquals("MC-28", 1, v.getCountForPart("MC-28"));
      assertEquals("CR-56", 1, v.getCountForPart("CR-56"));
      assertEquals("RC-77", 1, v.getCountForPart("RC-77"));
      assertEquals("CV-15", 15, v.getCountForPart("CV-15"));
      assertEquals("CN-2", 15, v.getCountForPart("CN-2"));
      assertEquals("Bob", 0, v.getCountForPart("Bob"));
   }
}


— End of Listing —