1   package net.sf.fleet.test;
2   
3   import java.util.LinkedList;
4   import java.util.List;
5   
6   import net.sf.fleet.Fleet;
7   import net.sf.fleet.Context;
8   import net.sf.fleet.exceptions.FleetConfigurationException;
9   import net.sf.fleet.impl.ContextImpl;
10  import net.sf.fleet.spi.Core;
11  
12  import org.testng.annotations.Test;
13  
14  import static org.testng.Assert.*;
15  import static org.easymock.EasyMock.*;
16  
17  public class ContextTest {
18  	@Test(description="Check that the Core module is successfully automatically registered.")
19  	public void testAutoCoreRegistration() {
20  		Context lContext = new ContextImpl();
21  		assertEquals(lContext.getModuleInterfaces().size(),1);
22  		assertNotNull(lContext.getModule(Core.class));
23  	}
24  	
25  	@Test
26  	public void testModuleRegistration() {
27  		Context lContext = new ContextImpl();
28  	
29  		DummyModule lModuleImpl = createMock(DummyModule.class);
30  		LinkedList<String> lList = new LinkedList<String>();
31  		Runnable lRunnable = createMock(Runnable.class);
32  		expect(lModuleImpl.listConfiguration()).andReturn(lList);
33  		expect(lModuleImpl.runnableService()).andReturn(lRunnable);
34  		replay(lModuleImpl);
35  		
36  		lContext.addModule(lModuleImpl);
37  		DummyModule lModule = lContext.getModule(DummyModule.class);
38  		assertNotNull(lModule);
39  		List<String> lListResult = lModule.listConfiguration();
40  		Runnable lRunnableResult = lModule.runnableService();
41  		
42  		verify(lModuleImpl);
43  		
44  		assertSame(lListResult,lList);
45  		assertSame(lRunnableResult,lRunnable);
46  	}
47  	
48  	public void testModuleRegistrationConflict() {
49  		Context lContext = new ContextImpl();
50  		
51  		DummyModule lModuleImpl1 = createMock(DummyModule.class);
52  		DummyModule lModuleImpl2 = createMock(DummyModule.class);
53  		
54  		replay(lModuleImpl1,lModuleImpl2);
55  		
56  		lContext.addModule(lModuleImpl1);
57  		try {
58  			lContext.addModule(lModuleImpl2);
59  		} catch ( FleetConfigurationException e ) {
60  			// expected.
61  		}
62  	}
63  	
64  	public void testAutoCurrentContextSetting() {
65  		final Context lContext = new ContextImpl();
66  		
67  		final Runnable lExecutionCheck = createMock(Runnable.class);
68  		lExecutionCheck.run();
69  		replay(lExecutionCheck);
70  		
71  		lContext.addModule(new DummyModuleImpl() {
72  			@Override
73  			public Runnable runnableService() {
74  				// check the unity current context is set.
75  				lExecutionCheck.run();
76  				assertSame(Fleet.getCurrentContext(),lContext,"Context was not automatically set.");
77  				return null;
78  			}
79  		});
80  		lContext.getModule(DummyModule.class).runnableService();
81  		verify(lExecutionCheck);
82  		
83  		assertNull(Fleet.getCurrentContext(),"Context was not reset to null.");
84  	}
85  }