1   package com.diasparsoftware.javax.jms.test;
2   
3   import java.util.*;
4   
5   import javax.jms.*;
6   
7   import junit.framework.TestCase;
8   
9   import com.diasparsoftware.javax.jms.*;
10  import com.sun.jms.MapMessageImpl;
11  
12  public class BuildMapMessageTest extends TestCase {
13      private MapMessageImpl mapMessage;
14      private MessageBuilder messageBuilder;
15  
16      protected void setUp() throws Exception {
17          mapMessage = new MapMessageImpl();
18          messageBuilder = new MessageBuilder();
19      }
20  
21      public void testEmptyMessage() throws Exception {
22          Map empty = Collections.EMPTY_MAP;
23          messageBuilder.buildMapMessage(mapMessage, empty);
24          assertMessageEmpty(mapMessage);
25      }
26  
27      public void testSingletonMap() throws Exception {
28          Map singleton = Collections.singletonMap("a", new Long(762));
29          messageBuilder.buildMapMessage(mapMessage, singleton);
30          assertEquals(762, mapMessage.getLong("a"));
31          assertEquals(1, countBodyContentItems(mapMessage));
32      }
33  
34      public void testAllSupportedTypes() throws Exception {
35          Map content = new HashMap() {
36              {
37                  put("a", new Integer(0));
38                  put("b", new Long(5678));
39                  put("c", new Double(3.142));
40                  put("d", new Float(2.718));
41                  put("e", new Character('e'));
42                  put("f", new Byte((byte) 0xA3));
43                  put("g", "hello");
44              }
45          };
46          
47          messageBuilder.buildMapMessage(mapMessage, content);
48          assertEquals(0, mapMessage.getInt("a"));
49          assertEquals(5678, mapMessage.getLong("b"));
50          assertEquals(3.142d, mapMessage.getDouble("c"), 0.0001d);
51          assertEquals(2.718f, mapMessage.getFloat("d"), 0.0001f);
52          assertEquals('e', mapMessage.getChar("e"));
53          assertEquals((byte) 0xA3, mapMessage.getByte("f"));
54          assertEquals("hello", mapMessage.getString("g"));
55  
56          assertEquals(7, countBodyContentItems(mapMessage));
57      }
58  
59      public void testGenericObject() throws Exception {
60          Map singleton = Collections.singletonMap("b", new ArrayList());
61          try {
62              messageBuilder.buildMapMessage(mapMessage, singleton);
63              fail("Added a generic object to a MapMessage!");
64          }
65          catch (MessagingException expected) {
66              Throwable throwable = expected.getCause();
67              assertTrue(
68                  "Wrong exception type",
69                  throwable instanceof MessageFormatException);
70          }
71      }
72  
73      private int countBodyContentItems(MapMessage mapMessage)
74          throws JMSException {
75  
76          int count = 0;
77          Enumeration mapNames = mapMessage.getMapNames();
78          while (mapNames.hasMoreElements()) {
79              count++;
80              mapNames.nextElement();
81          }
82  
83          return count;
84      }
85  
86      private void assertMessageEmpty(MapMessage mapMessage)
87          throws JMSException {
88  
89          assertEquals(
90              "MapMessage is not empty.",
91              0,
92              countBodyContentItems(mapMessage));
93      }
94  }