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 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>
      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.
      <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.
      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.
      • Methods inherited from class org.junit.rules.TestWatcher

        apply, skipped, skipped, succeeded
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • 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