Class GeneratorWatcher<Base extends GeneratorBase<Base,Context>,Context extends GeneratorContext<Context>>
- java.lang.Object
-
- org.junit.rules.TestWatcher
-
- net.morimekta.providence.testing.generator.GeneratorWatcher<Base,Context>
-
- All Implemented Interfaces:
org.junit.rules.TestRule
- Direct Known Subclasses:
SimpleGeneratorWatcher
public class GeneratorWatcher<Base extends GeneratorBase<Base,Context>,Context extends GeneratorContext<Context>> extends org.junit.rules.TestWatcher
Providence message serializer that can be used as a junit rule.class MyTest { {@literal @}Rule public SimpleGeneratorWatcher gen = GeneratorWatcher .create() .dumpOnFailure() .withGenerator(MyMessage.kDescriptor, gen -> { gen.setAlwaysPresent(MyMessage._Fields.UUID, MyMessage._Fields.NAME); gen.setValueGenerator(MyMessage._Fields.UUID, () -> UUID.randomUUID().toString()); }); {@literal @}Test public testSomething() { MyMessage msg = gen.generate(MyMessage.kDescriptor); sut.doSomething(msg); assertThat(sut.state(), is(SystemToTest.CORRECT)); } {@literal @}Test public testSomethingElse() { gen.generatorFor(MyMessage.kDescriptor) .setValueGenerator(MyMessage._Field.NAME, () -> "Mi Nome") .setAlwaysPresent(MyMessage._Field.AGE) .setValueGenerator(MyMessage._Field.AGE, () -> 35); MyMessage msg = gen.generate(MyMessage.kDescriptor); sut.doSomething(msg); assertThat(sut.state(), is(SystemToTest.CORRECT)); } }
-
-
Constructor Summary
Constructors Constructor Description GeneratorWatcher(Base base)
Make a simple default message generator.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description java.util.List<net.morimekta.providence.PMessage>
allGenerated()
Get all generated messages.static SimpleGeneratorWatcher
create()
Create a default message generator watcher.static <Context extends GeneratorContext<Context>,Base extends GeneratorBase<Base,Context>>
GeneratorWatcher<Base,Context>create(Base base)
Create a message generator watcher with the given base context.void
dumpGeneratedMessages()
Dump all generated messages.GeneratorWatcher<Base,Context>
dumpOnFailure()
Dump all generated messages on failure for this test only.protected void
failed(java.lang.Throwable e, org.junit.runner.Description description)
protected void
finished(org.junit.runner.Description description)
<M extends net.morimekta.providence.PMessage<M,F>,F extends net.morimekta.providence.descriptor.PField>
Mgenerate(Context context, net.morimekta.providence.descriptor.PMessageDescriptor<M,F> descriptor)
Generate a message with random content using the default generator for the message type.<M extends net.morimekta.providence.PMessage<M,F>,F extends net.morimekta.providence.descriptor.PField>
Mgenerate(net.morimekta.providence.descriptor.PMessageDescriptor<M,F> descriptor)
Generate a message with random content using the default generator for the message type.Base
getBaseContext()
<M extends net.morimekta.providence.PMessage<M,F>,F extends net.morimekta.providence.descriptor.PField>
MessageGenerator<Context,M,F>getDefaultGenerator(net.morimekta.providence.descriptor.PMessageDescriptor<M,F> descriptor)
Get the default generator used to generate given message.<M extends net.morimekta.providence.PMessage<M,F>,F extends net.morimekta.providence.descriptor.PField>
MessageGenerator<Context,M,F>newReportingGenerator(net.morimekta.providence.descriptor.PMessageDescriptor<M,F> descriptor)
Create a new non-default generator used to generate given message.GeneratorWatcher<Base,Context>
setFairy(io.codearte.jfairy.Fairy fairy)
Set the feiry data generator being used.GeneratorWatcher<Base,Context>
setFillRate(double fillRate)
Set the field fill rate in the range <0.0 .. 1.0].GeneratorWatcher<Base,Context>
setLocale(java.util.Locale locale)
Set the locale to generate values for.GeneratorWatcher<Base,Context>
setMaxCollectionItems(int max)
Set the max collection items for default generated collections.GeneratorWatcher<Base,Context>
setMessageReader(net.morimekta.providence.mio.MessageReader reader)
Set the message reader for the generator.GeneratorWatcher<Base,Context>
setMessageWriter(net.morimekta.providence.mio.MessageWriter writer)
Set the message writer in case of failure.GeneratorWatcher<Base,Context>
setOutputSerializer(net.morimekta.providence.serializer.Serializer defaultSerializer)
Set default serializer to standard output.GeneratorWatcher<Base,Context>
setRandom(java.util.Random random)
Set the random generator being used.GeneratorWatcher<Base,Context>
setResourceReader(java.lang.String resource)
Read messages from the given resource (pretty formatted).GeneratorWatcher<Base,Context>
setResourceReader(java.lang.String resource, net.morimekta.providence.serializer.Serializer serializer)
Read messages from the given resource.protected void
starting(org.junit.runner.Description description)
<M extends net.morimekta.providence.PMessage<M,F>,F extends net.morimekta.providence.descriptor.PField>
GeneratorWatcher<Base,Context>withGenerator(net.morimekta.providence.descriptor.PMessageDescriptor<M,F> descriptor, java.util.function.Consumer<MessageGenerator<Context,M,F>> modificationConsumer)
Get the modifiable message generator for descriptor.
-
-
-
Constructor Detail
-
GeneratorWatcher
public GeneratorWatcher(Base base)
Make a simple default message generator.- Parameters:
base
- The base generator to use when generating messages.
-
-
Method Detail
-
create
public static SimpleGeneratorWatcher create()
Create a default message generator watcher.- Returns:
- The watcher instance.
-
create
public static <Context extends GeneratorContext<Context>,Base extends GeneratorBase<Base,Context>> GeneratorWatcher<Base,Context> create(Base base)
Create a message generator watcher with the given base context.- Type Parameters:
Base
- The base generator type.Context
- The context type.- Parameters:
base
- The base generator to use when generating messages.- Returns:
- The watcher instance.
-
generate
public <M extends net.morimekta.providence.PMessage<M,F>,F extends net.morimekta.providence.descriptor.PField> M generate(net.morimekta.providence.descriptor.PMessageDescriptor<M,F> descriptor)
Generate a message with random content using the default generator for the message type.- Type Parameters:
M
- The message type.F
- The field type.- Parameters:
descriptor
- Message descriptor to generate message from.- Returns:
- The generated message.
-
generate
public <M extends net.morimekta.providence.PMessage<M,F>,F extends net.morimekta.providence.descriptor.PField> M generate(Context context, net.morimekta.providence.descriptor.PMessageDescriptor<M,F> descriptor)
Generate a message with random content using the default generator for the message type.- Type Parameters:
M
- The message type.F
- The field type.- Parameters:
context
- The specific context to use when generating.descriptor
- Message descriptor to generate message from.- Returns:
- The generated message.
-
withGenerator
public <M extends net.morimekta.providence.PMessage<M,F>,F extends net.morimekta.providence.descriptor.PField> GeneratorWatcher<Base,Context> withGenerator(net.morimekta.providence.descriptor.PMessageDescriptor<M,F> descriptor, java.util.function.Consumer<MessageGenerator<Context,M,F>> modificationConsumer)
Get the modifiable message generator for descriptor.- Type Parameters:
M
- The message type.F
- The message field type.- Parameters:
descriptor
- the message descriptor constant.modificationConsumer
- Consumer to handle modifications on the generator instance.- Returns:
- The message generator watcher.
-
getDefaultGenerator
public <M extends net.morimekta.providence.PMessage<M,F>,F extends net.morimekta.providence.descriptor.PField> MessageGenerator<Context,M,F> getDefaultGenerator(net.morimekta.providence.descriptor.PMessageDescriptor<M,F> descriptor)
Get the default generator used to generate given message.- Type Parameters:
M
- The message type.F
- The message field type.- Parameters:
descriptor
- the message descriptor constant.- Returns:
- The message generator watcher.
-
newReportingGenerator
public <M extends net.morimekta.providence.PMessage<M,F>,F extends net.morimekta.providence.descriptor.PField> MessageGenerator<Context,M,F> newReportingGenerator(net.morimekta.providence.descriptor.PMessageDescriptor<M,F> descriptor)
Create a new non-default generator used to generate given message. This generator will add it's results to the watchers list of generated messages.- Type Parameters:
M
- The message type.F
- The message field type.- Parameters:
descriptor
- the message descriptor constant.- Returns:
- The message generator watcher.
-
allGenerated
public java.util.List<net.morimekta.providence.PMessage> allGenerated()
Get all generated messages. It will return the messages that was *requested* to be generated with all contained messages, not all messages generated all over the place.- Returns:
- The list of generated messages.
-
dumpGeneratedMessages
public void dumpGeneratedMessages() throws java.io.IOException
Dump all generated messages.- Throws:
java.io.IOException
- If writing the messages failed.
-
getBaseContext
public Base getBaseContext()
- Returns:
- The watchers message generator options.
-
setRandom
public GeneratorWatcher<Base,Context> setRandom(java.util.Random random)
Set the random generator being used.- Parameters:
random
- The random generator.- Returns:
- The message generator.
-
setFairy
public GeneratorWatcher<Base,Context> setFairy(io.codearte.jfairy.Fairy fairy)
Set the feiry data generator being used.- Parameters:
fairy
- The fairy data generator.- Returns:
- The message generator.
-
setLocale
public GeneratorWatcher<Base,Context> setLocale(java.util.Locale locale)
Set the locale to generate values for. Applies to default string values. Known good locales are:- English (US)
- German (DE)
- French (FR)
- Italian (IT)
- Spanish (ES)
- Polish (PL)
- Swedish (SV)
- Chinese (ZH)
- Parameters:
locale
- The locale to set.- Returns:
- The message generator.
-
setFillRate
public GeneratorWatcher<Base,Context> setFillRate(double fillRate)
Set the field fill rate in the range <0.0 .. 1.0].- Parameters:
fillRate
- The new fill rate.- Returns:
- The message generator watcher.
-
setMessageWriter
public GeneratorWatcher<Base,Context> setMessageWriter(net.morimekta.providence.mio.MessageWriter writer)
Set the message writer in case of failure.- Parameters:
writer
- The message writer.- Returns:
- The message generator.
-
setMessageReader
public GeneratorWatcher<Base,Context> setMessageReader(net.morimekta.providence.mio.MessageReader reader)
Set the message reader for the generator.- Parameters:
reader
- The message reader. All messages will be read from this- Returns:
- The message generator.
-
setResourceReader
public GeneratorWatcher<Base,Context> setResourceReader(java.lang.String resource)
Read messages from the given resource (pretty formatted).- Parameters:
resource
- The resource path.- Returns:
- The message generator.
-
setResourceReader
public GeneratorWatcher<Base,Context> setResourceReader(java.lang.String resource, net.morimekta.providence.serializer.Serializer serializer)
Read messages from the given resource.- Parameters:
resource
- The resource path.serializer
- Serializer to use for reading resource.- Returns:
- The message generator.
-
setOutputSerializer
public GeneratorWatcher<Base,Context> setOutputSerializer(net.morimekta.providence.serializer.Serializer defaultSerializer)
Set default serializer to standard output. If test case not started and a writer is already set, this method fails. Not that this will remove any previously set message writer.- Parameters:
defaultSerializer
- The new default serializer.- Returns:
- The message generator.
-
setMaxCollectionItems
public GeneratorWatcher<Base,Context> setMaxCollectionItems(int max)
Set the max collection items for default generated collections.- Parameters:
max
- The max number of items.- Returns:
- The message generator.
-
dumpOnFailure
public GeneratorWatcher<Base,Context> dumpOnFailure()
Dump all generated messages on failure for this test only.- Returns:
- The message generator.
-
starting
protected void starting(org.junit.runner.Description description)
- Overrides:
starting
in classorg.junit.rules.TestWatcher
-
failed
protected void failed(java.lang.Throwable e, org.junit.runner.Description description)
- Overrides:
failed
in classorg.junit.rules.TestWatcher
-
finished
protected void finished(org.junit.runner.Description description)
- Overrides:
finished
in classorg.junit.rules.TestWatcher
-
-