/* * 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.sling.jms; import org.apache.sling.jms.impl.Json; import org.junit.Before; import org.junit.Test; import java.util.*; import org.junit.Assert; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** */ public class JsonTest { private static final Logger LOGGER = LoggerFactory.getLogger(JsonTest.class); private Map<String, Object> testMap; @Before public void setup() { testMap = JsonTest.createTestMap(); } public static Map<String,Object> createTestMap() { Map<String, Object> testMap = new HashMap<String, Object>(); Map<String, Object> innerTestMap = new HashMap<String, Object>(); Map<String, Object> inner2TestMap = new HashMap<String, Object>(); Map<String, Object> listMap = new HashMap<String, Object>(); listMap.put("listMaplong",100L); listMap.put("listMapboolean",true); listMap.put("listMapstring","A String"); listMap.put("listMapdouble",1.001D); testMap.put("long",100L); testMap.put("boolean",true); testMap.put("string","A String"); testMap.put("double",1.001D); testMap.put("map",innerTestMap); innerTestMap.put("innerlong",100L); innerTestMap.put("innerboolean",true); innerTestMap.put("innerstring","A String"); innerTestMap.put("innerdouble",1.001D); innerTestMap.put("innermap",inner2TestMap); inner2TestMap.put("inner2long",100L); inner2TestMap.put("inner3boolean",true); inner2TestMap.put("inner3string","A String"); inner2TestMap.put("inner3double",1.001D); inner2TestMap.put("inner3list", Arrays.asList("string1","string2", "string2")); inner2TestMap.put("inner3listofMaps", Arrays.asList(listMap, listMap, listMap)); return testMap; } @Test public void testJson() throws Exception { checkEquals(testMap, Json.toMap(Json.toJson(testMap))); } public static void checkEquals(Map<String, Object> expected, Map<String, Object> actual) { LOGGER.info("Expected {}", expected); LOGGER.info("Actual {}", actual); for(Map.Entry<String, Object> e : expected.entrySet()) { if ( e.getValue() instanceof Map ) { checkEquals((Map<String, Object>) e.getValue(), (Map<String, Object>) actual.get(e.getKey())); } else if ( e.getValue() instanceof List ) { checkEquals((List<Object>) e.getValue(), (List<Object>) actual.get(e.getKey())); } else { if ( e.getValue() == null && actual.get(e.getKey()) != null ) { LOGGER.info("Expected value for {} is null but actual is {} ", e.getKey(), actual.get(e.getKey())); } if ( e.getValue() != null && !e.getValue().equals(actual.get(e.getKey()))) { LOGGER.info("Expected value for {} is {} but actual is {}", new Object[]{e.getKey(), e.getValue(), actual.get(e.getKey())}); LOGGER.info("Expected value for {} is {} but actual is {}", new Object[]{e.getKey(), e.getValue().getClass(), actual.get(e.getKey()).getClass()}); } Assert.assertEquals(e.getValue(), actual.get(e.getKey())); } } LOGGER.info("Maps equal ok"); } private static void checkEquals(List<Object> expected, List<Object> actual) { Assert.assertEquals(expected.size(), actual.size()); for (int i = 0; i < expected.size(); i++) { Object e = expected.get(i); Object a = actual.get(i); if ( e instanceof Map ) { checkEquals((Map<String, Object>) e, (Map<String, Object>) a); } else if ( e instanceof List ) { checkEquals((List<Object>) e, (List<Object>) a); } else { Assert.assertEquals(e,a); } } } }