// Path: pury/src/main/java/com/nikitakozlov/pury/Plugin.java
// public interface Plugin {
// 
//     /**
//      * Hook method that will be called once result is ready.
//      * @param result Result of profiling
//      * @param profilerId profiler identifier.
//      */
//     void handleResult(ProfileResult result, ProfilerId profilerId);
// 
// }
// 
// Path: pury-no-op/src/main/java/com/nikitakozlov/pury/profile/ProfilerId.java
// public class ProfilerId {
//     /**
//      * @param profilerName Profiler Name.
//      * @param runsCounter Amount of runs to complete
//      */
//     public ProfilerId(String profilerName, int runsCounter) {
//     }
// 
//     /**
//      * @return Profiler Name
//      */
//     public String getProfilerName() {
//         return null;
//     }
// 
//     /**
//      * @return RunCounter that represents amount of runs to complete
//      */
//     public int getRunsCounter() {
//         return 0;
//     }
// 
// }
// 
// Path: pury/src/main/java/com/nikitakozlov/pury/result/model/ProfileResult.java
// public interface ProfileResult {
// 
//     /**
//      * Results preserve nesting structure of stages. So that if a given stage has two nested stages,
//      * than corresponding result also has two nested results.
//      * @return list of nested results.
//      */
//     List<? extends ProfileResult> getNestedResults();
// 
//     /**
//      * @return name of a corresponding stage.
//      */
//     String getStageName();
// 
//     /**
//      * @return level in the hierarchy of nested stages.
//      */
//     int getDepth();
// 
//     /**
//      * To simplify result processing all results make use of Visitor Pattern.
//      */
//     void accept(ResultVisitor visitor);
// }


import com.nikitakozlov.pury.Plugin;
import com.nikitakozlov.pury.profile.ProfilerId;
import com.nikitakozlov.pury.result.model.ProfileResult;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.MockitoAnnotations.initMocks;
package com.nikitakozlov.pury.result;




public class ResultManagerTest {

    private static final String KEY_1 = "key 1";
    private static final String KEY_2 = "key 2";

    @Mock
    Plugin plugin1;

    @Mock
    Plugin plugin2;

    @Before
    public void setUp() {
        initMocks(this);
    }

    @Test
// Path: pury/src/main/java/com/nikitakozlov/pury/Plugin.java
// public interface Plugin {
// 
//     /**
//      * Hook method that will be called once result is ready.
//      * @param result Result of profiling
//      * @param profilerId profiler identifier.
//      */
//     void handleResult(ProfileResult result, ProfilerId profilerId);
// 
// }
// 
// Path: pury-no-op/src/main/java/com/nikitakozlov/pury/profile/ProfilerId.java
// public class ProfilerId {
//     /**
//      * @param profilerName Profiler Name.
//      * @param runsCounter Amount of runs to complete
//      */
//     public ProfilerId(String profilerName, int runsCounter) {
//     }
// 
//     /**
//      * @return Profiler Name
//      */
//     public String getProfilerName() {
//         return null;
//     }
// 
//     /**
//      * @return RunCounter that represents amount of runs to complete
//      */
//     public int getRunsCounter() {
//         return 0;
//     }
// 
// }
// 
// Path: pury/src/main/java/com/nikitakozlov/pury/result/model/ProfileResult.java
// public interface ProfileResult {
// 
//     /**
//      * Results preserve nesting structure of stages. So that if a given stage has two nested stages,
//      * than corresponding result also has two nested results.
//      * @return list of nested results.
//      */
//     List<? extends ProfileResult> getNestedResults();
// 
//     /**
//      * @return name of a corresponding stage.
//      */
//     String getStageName();
// 
//     /**
//      * @return level in the hierarchy of nested stages.
//      */
//     int getDepth();
// 
//     /**
//      * To simplify result processing all results make use of Visitor Pattern.
//      */
//     void accept(ResultVisitor visitor);
// }


// Path: pury/src/test/java/com/nikitakozlov/pury/result/ResultManagerTest.java
import com.nikitakozlov.pury.Plugin;
import com.nikitakozlov.pury.profile.ProfilerId;
import com.nikitakozlov.pury.result.model.ProfileResult;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.MockitoAnnotations.initMocks;

package com.nikitakozlov.pury.result;




public class ResultManagerTest {

    private static final String KEY_1 = "key 1";
    private static final String KEY_2 = "key 2";

    @Mock
    Plugin plugin1;

    @Mock
    Plugin plugin2;

    @Before
    public void setUp() {
        initMocks(this);
    }

    @Test
    public void dispatchResult_ShouldCallAllPlugins() {