Release Notes - MRUnit - Version 0.9.0

** Bug
    * [MRUNIT-54] - Driver.runTest throws RuntimeException should it throw AssertionError?
    * [MRUNIT-70] - copy(orig, conf) in Serialization shouldn't require objects to have a no-args constructor, and copy(orig, copy, conf) seems to violate contract for deserializer.deserialize()
    * [MRUNIT-77] - cannot use serializations that do not clone into object, or serializations without no arg constructors with reduce driver
    * [MRUNIT-86] - Configuration not passed to individual mappers/reducers in mapred MapReducerDriver, PipelineMapReduceDriver
    * [MRUNIT-97] - InputSplit causes NullPointerException in mapreduce api
    * [MRUNIT-99] - dont force K2 in MapReduceDriver's to be Comparable since Hadoop dont enforce this on the map output key and value classes

** Dependency upgrade
    * [MRUNIT-90] - upgrade junit to 4.10 and change ExpectedSuppliedException to implement TestRule instead 

** Improvement
    * [MRUNIT-45] - MockOutputCollector.deepCopy should use o.a.h.mrunit.Serialization.copy
    * [MRUNIT-46] - Tests should use *Driver.new*Driver factory methods for cleaner code
    * [MRUNIT-48] - Test and Deprecate Driver.{*OutputFromString,*InputFromString} Methods
    * [MRUNIT-49] - o.a.h.mrunit.mapreduce.ReduceDriverBase.ValueClassInstanceReuseList Configuration not modifable
    * [MRUNIT-62] - Add Maven Profile Build Information to BUILD.txt
    * [MRUNIT-65] - return better error message when mapper or reducer is null for MapDriver or ReduceDriver
    * [MRUNIT-66] - null input checks and behavior on no input to a driver are inconsistent
    * [MRUNIT-72] - MRUnit pom.xml should not depend on 0.23.1-SNAPSHOT
    * [MRUNIT-74] - Matching output but at incorrect position is not returned as an Error in the message string thrown in the RuntimeException
    * [MRUNIT-75] - cleanup exception checking in tests to use a @Rule ExpectedException
    * [MRUNIT-85] - Run java conventions formatter that comes with eclipse on all source code
    * [MRUNIT-89] - add static convenience methods to PipelineMapReduceDriver class
    * [MRUNIT-91] - runTest() should optionally ignore output order
    * [MRUNIT-92] - cleanup multiple release profile and javadoc handling in pom
    * [MRUNIT-96] - Cleanup release: remove unnecesssary artifacts from nexus and distribute single binary distribution with 2 build artifacts, 1 for hadoop 1+ and 1 for hadoop 2+

** New Feature
    * [MRUNIT-67] - o.a.h.mrunit.mapreduce.MapReduceDriver should support a combiner
    * [MRUNIT-68] - Support custom counter checking

** Task
    * [MRUNIT-61] - Build separate source and binary tar balls
    * [MRUNIT-94] - upgrade parent pom to version 10 and remove info in pom that is inherited from parent
    * [MRUNIT-103] - JUnit license not in NOTICE.txt in a binary tarball

Release Notes - MRUnit - Version 0.8.1

** Bug
    * [MRUNIT-55] - Hadoop dependency should be 'provided'
    * [MRUNIT-56] - 0.8.0 release does not work with Hadoop 0.23
    * [MRUNIT-58] - Javadoc for org.apache.hadoop.mrunit Package Ends
    * Prematurely

** Improvement
    * [MRUNIT-57] - profile for hadoop 1.0.0

** Task
    * [MRUNIT-59] - Only assemble tar.gz, not .zip
    * [MRUNIT-60] - Remove special characters from classifers


Release Notes - MRUnit - Version 0.8.0

** Sub-task
    * [MRUNIT-27] - Remove unused variables/imports
    * [MRUNIT-28] - remove generic types compiler warnings
    * [MRUNIT-29] - squash warnings for depreciated classes/methods

** Bug
    * [MRUNIT-19] - MRunit ReduceDriver does not fully replicate the reducers
    * behaviour with reusing pointers over the iterator

** Improvement
    * [MRUNIT-14] - Support JobConfigurable and Closable interfaces
    * [MRUNIT-15] - runTests() should throw meaningful error messages
    * [MRUNIT-18] - Squash all compiler warnings
    * [MRUNIT-30] - Methods {add,set}{Input,Output}FromString have poor error
    * messages
    * [MRUNIT-31] - Support Hadoop 0.22 and 0.23
    * [MRUNIT-42] - Push -javadoc.jar and -sources.jar to maven
    * [MRUNIT-44] - Remove AllTests classes
    * [MRUNIT-47] - Change new ArrayList and new HashMap to List.newArrayList
    * and Maps.newHashMap

** New Feature
    * [MRUNIT-43] - Driver methods should have static factory methods similar
    * to Guava Lists.newArrayList()

** Task
    * [MRUNIT-2] - Create a project site


Release Notes - MRUnit - Version 0.5.0

** Bug
    * [MRUNIT-6] - Reverse MAPREDUCE-954 in trunk
    * [MRUNIT-7] - Remove empty MockMapContext.java file accidentally added
    * [MRUNIT-8] - Fix failing testConfiguration tests
    * [MRUNIT-9] - Fix failing testDoubleIteration test
    * [MRUNIT-10] - Version in pom should contain -incubating per policy
    * [MRUNIT-33] - maven assembly fails with no assembly descriptors found

** Improvement
    * [MRUNIT-1] - Port build system to Maven
    * [MRUNIT-11] - Test output should be redirected to files
    * [MRUNIT-17] - Bind maven assembly to package phase
    * [MRUNIT-37] - Use maven deploy plugin

** New Feature
    * [MRUNIT-3] - Add Apache RAT support to the build
    * [MRUNIT-16] - Generate distribution artifacts from maven

** Task
    * [MRUNIT-4] - Create README, LICENSE, and other necessary files for independent release
    * [MRUNIT-5] - Setup CI builds for MRUnit
    * [MRUNIT-20] - Add a KEYS file containing dev pgp keys to the repo 
    * [MRUNIT-21] - Add the ASF incubator disclaimer to the README
    * [MRUNIT-22] - Add build instructions document
    * [MRUNIT-23] - Create a CHANGES file
    * [MRUNIT-24] - Fix RAT license check failures since adding CHANGES file
    * [MRUNIT-25] - Updated BUILD instructions
    * [MRUNIT-32] - Add Brock Noland's key to dist/KEYS file
