blob: e785e604a0f587aad29f0b37dbe4bb6e949613cf [file] [log] [blame]
/*
* 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;
}
}