@Override public ValueDeclaration withMixins( Class<?>... mixins ) { for( ValueDeclaration declaration : declarations ) { declaration.withMixins( mixins ); } return this; }
@Test public void givenValueWithRuntimeMixinsWhenAssembledExpectCorrectComposition() throws ActivationException { SingletonAssembler singletonAssembler = new SingletonAssembler( module -> module.values( SayWhat.class ).withMixins( SayThisMixin.class, SayThatMixin.class ) ); SayWhat value = singletonAssembler.valueBuilderFactory().newValue( SayWhat.class ); assertThat( value.sayThis(), equalTo( "this" ) ); assertThat( value.sayThat(), equalTo( "that" ) ); }
@Test public void testGroovyScriptResourceMixin() throws Exception { // START SNIPPET: script SingletonAssembler assembler = new SingletonAssembler( assembly -> assembly.values( HelloSpeaker.class ) .setMetaInfo( Scripting.GROOVY ) .withMixins( ScriptMixin.class ) ); HelloSpeaker speaker = assembler.module().newValue( HelloSpeaker.class ); assertThat( speaker.sayHello(), equalTo("Hello, Groovy") ); // END SNIPPET: script }
@Test public void givenValueWithRuntimeMixinOverrideWhenAssembledExpectCorrectComposition() throws ActivationException { SingletonAssembler singletonAssembler = new SingletonAssembler( module -> module.values( SayWhere.class ).withMixins( SayHereMixin.class ) ); SayWhere value = singletonAssembler.valueBuilderFactory().newValue( SayWhere.class ); assertThat( value.sayHere(), equalTo( "here" ) ); assertThat( value.sayThere(), nullValue() ); }
@Test public void givenMixinWithThisInConstructorWhenCreatingModelExpectNoException() throws ActivationException { SingletonAssembler singletonAssembler = new SingletonAssembler( module -> module.values( Does.class ).withMixins( DoesMixin.class ) ); Module module = singletonAssembler.application().findModule( "Layer 1", "Module 1" ); Does does = module.newValue( Does.class ); does.doSomething(); }
@Test public void givenSideEffectWithThisInConstructorWhenCreatingModelExpectNoException() throws ActivationException { SingletonAssembler singletonAssembler = new SingletonAssembler( module -> module.values( Does.class ).withMixins( NoopMixin.class ).withSideEffects( DoesSideEffect.class ) ); Module module = singletonAssembler.application().findModule( "Layer 1", "Module 1" ); Does does = module.newValue( Does.class ); does.doSomething(); }
@Test public void givenConcernWithThisInConstructorWhenCreatingModelExpectNoException() throws ActivationException { SingletonAssembler singletonAssembler = new SingletonAssembler( module -> module.values( Does.class ).withMixins( NoopMixin.class ).withConcerns( DoesConcern.class ) ); Module module = singletonAssembler.application().findModule( "Layer 1", "Module 1" ); Does does = module.newValue( Does.class ); does.doSomething(); }
public void assemble( ModuleAssembly module ) throws AssemblyException { LayerAssembly layer = module.layer(); layer.application().setName( "Script Test" ); module.transients( DomainType.class ).setMetaInfo( Scripting.JAVASCRIPT ).withMixins( ScriptMixin.class ); module.transients( HelloSpeaker.class ).setMetaInfo( Scripting.GROOVY ).withMixins( ScriptMixin.class ); module.values( HelloSpeaker.class ).setMetaInfo( Scripting.JAVASCRIPT ).withMixins( ScriptMixin.class ); }