Description
Overview
This assignment will give you the opportunity to write your own unit tests using JUnit,
which is a tool supported in Eclipse. You will be writing unit tests for a number of
methods in the TokenStream class based on these methodsʼ specifications. Your goal is
to write relevant tests with as much coverage as possible.
Passing in a String Reader
In previous assignments, the TokenStream object in the main function of
GenerateTokenStream was created by passing a new FileReader object to
TokenStreamʼs constructor. The source code found in the specified file would then be
read character by character using the relevant methods in the TokenStream class.
Unfortunately, while FileReaders are useful when the JavaScript code to parse is long,
they can be a bit of a pain when the code to parse is very short because of the
additional burden of having to create a new file each time. This is especially true when
writing unit tests.
When writing unit tests, it may be more helpful to pass a StringReader to the
TokenStream constructor rather than a FileReader. In this case, instead of specifying a
file containing the JavaScript code to parse, you will specify a string representing the
JavaScript code itself. For instance, consider the following JavaScript code:
var a = 5;
To parse this JavaScript line using TokenStream, you can create a file containing this
line, save the file, and pass the file via a FileReader to TokenStream. Assuming this
fileʼs name is SampleCode.js, the call to the constructor would look as follows:
TokenStream ts = new TokenStream(new FileReader(“SampleCode.js”), “”,
1);
However, you could have also passed in a StringReader to spare you from the extra
burden of having to create a file for such a short line of code:
TokenStream ts = new TokenStream(new StringReader(“var a = 5;”), “”,
1);
For this assignment, you are free to use either StringReaders or FileReaders (or a
mixture of both) when writing your unit tests. However, if youʼre using FileReaders,
please make sure you hand in the relevant JavaScript files.
Instructions
1. Read the tutorial from Lab 3, which teaches you how to write and how to run unit
tests using the JUnit Eclipse plugin.
2. Download the file eece310_assn3.zip from the website. Unzip the file and add it to
Eclipse as a project.
3. Create a separate source folder in the eece310_assn3 project and call it “tests”. This
source folder will contain your unit test files. (see Lab 3 for instructions).
4. Using the JML specifications, write unit tests for the following methods in
TokenStream.java (for each test you create, make sure you specify if it is a black box
test or a glass box test):
– TokenStream() (i.e., the constructor)
– stringToKeyword()
– getToken()
– stringToNumber()
– isJSSpace()
– getString()
– getNumber()
– isNumberOctal()
– eof()
5. Once youʼve written your tests, try running them with JUnit (see Lab 3 for instructions
on how to do this).
Deliverables
Please submit a zipped version of the eece310_assn3 project. Your project must
include all the .java files that were originally there (these files should be unmodified),
the unit tests youʼve written, and all relevant .js files containing JavaScript code (if any).
Important Note: If you use a FileReader for a unit test but fail to submit the relevant .js
file(s), that particular unit test will not be marked and therefore will not be counted as a
test. So please make sure the .js files are submitted.
1. zip the folder eece310_assn3 ( it will contain all the existing files and your new test
files within the test directory)
2. name that zipped folder as your student numbers (Eg: 31067199_3452190.zip)
You should give the zipped folder the following name:
_.zip (eg: 21779990_23001345.zip)
Please submit the zip file as mentioned in the email guidelines.
Evaluation
You will be marked based on the relevance/correctness of your unit tests and the
coverage of your unit tests based on the specifications. The breakdown is as follows:
Constructor unit tests – 18%
stringToKeyword() unit tests – 18%
getToken() unit tests – 18%
stringToNumber() unit tests – 18%
isJSSpace() unit tests – 5%
getString() unit tests – 5%
getNumber() unit tests – 5%
isNumberOctal() unit tests – 5%
eof() unit tests – 5%
Coding style – 3%
Side note: If you find a bug in the code and can prove, using your unit tests, that the bug
you found is indeed a bug, you may be awarded a maximum of 3 bonus marks.
As a side note for the coding style, please include comments in your code stating
what your test function is doing (also, donʼt forget to specify your test input and
expected output).