Loading ...
Sorry, an error occurred while loading the content.

unit test for decide(LoggingEvent inEvent)

Expand Messages
  • Kamal Ahmed
    Hi, Could you please give me some CLUE, on how to proceed to test the following method: public int decide(LoggingEvent inEvent) { boolean retCode = false; if
    Message 1 of 10 , Feb 1, 2006
    • 0 Attachment
      Hi,

      Could you please give me some CLUE, on how to proceed to test the following
      method:

      public int decide(LoggingEvent inEvent) {



      boolean retCode = false;



      if (inEvent != null) {



      Matcher matcher =
      targetPattern.matcher(inEvent.getLoggerName());



      retCode = (matcher.find() == acceptMatch);



      }



      return (retCode) ? Filter.NEUTRAL : Filter.DENY;



      }



      Now i need to write a junit test for this, but I am not sure WHERE to start?



      1. Should i create a NEW instance of the class this method belongs to?



      2. How do i get an "inEvent" of type LoggingEvent?



      3. So this is how i have started writing test case for the method, decide(),
      based on:



      The General form of Junit test follows the following steps:



      1. Create an object and put it in a known state

      2. Invoke a method which returns the "actual result"

      3. Create the "expected result" which may be a primitive value or a more
      complex object.

      4. Invoke "assertEquals(expectedResult,actualResult)







      public int testdecide() {

      int result=0;



      // WmLoggerFilter subjectWmLoggerFilter = new
      WmLoggerFilter();



      return result;

      }

      Since WmLoggerFilter is the class that contains testdecide()

      I would appreciate any help.

      Thanks,



      -Kamal.





      [Non-text portions of this message have been removed]
    • David Saff
      Kamal, Welcome. ... Yes. ... How do you create LoggingEvents elsewhere? Is it as simple as new LoggingEvent(some parameters)? If so, that s how I d proceed
      Message 2 of 10 , Feb 1, 2006
      • 0 Attachment
        Kamal,

        Welcome.

        Kamal Ahmed wrote:
        > Hi,
        >
        > Could you please give me some CLUE, on how to proceed to test the
        > following
        > method:
        >
        > public int decide(LoggingEvent inEvent) {
        >
        >
        >
        > boolean retCode = false;
        >
        >
        >
        > if (inEvent != null) {
        >
        >
        >
        > Matcher matcher =
        > targetPattern.matcher(inEvent.getLoggerName());
        >
        >
        >
        > retCode = (matcher.find() == acceptMatch);
        >
        >
        >
        > }
        >
        >
        >
        > return (retCode) ? Filter.NEUTRAL : Filter.DENY;
        >
        >
        >
        > }
        >
        >
        >
        > Now i need to write a junit test for this, but I am not sure WHERE to
        > start?
        >
        >
        >
        > 1. Should i create a NEW instance of the class this method belongs to?
        Yes.
        > 2. How do i get an "inEvent" of type LoggingEvent?
        How do you create LoggingEvents elsewhere? Is it as simple as new
        LoggingEvent(some parameters)? If so, that's how I'd proceed
        > 3. So this is how i have started writing test case for the method,
        > decide(),
        > based on:
        >
        >
        >
        > public int testdecide() {
        >
        > int result=0;
        >
        >
        >
        > // WmLoggerFilter subjectWmLoggerFilter = new
        > WmLoggerFilter();
        >
        >
        >
        > return result;
        >
        > }
        My _first_ test for this method might be the simplest I could imagine:

        public void testDecideIsDenyForNullEvents() {
        WmLoggerFilter subjectWmLoggerFilter = new WmLoggerFilter();
        assertEquals(Filter.DENY, subjectWmLoggerFilter.decide(null));
        }

        The method must be void, and should contain at least one assert*
        method. Have you read the JUnit cookbook yet? Good luck,

        David Saff
      • Kamal Ahmed
        David, Thank for your response, I have just read the cookbook: I think you are referring to: public void testMoneyMoneyBag() { // [12 CHF] + [14 CHF] + [28
        Message 3 of 10 , Feb 1, 2006
        • 0 Attachment
          David,

          Thank for your response, I have just read the cookbook:
          I think you are referring to:

          public void testMoneyMoneyBag() {
          // [12 CHF] + [14 CHF] + [28 USD] == {[26 CHF][28 USD]}
          Money bag[]= { f26CHF, f28USD };
          MoneyBag expected= new MoneyBag(bag);
          assertEquals(expected, f12CHF.add(f28USD.add(f14CHF)));
          }

          Which means:

          The General form of Junit test follows the following steps:

          1. Create an object and put it in a known state
          2. Invoke a method which returns the "actual result"
          3. Create the "expected result" which may be a primitive value or a more
          complex object.
          4. Invoke "assertEquals(expectedResult,actualResult)

          Am I correct?

          Now how do I fake the assert for the case when I need an argument of type
          LoggingEvent in the decide method. Since LoggingEvent is internal and it
          seems, it cannot be generated explicitly.

          assertEquals(Filter.DENY, subjectWmLoggerFilter.decide(<LoggingEvent type
          object>));


          Thanks again,
          -Kamal.

          -----Original Message-----
          From: junit@yahoogroups.com [mailto:junit@yahoogroups.com] On Behalf Of
          David Saff
          Sent: Wednesday, February 01, 2006 11:00 AM
          To: junit@yahoogroups.com
          Subject: Re: [junit] unit test for decide(LoggingEvent inEvent)

          Kamal,

          Welcome.

          Kamal Ahmed wrote:
          > Hi,
          >
          > Could you please give me some CLUE, on how to proceed to test the
          > following
          > method:
          >
          > public int decide(LoggingEvent inEvent) {
          >
          >
          >
          > boolean retCode = false;
          >
          >
          >
          > if (inEvent != null) {
          >
          >
          >
          > Matcher matcher =
          > targetPattern.matcher(inEvent.getLoggerName());
          >
          >
          >
          > retCode = (matcher.find() == acceptMatch);
          >
          >
          >
          > }
          >
          >
          >
          > return (retCode) ? Filter.NEUTRAL : Filter.DENY;
          >
          >
          >
          > }
          >
          >
          >
          > Now i need to write a junit test for this, but I am not sure WHERE to
          > start?
          >
          >
          >
          > 1. Should i create a NEW instance of the class this method belongs to?
          Yes.
          > 2. How do i get an "inEvent" of type LoggingEvent?
          How do you create LoggingEvents elsewhere? Is it as simple as new
          LoggingEvent(some parameters)? If so, that's how I'd proceed
          > 3. So this is how i have started writing test case for the method,
          > decide(),
          > based on:
          >
          >
          >
          > public int testdecide() {
          >
          > int result=0;
          >
          >
          >
          > // WmLoggerFilter subjectWmLoggerFilter = new
          > WmLoggerFilter();
          >
          >
          >
          > return result;
          >
          > }
          My _first_ test for this method might be the simplest I could imagine:

          public void testDecideIsDenyForNullEvents() {
          WmLoggerFilter subjectWmLoggerFilter = new WmLoggerFilter();
          assertEquals(Filter.DENY, subjectWmLoggerFilter.decide(null));
          }

          The method must be void, and should contain at least one assert*
          method. Have you read the JUnit cookbook yet? Good luck,

          David Saff



          Yahoo! Groups Links
        • Jason Rogers
          ... Pass in a mock LoggingEvent. Google for mock objects. -- Jason Rogers I am crucified with Christ: nevertheless I live; yet not I, but Christ liveth in
          Message 4 of 10 , Feb 1, 2006
          • 0 Attachment
            On 02/01/2006 11:39 AM, Kamal Ahmed apparently said:
            > David,
            >
            > Thank for your response, I have just read the cookbook:
            > I think you are referring to:
            >
            > public void testMoneyMoneyBag() {
            > // [12 CHF] + [14 CHF] + [28 USD] == {[26 CHF][28 USD]}
            > Money bag[]= { f26CHF, f28USD };
            > MoneyBag expected= new MoneyBag(bag);
            > assertEquals(expected, f12CHF.add(f28USD.add(f14CHF)));
            > }
            >
            > Which means:
            >
            > The General form of Junit test follows the following steps:
            >
            > 1. Create an object and put it in a known state
            > 2. Invoke a method which returns the "actual result"
            > 3. Create the "expected result" which may be a primitive value or a more
            > complex object.
            > 4. Invoke "assertEquals(expectedResult,actualResult)
            >
            > Am I correct?
            >
            > Now how do I fake the assert for the case when I need an argument of type
            > LoggingEvent in the decide method. Since LoggingEvent is internal and it
            > seems, it cannot be generated explicitly.
            >
            > assertEquals(Filter.DENY, subjectWmLoggerFilter.decide(<LoggingEvent type
            > object>));
            >
            Pass in a mock LoggingEvent. Google for mock objects.

            --
            Jason Rogers

            "I am crucified with Christ: nevertheless I live; yet not I,
            but Christ liveth in me: and the life which I now live in
            the flesh I live by the faith of the Son of God, who loved
            me, and gave himself for me."
            Galatians 2:20

            (\ /)
            0 0 www.squeak.org
            =*=
          • Bradley, Todd
            ... That is definitely not true. LoggingEvent is a public class with a public constructor. Refer to the javadoc for LoggingEvent here:
            Message 5 of 10 , Feb 1, 2006
            • 0 Attachment
              > Now how do I fake the assert for the case when I need an
              > argument of type LoggingEvent in the decide method. Since
              > LoggingEvent is internal and it seems, it cannot be generated
              > explicitly.

              That is definitely not true. LoggingEvent is a public class with a
              public constructor. Refer to the javadoc for LoggingEvent here:

              http://logging.apache.org/log4j/docs/api/org/apache/log4j/spi/LoggingEve
              nt.html

              They're easy to create and lightweight. Or, as someone else pointed
              out, you could make a mock LoggingEvent.


              Todd.
            • Kamal Ahmed
              Todd, Thanks, this certainly helped. I have tried to come up with a LoggingEvent (see snippet below) , is this what you were referring to? public void
              Message 6 of 10 , Feb 1, 2006
              • 0 Attachment
                Todd,

                Thanks, this certainly helped. I have tried to come up with a LoggingEvent
                (see snippet below) , is this what you were referring to?

                public void testdecide() {


                Logger logger =
                Logger.getLogger("com.webmethods.sc.logging.test.unit.WmLoggerFilterTes");
                WmLoggerFilter subjectWmLoggerFilter = new WmLoggerFilter();
                MessageRenderer mr = new MessageRenderer();
                Throwable e = new Throwable("exception");
                assertEquals(Filter.DENY,
                subjectWmLoggerFilter.decide(null));
                assertEquals(Filter.NEUTRAL,
                subjectWmLoggerFilter.decide(createEvent("com.webmethods.sc.logging.test.uni
                t.WmLoggerFilterTes")));
                System.out.println(Filter.DENY);
                System.out.println(subjectWmLoggerFilter.decide(null));
                System.out.println(Filter.NEUTRAL);
                assertEquals(Filter.NEUTRAL, 0);
                LoggingEvent le = new
                LoggingEvent("com.webmethods.sc.logging.test.unit.WmLoggerFilterTest",
                logger,
                Level.DEBUG,
                mr,
                e);

                }

                You can ignore the println(), I just used them to know what the value was
                for DENY and NEUTRAL
                Thanks,
                -Kamal.

                -----Original Message-----
                From: junit@yahoogroups.com [mailto:junit@yahoogroups.com] On Behalf Of
                Bradley, Todd
                Sent: Wednesday, February 01, 2006 12:03 PM
                To: junit@yahoogroups.com
                Subject: RE: [junit] unit test for decide(LoggingEvent inEvent)

                > Now how do I fake the assert for the case when I need an
                > argument of type LoggingEvent in the decide method. Since
                > LoggingEvent is internal and it seems, it cannot be generated
                > explicitly.

                That is definitely not true. LoggingEvent is a public class with a
                public constructor. Refer to the javadoc for LoggingEvent here:

                http://logging.apache.org/log4j/docs/api/org/apache/log4j/spi/LoggingEve
                nt.html

                They're easy to create and lightweight. Or, as someone else pointed
                out, you could make a mock LoggingEvent.


                Todd.



                Yahoo! Groups Links
              • Bradley, Todd
                ... Yes, that s what I meant. Todd.
                Message 7 of 10 , Feb 1, 2006
                • 0 Attachment
                  > Thanks, this certainly helped. I have tried to come up with a
                  > LoggingEvent (see snippet below) , is this what you were referring to?

                  Yes, that's what I meant.


                  Todd.
                • Kamal Ahmed
                  Thanks, Todd. Sorry to bother you again, but when I use the following test case, I get error: public void testdecide() { Logger logger = Logger
                  Message 8 of 10 , Feb 1, 2006
                  • 0 Attachment
                    Thanks, Todd.



                    Sorry to bother you again, but when I use the following test case, I get
                    error:



                    public void testdecide() {



                    Logger logger = Logger


                    .getLogger("com.webmethods.sc.logging.test.unit.WmLoggerFilterTes");

                    WmLoggerFilter subjectWmLoggerFilter = new
                    WmLoggerFilter();

                    MessageRenderer mr = new MessageRenderer();

                    Throwable e = new Throwable("exception");

                    assertEquals(Filter.DENY,
                    subjectWmLoggerFilter.decide(null));

                    assertEquals(

                    Filter.NEUTRAL,

                    subjectWmLoggerFilter


                    .decide(createEvent("com.webmethods.sc.logging.test.unit.WmLoggerFilterTes")
                    ));

                    System.out.println(Filter.DENY);

                    System.out.println(subjectWmLoggerFilter.decide(null));

                    System.out.println(Filter.NEUTRAL);

                    assertEquals(Filter.NEUTRAL, 0);

                    LoggingEvent le = new LoggingEvent(


                    "com.webmethods.sc.logging.test.unit.WmLoggerFilterTest",

                    logger, Level.DEBUG, mr, e);

                    assertEquals(Filter.NEUTRAL,
                    subjectWmLoggerFilter.decide(le));

                    System.out.println(subjectWmLoggerFilter.decide(le));



                    }





                    Error trace:



                    java.lang.NoClassDefFoundError: javax/jms/JMSException

                    at
                    com.webmethods.sc.logging.test.unit.WmLoggerFilterTest.testdecide(WmLoggerFi
                    lterTest.java:125)

                    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

                    at
                    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39
                    )

                    at
                    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl
                    .java:25)

                    at java.lang.reflect.Method.invoke(Method.java:585)

                    at junit.framework.TestCase.runTest(TestCase.java:154)

                    at junit.framework.TestCase.runBare(TestCase.java:127)

                    at junit.framework.TestResult$1.protect(TestResult.java:106)

                    at junit.framework.TestResult.runProtected(TestResult.java:124)

                    at junit.framework.TestResult.run(TestResult.java:109)

                    at junit.framework.TestCase.run(TestCase.java:118)

                    at junit.framework.TestSuite.runTest(TestSuite.java:208)

                    at junit.framework.TestSuite.run(TestSuite.java:203)

                    at
                    org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRu
                    nner.java:999)

                    at
                    org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.
                    java:423)

                    at
                    org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.
                    java:598)

                    at
                    org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner
                    .java:235)



                    _____

                    From: junit@yahoogroups.com [mailto:junit@yahoogroups.com] On Behalf Of
                    Bradley, Todd
                    Sent: Wednesday, February 01, 2006 3:35 PM
                    To: junit@yahoogroups.com
                    Subject: RE: [junit] unit test for decide(LoggingEvent inEvent)



                    > Thanks, this certainly helped. I have tried to come up with a
                    > LoggingEvent (see snippet below) , is this what you were referring to?

                    Yes, that's what I meant.


                    Todd.



                    SPONSORED LINKS


                    Basic programming language

                    C programming language

                    Computer programming languages


                    The c programming language

                    C programming language

                    List of programming languages



                    _____

                    YAHOO! GROUPS LINKS



                    * Visit your group "junit <http://groups.yahoo.com/group/junit> " on
                    the web.

                    * To unsubscribe from this group, send an email to:
                    junit-unsubscribe@yahoogroups.com
                    <mailto:junit-unsubscribe@yahoogroups.com?subject=Unsubscribe>

                    * Your use of Yahoo! Groups is subject to the Yahoo!
                    <http://docs.yahoo.com/info/terms/> Terms of Service.



                    _____



                    [Non-text portions of this message have been removed]
                  • Kamal Ahmed
                    Todd, The following change fixed it: public void testdecide() { Logger logger = Logger .getLogger( com.webmethods.sc.logging.test.unit.WmLoggerFilterTes );
                    Message 9 of 10 , Feb 1, 2006
                    • 0 Attachment
                      Todd,



                      The following change fixed it:



                      public void testdecide() {



                      Logger logger = Logger


                      .getLogger("com.webmethods.sc.logging.test.unit.WmLoggerFilterTes");

                      WmLoggerFilter subjectWmLoggerFilter = new
                      WmLoggerFilter();

                      //MessageRenderer mr = new MessageRenderer();

                      Throwable e = new Throwable("exception");

                      assertEquals(Filter.DENY,
                      subjectWmLoggerFilter.decide(null));

                      assertEquals(

                      Filter.NEUTRAL,

                      subjectWmLoggerFilter


                      .decide(createEvent("com.webmethods.sc.logging.test.unit.WmLoggerFilterTes")
                      ));

                      System.out.println(Filter.DENY);

                      System.out.println(subjectWmLoggerFilter.decide(null));

                      System.out.println(Filter.NEUTRAL);

                      assertEquals(Filter.NEUTRAL, 0);



                      /* LoggingEvent(String fqnOfCategoryClass, Category
                      logger,

                      * Priority level, Object message, Throwable throwable)

                      */

                      /*LoggingEvent le = new LoggingEvent(


                      "com.webmethods.sc.logging.test.unit.WmLoggerFilterTest",

                      logger, Level.DEBUG, mr, e);

                      */

                      LoggingEvent le = new LoggingEvent(


                      "com.webmethods.sc.logging.test.unit.WmLoggerFilterTest",

                      logger, Level.DEBUG, "test", e);





                      assertEquals(Filter.NEUTRAL,
                      subjectWmLoggerFilter.decide(le));

                      System.out.println(subjectWmLoggerFilter.decide(le));



                      }



                      Thanks,

                      -Kamal.



                      _____

                      From: Kamal Ahmed
                      Sent: Wednesday, February 01, 2006 5:19 PM
                      To: 'junit@yahoogroups.com'
                      Subject: RE: [junit] unit test for decide(LoggingEvent inEvent)



                      Thanks, Todd.



                      Sorry to bother you again, but when I use the following test case, I get
                      error:



                      public void testdecide() {



                      Logger logger = Logger


                      .getLogger("com.webmethods.sc.logging.test.unit.WmLoggerFilterTes");

                      WmLoggerFilter subjectWmLoggerFilter = new
                      WmLoggerFilter();

                      MessageRenderer mr = new MessageRenderer();

                      Throwable e = new Throwable("exception");

                      assertEquals(Filter.DENY,
                      subjectWmLoggerFilter.decide(null));

                      assertEquals(

                      Filter.NEUTRAL,

                      subjectWmLoggerFilter


                      .decide(createEvent("com.webmethods.sc.logging.test.unit.WmLoggerFilterTes")
                      ));

                      System.out.println(Filter.DENY);

                      System.out.println(subjectWmLoggerFilter.decide(null));

                      System.out.println(Filter.NEUTRAL);

                      assertEquals(Filter.NEUTRAL, 0);

                      LoggingEvent le = new LoggingEvent(


                      "com.webmethods.sc.logging.test.unit.WmLoggerFilterTest",

                      logger, Level.DEBUG, mr, e);

                      assertEquals(Filter.NEUTRAL,
                      subjectWmLoggerFilter.decide(le));

                      System.out.println(subjectWmLoggerFilter.decide(le));



                      }





                      Error trace:



                      java.lang.NoClassDefFoundError: javax/jms/JMSException

                      at
                      com.webmethods.sc.logging.test.unit.WmLoggerFilterTest.testdecide(WmLoggerFi
                      lterTest.java:125)

                      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

                      at
                      sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39
                      )

                      at
                      sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl
                      .java:25)

                      at java.lang.reflect.Method.invoke(Method.java:585)

                      at junit.framework.TestCase.runTest(TestCase.java:154)

                      at junit.framework.TestCase.runBare(TestCase.java:127)

                      at junit.framework.TestResult$1.protect(TestResult.java:106)

                      at junit.framework.TestResult.runProtected(TestResult.java:124)

                      at junit.framework.TestResult.run(TestResult.java:109)

                      at junit.framework.TestCase.run(TestCase.java:118)

                      at junit.framework.TestSuite.runTest(TestSuite.java:208)

                      at junit.framework.TestSuite.run(TestSuite.java:203)

                      at
                      org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRu
                      nner.java:999)

                      at
                      org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.
                      java:423)

                      at
                      org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.
                      java:598)

                      at
                      org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner
                      .java:235)



                      _____

                      From: junit@yahoogroups.com [mailto:junit@yahoogroups.com] On Behalf Of
                      Bradley, Todd
                      Sent: Wednesday, February 01, 2006 3:35 PM
                      To: junit@yahoogroups.com
                      Subject: RE: [junit] unit test for decide(LoggingEvent inEvent)



                      > Thanks, this certainly helped. I have tried to come up with a
                      > LoggingEvent (see snippet below) , is this what you were referring to?

                      Yes, that's what I meant.


                      Todd.

                      SPONSORED LINKS


                      Basic programming language

                      C programming language

                      Computer programming languages


                      The c programming language

                      C programming language

                      List of programming languages



                      _____

                      YAHOO! GROUPS LINKS



                      * Visit your group "junit <http://groups.yahoo.com/group/junit> " on
                      the web.

                      * To unsubscribe from this group, send an email to:
                      junit-unsubscribe@yahoogroups.com
                      <mailto:junit-unsubscribe@yahoogroups.com?subject=Unsubscribe>

                      * Your use of Yahoo! Groups is subject to the Yahoo!
                      <http://docs.yahoo.com/info/terms/> Terms of Service.



                      _____



                      [Non-text portions of this message have been removed]
                    • J. B. Rainsberger
                      ... Yes. ... new LoggingEvent(...); The first test I d write is this: public void testNull() { assertEquals( Filter.DENY, new WmLoggerFilter().decide(null) );
                      Message 10 of 10 , Feb 1, 2006
                      • 0 Attachment
                        Kamal Ahmed wrote:

                        > 1. Should i create a NEW instance of the class this method belongs to?

                        Yes.

                        > 2. How do i get an "inEvent" of type LoggingEvent?

                        new LoggingEvent(...);

                        The first test I'd write is this:

                        public void testNull() {
                        assertEquals(
                        Filter.DENY,
                        new WmLoggerFilter().decide(null)
                        );
                        }

                        Now we need a LoggingEvent whose loggerName matches targetPattern. Only
                        you know what targetPattern is, so only you can choose a loggerName that
                        matches that pattern. Then you create a LoggingEvent that contains that
                        loggerName.

                        public void testLoggerNameMatches() {
                        LoggingEvent loggingEvent = ...
                        WmLoggerFilter loggerFilter = new WmLoggerFilter(...);

                        assertEquals(
                        Filter.NEUTRAL,
                        loggerFilter.decide(loggingEvent)
                        );
                        }

                        Now choose a loggerName that does not match the targetPattern and write
                        another test, expecting Filter.DENY.

                        Those are the only tests I can imagine for now.

                        Good luck.
                        --
                        J. B. (Joe) Rainsberger :: http://www.jbrains.info
                        Your guide to software craftsmanship
                        JUnit Recipes: Practical Methods for Programmer Testing
                        2005 Gordon Pask Award for contribution Agile Software Practice
                      Your message has been successfully submitted and would be delivered to recipients shortly.