Programming Assignment 4
1 Purpose
This assignment has two primary purposes. The first is to implement
the functionality associated with closing documents, printing
documents, and creating new documents in the application
framework. The second is to add functionality to the demonstration
application, The Big Pixel, that allows users to set the brusj size,
set the brush color, edit documents (i.e., add elements), and
control the display.
2 Learning Objectives
This assignment will help you learn about (and demonstrate that you have
learned about) printing and mouse events.
3 Starting Point
As in the past, you may start with either your solution with the solution
that you were given.
4 Documents
The UML class diagram is available as an SVG file at:
The specifications are available as a PDF file at:
The main class (that can be used for integration testing) is available at:
The use case descriptions that explain how the demonstration application
must behave are available at:
5 Tasks
For this assignment you must:
-
Implement all of the interfaces and classes in the class diagram and
specifications document.
-
Write JUnit tests for many of the classes in the class diagram and
specifications document.
6 Testing
Your JUnit test suite must cover 75% of all statements and all
branches (as measured by EclEmma) in the various
classes other than the
AbstractEditableReadingWorker
,
AbstractModalDialog
, BackgroundTaskDialog
,
BigPixelEditor
,
GridComponent
,
PrintImage
,
ComponentPrinter
,
and DelegatingPrintable
classes.
(This includes classes from earlier assignments.)
Your tests must be in a package
named edu.jmu.cs.academics.testing
and each test class
must include the word "Test" in its name.
7 Submission
You must submit (using
Autolab) a
.zip
file
named pa4.zip
that contains:
- Your implementation of the required interfaces/classes/enums
in the appropriate package(s), including those from
previous assignments.
- JUnit tests for all of your classes/interfaces.
Do not submit the main class and do not submit any data files.
8 Grading
Your submission will be graded as follows:
- Conformity to the Style Guide (Style) - 20% (All or Nothing; Success Required)
- Passing your Tests (SelfTests) - 20% (All or Nothing; Success Required)
- Coverage of your Tests (Coverage) - 20% (All or Nothing)
- Correctness of your Code (OfficialTests) - 40% (Partial Credit Possible)
9 Help
The following help topics may be useful to you.
9.1 GUI Widgets in a Headless Ennvironment
As you know from an earlier assignment,
Autolab runs on a server that does not have a graphical
display. Hence, any method you invoke that needs to use a
graphical display will throw a HeadlessException
.
Fortunately, you can construct many GUI widgets without any problem
(since they don't use a display until they are added to a "window").
In other words, you can construct, for example, a JCheckBox
object and use it in a unit test without causing an exception to be thrown
on Autolab.
9.2 Invoking actionPerformed() Methods
You can invoke
actionPerformed()
methods
in unit tests (as long as they don't require a display),
you just have to be a little careful when you construct the
ActionEvent
that is passed to them. In particular,
you have to make sure that the IDs are valid (see the documetation
for
ACTION_FIRST
and
ACTION_LAST
)
and increase with each call.