add transactional-state matcher

Project: http://git-wip-us.apache.org/repos/asf/qpid-jms/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-jms/commit/7b601d23
Tree: http://git-wip-us.apache.org/repos/asf/qpid-jms/tree/7b601d23
Diff: http://git-wip-us.apache.org/repos/asf/qpid-jms/diff/7b601d23

Branch: refs/heads/master
Commit: 7b601d2379afcc599b2eff0494b74da6ea9645de
Parents: 91e3627
Author: Robert Gemmell <[email protected]>
Authored: Tue Oct 28 18:54:30 2014 +0000
Committer: Robert Gemmell <[email protected]>
Committed: Tue Oct 28 18:54:30 2014 +0000

----------------------------------------------------------------------
 .../matchers/TransactionalStateMatcher.java     | 174 +++++++++++++++++++
 .../testpeer/matchers/generate-matchers.xsl     |   6 +-
 2 files changed, 177 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/7b601d23/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/matchers/TransactionalStateMatcher.java
----------------------------------------------------------------------
diff --git 
a/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/matchers/TransactionalStateMatcher.java
 
b/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/matchers/TransactionalStateMatcher.java
new file mode 100644
index 0000000..b027fe8
--- /dev/null
+++ 
b/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/matchers/TransactionalStateMatcher.java
@@ -0,0 +1,174 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.apache.qpid.jms.test.testpeer.matchers;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.instanceOf;
+
+import java.util.HashMap;
+import java.util.List;
+import org.apache.qpid.proton.amqp.DescribedType;
+import org.apache.qpid.proton.amqp.Symbol;
+import org.apache.qpid.proton.amqp.UnsignedLong;
+import org.apache.qpid.jms.test.testpeer.AbstractFieldAndDescriptorMatcher;
+import org.hamcrest.Matcher;
+import org.hamcrest.Description;
+import org.hamcrest.TypeSafeMatcher;
+
+/**
+ * Generated by generate-matchers.xsl, which resides in this package.
+ */
+public class TransactionalStateMatcher extends TypeSafeMatcher<Object>
+{
+    private TransactionalStateMatcherCore coreMatcher = new 
TransactionalStateMatcherCore();
+    private String mismatchTextAddition;
+    private Object described;
+    private Object descriptor;
+
+    public TransactionalStateMatcher()
+    {
+    }
+
+    @Override
+    protected boolean matchesSafely(Object received)
+    {
+        try
+        {
+            assertThat(received, instanceOf(DescribedType.class));
+            descriptor = ((DescribedType)received).getDescriptor();
+            if(!coreMatcher.descriptorMatches(descriptor))
+            {
+                mismatchTextAddition = "Descriptor mismatch";
+                return false;
+            }
+
+            described = ((DescribedType)received).getDescribed();
+            assertThat(described, instanceOf(List.class));
+            @SuppressWarnings("unchecked")
+            List<Object> fields = (List<Object>) described;
+
+            coreMatcher.verifyFields(fields);
+        }
+        catch (AssertionError ae)
+        {
+            mismatchTextAddition = "AssertionFailure: " + ae.getMessage();
+            return false;
+        }
+
+        return true;
+    }
+
+    @Override
+    protected void describeMismatchSafely(Object item, Description 
mismatchDescription)
+    {
+        mismatchDescription.appendText("\nActual form: ").appendValue(item);
+
+        mismatchDescription.appendText("\nExpected descriptor: ")
+                .appendValue(coreMatcher.getSymbolicDescriptor())
+                .appendText(" / ")
+                .appendValue(coreMatcher.getNumericDescriptor());
+
+        if(mismatchTextAddition != null)
+        {
+            mismatchDescription.appendText("\nAdditional info: 
").appendValue(mismatchTextAddition);
+        }
+    }
+
+    public void describeTo(Description description)
+    {
+        description
+            .appendText("TransactionalState which matches: ")
+            .appendValue(coreMatcher.getMatchers());
+    }
+
+
+    public TransactionalStateMatcher withTxnId(Matcher<?> m)
+    {
+        coreMatcher.withTxnId(m);
+        return this;
+    }
+
+    public TransactionalStateMatcher withOutcome(Matcher<?> m)
+    {
+        coreMatcher.withOutcome(m);
+        return this;
+    }
+
+    public Object getReceivedTxnId()
+    {
+        return coreMatcher.getReceivedTxnId();
+    }
+
+    public Object getReceivedOutcome()
+    {
+        return coreMatcher.getReceivedOutcome();
+    }
+
+
+
+    //Inner core matching class
+    public static class TransactionalStateMatcherCore extends 
AbstractFieldAndDescriptorMatcher
+    {
+        /** Note that the ordinals of the Field enums match the order 
specified in the AMQP spec */
+        public enum Field
+        {
+            TXN_ID,
+            OUTCOME,
+        }
+
+        public TransactionalStateMatcherCore()
+        {
+            super(UnsignedLong.valueOf(0x0000000000000034L),
+                  Symbol.valueOf("amqp:transactional-state:list"),
+                  new HashMap<Enum<?>, Matcher<?>>());
+        }
+
+
+        public TransactionalStateMatcherCore withTxnId(Matcher<?> m)
+        {
+            getMatchers().put(Field.TXN_ID, m);
+            return this;
+        }
+
+        public TransactionalStateMatcherCore withOutcome(Matcher<?> m)
+        {
+            getMatchers().put(Field.OUTCOME, m);
+            return this;
+        }
+
+        public Object getReceivedTxnId()
+        {
+            return getReceivedFields().get(Field.TXN_ID);
+        }
+
+        public Object getReceivedOutcome()
+        {
+            return getReceivedFields().get(Field.OUTCOME);
+        }
+
+        @Override
+        protected Enum<?> getField(int fieldIndex)
+        {
+            return Field.values()[fieldIndex];
+        }
+    }
+}
+

http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/7b601d23/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/matchers/generate-matchers.xsl
----------------------------------------------------------------------
diff --git 
a/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/matchers/generate-matchers.xsl
 
b/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/matchers/generate-matchers.xsl
index 7bcdf74..6203607 100644
--- 
a/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/matchers/generate-matchers.xsl
+++ 
b/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/matchers/generate-matchers.xsl
@@ -46,9 +46,9 @@
           </xsl:call-template>
         </xsl:if>
 
-        <xsl:if test="@provides = 'source' or @provides = 'target'">
+        <xsl:if test="@provides = 'source' or @provides = 'target' or 
@name='transactional-state'">
           <xsl:variable name="typename"><xsl:call-template 
name="dashToCamel"><xsl:with-param name="input" 
select="@name"/></xsl:call-template></xsl:variable>
-          <xsl:call-template name="sourceOrTargetClass">
+          <xsl:call-template name="fieldClass">
               <xsl:with-param name="license" select="$license"/>
               <xsl:with-param name="classname" select="$classname"/>
               <xsl:with-param name="typename" select="$typename"/>
@@ -129,7 +129,7 @@ public class <xsl:value-of select="$classname"/> extends 
<xsl:value-of select="$
 
 <!-- 
***************************************************************************************************************
 -->
 
-<xsl:template name="sourceOrTargetClass">
+<xsl:template name="fieldClass">
     <xsl:param name="license"/>
     <xsl:param name="classname"/>
     <xsl:param name="typename"/>


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to