// Path: app/src/main/java/fr/guddy/android_modular_reloaded/App.java
// public class App extends Application implements HasActivityInjector {
//     //region Injected fields
//     @Inject
//     public DispatchingAndroidInjector<Activity> dispatchingActivityInjector;
//     //endregion
// 
//     //region Fields
//     private ComponentApp mComponentApp;
//     //endregion
// 
//     //region Lifecycle
//     @Override
//     public void onCreate() {
//         super.onCreate();
//         buildComponent();
//         mComponentApp.inject(this);
//     }
//     //endregion
// 
//     //region DI setup
//     private void buildComponent() {
//         mComponentApp = DaggerComponentApp.builder()
//                 .application(this)
//                 .moduleApp(new ModuleApp(this))
//                 .build();
//     }
// 
//     @VisibleForTesting
//     public void setComponentApp(@NonNull final ComponentApp pComponentApp) {
//         mComponentApp = pComponentApp;
//     }
//     //endregion
// 
//     //region HasActivityInjector
//     @Override
//     public AndroidInjector<Activity> activityInjector() {
//         return dispatchingActivityInjector;
//     }
//     //endregion
// }
// 
// Path: app/src/main/java/fr/guddy/android_modular_reloaded/di/ComponentApp.java
// @Singleton
// @Component(modules = {
//         AndroidSupportInjectionModule.class,
//         ModuleApp.class,
//         ModuleMainActivity.class,
//         ActivityBindingModule.class,
// })
// public interface ComponentApp {
//     @Component.Builder
//     interface Builder {
//         @BindsInstance
//         Builder application(final App pApp);
// 
//         Builder moduleApp(final ModuleApp pModuleApp);
// 
//         Builder moduleMainActivity(final ModuleMainActivity pModuleMainActivity);
// 
//         ComponentApp build();
//     }
// 
//     void inject(final App pApp);
// }
// 
// Path: app/src/main/java/fr/guddy/android_modular_reloaded/di/ModuleApp.java
// @Module
// public class ModuleApp {
//     //region Field
//     private final App mApp;
//     //endregion
// 
//     //region Constructor
//     public ModuleApp(@NonNull final App pApp) {
//         mApp = pApp;
//     }
//     //endregion
// 
//     //region Provides
//     @Singleton
//     @Provides
//     public App providesApp() {
//         return mApp;
//     }
//     //endregion
// }
// 
// Path: app/src/main/java/fr/guddy/android_modular_reloaded/di/ModuleMainActivity.java
// @Module
// public class ModuleMainActivity {
//     //region Provides
//     @Provides
//     public IDateFormatter providesDateFormatter() {
//         return new DateFormatter();
//     }
//     //endregion
// }


import android.support.test.InstrumentationRegistry;
import fr.guddy.android_modular_reloaded.App;
import fr.guddy.android_modular_reloaded.di.ComponentApp;
import fr.guddy.android_modular_reloaded.di.ModuleApp;
import fr.guddy.android_modular_reloaded.di.ModuleMainActivity;
import it.cosenonjaviste.daggermock.DaggerMockRule;
package fr.guddy.android_modular_reloaded.rules;



public class AppTestRule extends DaggerMockRule<ComponentApp> {
    //region Constructor
    public AppTestRule() {
        super(ComponentApp.class, new ModuleApp(getApp()), new ModuleMainActivity());
        customizeBuilder(new BuilderCustomizer<ComponentApp.Builder>() {
            @Override
            public ComponentApp.Builder customize(final ComponentApp.Builder pBuilder) {
                return pBuilder.application(getApp());
            }
        });
        set((final ComponentApp pComponent) ->
            pComponent.inject(getApp())
        );
    }
    //endregion

    //region Inner job
// Path: app/src/main/java/fr/guddy/android_modular_reloaded/App.java
// public class App extends Application implements HasActivityInjector {
//     //region Injected fields
//     @Inject
//     public DispatchingAndroidInjector<Activity> dispatchingActivityInjector;
//     //endregion
// 
//     //region Fields
//     private ComponentApp mComponentApp;
//     //endregion
// 
//     //region Lifecycle
//     @Override
//     public void onCreate() {
//         super.onCreate();
//         buildComponent();
//         mComponentApp.inject(this);
//     }
//     //endregion
// 
//     //region DI setup
//     private void buildComponent() {
//         mComponentApp = DaggerComponentApp.builder()
//                 .application(this)
//                 .moduleApp(new ModuleApp(this))
//                 .build();
//     }
// 
//     @VisibleForTesting
//     public void setComponentApp(@NonNull final ComponentApp pComponentApp) {
//         mComponentApp = pComponentApp;
//     }
//     //endregion
// 
//     //region HasActivityInjector
//     @Override
//     public AndroidInjector<Activity> activityInjector() {
//         return dispatchingActivityInjector;
//     }
//     //endregion
// }
// 
// Path: app/src/main/java/fr/guddy/android_modular_reloaded/di/ComponentApp.java
// @Singleton
// @Component(modules = {
//         AndroidSupportInjectionModule.class,
//         ModuleApp.class,
//         ModuleMainActivity.class,
//         ActivityBindingModule.class,
// })
// public interface ComponentApp {
//     @Component.Builder
//     interface Builder {
//         @BindsInstance
//         Builder application(final App pApp);
// 
//         Builder moduleApp(final ModuleApp pModuleApp);
// 
//         Builder moduleMainActivity(final ModuleMainActivity pModuleMainActivity);
// 
//         ComponentApp build();
//     }
// 
//     void inject(final App pApp);
// }
// 
// Path: app/src/main/java/fr/guddy/android_modular_reloaded/di/ModuleApp.java
// @Module
// public class ModuleApp {
//     //region Field
//     private final App mApp;
//     //endregion
// 
//     //region Constructor
//     public ModuleApp(@NonNull final App pApp) {
//         mApp = pApp;
//     }
//     //endregion
// 
//     //region Provides
//     @Singleton
//     @Provides
//     public App providesApp() {
//         return mApp;
//     }
//     //endregion
// }
// 
// Path: app/src/main/java/fr/guddy/android_modular_reloaded/di/ModuleMainActivity.java
// @Module
// public class ModuleMainActivity {
//     //region Provides
//     @Provides
//     public IDateFormatter providesDateFormatter() {
//         return new DateFormatter();
//     }
//     //endregion
// }


// Path: app/src/androidTest/java/fr/guddy/android_modular_reloaded/rules/AppTestRule.java
import android.support.test.InstrumentationRegistry;
import fr.guddy.android_modular_reloaded.App;
import fr.guddy.android_modular_reloaded.di.ComponentApp;
import fr.guddy.android_modular_reloaded.di.ModuleApp;
import fr.guddy.android_modular_reloaded.di.ModuleMainActivity;
import it.cosenonjaviste.daggermock.DaggerMockRule;

package fr.guddy.android_modular_reloaded.rules;



public class AppTestRule extends DaggerMockRule<ComponentApp> {
    //region Constructor
    public AppTestRule() {
        super(ComponentApp.class, new ModuleApp(getApp()), new ModuleMainActivity());
        customizeBuilder(new BuilderCustomizer<ComponentApp.Builder>() {
            @Override
            public ComponentApp.Builder customize(final ComponentApp.Builder pBuilder) {
                return pBuilder.application(getApp());
            }
        });
        set((final ComponentApp pComponent) ->
            pComponent.inject(getApp())
        );
    }
    //endregion

    //region Inner job
    private static App getApp() {