// Path: src/test/java/com/mistraltech/smog/examples/model/Person.java
// public class Person extends Addressee {
//     private int age;
//     private Map<PhoneType, Phone> phoneMap;
// 
//     public Person(String name, int age, Address address, Map<PhoneType, Phone> phoneMap) {
//         super(name, address);
//         this.age = age;
//         this.phoneMap = phoneMap;
//     }
// 
//     public int getAge() {
//         return age;
//     }
// 
//     public Phone[] getPhones() {
//         return phoneMap.values().toArray(new Phone[phoneMap.size()]);
//     }
// 
//     public List<Phone> getPhoneList() {
//         List<Phone> phoneList = new ArrayList<Phone>(phoneMap.values());
//         Collections.sort(phoneList, new PhoneComparator());
//         return phoneList;
//     }
// 
//     public Map<PhoneType, Phone> getPhoneMap() {
//         return phoneMap;
//     }
// 
//     @Override
//     public String toString() {
//         return "Person{" +
//                 "age=" + age +
//                 ", phoneMap=" + phoneMap +
//                 "} " + super.toString();
//     }
// }
// 
// Path: src/test/java/com/mistraltech/smog/examples/extended/matcher/AddresseeMatcher.java
// public static AddresseeMatcherType anAddresseeLike(final Addressee template) {
//     return new AddresseeMatcherType(MATCHED_OBJECT_DESCRIPTION, template);
// }
// 
// Path: src/test/java/com/mistraltech/smog/examples/extended/matcher/AddresseeMatcher.java
// public static AddresseeMatcherType anAddresseeThat() {
//     return new AddresseeMatcherType(MATCHED_OBJECT_DESCRIPTION, null);
// }
// 
// Path: src/test/java/com/mistraltech/smog/examples/extended/matcher/PersonMatcher.java
// public static PersonMatcherType aPersonLike(final Person template) {
//     return new PersonMatcherType(MATCHED_OBJECT_DESCRIPTION, template);
// }
// 
// Path: src/test/java/com/mistraltech/smog/examples/extended/matcher/PersonMatcher.java
// public static PersonMatcherType aPersonThat() {
//     return new PersonMatcherType(MATCHED_OBJECT_DESCRIPTION, null);
// }
// 
// Path: src/test/java/com/mistraltech/smog/examples/model/PersonBuilder.java
// public static PersonBuilder aPerson() {
//     return new PersonBuilder();
// }
// 
// Path: src/test/java/com/mistraltech/smog/examples/utils/MatcherTestUtils.java
// public static void assertDescription(Matcher<?> matcher, String descriptionOfExpected) {
//     Description actualDescriptionOfExpected = new StringDescription().appendDescriptionOf(matcher);
//     assertEquals(singleToDoubleQuotes(descriptionOfExpected), actualDescriptionOfExpected.toString());
// }
// 
// Path: src/test/java/com/mistraltech/smog/examples/utils/MatcherTestUtils.java
// public static void assertMismatch(Object input, Matcher<?> matcher, String descriptionOfMismatch) {
//     assertFalse("Expected mismatch", matcher.matches(input));
// 
//     Description actualDescriptionOfMismatch = new StringDescription();
//     matcher.describeMismatch(input, actualDescriptionOfMismatch);
//     assertEquals(singleToDoubleQuotes(descriptionOfMismatch), actualDescriptionOfMismatch.toString());
// }


import com.mistraltech.smog.examples.model.Addressee;
import com.mistraltech.smog.examples.model.Person;
import org.hamcrest.Matcher;
import org.junit.Test;
import static com.mistraltech.smog.examples.extended.matcher.AddresseeMatcher.anAddresseeLike;
import static com.mistraltech.smog.examples.extended.matcher.AddresseeMatcher.anAddresseeThat;
import static com.mistraltech.smog.examples.extended.matcher.PersonMatcher.aPersonLike;
import static com.mistraltech.smog.examples.extended.matcher.PersonMatcher.aPersonThat;
import static com.mistraltech.smog.examples.model.PersonBuilder.aPerson;
import static com.mistraltech.smog.examples.utils.MatcherTestUtils.assertDescription;
import static com.mistraltech.smog.examples.utils.MatcherTestUtils.assertMismatch;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
package com.mistraltech.smog.examples.extended;



public class ExtendedMatcherExamplesTest {
    private Person bob = aPerson()
            .withName("bob")
            .withAge(34)
// Path: src/test/java/com/mistraltech/smog/examples/model/Person.java
// public class Person extends Addressee {
//     private int age;
//     private Map<PhoneType, Phone> phoneMap;
// 
//     public Person(String name, int age, Address address, Map<PhoneType, Phone> phoneMap) {
//         super(name, address);
//         this.age = age;
//         this.phoneMap = phoneMap;
//     }
// 
//     public int getAge() {
//         return age;
//     }
// 
//     public Phone[] getPhones() {
//         return phoneMap.values().toArray(new Phone[phoneMap.size()]);
//     }
// 
//     public List<Phone> getPhoneList() {
//         List<Phone> phoneList = new ArrayList<Phone>(phoneMap.values());
//         Collections.sort(phoneList, new PhoneComparator());
//         return phoneList;
//     }
// 
//     public Map<PhoneType, Phone> getPhoneMap() {
//         return phoneMap;
//     }
// 
//     @Override
//     public String toString() {
//         return "Person{" +
//                 "age=" + age +
//                 ", phoneMap=" + phoneMap +
//                 "} " + super.toString();
//     }
// }
// 
// Path: src/test/java/com/mistraltech/smog/examples/extended/matcher/AddresseeMatcher.java
// public static AddresseeMatcherType anAddresseeLike(final Addressee template) {
//     return new AddresseeMatcherType(MATCHED_OBJECT_DESCRIPTION, template);
// }
// 
// Path: src/test/java/com/mistraltech/smog/examples/extended/matcher/AddresseeMatcher.java
// public static AddresseeMatcherType anAddresseeThat() {
//     return new AddresseeMatcherType(MATCHED_OBJECT_DESCRIPTION, null);
// }
// 
// Path: src/test/java/com/mistraltech/smog/examples/extended/matcher/PersonMatcher.java
// public static PersonMatcherType aPersonLike(final Person template) {
//     return new PersonMatcherType(MATCHED_OBJECT_DESCRIPTION, template);
// }
// 
// Path: src/test/java/com/mistraltech/smog/examples/extended/matcher/PersonMatcher.java
// public static PersonMatcherType aPersonThat() {
//     return new PersonMatcherType(MATCHED_OBJECT_DESCRIPTION, null);
// }
// 
// Path: src/test/java/com/mistraltech/smog/examples/model/PersonBuilder.java
// public static PersonBuilder aPerson() {
//     return new PersonBuilder();
// }
// 
// Path: src/test/java/com/mistraltech/smog/examples/utils/MatcherTestUtils.java
// public static void assertDescription(Matcher<?> matcher, String descriptionOfExpected) {
//     Description actualDescriptionOfExpected = new StringDescription().appendDescriptionOf(matcher);
//     assertEquals(singleToDoubleQuotes(descriptionOfExpected), actualDescriptionOfExpected.toString());
// }
// 
// Path: src/test/java/com/mistraltech/smog/examples/utils/MatcherTestUtils.java
// public static void assertMismatch(Object input, Matcher<?> matcher, String descriptionOfMismatch) {
//     assertFalse("Expected mismatch", matcher.matches(input));
// 
//     Description actualDescriptionOfMismatch = new StringDescription();
//     matcher.describeMismatch(input, actualDescriptionOfMismatch);
//     assertEquals(singleToDoubleQuotes(descriptionOfMismatch), actualDescriptionOfMismatch.toString());
// }


// Path: src/test/java/com/mistraltech/smog/examples/extended/ExtendedMatcherExamplesTest.java
import com.mistraltech.smog.examples.model.Addressee;
import com.mistraltech.smog.examples.model.Person;
import org.hamcrest.Matcher;
import org.junit.Test;
import static com.mistraltech.smog.examples.extended.matcher.AddresseeMatcher.anAddresseeLike;
import static com.mistraltech.smog.examples.extended.matcher.AddresseeMatcher.anAddresseeThat;
import static com.mistraltech.smog.examples.extended.matcher.PersonMatcher.aPersonLike;
import static com.mistraltech.smog.examples.extended.matcher.PersonMatcher.aPersonThat;
import static com.mistraltech.smog.examples.model.PersonBuilder.aPerson;
import static com.mistraltech.smog.examples.utils.MatcherTestUtils.assertDescription;
import static com.mistraltech.smog.examples.utils.MatcherTestUtils.assertMismatch;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;

package com.mistraltech.smog.examples.extended;



public class ExtendedMatcherExamplesTest {
    private Person bob = aPerson()
            .withName("bob")
            .withAge(34)
            .withAddress(null)