Move TestClassTest to package org.junit.runners.model.

It is common to add tests to the same package as the class under test.
Create a class TestWithParameters.

This class keeps the data together that are needed for creating a runner for a single data set of a parameterized test. This makes it also clear, that the computation of the name is not the responsibility of the runner but of the Parameterized class.
Make the inner class TestClassRunnerForParameters static.

The class can new be used without an Parameterized instance. It is now self-contained.
Extract BlockJUnit4ClassRunnerWithParameters.

Separate the class from the Parameterized runner. Makes it clear, that it is designed for reuse.
Use a ParametersRunnerFactory for creating the test for a set of parameters.

There's now an explicit component for creating the runner of a single set of parameters. IMHO this is a better extension point than overriding a method.

The factory can be specified by the @UseParametersRunnerFactory
annotation or you can subclass the Parameterized class and provide
the factory to its constructor.
Remove ability to create Parameterized classes with different factories.

There's no need for a second alternative for specifying the factory.
Fixes wrong Runner within documentation.
Remove TestClassRunnerForParameters.

This class has been replaced by BlockJUnit4ClassRunnerWithParameters
and was never visible in a release.
Add documentation.

The factory must have a public zero-arg constructor.
Remove unused import.
Applied code review.
Don't allow to create TestWithParameters without name.

There's no reason for creating such a TestWithParameters. Now we
always know that the name is set.
Use List instead of array.

Handling lists is easier than handling arrays.
Simplified hash code, because fName is never null.