/* * 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.felix.schematizer.impl; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; import org.apache.felix.schematizer.Schema; import org.apache.felix.schematizer.impl.MyEmbeddedDTO.Alpha; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.osgi.util.converter.TypeReference; import junit.framework.AssertionFailedError; import static org.junit.Assert.*; public class SchemaTest { private SchematizerImpl schematizer; @Before public void setUp() { schematizer = new SchematizerImpl(); } @After public void tearDown() { schematizer = null; } @Test public void testValues() { final Schema s = schematizer .schematize("MyDTO", new TypeReference<MyDTO3<MyEmbeddedDTO2<String>>>(){}) .get("MyDTO"); assertNotNull(s); MyEmbeddedDTO2<String> embedded1 = new MyEmbeddedDTO2<>(); embedded1.value = "value1"; MyEmbeddedDTO2<String> embedded2 = new MyEmbeddedDTO2<>(); embedded2.value = "value2"; MyEmbeddedDTO2<String> embedded3 = new MyEmbeddedDTO2<>(); embedded3.value = "value3"; MyDTO3<MyEmbeddedDTO2<String>> dto = new MyDTO3<>(); dto.ping = "lalala"; dto.pong = Long.MIN_VALUE; dto.count = MyDTO3.Count.ONE; dto.embedded = new ArrayList<>(); dto.embedded.add(embedded1); dto.embedded.add(embedded2); dto.embedded.add(embedded3); assertEquals("lalala", s.valuesAt("/ping", dto).iterator().next()); assertEquals(Long.MIN_VALUE, s.valuesAt("/pong", dto).iterator().next()); assertEquals(MyDTO3.Count.ONE, s.valuesAt("/count", dto).iterator().next()); assertNotNull(s.valuesAt("/embedded", dto)); Object embeddedList = s.valuesAt("/embedded", dto).iterator().next(); assertNotNull(embeddedList); assertTrue(embeddedList instanceof List); assertFalse(((List<?>)embeddedList).isEmpty()); Object embeddedObject = ((List<?>)embeddedList).get(0); assertTrue(embeddedObject instanceof MyEmbeddedDTO2); assertListEquals(Arrays.asList(new String[]{"value1", "value2", "value3"}), s.valuesAt("/embedded/value", dto)); } @Test public void testEmbeddedValues() { Schema s = schematizer .schematize("MyDTO", new TypeReference<MyDTO>(){}) .get("MyDTO"); assertNotNull(s); MyEmbeddedDTO embedded = new MyEmbeddedDTO(); embedded.alpha = Alpha.A; embedded.marco = "mmmm"; embedded.polo = 66; MyDTO dto = new MyDTO(); dto.ping = "lalala"; dto.pong = Long.MIN_VALUE; dto.count = MyDTO.Count.ONE; dto.embedded = embedded; assertEquals("lalala", s.valuesAt("/ping", dto).iterator().next()); assertEquals(Long.MIN_VALUE, s.valuesAt("/pong", dto).iterator().next()); assertEquals(MyDTO.Count.ONE, s.valuesAt("/count", dto).iterator().next()); assertNotNull(s.valuesAt("/embedded", dto)); Object embeddedObject = s.valuesAt("/embedded", dto).iterator().next(); assertTrue(embeddedObject instanceof MyEmbeddedDTO); assertEquals(Alpha.A, s.valuesAt("/embedded/alpha", dto).iterator().next()); assertEquals("mmmm", s.valuesAt("/embedded/marco", dto).iterator().next()); assertEquals(66L, s.valuesAt("/embedded/polo", dto).iterator().next()); } @Test public void testNullValues() { Schema s = schematizer .schematize("MyDTO", new TypeReference<MyDTO3<MyEmbeddedDTO2<String>>>(){}) .get("MyDTO"); assertNotNull(s); MyEmbeddedDTO2<String> embedded1 = new MyEmbeddedDTO2<>(); MyEmbeddedDTO2<String> embedded2 = new MyEmbeddedDTO2<>(); MyEmbeddedDTO2<String> embedded3 = new MyEmbeddedDTO2<>(); MyDTO3<MyEmbeddedDTO2<String>> dto = new MyDTO3<>(); dto.ping = "lalala"; dto.pong = Long.MIN_VALUE; dto.count = MyDTO3.Count.ONE; dto.embedded = new ArrayList<>(); dto.embedded.add(embedded1); dto.embedded.add(embedded2); dto.embedded.add(embedded3); assertEquals("lalala", s.valuesAt("/ping", dto).iterator().next()); assertEquals(Long.MIN_VALUE, s.valuesAt("/pong", dto).iterator().next()); assertEquals(MyDTO3.Count.ONE, s.valuesAt("/count", dto).iterator().next()); assertNotNull(s.valuesAt("/embedded", dto)); assertListEquals(Arrays.asList(new String[]{null, null, null}), s.valuesAt("/embedded/value", dto)); } @SuppressWarnings( { "rawtypes", "unchecked" } ) private boolean assertListEquals(List<?> expected, Collection<?> actual) { if (expected == null || actual == null) throw new AssertionFailedError("The collection is null"); if (expected.size() != actual.size()) throw new AssertionFailedError("Expected list size of " + expected.size() + ", but was: " + actual.size()); List actualList = new ArrayList<>(); if (actual instanceof List) actualList = (List)actual; else actualList.addAll(actual); for (int i = 0; i < actual.size(); i++) assertEquals(expected.get(i), actualList.get(i)); return true; } }