/*******************************************************************************
 * Copyright (c) 2010-present Sonatype, Inc.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *   Stuart McCulloch (Sonatype, Inc.) - initial API and implementation
 *******************************************************************************/
package org.eclipse.sisu.bean;

import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.Injector;

import junit.framework.TestCase;

public class LifecycleTest
    extends TestCase
{
    Injector injector;

    @Override
    public void setUp()
    {
        injector = Guice.createInjector( new AbstractModule()
        {
            @Override
            protected void configure()
            {
                install( new LifecycleModule() );
            }
        } );
    }

    public void testBaseLifecycle()
    {
        assertEquals( "a", injector.getInstance( org.eclipse.sisu.bean.alpha.Public.class ).results() );
        assertEquals( "ab", injector.getInstance( org.eclipse.sisu.bean.alpha.Protected.class ).results() );
        assertEquals( "abc", injector.getInstance( org.eclipse.sisu.bean.alpha.Package.class ).results() );
        assertEquals( "abcd", injector.getInstance( org.eclipse.sisu.bean.alpha.Private.class ).results() );

        injector.getInstance( BeanManager.class ).unmanage();

        assertEquals( "az", injector.getInstance( org.eclipse.sisu.bean.alpha.Public.class ).results() );
        assertEquals( "abyz", injector.getInstance( org.eclipse.sisu.bean.alpha.Protected.class ).results() );
        assertEquals( "abcxyz", injector.getInstance( org.eclipse.sisu.bean.alpha.Package.class ).results() );
        assertEquals( "abcdwxyz", injector.getInstance( org.eclipse.sisu.bean.alpha.Private.class ).results() );
    }

    public void testOverriddenLifecycle()
    {
        assertEquals( "bcdA", injector.getInstance( org.eclipse.sisu.bean.alpha.OverriddenPublic.class ).results() );
        assertEquals( "cdAB", injector.getInstance( org.eclipse.sisu.bean.alpha.OverriddenProtected.class ).results() );
        assertEquals( "dABC", injector.getInstance( org.eclipse.sisu.bean.alpha.OverriddenPackage.class ).results() );
        assertEquals( "dABCD", injector.getInstance( org.eclipse.sisu.bean.alpha.OverriddenPrivate.class ).results() );

        injector.getInstance( BeanManager.class ).unmanage();

        assertEquals( "bcdAZwxy",
                      injector.getInstance( org.eclipse.sisu.bean.alpha.OverriddenPublic.class ).results() );
        assertEquals( "cdABYZwx",
                      injector.getInstance( org.eclipse.sisu.bean.alpha.OverriddenProtected.class ).results() );
        assertEquals( "dABCXYZw",
                      injector.getInstance( org.eclipse.sisu.bean.alpha.OverriddenPackage.class ).results() );
        assertEquals( "dABCDWXYZw",
                      injector.getInstance( org.eclipse.sisu.bean.alpha.OverriddenPrivate.class ).results() );
    }

    public void testHiddenLifecycle()
    {
        assertEquals( "bcd", injector.getInstance( org.eclipse.sisu.bean.alpha.HiddenPublic.class ).results() );
        assertEquals( "cd", injector.getInstance( org.eclipse.sisu.bean.alpha.HiddenProtected.class ).results() );
        assertEquals( "d", injector.getInstance( org.eclipse.sisu.bean.alpha.HiddenPackage.class ).results() );
        assertEquals( "d", injector.getInstance( org.eclipse.sisu.bean.alpha.HiddenPrivate.class ).results() );

        injector.getInstance( BeanManager.class ).unmanage();

        assertEquals( "bcdwxy", injector.getInstance( org.eclipse.sisu.bean.alpha.HiddenPublic.class ).results() );
        assertEquals( "cdwx", injector.getInstance( org.eclipse.sisu.bean.alpha.HiddenProtected.class ).results() );
        assertEquals( "dw", injector.getInstance( org.eclipse.sisu.bean.alpha.HiddenPackage.class ).results() );
        assertEquals( "dw", injector.getInstance( org.eclipse.sisu.bean.alpha.HiddenPrivate.class ).results() );
    }

    public void testOverriddenLifecycleInDifferentPackage()
    {
        assertEquals( "bcdA", injector.getInstance( org.eclipse.sisu.bean.beta.OverriddenPublic.class ).results() );
        assertEquals( "cdAB", injector.getInstance( org.eclipse.sisu.bean.beta.OverriddenProtected.class ).results() );
        assertEquals( "cdABC", injector.getInstance( org.eclipse.sisu.bean.beta.OverriddenPackage.class ).results() );
        assertEquals( "cdABCD", injector.getInstance( org.eclipse.sisu.bean.beta.OverriddenPrivate.class ).results() );

        injector.getInstance( BeanManager.class ).unmanage();

        assertEquals( "bcdAZwxy", injector.getInstance( org.eclipse.sisu.bean.beta.OverriddenPublic.class ).results() );
        assertEquals( "cdABYZwx",
                      injector.getInstance( org.eclipse.sisu.bean.beta.OverriddenProtected.class ).results() );
        assertEquals( "cdABCXYZwx",
                      injector.getInstance( org.eclipse.sisu.bean.beta.OverriddenPackage.class ).results() );
        assertEquals( "cdABCDWXYZwx",
                      injector.getInstance( org.eclipse.sisu.bean.beta.OverriddenPrivate.class ).results() );
    }

    public void testHiddenLifecycleInDifferentPackage()
    {
        assertEquals( "bcd", injector.getInstance( org.eclipse.sisu.bean.beta.HiddenPublic.class ).results() );
        assertEquals( "cd", injector.getInstance( org.eclipse.sisu.bean.beta.HiddenProtected.class ).results() );
        assertEquals( "cd", injector.getInstance( org.eclipse.sisu.bean.beta.HiddenPackage.class ).results() );
        assertEquals( "cd", injector.getInstance( org.eclipse.sisu.bean.beta.HiddenPrivate.class ).results() );

        injector.getInstance( BeanManager.class ).unmanage();

        assertEquals( "bcdwxy", injector.getInstance( org.eclipse.sisu.bean.beta.HiddenPublic.class ).results() );
        assertEquals( "cdwx", injector.getInstance( org.eclipse.sisu.bean.beta.HiddenProtected.class ).results() );
        assertEquals( "cdwx", injector.getInstance( org.eclipse.sisu.bean.beta.HiddenPackage.class ).results() );
        assertEquals( "cdwx", injector.getInstance( org.eclipse.sisu.bean.beta.HiddenPrivate.class ).results() );
    }
}
