/*
* Copyright (c) 2009-2016, b3log.org & hacpai.com
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.b3log.latke.ioc.drink;
import java.lang.annotation.Annotation;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import org.b3log.latke.Latkes;
import org.b3log.latke.ioc.drink.juice.Juice;
import org.b3log.latke.ioc.drink.juice.JuiceBottle;
import org.b3log.latke.ioc.drink.mix.Mix;
import org.b3log.latke.ioc.drink.mix.MixBottle;
import org.b3log.latke.ioc.bean.LatkeBean;
import org.b3log.latke.ioc.LatkeBeanManager;
import org.b3log.latke.ioc.LatkeBeanManagerImpl;
import org.b3log.latke.ioc.config.Configurator;
import org.b3log.latke.ioc.Lifecycle;
import org.b3log.latke.ioc.drink.annotation.OddLiteral;
import org.b3log.latke.ioc.drink.wine.Spirit;
import org.b3log.latke.ioc.drink.wine.WineBottle;
import org.b3log.latke.ioc.inject.Singleton;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import static org.testng.Assert.*;
import org.testng.annotations.AfterTest;
/**
*
* @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.0.0.1, Oct 28, 2009
*/
final public class BottleUnitTest {
/**
* Bean manager.
*/
private LatkeBeanManager beanManager;
/**
* Classes package.
*/
public static final List<Class<?>> drinkPackageClasses =
Arrays.<Class<?>>asList(Juice.class,
Spirit.class,
Mix.class,
WineBottle.class,
JuiceBottle.class,
MixBottle.class);
/**
* Wine bottle.
*/
private static WineBottle wineBottle;
/**
* Juice bottle.
*/
private static JuiceBottle juiceBottle;
/**
* Mix bottle.
*/
private static MixBottle mixBottle;
@BeforeTest
@SuppressWarnings("unchecked")
public void beforeTest() throws Exception {
System.out.println("before BottleUnitTest");
Latkes.initRuntimeEnv();
Lifecycle.startApplication(drinkPackageClasses);
beanManager = LatkeBeanManagerImpl.getInstance();
// Creates bean by APIs
final Configurator configurator = beanManager.getConfigurator();
configurator.createBean(Mix.class).named("spiritMix").
scoped(Singleton.class).
qualified(new OddLiteral());
configurator.validate(); // Validate after bean configuration
final LatkeBean<?> wineBottleBean = beanManager.getBean(WineBottle.class);
assertNotNull(wineBottleBean);
wineBottle = (WineBottle) beanManager.getReference(wineBottleBean);
assertNotNull(wineBottle);
final LatkeBean<?> juiceBottleBean = beanManager.getBean(JuiceBottle.class);
assertNotNull(juiceBottleBean);
juiceBottle = (JuiceBottle) beanManager.getReference(juiceBottleBean);
assertNotNull(juiceBottle);
final LatkeBean<?> mixBottleBean = beanManager.getBean(MixBottle.class, new HashSet<Annotation>());
mixBottle = (MixBottle) beanManager.getReference(mixBottleBean);
assertNotNull(mixBottle);
}
/**
* This method will be run after the test. Shutdown Latke IoC container.
*/
@AfterTest
public void afterTest() {
System.out.println("afterTest BottleUnitTest");
Lifecycle.endApplication();
}
@Test
public void wineBottlePour() {
System.out.println("wineBottlePour");
final Spirit wine = wineBottle.pour();
assertNotNull(wine);
}
@Test
public void juiceBottlePour() {
System.out.println("juiceBottlePour");
final Juice juice = juiceBottle.pour();
assertNotNull(juice);
}
@Test
public void mixBottlePour() {
System.out.println("mixBottlePour");
final Juice juice = mixBottle.pour();
assertNotNull(juice);
}
}