Question

ANNOTATE BRIEFLY LINE BY LINE THE FOLLOWING CODE: package shop.data; import junit.framework.Assert; import junit.framework.TestCase; public class...

ANNOTATE BRIEFLY LINE BY LINE THE FOLLOWING CODE:

package shop.data;

import junit.framework.Assert;
import junit.framework.TestCase;

public class DataTEST extends TestCase {
public DataTEST(String name) {
super(name);
}
public void testConstructorAndAttributes() {
String title1 = "XX";
String director1 = "XY";
String title2 = " XX ";
String director2 = " XY ";
int year = 2002;

Video v1 = Data.newVideo(title1, year, director1);
Assert.assertSame(title1, v1.title());
Assert.assertEquals(year, v1.year());
Assert.assertSame(director1, v1.director());

Video v2 = Data.newVideo(title2, year, director2);
Assert.assertEquals(title1, v2.title());
Assert.assertEquals(director1, v2.director());
}

public void testConstructorExceptionYear() {
try {
Data.newVideo("X", 1800, "Y");
Assert.fail();
} catch (IllegalArgumentException e) { }
try {
Data.newVideo("X", 5000, "Y");
Assert.fail();
} catch (IllegalArgumentException e) { }
try {
Data.newVideo("X", 1801, "Y");
Data.newVideo("X", 4999, "Y");
} catch (IllegalArgumentException e) {
Assert.fail();
}
}

public void testConstructorExceptionTitle() {
try {
Data.newVideo(null, 2002, "Y");
Assert.fail();
} catch (IllegalArgumentException e) { }
try {
Data.newVideo("", 2002, "Y");
Assert.fail();
} catch (IllegalArgumentException e) { }
try {
Data.newVideo(" ", 2002, "Y");
Assert.fail();
} catch (IllegalArgumentException e) { }
}

public void testConstructorExceptionDirector() {
}

}

package shop.data;

import java.util.Map;
import java.util.HashMap;
import java.util.Comparator;
import java.util.Collections;
import java.util.List;
import java.util.ArrayList;
import java.util.Iterator;
import shop.command.Command;
import shop.command.UndoableCommand;
//import shop.data.InventorySet.RecordObj;
import shop.command.CommandHistory;
import shop.command.CommandHistoryFactory;
import shop.command.CommandHistoryObj;


/**
* Implementation of Inventory interface.
* @see Data
*/
final class InventorySet implements Inventory {
private Map<Video,Record> _data;
private final CommandHistory _history;

InventorySet() {
_data = new HashMap<Video,Record>();
_history = new CommandHistoryObj();

}

/**
* If <code>record</code> is null, then delete record for <code>video</code>;
* otherwise replace record for <code>video</code>.
*/
void replaceEntry(Video video, Record record) {
_data.remove(video);
if (record != null)
_data.put(video,((RecordObj)record).copy());
}

/**
* Overwrite the map.
*/
void replaceMap(Map<Video,Record> data) {
_data = data;
}

public int size() {
// TODO
return _data.size();
}

public Record get(Video v) {
// TODO
return _data.get(v);
}

public Iterator<Record> iterator() {
return Collections.unmodifiableCollection(_data.values()).iterator();
}

public Iterator<Record> iterator(Comparator<Record> comparator) {
   List<Record> res = new ArrayList<Record>(_data.values());
   Collections.sort(res, comparator);
   return Collections.unmodifiableCollection(res).iterator();
}

/**
* Add or remove copies of a video from the inventory.
* If a video record is not already present (and change is
* positive), a record is created.
* If a record is already present, <code>numOwned</code> is
* modified using <code>change</code>.
* If <code>change</code> brings the number of copies to be less
* than one, the record is removed from the inventory.
* @param video the video to be added.
* @param change the number of copies to add (or remove if negative).
* @return A copy of the previous record for this video (if any)
* @throws IllegalArgumentException if video null or change is zero
*/
Record addNumOwned(Video video, int change) {
if (video == null || change == 0)
throw new IllegalArgumentException();
  
RecordObj r = (RecordObj) _data.get(video);
if (r == null && change < 1) {
throw new IllegalArgumentException();
} else if (r == null) {
_data.put(video, new RecordObj(video, change, 0, 0));
} else if (r.numOwned+change < r.numOut) {
throw new IllegalArgumentException();
} else if (r.numOwned+change < 1) {
_data.remove(video);
} else {
_data.put(video, new RecordObj(video, r.numOwned + change, r.numOut, r.numRentals));
}
return r;
}

/**
* Check out a video.
* @param video the video to be checked out.
* @return A copy of the previous record for this video
* @throws IllegalArgumentException if video has no record or numOut
* equals numOwned.
*/
Record checkOut(Video video) {
   RecordObj r = (RecordObj) _data.get(video);
  
   if (r==null || r.numOut == r.numOwned)
       throw new IllegalArgumentException();
  
   _data.put(video, new RecordObj(video, r.numOwned, r.numOut+1, r.numRentals+1));
   return r;
}
  
/**
* Check in a video.
* @param video the video to be checked in.
* @return A copy of the previous record for this video
* @throws IllegalArgumentException if video has no record or numOut
* non-positive.
*/
Record checkIn(Video video) {
   RecordObj r = (RecordObj) _data.get(video);
  
   if (r==null || r.numOut==0)
       throw new IllegalArgumentException();
  
   _data.put(video, new RecordObj(video, r.numOwned, r.numOut-1, r.numRentals));
   return r;
}
  
/**
* Remove all records from the inventory.
* @return A copy of the previous inventory as a Map
*/
Map clear() {
// TODO
   Map<Video,Record> v = _data;
   _data = new HashMap<Video,Record>();
   return v;
}

/**
* Return a reference to the history.
*/
CommandHistory getHistory() {
// TODO
return _history;
}
  
public String toString() {
StringBuffer buffer = new StringBuffer();
buffer.append("Database:\n");
Iterator i = _data.values().iterator();
while (i.hasNext()) {
buffer.append(" ");
buffer.append(i.next());
buffer.append("\n");
}
return buffer.toString();
}


/**
* Implementation of Record interface.
*
* <p>This is a utility class for Inventory. Fields are mutable and
* package-private.</p>
*
* <p><b>Class Invariant:</b> No two instances may reference the same Video.</p>
*
* @see Record
*/
private static final class RecordObj implements Record {
Video video; // the video
int numOwned; // copies owned
int numOut; // copies currently rented
int numRentals; // total times video has been rented
  
RecordObj(Video video, int numOwned, int numOut, int numRentals) {
this.video = video;
this.numOwned = numOwned;
this.numOut = numOut;
this.numRentals = numRentals;
}
RecordObj copy() {
return new RecordObj(video, numOwned, numOut, numRentals);
}
public Video video() {
return video;
}
public int numOwned() {
return numOwned;
}
public int numOut() {
return numOut;
}
public int numRentals() {
return numRentals;
}
public boolean equals(Object thatObject) {
return video.equals(((Record)thatObject).video());
}
public int hashCode() {
return video.hashCode();
}
public String toString() {
StringBuffer buffer = new StringBuffer();
buffer.append(video);
buffer.append(" [");
buffer.append(numOwned);
buffer.append(",");
buffer.append(numOut);
buffer.append(",");
buffer.append(numRentals);
buffer.append("]");
return buffer.toString();
}
}

0 0
Add a comment Improve this question Transcribed image text
Answer #1


// Adding comment for each line
// DataTEST class is in package shop.data, so it can be referred as shop.data.DataTEST
package shop.data;

// importing the Assert and TestCase class of junit library
import junit.framework.Assert;
import junit.framework.TestCase;

// DataTEST class is extending the TestCase class of junit library,
// so it can access all members of the TestCase class
public class DataTEST extends TestCase {

// Below is the custom constructor of the DataTEST class which takes string as a argument
public DataTEST(String name) {
//calls to its parent(TestCase) constructor with string parameter
super(name);
}

// test method for validating the constructor and it its attributes
public void testConstructorAndAttributes() {
// creating and assinging values to String variables
String title1 = "XX";
String director1 = "XY";
String title2 = " XX ";
String director2 = " XY ";
// creating new int variable
int year = 2002;

// creating new instatnce of type video by passing 3 parameter to newVideo() method of Data class.
Video v1 = Data.newVideo(title1, year, director1);

// it will check if both the parameter are same, in below case they are same so it will fail
Assert.assertSame(title1, v1.title());

// it will check if both the parameter are equal, in below case they are equal so it will fail
Assert.assertEquals(year, v1.year());

// it will check if both the parameter are same, in below case they are same so it will fail
Assert.assertSame(director1, v1.director());

// creating new instatnce of type video by passing 3 parameter to newVideo() method of Data class.
Video v2 = Data.newVideo(title2, year, director2);
// it will check if both the parameter are equal, in below case they are not equal so it will pass
Assert.assertEquals(title1, v2.title());
// it will check if both the parameter are equal, in below case they are not equal so it will pass
Assert.assertEquals(director1, v2.director());
}

// test method for validating the year argument of constructor
public void testConstructorExceptionYear() {
// try block starts
try {
// calling newVideo method of Data class
Data.newVideo("X", 1800, "Y");
//The Assert.Fail method provides you with the ability to generate a failure based on tests
// that are not encapsulated by the other methods
Assert.fail();
}
// catch block will be executed if IllegalArgumentException is thrown by catch block
catch (IllegalArgumentException e) {
// catch block will nothing
}
try {
Data.newVideo("X", 5000, "Y");
Assert.fail();
}
// catch block will be executed if IllegalArgumentException is thrown by catch block
catch (IllegalArgumentException e) { }
try {
Data.newVideo("X", 1801, "Y");
Data.newVideo("X", 4999, "Y");
}
// catch block will be executed if IllegalArgumentException is thrown by catch block
catch (IllegalArgumentException e) {
// catch block, if executed will fail the execution
Assert.fail();
}
}

// test method for validating the Title argument of constructor
public void testConstructorExceptionTitle() {
try {
// passing null value for title parameter to constructor
Data.newVideo(null, 2002, "Y");
Assert.fail();
}
// catch block will be executed if IllegalArgumentException is thrown by catch block
catch (IllegalArgumentException e) { }
try {
// passing empty string value for title parameter to constructor
Data.newVideo("", 2002, "Y");
Assert.fail();
} catch (IllegalArgumentException e) { }
try {
// passing space value for title parameter to constructor
Data.newVideo(" ", 2002, "Y");
Assert.fail();
} catch (IllegalArgumentException e) { }
}

// empty method which will do nothing if called
public void testConstructorExceptionDirector() {
}

}


package shop.data;

// importing util library classes
import java.util.Map;
import java.util.HashMap;
import java.util.Comparator;
import java.util.Collections;
import java.util.List;
import java.util.ArrayList;
import java.util.Iterator;
// importing classes of shop package
import shop.command.Command;
import shop.command.UndoableCommand;
//import shop.data.InventorySet.RecordObj;
import shop.command.CommandHistory;
import shop.command.CommandHistoryFactory;
import shop.command.CommandHistoryObj;


/**
* Implementation of Inventory interface.
* @see Data
*/
final class InventorySet implements Inventory {
// creating map of Video as key and Record as value
private Map<Video,Record> _data;
// creating final variable
private final CommandHistory _history;

// constructor of the class which is setting the instance variable
InventorySet() {
_data = new HashMap<Video,Record>();
_history = new CommandHistoryObj();

}

/**
* If <code>record</code> is null, then delete record for <code>video</code>;
* otherwise replace record for <code>video</code>.
*/
void replaceEntry(Video video, Record record) {
_data.remove(video);
if (record != null)
_data.put(video,((RecordObj)record).copy());
}

/**
* Overwrite the map.
*/
void replaceMap(Map<Video,Record> data) {
_data = data;
}

public int size() {
// return the size of _data map
return _data.size();
}

public Record get(Video v) {
// return record from _data map having key as the parameter
return _data.get(v);
}

// return Iterator for Record list which are present in the _data map
public Iterator<Record> iterator() {
return Collections.unmodifiableCollection(_data.values()).iterator();
}

// return Iterator for sorted Record list of Record objects which are present in the _data map
public Iterator<Record> iterator(Comparator<Record> comparator) {
List<Record> res = new ArrayList<Record>(_data.values());
Collections.sort(res, comparator);
return Collections.unmodifiableCollection(res).iterator();
}

/**
* Add or remove copies of a video from the inventory.
* If a video record is not already present (and change is
* positive), a record is created.
* If a record is already present, <code>numOwned</code> is
* modified using <code>change</code>.
* If <code>change</code> brings the number of copies to be less
* than one, the record is removed from the inventory.
* @param video the video to be added.
* @param change the number of copies to add (or remove if negative).
* @return A copy of the previous record for this video (if any)
* @throws IllegalArgumentException if video null or change is zero
*/
Record addNumOwned(Video video, int change) {
if (video == null || change == 0)
throw new IllegalArgumentException();
  
RecordObj r = (RecordObj) _data.get(video);
if (r == null && change < 1) {
throw new IllegalArgumentException();
} else if (r == null) {
_data.put(video, new RecordObj(video, change, 0, 0));
} else if (r.numOwned+change < r.numOut) {
throw new IllegalArgumentException();
} else if (r.numOwned+change < 1) {
_data.remove(video);
} else {
_data.put(video, new RecordObj(video, r.numOwned + change, r.numOut, r.numRentals));
}
return r;
}

/**
* Check out a video.
* @param video the video to be checked out.
* @return A copy of the previous record for this video
* @throws IllegalArgumentException if video has no record or numOut
* equals numOwned.
*/
Record checkOut(Video video) {
RecordObj r = (RecordObj) _data.get(video);
  
if (r==null || r.numOut == r.numOwned)
throw new IllegalArgumentException();
  
_data.put(video, new RecordObj(video, r.numOwned, r.numOut+1, r.numRentals+1));
return r;
}
  
/**
* Check in a video.
* @param video the video to be checked in.
* @return A copy of the previous record for this video
* @throws IllegalArgumentException if video has no record or numOut
* non-positive.
*/
Record checkIn(Video video) {
RecordObj r = (RecordObj) _data.get(video);
  
if (r==null || r.numOut==0)
throw new IllegalArgumentException();
  
_data.put(video, new RecordObj(video, r.numOwned, r.numOut-1, r.numRentals));
return r;
}
  
/**
* Remove all records from the inventory.
* @return A copy of the previous inventory as a Map
*/
Map clear() {
// TODO
Map<Video,Record> v = _data;
_data = new HashMap<Video,Record>();
return v;
}

/**
* Return a reference to the history.
*/
CommandHistory getHistory() {
// return _history instance variable of class
return _history;
}
  
// overriding the toString() method of Java.lang.Object
public String toString() {
// creating string buffer variable
StringBuffer buffer = new StringBuffer();
// append Database in the string buffer
buffer.append("Database:\n");
// creating iterator for the list of Record objects which are present in the _data map
Iterator i = _data.values().iterator();
// appending space
while (i.hasNext()) {
// appending space in buffer
buffer.append(" ");
// appending value of record objects from the list in buffer
buffer.append(i.next());
// appending new line in buffer
buffer.append("\n");
}
// return the string value of buffer
return buffer.toString();
}


/**
* Implementation of Record interface.
*
* <p>This is a utility class for Inventory. Fields are mutable and
* package-private.</p>
*
* <p><b>Class Invariant:</b> No two instances may reference the same Video.</p>
*
* @see Record
*/
private static final class RecordObj implements Record {
Video video; // the video
int numOwned; // copies owned
int numOut; // copies currently rented
int numRentals; // total times video has been rented
  
// constructor for the RecordObj class
RecordObj(Video video, int numOwned, int numOut, int numRentals) {
this.video = video;
this.numOwned = numOwned;
this.numOut = numOut;
this.numRentals = numRentals;
}
RecordObj copy() {
return new RecordObj(video, numOwned, numOut, numRentals);
}
public Video video() {
return video;
}
public int numOwned() {
return numOwned;
}
public int numOut() {
return numOut;
}
public int numRentals() {
return numRentals;
}
// overriding the equals method of java.lang.object
public boolean equals(Object thatObject) {
return video.equals(((Record)thatObject).video());
}
// overriding the hashCode method of java.lang.object
public int hashCode() {
return video.hashCode();
}
// overriding the toString method of java.lang.object
// it returns the string containing values of all the instance variable
public String toString() {
StringBuffer buffer = new StringBuffer();
buffer.append(video);
buffer.append(" [");
buffer.append(numOwned);
buffer.append(",");
buffer.append(numOut);
buffer.append(",");
buffer.append(numRentals);
buffer.append("]");
return buffer.toString();
}
}

Add a comment
Know the answer?
Add Answer to:
ANNOTATE BRIEFLY LINE BY LINE THE FOLLOWING CODE: package shop.data; import junit.framework.Assert; import junit.framework.TestCase; public class...
Your Answer:

Post as a guest

Your Name:

What's your source?

Earn Coins

Coins can be redeemed for fabulous gifts.

Not the answer you're looking for? Ask your own homework help question. Our experts will answer your question WITHIN MINUTES for Free.
Similar Homework Help Questions
  • package model; import java.util.Iterator; /** * This class implements interface PriorityList<E> to represent a generic *...

    package model; import java.util.Iterator; /** * This class implements interface PriorityList<E> to represent a generic * collection to store elements where indexes represent priorities and the * priorities can change in several ways. * * This collection class uses an Object[] data structure to store elements. * * @param <E> The type of all elements stored in this collection */ // You will have an error until you have have all methods // specified in interface PriorityList included inside this...

  • Implement the missing methods in java! Thanks! import java.util.Iterator; import java.util.NoSuchElementException; public class HashTableOpenAddressing<K, V> implements...

    Implement the missing methods in java! Thanks! import java.util.Iterator; import java.util.NoSuchElementException; public class HashTableOpenAddressing<K, V> implements DictionaryInterface<K, V> { private int numEntries; private static final int DEFAULT_CAPACITY = 5; private static final int MAX_CAPACITY = 10000; private TableEntry<K, V>[] table; private double loadFactor; private static final double DEFAULT_LOAD_FACTOR = 0.75; public HashTableOpenAddressing() { this(DEFAULT_CAPACITY, DEFAULT_LOAD_FACTOR); } public HashTableOpenAddressing(int initialCapacity, double loadFactorIn) { numEntries = 0; if (loadFactorIn <= 0 || initialCapacity <= 0) { throw new IllegalArgumentException("Initial capacity and load...

  • I need help running this code. import java.util.*; import java.io.*; public class wordcount2 {     public...

    I need help running this code. import java.util.*; import java.io.*; public class wordcount2 {     public static void main(String[] args) {         if (args.length !=1) {             System.out.println(                                "Usage: java wordcount2 fullfilename");             System.exit(1);         }                 String filename = args[0];               // Create a tree map to hold words as key and count as value         Map<String, Integer> treeMap = new TreeMap<String, Integer>();                 try {             @SuppressWarnings("resource")             Scanner input = new Scanner(new File(filename));...

  • PLEASE HURRY Software Testing Don't make any changes to the provided code. Please write a test...

    PLEASE HURRY Software Testing Don't make any changes to the provided code. Please write a test case for the below prompt using the provided java programs Use the setString() function in MyCustomStringInterface to set the value to “Peter Piper picked a peck of pickled peppers.”. Then test to see if reverseNCharacters() function returns the reversed string when the characters are reversed in groups of 4 and padding is disabled (in this case, “etePiP r repkcipa decep fo kcip delkpep srep.”)....

  • PLEASE COMPLETE THE CODES. package javaprogram; import java.io.PrintStream; import java.util.ArrayList; import java.util.Scanner; /** * Movie class...

    PLEASE COMPLETE THE CODES. package javaprogram; import java.io.PrintStream; import java.util.ArrayList; import java.util.Scanner; /** * Movie class definition. * * @author David Brown * @version 2019-01-22 */ public class Movie implements Comparable { // Constants public static final int FIRST_YEAR = 1888; public static final String[] GENRES = { "science fiction", "fantasy", "drama", "romance", "comedy", "zombie", "action", "historical", "horror", "war" }; public static final int MAX_RATING = 10; public static final int MIN_RATING = 0; /** * Converts a string of...

  • Must comment on the code at every "/* Comment Here */" section about what the code...

    Must comment on the code at every "/* Comment Here */" section about what the code is doing. import java.io.*; import org.xml.sax.*; import org.xml.sax.helpers.DefaultHandler; import javax.xml.parsers.SAXParserFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import java.util.Map; import java.util.HashMap; public class Configuration extends DefaultHandler { private Map map; private String configurationFile; /* Comment Here */ public Configuration(String configurationFile) throws ConfigurationException {    this.configurationFile = configurationFile;    map = new HashMap();    try {    // Use the default (non-validating) parser    SAXParserFactory factory = SAXParserFactory.newInstance();...

  • Solver.java package hw7; import java.util.Iterator; import edu.princeton.cs.algs4.Graph; import edu.princeton.cs.algs4.BreadthFirstPaths; public class Solver {    public static...

    Solver.java package hw7; import java.util.Iterator; import edu.princeton.cs.algs4.Graph; import edu.princeton.cs.algs4.BreadthFirstPaths; public class Solver {    public static String solve(char[][] grid) {        // TODO        /*        * 1. Construct a graph using grid        * 2. Use BFS to find shortest path from start to finish        * 3. Return the sequence of moves to get from start to finish        */               // Hardcoded solution to toyTest        return...

  • ***Code to solve*** package functions; import java.math.*; // for BigInteger public class NodeTransitionFunction {    public...

    ***Code to solve*** package functions; import java.math.*; // for BigInteger public class NodeTransitionFunction {    public NodeTransitionFunction(Integer exp, Integer KVal) {        // CONSTUCTOR: Sets the class to calculate f(x) = (x ^ exp) mod KVal        // TODO    }             public Integer apply(Integer val) {        // PRE: -        // POST: Implements f(val)        return null;    }       public BigInteger apply(BigInteger val) {        // PRE:...

  • //MultiValuedTreeMap.java import java.util.Iterator; import java.util.LinkedList; import java.util.TreeMap; //import java.util.ArrayList; public class MultiValuedTreeMap<K, V> extends TreeMap<K, LinkedList<V>>...

    //MultiValuedTreeMap.java import java.util.Iterator; import java.util.LinkedList; import java.util.TreeMap; //import java.util.ArrayList; public class MultiValuedTreeMap<K, V> extends TreeMap<K, LinkedList<V>> implements Iterable<Pair<K, V>> {    private static final long serialVersionUID = -6229569372944782075L;       public void add(K k, V v) { // Problem 1 method        // empty linked list, with key=k         if (!containsKey(k)) {               put(k, new LinkedList<V>());         }         // adding v to the linked list associated with key k         get(k).add(v);    }    public V removeFirst(K k)...

  • Can someone help me with my Java code error! Domain package challenge5race; import java.util.Random; public class...

    Can someone help me with my Java code error! Domain package challenge5race; import java.util.Random; public class Car {    private int year; private String model; private String make; int speed; public Car(int year, String model, String make, int speed) { this.year = year; this.model = model; this.make = make; this.speed = speed; } public Car() { } public int getYear() { return year; } public void setYear(int year) { this.year = year; } public String getModel() { return model; }...

ADVERTISEMENT
Free Homework Help App
Download From Google Play
Scan Your Homework
to Get Instant Free Answers
Need Online Homework Help?
Ask a Question
Get Answers For Free
Most questions answered within 3 hours.
ADVERTISEMENT
ADVERTISEMENT
ADVERTISEMENT