// Path: app/litmus/Builder.java
// public abstract class Builder<T> {
// 
//     public abstract T build();
// 
// }
// 
// Path: app/litmus/unit/validation/ValidationTest.java
// @Category(value = UNIT, priority = 10000)
// public abstract class ValidationTest<T> extends UnitTest {
// 
//     @Before
//     public void cleanDb() {
//         deleteAllModels();
//     }
// 
// 	/**
// 	 * @param fieldName the name of the field on the Model class you want to assert
// 	 * @return a {@link FieldValidationAssert} instance
// 	 */
// 	protected FieldValidationAssert<T> assertThat(String fieldName) {
// 		return new FieldValidationAssert<T>(buildValid(), fieldName);
// 	}
// 
//     private T buildValid() {
//         return valid().build();
//     }
// 
// 
//     /**
// 	 * @param t the object to validate
// 	 * @return a {@link ValidationAssert} instance
// 	 */
// 	protected ValidationAssert<T> assertThat(T t) {
// 		return new ValidationAssert<T>(t);
// 	}
// 
//     /**
//      *
//      * @param builder the {@link Builder} that will be used to build the object to validate
//      * @return a {@link ValidationAssert} instance
//      */
//     protected ValidationAssert<T> assertThat(Builder<T> builder){
//         return new ValidationAssert<T>(builder.build());
//     }
// 
// 	/**
// 	 * Test to verify that the valid() method actually returns a valid object.
// 	 *
// 	 * @see ValidationTest#valid()
// 	 */
// 	@Test
// 	public void validObjectShouldValidate() {
// 		T validObject = buildValid();
// 		Assertions.assertThat(isValid(validObject))
// 				.as(invalidMessage(validObject))
// 				.isTrue();
// 	}
// 
// 	private String invalidMessage(T valid) {
// 		return String.format(
// 				"Expected object of type %s to be valid, but it was invalid because: %s",
// 				valid.getClass().getCanonicalName(),
// 				getAllErrors());
// 	}
// 
// 	/**
// 	 * Subclasses of ValidationTest should implement this method. It's used in
// 	 * The validObjectShouldValidate() test verifies that this method actually
// 	 * returns a valid object.
// 	 *
// 	 * @return a valid object of type T
// 	 * @see litmus.unit.validation.ValidationTest#validObjectShouldValidate()
// 	 */
// 	protected abstract Builder<T> valid();
// 
// }
// 
// Path: samples/app/models/RequiredModel.java
// public class RequiredModel {
// 
// 	@Required
// 	public String requiredString;
// 	
// 	@Required
// 	public List<?> requiredCollection;
// }


import litmus.Builder;
import litmus.unit.validation.ValidationTest;
import models.RequiredModel;
import org.junit.Test;
import static com.google.common.collect.Lists.newArrayList;
package unit.validation;



public class RequiredValidationTest extends ValidationTest<RequiredModel> {

    @Override
// Path: app/litmus/Builder.java
// public abstract class Builder<T> {
// 
//     public abstract T build();
// 
// }
// 
// Path: app/litmus/unit/validation/ValidationTest.java
// @Category(value = UNIT, priority = 10000)
// public abstract class ValidationTest<T> extends UnitTest {
// 
//     @Before
//     public void cleanDb() {
//         deleteAllModels();
//     }
// 
// 	/**
// 	 * @param fieldName the name of the field on the Model class you want to assert
// 	 * @return a {@link FieldValidationAssert} instance
// 	 */
// 	protected FieldValidationAssert<T> assertThat(String fieldName) {
// 		return new FieldValidationAssert<T>(buildValid(), fieldName);
// 	}
// 
//     private T buildValid() {
//         return valid().build();
//     }
// 
// 
//     /**
// 	 * @param t the object to validate
// 	 * @return a {@link ValidationAssert} instance
// 	 */
// 	protected ValidationAssert<T> assertThat(T t) {
// 		return new ValidationAssert<T>(t);
// 	}
// 
//     /**
//      *
//      * @param builder the {@link Builder} that will be used to build the object to validate
//      * @return a {@link ValidationAssert} instance
//      */
//     protected ValidationAssert<T> assertThat(Builder<T> builder){
//         return new ValidationAssert<T>(builder.build());
//     }
// 
// 	/**
// 	 * Test to verify that the valid() method actually returns a valid object.
// 	 *
// 	 * @see ValidationTest#valid()
// 	 */
// 	@Test
// 	public void validObjectShouldValidate() {
// 		T validObject = buildValid();
// 		Assertions.assertThat(isValid(validObject))
// 				.as(invalidMessage(validObject))
// 				.isTrue();
// 	}
// 
// 	private String invalidMessage(T valid) {
// 		return String.format(
// 				"Expected object of type %s to be valid, but it was invalid because: %s",
// 				valid.getClass().getCanonicalName(),
// 				getAllErrors());
// 	}
// 
// 	/**
// 	 * Subclasses of ValidationTest should implement this method. It's used in
// 	 * The validObjectShouldValidate() test verifies that this method actually
// 	 * returns a valid object.
// 	 *
// 	 * @return a valid object of type T
// 	 * @see litmus.unit.validation.ValidationTest#validObjectShouldValidate()
// 	 */
// 	protected abstract Builder<T> valid();
// 
// }
// 
// Path: samples/app/models/RequiredModel.java
// public class RequiredModel {
// 
// 	@Required
// 	public String requiredString;
// 	
// 	@Required
// 	public List<?> requiredCollection;
// }


// Path: samples/test/unit/validation/RequiredValidationTest.java
import litmus.Builder;
import litmus.unit.validation.ValidationTest;
import models.RequiredModel;
import org.junit.Test;
import static com.google.common.collect.Lists.newArrayList;

package unit.validation;



public class RequiredValidationTest extends ValidationTest<RequiredModel> {

    @Override
    protected Builder<RequiredModel> valid() {