// Path: src/main/java/br/com/six2six/fixturefactory/Property.java
// public class Property {
// 
// 	private String name;
// 	
// 	private Function function;
// 
// 	public Property(String name, Function function) {
// 	    if (name == null) {
// 	        throw new IllegalArgumentException("name must not be null");
// 	    }
// 	    
// 	    if (function == null) {
//             throw new IllegalArgumentException("function must not be null");
//         }
// 	    
// 		this.name = name;
// 		this.function = function;
// 	}
// 
// 	public Property(String name, Object value) {
// 	    this(name, new IdentityFunction(value));
// 	}
// 
// 	public String getName() {
// 		return this.name;
// 	}
// 
// 	public Object getValue() {
// 		return ((AtomicFunction) this.function).generateValue();
// 	}
// 	
// 	public Object getValue(Processor processor) {
// 		return ((RelationFunction) this.function).generateValue(processor);
// 	}
// 	
// 	public Object getValue(Object owner) {
// 		return ((RelationFunction) this.function).generateValue(owner);
// 	}
// 	
// 	public Object getValue(Object owner, Processor processor) {
// 		return ((RelationFunction) this.function).generateValue(owner, processor);
// 	}
// 	
// 	public boolean hasRelationFunction() {
// 		return this.function instanceof RelationFunction;
// 	}
// 
// 	public String getRootAttribute() {
// 		int index = this.name.indexOf(".");
// 		return index > 0 ? this.name.substring(0, index) : this.name;
// 	}
// 
//     public Function getFunction() {
//         return function;
//     }
// 
//     @Override
// 	public int hashCode() {
// 		final int prime = 31;
// 		int result = 1;
// 		result = prime * result + ((name == null) ? 0 : name.hashCode());
// 		return result;
// 	}
// 
// 	@Override
// 	public boolean equals(Object obj) {
// 		if (this == obj)
// 			return true;
// 		if (obj == null)
// 			return false;
// 		if (getClass() != obj.getClass())
// 			return false;
// 		Property other = (Property) obj;
// 		if (name == null) {
// 			if (other.name != null)
// 				return false;
// 		} else if (!name.equals(other.name))
// 			return false;
// 		return true;
// 	}
// }


import br.com.six2six.fixturefactory.Property;
import org.junit.Test;
import java.util.LinkedHashSet;
import java.util.Set;
import static org.hamcrest.Matchers.contains;
import static org.junit.Assert.assertThat;
package br.com.six2six.fixturefactory.util;





public class PropertySorterTest {

    @SuppressWarnings("serial")
    @Test
    public void shouldSortWithDependencies() throws Exception {
// Path: src/main/java/br/com/six2six/fixturefactory/Property.java
// public class Property {
// 
// 	private String name;
// 	
// 	private Function function;
// 
// 	public Property(String name, Function function) {
// 	    if (name == null) {
// 	        throw new IllegalArgumentException("name must not be null");
// 	    }
// 	    
// 	    if (function == null) {
//             throw new IllegalArgumentException("function must not be null");
//         }
// 	    
// 		this.name = name;
// 		this.function = function;
// 	}
// 
// 	public Property(String name, Object value) {
// 	    this(name, new IdentityFunction(value));
// 	}
// 
// 	public String getName() {
// 		return this.name;
// 	}
// 
// 	public Object getValue() {
// 		return ((AtomicFunction) this.function).generateValue();
// 	}
// 	
// 	public Object getValue(Processor processor) {
// 		return ((RelationFunction) this.function).generateValue(processor);
// 	}
// 	
// 	public Object getValue(Object owner) {
// 		return ((RelationFunction) this.function).generateValue(owner);
// 	}
// 	
// 	public Object getValue(Object owner, Processor processor) {
// 		return ((RelationFunction) this.function).generateValue(owner, processor);
// 	}
// 	
// 	public boolean hasRelationFunction() {
// 		return this.function instanceof RelationFunction;
// 	}
// 
// 	public String getRootAttribute() {
// 		int index = this.name.indexOf(".");
// 		return index > 0 ? this.name.substring(0, index) : this.name;
// 	}
// 
//     public Function getFunction() {
//         return function;
//     }
// 
//     @Override
// 	public int hashCode() {
// 		final int prime = 31;
// 		int result = 1;
// 		result = prime * result + ((name == null) ? 0 : name.hashCode());
// 		return result;
// 	}
// 
// 	@Override
// 	public boolean equals(Object obj) {
// 		if (this == obj)
// 			return true;
// 		if (obj == null)
// 			return false;
// 		if (getClass() != obj.getClass())
// 			return false;
// 		Property other = (Property) obj;
// 		if (name == null) {
// 			if (other.name != null)
// 				return false;
// 		} else if (!name.equals(other.name))
// 			return false;
// 		return true;
// 	}
// }


// Path: src/test/java/br/com/six2six/fixturefactory/util/PropertySorterTest.java
import br.com.six2six.fixturefactory.Property;
import org.junit.Test;
import java.util.LinkedHashSet;
import java.util.Set;
import static org.hamcrest.Matchers.contains;
import static org.junit.Assert.assertThat;

package br.com.six2six.fixturefactory.util;





public class PropertySorterTest {

    @SuppressWarnings("serial")
    @Test
    public void shouldSortWithDependencies() throws Exception {
        final Property firstName = new Property("firstName", "diego");