blob: c432366bae0b22e753c0a45cc3c8fffd144cb597 [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.tamaya.spi;
import org.junit.Test;
import java.util.Iterator;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
/**
* Tests for {@link ListValue}.
*/
public class ListValueTest {
@Test
public void getCreation() {
ListValue lv = PropertyValue.createList();
assertThat(lv).isNotNull();
lv = PropertyValue.createList("k");
assertThat(lv).isNotNull();
assertThat("k").isEqualTo(lv.getKey());
}
@Test
public void getValueType() {
assertThat(PropertyValue.ValueType.ARRAY).isEqualTo(PropertyValue.createList().getValueType());
}
@Test
public void getIndex() {
ListValue lv = PropertyValue.createList();
PropertyValue val = PropertyValue.createValue("k", "v");
lv.add(val);
PropertyValue val2 = PropertyValue.createValue("k2", "v2");
lv.add(val2);
assertThat(0).isEqualTo(lv.getIndex(val));
assertThat(1).isEqualTo(lv.getIndex(val2));
PropertyValue val3 = PropertyValue.createValue("k3", "v");
assertThat(-1).isEqualTo(lv.getIndex(val3));
}
@Test
public void getSize() {
ListValue lv = PropertyValue.createList();
assertThat(0).isEqualTo(lv.getSize());
PropertyValue val = PropertyValue.createValue("k", "v");
lv.add(val);
assertThat(1).isEqualTo(lv.getSize());
PropertyValue val2 = PropertyValue.createValue("k", "v");
lv.add(val2);
assertThat(2).isEqualTo(lv.getSize());
}
@Test
public void getList() {
ListValue lv = PropertyValue.createList();
PropertyValue val = PropertyValue.createValue("k", "v");
lv.add(val);
PropertyValue val2 = PropertyValue.createValue("k", "v");
lv.add(val2);
assertThat(lv.getValues()).isNotNull().hasSize(2);
assertThat(val).isEqualTo(lv.getValues().get(0));
assertThat(val2).isEqualTo(lv.getValues().get(1));
lv.add(val2);
assertThat(lv.getValues()).isNotNull().hasSize(2);
assertThat(val).isEqualTo(lv.getValues().get(0));
assertThat(val2).isEqualTo(lv.getValues().get(1));
}
@Test
public void getList_WithPredicate() {
ListValue lv = PropertyValue.createList();
PropertyValue val = PropertyValue.createValue("k1", "v");
lv.add(val);
PropertyValue val2 = PropertyValue.createValue("k2", "v");
lv.add(val2);
List<PropertyValue> result = lv.getValues(
pv -> "k1".equals(pv.getKey())
);
assertThat(result).isNotNull().hasSize(1);
assertThat(val).isEqualTo(result.get(0));
}
@Test
public void iterator() {
ListValue lv = PropertyValue.createList();
PropertyValue val = PropertyValue.createValue("k", "v");
PropertyValue val2 = PropertyValue.createValue("k", "v");
lv.add(val);
lv.add(val2);
Iterator iter = lv.iterator();
assertThat(iter).isNotNull();
assertThat(iter.hasNext()).isTrue();
assertThat(val).isEqualTo(iter.next());
assertThat(iter.hasNext()).isTrue();
assertThat(val2).isEqualTo(iter.next());
assertThat(iter.hasNext()).isFalse();
}
@Test
public void add() {
ListValue lv = PropertyValue.createList();
PropertyValue val = PropertyValue.createValue("k", "v");
lv.add(val);
lv.add(val);
lv.add(val);
assertThat(1).isEqualTo(lv.getSize());
assertThat(val).isEqualTo(lv.get(0));
}
@Test
public void addValue_Value() {
ListValue lv = PropertyValue.createList();
lv.addValue("v");
assertThat(1).isEqualTo(lv.getSize());
assertThat("v").isEqualTo(lv.get(0).getValue());
lv.addValue("v2");
assertThat(2).isEqualTo(lv.getSize());
assertThat("v2").isEqualTo(lv.get(1).getValue());
lv.addValue("v");
assertThat(3).isEqualTo(lv.getSize());
assertThat("v").isEqualTo(lv.get(2).getValue());
}
@Test
public void addValue_KeyValue() {
ListValue lv = PropertyValue.createList();
lv.addValue("k", "v");
assertThat(1).isEqualTo(lv.getSize());
assertThat("v").isEqualTo(lv.get(0).getValue());
assertThat("k").isEqualTo(lv.get(0).getKey());
lv.addValue("k2", "v2");
assertThat(2).isEqualTo(lv.getSize());
assertThat("v2").isEqualTo(lv.get(1).getValue());
assertThat("k2").isEqualTo(lv.get(1).getKey());
lv.addValue("k", "v");
assertThat(3).isEqualTo(lv.getSize());
assertThat("v").isEqualTo(lv.get(2).getValue());
assertThat("k").isEqualTo(lv.get(2).getKey());
}
@Test
public void addValues() {
ListValue lv = PropertyValue.createList();
lv.addValues("v", "v1", "v");
assertThat(3).isEqualTo(lv.getSize());
assertThat("v").isEqualTo(lv.get(0).getValue());
assertThat("v1").isEqualTo(lv.get(1).getValue());
assertThat("v").isEqualTo(lv.get(2).getValue());
}
@Test
public void addObject() {
ListValue lv = PropertyValue.createList();
lv.addObject();
assertThat(1).isEqualTo(lv.getSize());
ObjectValue ov = (ObjectValue)lv.get(0);
}
@Test
public void addObject_Key() {
ListValue lv = PropertyValue.createList();
lv.addObject("key");
assertThat(1).isEqualTo(lv.getSize());
ObjectValue ov = (ObjectValue)lv.get(0);
assertThat("key").isEqualTo(ov.getKey());
}
@Test
public void addList() {
ListValue lv = PropertyValue.createList();
lv.addList();
assertThat(1).isEqualTo(lv.getSize());
ListValue ov = (ListValue)lv.get(0);
assertThat("").isEqualTo(ov.getKey());
}
@Test
public void addList_Key() {
ListValue lv = PropertyValue.createList();
lv.addList("key");
assertThat(1).isEqualTo(lv.getSize());
ListValue ov = (ListValue)lv.get(0);
assertThat("key").isEqualTo(ov.getKey());
}
@Test
public void getValues() {
ListValue lv = PropertyValue.createList();
lv.addList("list");
lv.addObject("object");
assertThat(lv.getValues("")).isNotNull().hasSize(0);
assertThat(lv.getValues("list")).hasSize(1);
assertThat(lv.getValues("object")).hasSize(1);
}
@Test
public void toPropertyValue() {
ListValue lv = PropertyValue.createList("foo");
lv.addList("list");
PropertyValue pv = lv.toPropertyValue();
assertThat(pv).isNotNull();
assertThat(pv.getKey()).isEqualTo(lv.getKey());
}
@Test
public void toObjectValue() {
ListValue lv = PropertyValue.createList("foo");
lv.addList("list").setValue("a");
ObjectValue ov = lv.toObjectValue();
assertThat(ov).isNotNull();
assertThat(ov.getKey()).isEqualTo(lv.getKey());
assertThat(ov.getValue("list[0]")).isNotNull();
assertThat(lv.getLists("list").get(0).getValue()).isEqualTo(ov.getValue("list[0]").getValue());
}
@Test
public void toListValue() {
ListValue lv = PropertyValue.createList("foo");
lv.addList("list");
ListValue lv2 = lv.toListValue();
assertThat(lv == lv2).isTrue();
}
@Test
public void mutable() {
ListValue lv = PropertyValue.createList("foo");
lv.addList("list");
assertThat(lv.isImmutable()).isFalse();
ListValue lv2 = lv.mutable();
assertThat(lv2.isImmutable()).isFalse();
assertThat(lv == lv2).isTrue();
}
@Test
public void deepClone() {
ListValue lv1 = PropertyValue.createList("foo");
lv1.addList("list");
ListValue lv2 = lv1.deepClone();
assertThat(lv1.getValues()!=lv2.getValues()).isTrue();
assertThat(lv1.getMeta()!=lv2.getMeta()).isTrue();
assertThat(lv1.equals(lv2)).isTrue();
assertThat(lv1.iterator().next()!=lv2.iterator().next()).isTrue();
}
@Test
public void equals() {
ListValue lv1 = PropertyValue.createList("foo");
lv1.addList("list");
ListValue lv2 = PropertyValue.createList("foo");
lv2.addList("list");
assertThat(lv1.equals(lv2)).isTrue();
}
@Test
public void testHashCode() {
ListValue lv1 = PropertyValue.createList("foo");
lv1.addList("list");
ListValue lv2 = PropertyValue.createList("foo");
lv2.addList("list");
assertThat(lv1.hashCode() == lv2.hashCode()).isTrue();
}
@Test
public void testToString() {
ListValue lv1 = PropertyValue.createList("foo");
String toString = lv1.toString();
assertThat(toString).isNotNull();
lv1.addList("list");
toString = lv1.toString();
assertThat(toString).isNotNull();
lv1.addObject("object");
toString = lv1.toString();
assertThat(toString).isNotNull();
lv1.addValue("valueKey");
toString = lv1.toString();
assertThat(toString).isNotNull();
assertThat("PropertyValue[ARRAY]{'foo', size='3'}").isEqualTo(toString);
}
}