1   package net.sf.fleet.test;
2   
3   import static org.easymock.EasyMock.*;
4   import net.sf.fleet.annotations.Module;
5   import net.sf.fleet.annotations.Service;
6   import net.sf.fleet.impl.ContextImpl;
7   
8   import org.testng.annotations.Test;
9   
10  public class ServicesIntegrationTest {
11  	
12  	@Module
13  	public interface ModuleA {
14  		@Service(id="runnable")
15  		Runnable getRunnable();
16  	}
17  	
18  	@Test
19  	public void testServiceInvocation() {
20  		Runnable lRunnable = createMock(Runnable.class);
21  		ModuleA lModuleAImpl = createMock(ModuleA.class);
22  		
23  		lRunnable.run();
24  		lRunnable.run();
25  		expect(lModuleAImpl.getRunnable()).andReturn(lRunnable);
26  		
27  		replay(lModuleAImpl,lRunnable);
28  		
29  		ContextImpl lContext = new ContextImpl();
30  		lContext.addModule(lModuleAImpl);
31  		
32  		// should result in a call to the factory method, and a call to run.
33  		{
34  			ModuleA lModule = lContext.getModule(ModuleA.class);
35  			lModule.getRunnable().run();
36  		}
37  		
38  		// should result in no call to the factory method, and a call to run on the original service.
39  		{
40  			ModuleA lModule = lContext.getModule(ModuleA.class);
41  			lModule.getRunnable().run();
42  		}
43  		
44  		verify(lModuleAImpl,lRunnable);
45  		
46  	}
47  }