You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ro...@apache.org on 2014/10/27 15:10:37 UTC
[2/3] git commit: create new matchers to allow verifying sub-values
within the source and target values of the Attach frame
create new matchers to allow verifying sub-values within the source and target values of the Attach frame
Project: http://git-wip-us.apache.org/repos/asf/qpid-jms/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-jms/commit/a40f0276
Tree: http://git-wip-us.apache.org/repos/asf/qpid-jms/tree/a40f0276
Diff: http://git-wip-us.apache.org/repos/asf/qpid-jms/diff/a40f0276
Branch: refs/heads/master
Commit: a40f027657c88b3ef5f77a021a6aa37e9b2a3da6
Parents: 3aa6ff7
Author: Robert Gemmell <ro...@apache.org>
Authored: Mon Oct 27 13:56:13 2014 +0000
Committer: Robert Gemmell <ro...@apache.org>
Committed: Mon Oct 27 13:56:13 2014 +0000
----------------------------------------------------------------------
.../AbstractFieldAndDescriptorMatcher.java | 15 +-
.../testpeer/matchers/CoordinatorMatcher.java | 151 ++++++++
.../test/testpeer/matchers/SourceMatcher.java | 381 +++++++++++++++++++
.../test/testpeer/matchers/TargetMatcher.java | 289 ++++++++++++++
.../testpeer/matchers/generate-matchers.xsl | 168 +++++++-
5 files changed, 992 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/a40f0276/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/AbstractFieldAndDescriptorMatcher.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/AbstractFieldAndDescriptorMatcher.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/AbstractFieldAndDescriptorMatcher.java
index 4f9dbb7..cf88ddd 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/AbstractFieldAndDescriptorMatcher.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/AbstractFieldAndDescriptorMatcher.java
@@ -27,19 +27,19 @@ public abstract class AbstractFieldAndDescriptorMatcher {
this.fieldMatchers = fieldMatchers;
}
- protected UnsignedLong getNumericDescriptor() {
+ public UnsignedLong getNumericDescriptor() {
return numericDescriptor;
}
- protected Symbol getSymbolicDescriptor() {
+ public Symbol getSymbolicDescriptor() {
return symbolicDescriptor;
}
- protected boolean descriptorMatches(Object descriptor) {
+ public boolean descriptorMatches(Object descriptor) {
return numericDescriptor.equals(descriptor) || symbolicDescriptor.equals(descriptor);
}
- protected Map<Enum<?>, Matcher<?>> getMatchers() {
+ public Map<Enum<?>, Matcher<?>> getMatchers() {
return fieldMatchers;
}
@@ -52,7 +52,12 @@ public abstract class AbstractFieldAndDescriptorMatcher {
return receivedFields;
}
- protected void verifyFields(List<Object> described) {
+ /**
+ * Verifies the fields of the provided list against any matchers registered.
+ * @param described the list of fields from the described type.
+ * @throws AssertionError if a registered matcher assertion is not met.
+ */
+ public void verifyFields(List<Object> described) throws AssertionError {
int fieldNumber = 0;
HashMap<Enum<?>, Object> valueMap = new HashMap<>();
for (Object value : described) {
http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/a40f0276/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/matchers/CoordinatorMatcher.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/matchers/CoordinatorMatcher.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/matchers/CoordinatorMatcher.java
new file mode 100644
index 0000000..029442d
--- /dev/null
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/matchers/CoordinatorMatcher.java
@@ -0,0 +1,151 @@
+/*
+ * 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 CoordinatorMatcher extends TypeSafeMatcher<Object>
+{
+ private CoordinatorMatcherCore coreMatcher = new CoordinatorMatcherCore();
+ private String mismatchTextAddition;
+ private Object described;
+ private Object descriptor;
+
+ public CoordinatorMatcher()
+ {
+ }
+
+ @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("Coordinator which matches: ")
+ .appendValue(coreMatcher.getMatchers());
+ }
+
+
+ public CoordinatorMatcher withCapabilities(Matcher<?> m)
+ {
+ coreMatcher.withCapabilities(m);
+ return this;
+ }
+
+ public Object getReceivedCapabilities()
+ {
+ return coreMatcher.getReceivedCapabilities();
+ }
+
+
+
+ //Inner core matching class
+ public static class CoordinatorMatcherCore extends AbstractFieldAndDescriptorMatcher
+ {
+ /** Note that the ordinals of the Field enums match the order specified in the AMQP spec */
+ public enum Field
+ {
+ CAPABILITIES,
+ }
+
+ public CoordinatorMatcherCore()
+ {
+ super(UnsignedLong.valueOf(0x0000000000000030L),
+ Symbol.valueOf("amqp:coordinator:list"),
+ new HashMap<Enum<?>, Matcher<?>>());
+ }
+
+
+ public CoordinatorMatcherCore withCapabilities(Matcher<?> m)
+ {
+ getMatchers().put(Field.CAPABILITIES, m);
+ return this;
+ }
+
+ public Object getReceivedCapabilities()
+ {
+ return getReceivedFields().get(Field.CAPABILITIES);
+ }
+
+ @Override
+ protected Enum<?> getField(int fieldIndex)
+ {
+ return Field.values()[fieldIndex];
+ }
+ }
+}
+
http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/a40f0276/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/matchers/SourceMatcher.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/matchers/SourceMatcher.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/matchers/SourceMatcher.java
new file mode 100644
index 0000000..03f5e79
--- /dev/null
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/matchers/SourceMatcher.java
@@ -0,0 +1,381 @@
+/*
+ * 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 SourceMatcher extends TypeSafeMatcher<Object>
+{
+ private SourceMatcherCore coreMatcher = new SourceMatcherCore();
+ private String mismatchTextAddition;
+ private Object described;
+ private Object descriptor;
+
+ public SourceMatcher()
+ {
+ }
+
+ @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("Source which matches: ")
+ .appendValue(coreMatcher.getMatchers());
+ }
+
+
+ public SourceMatcher withAddress(Matcher<?> m)
+ {
+ coreMatcher.withAddress(m);
+ return this;
+ }
+
+ public SourceMatcher withDurable(Matcher<?> m)
+ {
+ coreMatcher.withDurable(m);
+ return this;
+ }
+
+ public SourceMatcher withExpiryPolicy(Matcher<?> m)
+ {
+ coreMatcher.withExpiryPolicy(m);
+ return this;
+ }
+
+ public SourceMatcher withTimeout(Matcher<?> m)
+ {
+ coreMatcher.withTimeout(m);
+ return this;
+ }
+
+ public SourceMatcher withDynamic(Matcher<?> m)
+ {
+ coreMatcher.withDynamic(m);
+ return this;
+ }
+
+ public SourceMatcher withDynamicNodeProperties(Matcher<?> m)
+ {
+ coreMatcher.withDynamicNodeProperties(m);
+ return this;
+ }
+
+ public SourceMatcher withDistributionMode(Matcher<?> m)
+ {
+ coreMatcher.withDistributionMode(m);
+ return this;
+ }
+
+ public SourceMatcher withFilter(Matcher<?> m)
+ {
+ coreMatcher.withFilter(m);
+ return this;
+ }
+
+ public SourceMatcher withDefaultOutcome(Matcher<?> m)
+ {
+ coreMatcher.withDefaultOutcome(m);
+ return this;
+ }
+
+ public SourceMatcher withOutcomes(Matcher<?> m)
+ {
+ coreMatcher.withOutcomes(m);
+ return this;
+ }
+
+ public SourceMatcher withCapabilities(Matcher<?> m)
+ {
+ coreMatcher.withCapabilities(m);
+ return this;
+ }
+
+ public Object getReceivedAddress()
+ {
+ return coreMatcher.getReceivedAddress();
+ }
+
+ public Object getReceivedDurable()
+ {
+ return coreMatcher.getReceivedDurable();
+ }
+
+ public Object getReceivedExpiryPolicy()
+ {
+ return coreMatcher.getReceivedExpiryPolicy();
+ }
+
+ public Object getReceivedTimeout()
+ {
+ return coreMatcher.getReceivedTimeout();
+ }
+
+ public Object getReceivedDynamic()
+ {
+ return coreMatcher.getReceivedDynamic();
+ }
+
+ public Object getReceivedDynamicNodeProperties()
+ {
+ return coreMatcher.getReceivedDynamicNodeProperties();
+ }
+
+ public Object getReceivedDistributionMode()
+ {
+ return coreMatcher.getReceivedDistributionMode();
+ }
+
+ public Object getReceivedFilter()
+ {
+ return coreMatcher.getReceivedFilter();
+ }
+
+ public Object getReceivedDefaultOutcome()
+ {
+ return coreMatcher.getReceivedDefaultOutcome();
+ }
+
+ public Object getReceivedOutcomes()
+ {
+ return coreMatcher.getReceivedOutcomes();
+ }
+
+ public Object getReceivedCapabilities()
+ {
+ return coreMatcher.getReceivedCapabilities();
+ }
+
+
+
+ //Inner core matching class
+ public static class SourceMatcherCore extends AbstractFieldAndDescriptorMatcher
+ {
+ /** Note that the ordinals of the Field enums match the order specified in the AMQP spec */
+ public enum Field
+ {
+ ADDRESS,
+ DURABLE,
+ EXPIRY_POLICY,
+ TIMEOUT,
+ DYNAMIC,
+ DYNAMIC_NODE_PROPERTIES,
+ DISTRIBUTION_MODE,
+ FILTER,
+ DEFAULT_OUTCOME,
+ OUTCOMES,
+ CAPABILITIES,
+ }
+
+ public SourceMatcherCore()
+ {
+ super(UnsignedLong.valueOf(0x0000000000000028L),
+ Symbol.valueOf("amqp:source:list"),
+ new HashMap<Enum<?>, Matcher<?>>());
+ }
+
+
+ public SourceMatcherCore withAddress(Matcher<?> m)
+ {
+ getMatchers().put(Field.ADDRESS, m);
+ return this;
+ }
+
+ public SourceMatcherCore withDurable(Matcher<?> m)
+ {
+ getMatchers().put(Field.DURABLE, m);
+ return this;
+ }
+
+ public SourceMatcherCore withExpiryPolicy(Matcher<?> m)
+ {
+ getMatchers().put(Field.EXPIRY_POLICY, m);
+ return this;
+ }
+
+ public SourceMatcherCore withTimeout(Matcher<?> m)
+ {
+ getMatchers().put(Field.TIMEOUT, m);
+ return this;
+ }
+
+ public SourceMatcherCore withDynamic(Matcher<?> m)
+ {
+ getMatchers().put(Field.DYNAMIC, m);
+ return this;
+ }
+
+ public SourceMatcherCore withDynamicNodeProperties(Matcher<?> m)
+ {
+ getMatchers().put(Field.DYNAMIC_NODE_PROPERTIES, m);
+ return this;
+ }
+
+ public SourceMatcherCore withDistributionMode(Matcher<?> m)
+ {
+ getMatchers().put(Field.DISTRIBUTION_MODE, m);
+ return this;
+ }
+
+ public SourceMatcherCore withFilter(Matcher<?> m)
+ {
+ getMatchers().put(Field.FILTER, m);
+ return this;
+ }
+
+ public SourceMatcherCore withDefaultOutcome(Matcher<?> m)
+ {
+ getMatchers().put(Field.DEFAULT_OUTCOME, m);
+ return this;
+ }
+
+ public SourceMatcherCore withOutcomes(Matcher<?> m)
+ {
+ getMatchers().put(Field.OUTCOMES, m);
+ return this;
+ }
+
+ public SourceMatcherCore withCapabilities(Matcher<?> m)
+ {
+ getMatchers().put(Field.CAPABILITIES, m);
+ return this;
+ }
+
+ public Object getReceivedAddress()
+ {
+ return getReceivedFields().get(Field.ADDRESS);
+ }
+
+ public Object getReceivedDurable()
+ {
+ return getReceivedFields().get(Field.DURABLE);
+ }
+
+ public Object getReceivedExpiryPolicy()
+ {
+ return getReceivedFields().get(Field.EXPIRY_POLICY);
+ }
+
+ public Object getReceivedTimeout()
+ {
+ return getReceivedFields().get(Field.TIMEOUT);
+ }
+
+ public Object getReceivedDynamic()
+ {
+ return getReceivedFields().get(Field.DYNAMIC);
+ }
+
+ public Object getReceivedDynamicNodeProperties()
+ {
+ return getReceivedFields().get(Field.DYNAMIC_NODE_PROPERTIES);
+ }
+
+ public Object getReceivedDistributionMode()
+ {
+ return getReceivedFields().get(Field.DISTRIBUTION_MODE);
+ }
+
+ public Object getReceivedFilter()
+ {
+ return getReceivedFields().get(Field.FILTER);
+ }
+
+ public Object getReceivedDefaultOutcome()
+ {
+ return getReceivedFields().get(Field.DEFAULT_OUTCOME);
+ }
+
+ public Object getReceivedOutcomes()
+ {
+ return getReceivedFields().get(Field.OUTCOMES);
+ }
+
+ public Object getReceivedCapabilities()
+ {
+ return getReceivedFields().get(Field.CAPABILITIES);
+ }
+
+ @Override
+ protected Enum<?> getField(int fieldIndex)
+ {
+ return Field.values()[fieldIndex];
+ }
+ }
+}
+
http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/a40f0276/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/matchers/TargetMatcher.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/matchers/TargetMatcher.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/matchers/TargetMatcher.java
new file mode 100644
index 0000000..3c141ed
--- /dev/null
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/matchers/TargetMatcher.java
@@ -0,0 +1,289 @@
+/*
+ * 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 TargetMatcher extends TypeSafeMatcher<Object>
+{
+ private TargetMatcherCore coreMatcher = new TargetMatcherCore();
+ private String mismatchTextAddition;
+ private Object described;
+ private Object descriptor;
+
+ public TargetMatcher()
+ {
+ }
+
+ @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("Target which matches: ")
+ .appendValue(coreMatcher.getMatchers());
+ }
+
+
+ public TargetMatcher withAddress(Matcher<?> m)
+ {
+ coreMatcher.withAddress(m);
+ return this;
+ }
+
+ public TargetMatcher withDurable(Matcher<?> m)
+ {
+ coreMatcher.withDurable(m);
+ return this;
+ }
+
+ public TargetMatcher withExpiryPolicy(Matcher<?> m)
+ {
+ coreMatcher.withExpiryPolicy(m);
+ return this;
+ }
+
+ public TargetMatcher withTimeout(Matcher<?> m)
+ {
+ coreMatcher.withTimeout(m);
+ return this;
+ }
+
+ public TargetMatcher withDynamic(Matcher<?> m)
+ {
+ coreMatcher.withDynamic(m);
+ return this;
+ }
+
+ public TargetMatcher withDynamicNodeProperties(Matcher<?> m)
+ {
+ coreMatcher.withDynamicNodeProperties(m);
+ return this;
+ }
+
+ public TargetMatcher withCapabilities(Matcher<?> m)
+ {
+ coreMatcher.withCapabilities(m);
+ return this;
+ }
+
+ public Object getReceivedAddress()
+ {
+ return coreMatcher.getReceivedAddress();
+ }
+
+ public Object getReceivedDurable()
+ {
+ return coreMatcher.getReceivedDurable();
+ }
+
+ public Object getReceivedExpiryPolicy()
+ {
+ return coreMatcher.getReceivedExpiryPolicy();
+ }
+
+ public Object getReceivedTimeout()
+ {
+ return coreMatcher.getReceivedTimeout();
+ }
+
+ public Object getReceivedDynamic()
+ {
+ return coreMatcher.getReceivedDynamic();
+ }
+
+ public Object getReceivedDynamicNodeProperties()
+ {
+ return coreMatcher.getReceivedDynamicNodeProperties();
+ }
+
+ public Object getReceivedCapabilities()
+ {
+ return coreMatcher.getReceivedCapabilities();
+ }
+
+
+
+ //Inner core matching class
+ public static class TargetMatcherCore extends AbstractFieldAndDescriptorMatcher
+ {
+ /** Note that the ordinals of the Field enums match the order specified in the AMQP spec */
+ public enum Field
+ {
+ ADDRESS,
+ DURABLE,
+ EXPIRY_POLICY,
+ TIMEOUT,
+ DYNAMIC,
+ DYNAMIC_NODE_PROPERTIES,
+ CAPABILITIES,
+ }
+
+ public TargetMatcherCore()
+ {
+ super(UnsignedLong.valueOf(0x0000000000000029L),
+ Symbol.valueOf("amqp:target:list"),
+ new HashMap<Enum<?>, Matcher<?>>());
+ }
+
+
+ public TargetMatcherCore withAddress(Matcher<?> m)
+ {
+ getMatchers().put(Field.ADDRESS, m);
+ return this;
+ }
+
+ public TargetMatcherCore withDurable(Matcher<?> m)
+ {
+ getMatchers().put(Field.DURABLE, m);
+ return this;
+ }
+
+ public TargetMatcherCore withExpiryPolicy(Matcher<?> m)
+ {
+ getMatchers().put(Field.EXPIRY_POLICY, m);
+ return this;
+ }
+
+ public TargetMatcherCore withTimeout(Matcher<?> m)
+ {
+ getMatchers().put(Field.TIMEOUT, m);
+ return this;
+ }
+
+ public TargetMatcherCore withDynamic(Matcher<?> m)
+ {
+ getMatchers().put(Field.DYNAMIC, m);
+ return this;
+ }
+
+ public TargetMatcherCore withDynamicNodeProperties(Matcher<?> m)
+ {
+ getMatchers().put(Field.DYNAMIC_NODE_PROPERTIES, m);
+ return this;
+ }
+
+ public TargetMatcherCore withCapabilities(Matcher<?> m)
+ {
+ getMatchers().put(Field.CAPABILITIES, m);
+ return this;
+ }
+
+ public Object getReceivedAddress()
+ {
+ return getReceivedFields().get(Field.ADDRESS);
+ }
+
+ public Object getReceivedDurable()
+ {
+ return getReceivedFields().get(Field.DURABLE);
+ }
+
+ public Object getReceivedExpiryPolicy()
+ {
+ return getReceivedFields().get(Field.EXPIRY_POLICY);
+ }
+
+ public Object getReceivedTimeout()
+ {
+ return getReceivedFields().get(Field.TIMEOUT);
+ }
+
+ public Object getReceivedDynamic()
+ {
+ return getReceivedFields().get(Field.DYNAMIC);
+ }
+
+ public Object getReceivedDynamicNodeProperties()
+ {
+ return getReceivedFields().get(Field.DYNAMIC_NODE_PROPERTIES);
+ }
+
+ public Object getReceivedCapabilities()
+ {
+ return getReceivedFields().get(Field.CAPABILITIES);
+ }
+
+ @Override
+ protected Enum<?> getField(int fieldIndex)
+ {
+ return Field.values()[fieldIndex];
+ }
+ }
+}
+
http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/a40f0276/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 263c87f..7bcdf74 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
@@ -31,28 +31,36 @@
<xsl:for-each select="descendant-or-self::node()[name()='type']">
<xsl:variable name="classname"><xsl:call-template name="dashToCamel"><xsl:with-param name="input" select="@name"/></xsl:call-template>Matcher</xsl:variable>
- <xsl:variable name="superclass">
+
+ <xsl:if test="@provides = 'frame' or @provides = 'sasl-frame'">
+ <xsl:variable name="frameSuperclass">
<xsl:choose>
<xsl:when test="@name = 'transfer'">FrameWithPayloadMatchingHandler</xsl:when>
<xsl:otherwise>FrameWithNoPayloadMatchingHandler</xsl:otherwise>
</xsl:choose>
- </xsl:variable>
-
- <xsl:if test="@provides = 'frame' or @provides = 'sasl-frame'">
- <xsl:call-template name="typeClass">
+ </xsl:variable>
+ <xsl:call-template name="frameClass">
<xsl:with-param name="license" select="$license"/>
<xsl:with-param name="classname" select="$classname"/>
- <xsl:with-param name="superclass" select="$superclass"/>
+ <xsl:with-param name="superclass" select="$frameSuperclass"/>
</xsl:call-template>
</xsl:if>
+ <xsl:if test="@provides = 'source' or @provides = 'target'">
+ <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:with-param name="license" select="$license"/>
+ <xsl:with-param name="classname" select="$classname"/>
+ <xsl:with-param name="typename" select="$typename"/>
+ </xsl:call-template>
+ </xsl:if>
</xsl:for-each>
</xsl:template>
<!-- *************************************************************************************************************** -->
-<xsl:template name="typeClass">
+<xsl:template name="frameClass">
<xsl:param name="license"/>
<xsl:param name="classname"/>
<xsl:param name="superclass"/>
@@ -121,6 +129,152 @@ public class <xsl:value-of select="$classname"/> extends <xsl:value-of select="$
<!-- *************************************************************************************************************** -->
+<xsl:template name="sourceOrTargetClass">
+ <xsl:param name="license"/>
+ <xsl:param name="classname"/>
+ <xsl:param name="typename"/>
+ <exsl:document href="{$classname}.java" method="text">
+ <xsl:value-of select="$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 <xsl:value-of select="$classname"/> extends TypeSafeMatcher<Object>
+{
+ private <xsl:value-of select="$classname"/>Core coreMatcher = new <xsl:value-of select="$classname"/>Core();
+ private String mismatchTextAddition;
+ private Object described;
+ private Object descriptor;
+
+ public <xsl:value-of select="$classname"/>()
+ {
+ }
+
+ @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("<xsl:value-of select="$typename"/> which matches: ")
+ .appendValue(coreMatcher.getMatchers());
+ }
+
+<xsl:for-each select="descendant::node()[name()='field']">
+ public <xsl:value-of select="$classname"/> with<xsl:call-template name="dashToCamel"><xsl:with-param name="input" select="@name"/></xsl:call-template>(Matcher<?> m)
+ {
+ coreMatcher.with<xsl:call-template name="dashToCamel"><xsl:with-param name="input" select="@name"/></xsl:call-template>(m);
+ return this;
+ }
+</xsl:for-each>
+<xsl:for-each select="descendant::node()[name()='field']">
+ public Object getReceived<xsl:call-template name="dashToCamel"><xsl:with-param name="input" select="@name"/></xsl:call-template>()
+ {
+ return coreMatcher.getReceived<xsl:call-template name="dashToCamel"><xsl:with-param name="input" select="@name"/></xsl:call-template>();
+ }
+</xsl:for-each>
+
+
+ //Inner core matching class
+ public static class <xsl:value-of select="$classname"/>Core extends AbstractFieldAndDescriptorMatcher
+ {
+ /** Note that the ordinals of the Field enums match the order specified in the AMQP spec */
+ public enum Field
+ {
+ <xsl:for-each select="descendant::node()[name()='field']">
+ <xsl:text> </xsl:text><xsl:call-template name="toUpperDashToUnderscore"><xsl:with-param name="input" select="@name"/></xsl:call-template>,
+ </xsl:for-each> }
+
+ public <xsl:value-of select="$classname"/>Core()
+ {
+ super(UnsignedLong.valueOf(<xsl:value-of select="concat(substring(descendant::node()[name()='descriptor']/@code,1,10),substring(descendant::node()[name()='descriptor']/@code,14))"/>L),
+ Symbol.valueOf("<xsl:value-of select="descendant::node()[name()='descriptor']/@name"/>"),
+ new HashMap<Enum<?>, Matcher<?>>());
+ }
+
+<xsl:for-each select="descendant::node()[name()='field']">
+ public <xsl:value-of select="$classname"/>Core with<xsl:call-template name="dashToCamel"><xsl:with-param name="input" select="@name"/></xsl:call-template>(Matcher<?> m)
+ {
+ getMatchers().put(Field.<xsl:call-template name="toUpperDashToUnderscore"><xsl:with-param name="input" select="@name"/></xsl:call-template>, m);
+ return this;
+ }
+</xsl:for-each>
+<xsl:for-each select="descendant::node()[name()='field']">
+ public Object getReceived<xsl:call-template name="dashToCamel"><xsl:with-param name="input" select="@name"/></xsl:call-template>()
+ {
+ return getReceivedFields().get(Field.<xsl:call-template name="toUpperDashToUnderscore"><xsl:with-param name="input" select="@name"/></xsl:call-template>);
+ }
+</xsl:for-each>
+ @Override
+ protected Enum<?> getField(int fieldIndex)
+ {
+ return Field.values()[fieldIndex];
+ }
+ }
+}
+
+</exsl:document>
+
+</xsl:template>
+
+<!-- *************************************************************************************************************** -->
+
<xsl:template name="constructFromLiteral">
<xsl:param name="type"/>
<xsl:param name="value"/>
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org