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]
