Class GeneratorWatcher<Base extends GeneratorBase<Base,Context>,Context extends GeneratorContext<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 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 class org.junit.rules.TestWatcher
      • failed

        protected void failed​(java.lang.Throwable e,
                              org.junit.runner.Description description)
        Overrides:
        failed in class org.junit.rules.TestWatcher
      • finished

        protected void finished​(org.junit.runner.Description description)
        Overrides:
        finished in class org.junit.rules.TestWatcher