public void testModelVisit() throws Exception {
ComponentType componentType;
Service service;
SystemImplementation impl;
Component component;
Module module = factory.createModule();
// create target component
componentType = factory.createComponentType();
service = factory.createService();
service.setName("target");
componentType.getServices().add(service);
impl = factory.createSystemImplementation();
impl.setComponentType(componentType);
component = factory.createSimpleComponent();
component.setName("target");
component.setImplementation(impl);
component.initialize(assemblyContext);
module.getComponents().add(component);
// create source component
componentType = factory.createComponentType();
Reference ref = factory.createReference();
ref.setName("ref");
componentType.getReferences().add(ref);
impl = factory.createSystemImplementation();
impl.setComponentType(componentType);
component = factory.createSimpleComponent();
component.setName("source");
component.setImplementation(impl);
ConfiguredReference cRef = factory.createConfiguredReference("ref", "target");
component.getConfiguredReferences().add(cRef);
component.initialize(assemblyContext);
module.getComponents().add(component);
EntryPoint ep = factory.createEntryPoint();
JavaServiceContract contract = factory.createJavaServiceContract();
contract.setInterface(ModuleScopeSystemComponent.class);
service = factory.createService();
service.setServiceContract(contract);
ConfiguredService cService = factory.createConfiguredService();
cService.setPort(service);
cService.initialize(assemblyContext);
ep.setConfiguredService(cService);
SystemBinding binding = factory.createSystemBinding();
ep.getBindings().add(binding);
ConfiguredReference cEpRef = factory.createConfiguredReference();
Reference epRef = factory.createReference();
cEpRef.setPort(epRef);
ep.setConfiguredReference(cEpRef);
ep.initialize(assemblyContext);
module.getEntryPoints().add(ep);
List<ContextFactoryBuilder> builders = new ArrayList<ContextFactoryBuilder>();
builders.add(new TestBuilder());
AssemblyVisitorImpl visitor = new AssemblyVisitorImpl(builders);
module.initialize(assemblyContext);
visitor.start(module);
Assert.assertSame(MARKER, component.getContextFactory());
Assert.assertSame(MARKER, cRef.getProxyFactory());
Assert.assertSame(MARKER, ep.getContextFactory());
Assert.assertSame(MARKER, cEpRef.getProxyFactory());
}