/*
* Copyright (C) 2010. All rights reserved.
*/
package ro.isdc.wro.model.factory;
import static org.junit.Assert.assertEquals;
import java.io.IOException;
import java.io.InputStream;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import ro.isdc.wro.WroRuntimeException;
import ro.isdc.wro.config.Context;
/**
* Test class for {@link FallbackAwareXmlModelFactory}.
*
* @author Alex Objelean
*/
public class TestFallbackAwareWroModelFactory {
private WroModelFactory xmlModelFactory;
private WroModelFactory fallbackAwareModelFactory;
/**
* Used to simulate that a resource stream used to build the model is not available.
*/
private boolean flag = false;
@BeforeClass
public static void onBeforeClass() {
assertEquals(0, Context.countActive());
}
@AfterClass
public static void onAfterClass() {
assertEquals(0, Context.countActive());
}
@Before
public void setUp() {
// initialize the context
Context.set(Context.standaloneContext());
fallbackAwareModelFactory = new FallbackAwareWroModelFactory(new XmlModelFactory() {
@Override
protected InputStream getModelResourceAsStream()
throws IOException {
flag = !flag;
if (flag) {
return TestXmlModelFactory.class.getResourceAsStream("wro.xml");
}
return null;
}
});
xmlModelFactory = new XmlModelFactory() {
@Override
protected InputStream getModelResourceAsStream()
throws IOException {
if (flag) {
return super.getModelResourceAsStream();
}
flag = !flag;
return null;
}
};
}
@After
public void tearDown() {
Context.unset();
fallbackAwareModelFactory.destroy();
xmlModelFactory.destroy();
}
@Test
public void testLastValidIsOK() {
Assert.assertNotNull(fallbackAwareModelFactory.create());
fallbackAwareModelFactory.destroy();
Assert.assertNotNull(fallbackAwareModelFactory.create());
}
@Test(expected = WroRuntimeException.class)
public void testWithoutLastValidThrowsException() {
Assert.assertNotNull(xmlModelFactory.create());
}
}