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/24 20:12:15 UTC

[2/4] git commit: extract a common base class for matching of descriptor and field values

extract a common base class for matching of descriptor and field values


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

Branch: refs/heads/master
Commit: 8e0e28fe44a292bcbba953aeb58683dec78bda49
Parents: 82a1fbe
Author: Robert Gemmell <ro...@apache.org>
Authored: Fri Oct 24 18:04:17 2014 +0100
Committer: Robert Gemmell <ro...@apache.org>
Committed: Fri Oct 24 18:04:17 2014 +0100

----------------------------------------------------------------------
 .../AbstractFieldAndDescriptorMatcher.java      | 79 ++++++++++++++++++++
 ...ractFrameFieldAndPayloadMatchingHandler.java | 60 +--------------
 .../jms/test/testpeer/FrameMatchingHandler.java | 19 ++---
 3 files changed, 88 insertions(+), 70 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/8e0e28fe/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
new file mode 100644
index 0000000..4f9dbb7
--- /dev/null
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/AbstractFieldAndDescriptorMatcher.java
@@ -0,0 +1,79 @@
+package org.apache.qpid.jms.test.testpeer;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.qpid.proton.amqp.Symbol;
+import org.apache.qpid.proton.amqp.UnsignedLong;
+import org.hamcrest.Matcher;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public abstract class AbstractFieldAndDescriptorMatcher {
+
+    protected final Logger _logger = LoggerFactory.getLogger(getClass());
+
+    private final UnsignedLong numericDescriptor;
+    private final Symbol symbolicDescriptor;
+    protected final Map<Enum<?>, Matcher<?>> fieldMatchers;
+    private Map<Enum<?>, Object> receivedFields;
+
+    public AbstractFieldAndDescriptorMatcher(UnsignedLong numericDescriptor, Symbol symbolicDescriptor, Map<Enum<?>, Matcher<?>> fieldMatchers) {
+        this.numericDescriptor = numericDescriptor;
+        this.symbolicDescriptor = symbolicDescriptor;
+        this.fieldMatchers = fieldMatchers;
+    }
+
+    protected UnsignedLong getNumericDescriptor() {
+        return numericDescriptor;
+    }
+
+    protected Symbol getSymbolicDescriptor() {
+        return symbolicDescriptor;
+    }
+
+    protected boolean descriptorMatches(Object descriptor) {
+        return numericDescriptor.equals(descriptor) || symbolicDescriptor.equals(descriptor);
+    }
+
+    protected Map<Enum<?>, Matcher<?>> getMatchers() {
+        return fieldMatchers;
+    }
+
+    /**
+     * Returns the received values, keyed by enums representing the fields
+     * (the enums have an ordinal number matching the AMQP spec field order,
+     * and a sensible name)
+     */
+    protected Map<Enum<?>, Object> getReceivedFields() {
+        return receivedFields;
+    }
+
+    protected void verifyFields(List<Object> described) {
+        int fieldNumber = 0;
+        HashMap<Enum<?>, Object> valueMap = new HashMap<>();
+        for (Object value : described) {
+            valueMap.put(getField(fieldNumber++), value);
+        }
+
+        receivedFields = valueMap;
+
+        _logger.debug("About to check the fields of the described type." + "\n  Received:" + valueMap + "\n  Expectations: " + fieldMatchers);
+        for (Map.Entry<Enum<?>, Matcher<?>> entry : fieldMatchers.entrySet()) {
+            @SuppressWarnings("unchecked")
+            Matcher<Object> matcher = (Matcher<Object>) entry.getValue();
+            Enum<?> field = entry.getKey();
+            assertThat("Field " + field + " value should match", valueMap.get(field), matcher);
+        }
+    }
+
+    /**
+     * Intended to be overridden in most cases (but not necessarily all - hence not marked as abstract)
+     */
+    protected Enum<?> getField(int fieldIndex) {
+        throw new UnsupportedOperationException("getField is expected to be overridden by subclass if it is required");
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/8e0e28fe/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/AbstractFrameFieldAndPayloadMatchingHandler.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/AbstractFrameFieldAndPayloadMatchingHandler.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/AbstractFrameFieldAndPayloadMatchingHandler.java
index e835af3..c5e902d 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/AbstractFrameFieldAndPayloadMatchingHandler.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/AbstractFrameFieldAndPayloadMatchingHandler.java
@@ -18,9 +18,6 @@
  */
 package org.apache.qpid.jms.test.testpeer;
 
-import static org.hamcrest.MatcherAssert.assertThat;
-
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -28,16 +25,9 @@ import org.apache.qpid.proton.amqp.Binary;
 import org.apache.qpid.proton.amqp.Symbol;
 import org.apache.qpid.proton.amqp.UnsignedLong;
 import org.hamcrest.Matcher;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 public abstract class AbstractFrameFieldAndPayloadMatchingHandler extends FrameMatchingHandler
 {
-    private final Logger _logger = LoggerFactory.getLogger(getClass());
-
-    private final Map<Enum<?>, Matcher<?>> _fieldMatchers;
-    private Map<Enum<?>, Object> _receivedFields;
-
     /**
      * @param fieldMatchers a map of field matchers, keyed by enums representing the fields
      * (the enums just need to have an ordinal number matching the AMQP spec field order,
@@ -50,24 +40,7 @@ public abstract class AbstractFrameFieldAndPayloadMatchingHandler extends FrameM
                                                 Map<Enum<?>, Matcher<?>> fieldMatchers,
                                                 Runnable onSuccess)
     {
-        super(frameType, channel, numericDescriptor, symbolicDescriptor, onSuccess);
-        _fieldMatchers = fieldMatchers;
-    }
-
-    protected Map<Enum<?>, Matcher<?>> getMatchers()
-    {
-        return _fieldMatchers;
-    }
-
-    /**
-     * Returns the received values, keyed by enums representing the fields
-     * (the enums have an ordinal number matching the AMQP spec field order,
-     * and a sensible name)
-     */
-    @Override
-    protected Map<Enum<?>, Object> getReceivedFields()
-    {
-        return _receivedFields;
+        super(frameType, channel, numericDescriptor, symbolicDescriptor, onSuccess, fieldMatchers);
     }
 
     @Override
@@ -77,36 +50,5 @@ public abstract class AbstractFrameFieldAndPayloadMatchingHandler extends FrameM
         verifyPayload(payload);
     }
 
-    protected void verifyFields(List<Object> described)
-    {
-        int fieldNumber = 0;
-        HashMap<Enum<?>, Object> valueMap = new HashMap<>();
-        for(Object value : described)
-        {
-            valueMap.put(getField(fieldNumber++), value);
-        }
-
-        _receivedFields = valueMap;
-
-        _logger.debug("About to check the fields of the described type."
-                + "\n  Received:" + valueMap
-                + "\n  Expectations: " + _fieldMatchers);
-        for(Map.Entry<Enum<?>, Matcher<?>> entry : _fieldMatchers.entrySet())
-        {
-            @SuppressWarnings("unchecked")
-            Matcher<Object> matcher = (Matcher<Object>) entry.getValue();
-            Enum<?> field = entry.getKey();
-            assertThat("Field " + field + " value should match", valueMap.get(field), matcher);
-        }
-    }
-
-    /**
-     * Intended to be overridden in most cases (but not necessarily all - hence not marked as abstract)
-     */
-    protected Enum<?> getField(int fieldIndex)
-    {
-        throw new UnsupportedOperationException("getFieldName is expected to be overridden by subclass if it is required");
-    }
-
     protected abstract void verifyPayload(Binary payload);
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/8e0e28fe/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/FrameMatchingHandler.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/FrameMatchingHandler.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/FrameMatchingHandler.java
index 5ccabcb..d1fb852 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/FrameMatchingHandler.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/FrameMatchingHandler.java
@@ -25,17 +25,16 @@ import org.apache.qpid.proton.amqp.Binary;
 import org.apache.qpid.proton.amqp.DescribedType;
 import org.apache.qpid.proton.amqp.Symbol;
 import org.apache.qpid.proton.amqp.UnsignedLong;
+import org.hamcrest.Matcher;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-abstract class FrameMatchingHandler implements FrameHandler
+abstract class FrameMatchingHandler extends AbstractFieldAndDescriptorMatcher implements FrameHandler
 {
     private static final Logger LOGGER = LoggerFactory.getLogger(FrameMatchingHandler.class);
 
     public static int ANY_CHANNEL = -1;
 
-    private final UnsignedLong _numericDescriptor;
-    private final Symbol _symbolicDescriptor;
     private final FrameType _frameType;
 
     /** The expected channel number, or {@link #ANY_CHANNEL} if we don't care */
@@ -48,17 +47,15 @@ abstract class FrameMatchingHandler implements FrameHandler
     protected FrameMatchingHandler(FrameType frameType,
                                    int channel,
                                    UnsignedLong numericDescriptor,
-                                   Symbol symbolicDescriptor, Runnable onSuccessAction)
+                                   Symbol symbolicDescriptor, Runnable onSuccessAction,
+                                   Map<Enum<?>, Matcher<?>> fieldMatchers)
     {
+        super(numericDescriptor, symbolicDescriptor, fieldMatchers);
         _frameType = frameType;
-        _numericDescriptor = numericDescriptor;
-        _symbolicDescriptor = symbolicDescriptor;
         _expectedChannel = channel;
         _onSuccessAction = onSuccessAction;
     }
 
-    protected abstract Map<Enum<?>,Object> getReceivedFields();
-
     /**
      * Handle the supplied frame and its payload, e.g. by checking that it matches what we expect
      * @throws RuntimeException or a subclass thereof if the frame does not match what we expect
@@ -71,7 +68,7 @@ abstract class FrameMatchingHandler implements FrameHandler
     {
         if(type == _frameType.ordinal()
            && (_expectedChannel == ANY_CHANNEL || _expectedChannel == ch)
-           && (_numericDescriptor.equals(dt.getDescriptor()) || _symbolicDescriptor.equals(dt.getDescriptor()))
+           && descriptorMatches(dt.getDescriptor())
            && (dt.getDescribed() instanceof List))
         {
             _actualChannel = ch;
@@ -84,7 +81,7 @@ abstract class FrameMatchingHandler implements FrameHandler
                     "Frame was not as expected. Expected: " +
                     "type=%s, channel=%s, descriptor=%s/%s but got: " +
                     "type=%s, channel=%s, descriptor=%s",
-                    _frameType.ordinal(), expectedChannelString(), _symbolicDescriptor, _numericDescriptor,
+                    _frameType.ordinal(), expectedChannelString(), getSymbolicDescriptor(), getNumericDescriptor(),
                     type, ch, dt.getDescriptor()));
         }
     }
@@ -139,7 +136,7 @@ abstract class FrameMatchingHandler implements FrameHandler
     @Override
     public String toString()
     {
-        return "FrameMatchingHandler [_symbolicDescriptor=" + _symbolicDescriptor
+        return "FrameMatchingHandler [_symbolicDescriptor=" + getSymbolicDescriptor()
                 + ", _expectedChannel=" + expectedChannelString()
                 + "]";
     }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org