// Path: src/test/java/com/fluentinterface/examples/Person.java
// public class Person {
//     private String name;
//     private int age;
//     private Person partner;
//     private List<Person> friends;
//     private Set<String> surnames;
//     private Person[] parents;
//     private int[] agesOfMarriages;
//     private Queue queue;
// 
//     public Person() {
//     }
// 
//     public Person(String name, int age, Person partner) {
//         this.name = name;
//         this.age = age;
//         this.partner = partner;
//     }
// 
//     public Person(List<Person> friends) {
//         this.friends = friends;
//     }
// 
//     public Person(String name, List<Person> friends) {
//         this.name = name;
//         this.friends = friends;
//     }
// 
//     public Person(String name, int age) {
//         this.name = name;
//         this.age = age;
//     }
// 
//     public Person(Person partner, int age) {
//         this.partner = partner;
//         this.age = age;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     public int getAge() {
//         return age;
//     }
// 
//     public void setAge(int age) {
//         this.age = age;
//     }
// 
//     public Person getPartner() {
//         return partner;
//     }
// 
//     public void setPartner(Person partner) {
//         this.partner = partner;
//     }
// 
//     public List<Person> getFriends() {
//         return friends;
//     }
// 
//     public void setFriends(List<Person> friends) {
//         this.friends = friends;
//     }
// 
//     public Set<String> getSurnames() {
//         return surnames;
//     }
// 
//     public void setSurnames(Set<String> surnames) {
//         this.surnames = surnames;
//     }
// 
//     public Person[] getParents() {
//         return parents;
//     }
// 
//     public void setParents(Person[] parents) {
//         this.parents = parents;
//     }
// 
//     public int[] getAgesOfMarriages() {
//         return agesOfMarriages;
//     }
// 
//     public void setAgesOfMarriages(int[] agesOfMarriages) {
//         this.agesOfMarriages = agesOfMarriages;
//     }
// 
//     public Queue getQueue() {
//         return queue;
//     }
// 
//     public void setQueue(Queue queue) {
//         this.queue = queue;
//     }
// }
// 
// Path: src/test/java/com/fluentinterface/examples/TypedStringID.java
// public class TypedStringID<T> {
// 
//     private String id;
// 
//     public TypedStringID() {
//     }
// 
//     public TypedStringID(String id) {
//         this.id = id;
//     }
// 
//     public String getId() {
//         return id;
//     }
// }
// 
// Path: src/test/java/com/fluentinterface/examples/TypedStringIDBuilder.java
// public interface TypedStringIDBuilder<T> extends Builder<TypedStringID<T>> {
// 
//     TypedStringIDBuilder<T> withId(String id);
// 
// }
// 
// Path: src/main/java/com/fluentinterface/ReflectionBuilder.java
// public static <T> ReflectionBuilder<T> implementationFor(Class<T> builderInterface) {
//     return new ReflectionBuilder<>(builderInterface);
// }


import com.fluentinterface.examples.Person;
import com.fluentinterface.examples.TypedStringID;
import com.fluentinterface.examples.TypedStringIDBuilder;
import org.junit.Test;
import static com.fluentinterface.ReflectionBuilder.implementationFor;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
package com.fluentinterface;



public class TypedBuilderProxyTest {

    private TypedStringIDBuilder<Person> personTypedStringIDBuilder = implementationFor(TypedStringIDBuilder.class)
            .usingFieldsDirectly()
            .create();

    @Test
    public void shouldSetPropertyValueString() {

// Path: src/test/java/com/fluentinterface/examples/Person.java
// public class Person {
//     private String name;
//     private int age;
//     private Person partner;
//     private List<Person> friends;
//     private Set<String> surnames;
//     private Person[] parents;
//     private int[] agesOfMarriages;
//     private Queue queue;
// 
//     public Person() {
//     }
// 
//     public Person(String name, int age, Person partner) {
//         this.name = name;
//         this.age = age;
//         this.partner = partner;
//     }
// 
//     public Person(List<Person> friends) {
//         this.friends = friends;
//     }
// 
//     public Person(String name, List<Person> friends) {
//         this.name = name;
//         this.friends = friends;
//     }
// 
//     public Person(String name, int age) {
//         this.name = name;
//         this.age = age;
//     }
// 
//     public Person(Person partner, int age) {
//         this.partner = partner;
//         this.age = age;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     public int getAge() {
//         return age;
//     }
// 
//     public void setAge(int age) {
//         this.age = age;
//     }
// 
//     public Person getPartner() {
//         return partner;
//     }
// 
//     public void setPartner(Person partner) {
//         this.partner = partner;
//     }
// 
//     public List<Person> getFriends() {
//         return friends;
//     }
// 
//     public void setFriends(List<Person> friends) {
//         this.friends = friends;
//     }
// 
//     public Set<String> getSurnames() {
//         return surnames;
//     }
// 
//     public void setSurnames(Set<String> surnames) {
//         this.surnames = surnames;
//     }
// 
//     public Person[] getParents() {
//         return parents;
//     }
// 
//     public void setParents(Person[] parents) {
//         this.parents = parents;
//     }
// 
//     public int[] getAgesOfMarriages() {
//         return agesOfMarriages;
//     }
// 
//     public void setAgesOfMarriages(int[] agesOfMarriages) {
//         this.agesOfMarriages = agesOfMarriages;
//     }
// 
//     public Queue getQueue() {
//         return queue;
//     }
// 
//     public void setQueue(Queue queue) {
//         this.queue = queue;
//     }
// }
// 
// Path: src/test/java/com/fluentinterface/examples/TypedStringID.java
// public class TypedStringID<T> {
// 
//     private String id;
// 
//     public TypedStringID() {
//     }
// 
//     public TypedStringID(String id) {
//         this.id = id;
//     }
// 
//     public String getId() {
//         return id;
//     }
// }
// 
// Path: src/test/java/com/fluentinterface/examples/TypedStringIDBuilder.java
// public interface TypedStringIDBuilder<T> extends Builder<TypedStringID<T>> {
// 
//     TypedStringIDBuilder<T> withId(String id);
// 
// }
// 
// Path: src/main/java/com/fluentinterface/ReflectionBuilder.java
// public static <T> ReflectionBuilder<T> implementationFor(Class<T> builderInterface) {
//     return new ReflectionBuilder<>(builderInterface);
// }


// Path: src/test/java/com/fluentinterface/TypedBuilderProxyTest.java
import com.fluentinterface.examples.Person;
import com.fluentinterface.examples.TypedStringID;
import com.fluentinterface.examples.TypedStringIDBuilder;
import org.junit.Test;
import static com.fluentinterface.ReflectionBuilder.implementationFor;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;

package com.fluentinterface;



public class TypedBuilderProxyTest {

    private TypedStringIDBuilder<Person> personTypedStringIDBuilder = implementationFor(TypedStringIDBuilder.class)
            .usingFieldsDirectly()
            .create();

    @Test
    public void shouldSetPropertyValueString() {

        TypedStringID<Person> built = personTypedStringIDBuilder