// Path: mockery/src/main/java/jinsist/Mockery.java
// public class Mockery {
//     private Map<Class<?>, Mock<?>> mocks = new HashMap<>();
//     private Expectations expectations = new ReportExpectations(new OrderedExpectations());
// 
//     public void verify() {
//         expectations.verify();
//     }
// 
//     public <MockType> MockType mock(Class<MockType> classToMock) {
//         Mock<MockType> mock = new Mock<>(classToMock, expectations);
//         MockType instance = mock.getInstance();
//         mocks.put(instance.getClass(), mock);
//         return instance;
//     }
// 
//     public <M> Mock<M> expect(M mockInstance) {
//         return findMock(mockInstance);
//     }
// 
//     @SuppressWarnings("unchecked")
//     private <M> Mock<M> findMock(M mockInstance) {
//         return (Mock<M>) mocks.get(mockInstance.getClass());
//     }
// }
// 
// Path: expectations/src/main/java/jinsist/expectations/UnmetExpectations.java
// public class UnmetExpectations extends RuntimeException {
//     UnmetExpectations() {
//     }
// 
//     UnmetExpectations(String message, Throwable throwable) {
//         super(message, throwable);
//     }
// }
// 
// Path: integration/src/test/java/jinsist/integration/testtypes/Collaborator.java
// public class Collaborator {
//     public String publicProperty = "property value";
// 
//     public String firstMethod(String param) {
//         throw new UnsupportedOperationException("firstMethod was called from implementation.");
//     }
// 
//     public String secondMethod(String param, String param2) {
//         throw new UnsupportedOperationException("secondMethod was called from implementation.");
//     }
// 
//     public void voidMethod() {
//     }
// 
//     public int primitiveMethod() {
//         return 0;
//     }
// }


import jinsist.Mockery;
import jinsist.expectations.UnmetExpectations;
import jinsist.integration.testtypes.Collaborator;
import org.junit.Test;
package jinsist.integration;


public class MockeryIT {
    @Test
    public void verifiesEmptyMockery() {
        Mockery mockery = new Mockery();

        mockery.verify();
    }

    @Test
    public void verifiesMockeryWithoutExpectations() {
        Mockery mockery = new Mockery();

        mockery.mock(Collaborator.class);

        mockery.verify();
    }

    @Test(expected = UnmetExpectations.class)
    public void failsVerificationOnUnmetExpectations() {
        Mockery mockery = new Mockery();

// Path: mockery/src/main/java/jinsist/Mockery.java
// public class Mockery {
//     private Map<Class<?>, Mock<?>> mocks = new HashMap<>();
//     private Expectations expectations = new ReportExpectations(new OrderedExpectations());
// 
//     public void verify() {
//         expectations.verify();
//     }
// 
//     public <MockType> MockType mock(Class<MockType> classToMock) {
//         Mock<MockType> mock = new Mock<>(classToMock, expectations);
//         MockType instance = mock.getInstance();
//         mocks.put(instance.getClass(), mock);
//         return instance;
//     }
// 
//     public <M> Mock<M> expect(M mockInstance) {
//         return findMock(mockInstance);
//     }
// 
//     @SuppressWarnings("unchecked")
//     private <M> Mock<M> findMock(M mockInstance) {
//         return (Mock<M>) mocks.get(mockInstance.getClass());
//     }
// }
// 
// Path: expectations/src/main/java/jinsist/expectations/UnmetExpectations.java
// public class UnmetExpectations extends RuntimeException {
//     UnmetExpectations() {
//     }
// 
//     UnmetExpectations(String message, Throwable throwable) {
//         super(message, throwable);
//     }
// }
// 
// Path: integration/src/test/java/jinsist/integration/testtypes/Collaborator.java
// public class Collaborator {
//     public String publicProperty = "property value";
// 
//     public String firstMethod(String param) {
//         throw new UnsupportedOperationException("firstMethod was called from implementation.");
//     }
// 
//     public String secondMethod(String param, String param2) {
//         throw new UnsupportedOperationException("secondMethod was called from implementation.");
//     }
// 
//     public void voidMethod() {
//     }
// 
//     public int primitiveMethod() {
//         return 0;
//     }
// }


// Path: integration/src/test/java/jinsist/integration/MockeryIT.java
import jinsist.Mockery;
import jinsist.expectations.UnmetExpectations;
import jinsist.integration.testtypes.Collaborator;
import org.junit.Test;

package jinsist.integration;


public class MockeryIT {
    @Test
    public void verifiesEmptyMockery() {
        Mockery mockery = new Mockery();

        mockery.verify();
    }

    @Test
    public void verifiesMockeryWithoutExpectations() {
        Mockery mockery = new Mockery();

        mockery.mock(Collaborator.class);

        mockery.verify();
    }

    @Test(expected = UnmetExpectations.class)
    public void failsVerificationOnUnmetExpectations() {
        Mockery mockery = new Mockery();

        Collaborator collaborator = mockery.mock(Collaborator.class);