1   /*
2    * Copyright 2007 the original author or authors.
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *      http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  
17  package org.springframework.oxm.support;
18  
19  import javax.jms.BytesMessage;
20  import javax.jms.Session;
21  import javax.jms.TextMessage;
22  
23  import junit.framework.TestCase;
24  import org.easymock.MockControl;
25  
26  import org.springframework.oxm.Marshaller;
27  import org.springframework.oxm.Unmarshaller;
28  import org.springframework.xml.transform.StringResult;
29  import org.springframework.xml.transform.StringSource;
30  
31  public class MarshallingMessageConverterTest extends TestCase {
32  
33      private MarshallingMessageConverter converter;
34  
35      private MockControl marshallerControl;
36  
37      private Marshaller marshallerMock;
38  
39      private MockControl unmarshallerControl;
40  
41      private Unmarshaller unmarshallerMock;
42  
43      private MockControl sessionControl;
44  
45      private Session sessionMock;
46  
47      protected void setUp() throws Exception {
48          marshallerControl = MockControl.createControl(Marshaller.class);
49          marshallerMock = (Marshaller) marshallerControl.getMock();
50          unmarshallerControl = MockControl.createControl(Unmarshaller.class);
51          unmarshallerMock = (Unmarshaller) unmarshallerControl.getMock();
52          converter = new MarshallingMessageConverter(marshallerMock, unmarshallerMock);
53          sessionControl = MockControl.createControl(Session.class);
54          sessionMock = (Session) sessionControl.getMock();
55  
56      }
57  
58      public void testToBytesMessage() throws Exception {
59          MockControl bytesMessageControl = MockControl.createControl(BytesMessage.class);
60          BytesMessage bytesMessageMock = (BytesMessage) bytesMessageControl.getMock();
61          Object toBeMarshalled = new Object();
62  
63          sessionControl.expectAndReturn(sessionMock.createBytesMessage(), bytesMessageMock);
64          marshallerMock.marshal(toBeMarshalled, new StringResult());
65          marshallerControl.setMatcher(MockControl.ALWAYS_MATCHER);
66          bytesMessageMock.writeBytes(new byte[0]);
67          bytesMessageControl.setMatcher(MockControl.ALWAYS_MATCHER);
68  
69          marshallerControl.replay();
70          unmarshallerControl.replay();
71          sessionControl.replay();
72          bytesMessageControl.replay();
73  
74          converter.toMessage(toBeMarshalled, sessionMock);
75  
76          marshallerControl.verify();
77          unmarshallerControl.verify();
78          sessionControl.verify();
79          bytesMessageControl.verify();
80      }
81  
82      public void testFromBytesMessage() throws Exception {
83          MockControl bytesMessageControl = MockControl.createControl(BytesMessage.class);
84          BytesMessage bytesMessageMock = (BytesMessage) bytesMessageControl.getMock();
85          Object unmarshalled = new Object();
86  
87          bytesMessageControl.expectAndReturn(bytesMessageMock.getBodyLength(), 10);
88          bytesMessageMock.readBytes(new byte[0]);
89          bytesMessageControl.setMatcher(MockControl.ALWAYS_MATCHER);
90          bytesMessageControl.setReturnValue(0);
91          unmarshallerMock.unmarshal(new StringSource(""));
92          unmarshallerControl.setMatcher(MockControl.ALWAYS_MATCHER);
93          unmarshallerControl.setReturnValue(unmarshalled);
94  
95          marshallerControl.replay();
96          unmarshallerControl.replay();
97          sessionControl.replay();
98          bytesMessageControl.replay();
99  
100         Object result = converter.fromMessage(bytesMessageMock);
101         assertEquals("Invalid result", result, unmarshalled);
102 
103         marshallerControl.verify();
104         unmarshallerControl.verify();
105         sessionControl.verify();
106         bytesMessageControl.verify();
107     }
108 
109     public void testToTextMessage() throws Exception {
110         converter.setMarshalTo(MarshallingMessageConverter.MARSHAL_TO_TEXT_MESSAGE);
111         MockControl textMessageControl = MockControl.createControl(TextMessage.class);
112         TextMessage textMessageMock = (TextMessage) textMessageControl.getMock();
113         Object toBeMarshalled = new Object();
114 
115         sessionControl.expectAndReturn(sessionMock.createTextMessage(""), textMessageMock);
116         marshallerMock.marshal(toBeMarshalled, new StringResult());
117         marshallerControl.setMatcher(MockControl.ALWAYS_MATCHER);
118 
119         marshallerControl.replay();
120         unmarshallerControl.replay();
121         sessionControl.replay();
122         textMessageControl.replay();
123 
124         converter.toMessage(toBeMarshalled, sessionMock);
125 
126         marshallerControl.verify();
127         unmarshallerControl.verify();
128         sessionControl.verify();
129         textMessageControl.verify();
130     }
131 
132     public void testFromTextMessage() throws Exception {
133         MockControl textMessageControl = MockControl.createControl(TextMessage.class);
134         TextMessage textMessageMock = (TextMessage) textMessageControl.getMock();
135         Object unmarshalled = new Object();
136 
137         unmarshallerMock.unmarshal(new StringSource(""));
138         unmarshallerControl.setMatcher(MockControl.ALWAYS_MATCHER);
139         unmarshallerControl.setReturnValue(unmarshalled);
140         textMessageControl.expectAndReturn(textMessageMock.getText(), "");
141 
142         marshallerControl.replay();
143         unmarshallerControl.replay();
144         sessionControl.replay();
145         textMessageControl.replay();
146 
147         Object result = converter.fromMessage(textMessageMock);
148         assertEquals("Invalid result", result, unmarshalled);
149 
150         marshallerControl.verify();
151         unmarshallerControl.verify();
152         sessionControl.verify();
153         textMessageControl.verify();
154     }
155 
156 }