package com.juick.tests; import com.fasterxml.jackson.databind.ObjectMapper; import com.juick.Message; import com.juick.util.DateFormattersHolder; import org.apache.commons.lang3.CharEncoding; import org.json.JSONObject; import org.junit.Test; import org.w3c.dom.Document; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.xml.sax.SAXException; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.StringWriter; import java.text.ParseException; import java.util.Date; import static org.junit.Assert.assertEquals; public class MessageTests { @Test public void messageParserSerializer() throws ParseException, ParserConfigurationException, IOException, SAXException, JAXBException { Message msg = new Message(); msg.parseTags("test test" + (char) 0xA0 + "2 test3"); assertEquals("First tag must be", "test", msg.getTags().get(0).getName()); assertEquals("Third tag must be", "test3", msg.getTags().get(2).getName()); assertEquals("Count of tags must be", 3, msg.getTags().size()); Date currentDate = new Date(); msg.setDate(currentDate); ObjectMapper serializer = new ObjectMapper(); String jsonMessage = serializer.writeValueAsString(msg); JSONObject jsonObject = new JSONObject(jsonMessage); assertEquals("date should be in timestamp field", DateFormattersHolder.getMessageFormatterInstance().format(currentDate), jsonObject.getString("timestamp")); JAXBContext context = JAXBContext .newInstance(Message.class); Marshaller m = context.createMarshaller(); StringWriter sw = new StringWriter(); m.marshal(msg, sw); DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse(new ByteArrayInputStream(sw.toString().getBytes(CharEncoding.UTF_8))); Node juickNode = doc.getElementsByTagName("juick").item(0); NamedNodeMap attrs = juickNode.getAttributes(); assertEquals("date should be in ts field", DateFormattersHolder.getMessageFormatterInstance().format(currentDate), attrs.getNamedItem("ts").getNodeValue()); } }