/**
* Licensed to The Apereo Foundation under one or more contributor license
* agreements. See the NOTICE file distributed with this work for additional
* information regarding copyright ownership.
*
*
* The Apereo Foundation licenses this file to you under the Educational
* Community 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://opensource.org/licenses/ecl2.txt
*
* 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.opencastproject.assetmanager.api.test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertThat;
import org.opencastproject.assetmanager.api.Value;
import org.opencastproject.assetmanager.api.Version;
import com.entwinemedia.fn.Fn;
import com.entwinemedia.fn.Fns;
import org.hamcrest.Matchers;
import org.junit.Assert;
import org.junit.Test;
import java.util.Date;
/**
* Test the {@link org.opencastproject.assetmanager.api.Value} type.
* <p>
* Not in the same package as {@link org.opencastproject.assetmanager.api.Value}
* on purpose to showcase method visibility.
*/
public class ValueTest {
@Test
public void testGet() throws Exception {
Assert.assertEquals("a value", Value.mk("a value").get(Value.STRING));
assertThat(Value.mk(1511L).get(Value.LONG), Matchers.instanceOf(Long.class));
assertEquals(Value.mk(10L).get(), new Long(10L));
}
@Test(expected = java.lang.RuntimeException.class)
public void testGetTypesDoNotMatch() throws Exception {
Value.mk(1511L).get(Value.STRING);
}
@Test
public void testDecompose() {
final Object value = Value.mk(1511L).<Object>decompose(Fns.<String>id(), Fns.<Date>id(), Fns.<Long>id(), Fns.<Boolean>id(), Fns.<Version>id());
assertEquals(1511L, value);
final String valueAsString = Value.mk(1511L).decompose(
Value.<String>doNotMatch(),
asString.o(Fns.<Date>id()),
asString.o(Fns.<Long>id()),
Value.<String>doNotMatch(),
Value.<String>doNotMatch());
assertEquals("1511", valueAsString);
}
@Test(expected = java.lang.Error.class)
public void testDecomposeNoMatch() {
Value.mk(new Date()).decompose(
Value.doNotMatch(),
Value.doNotMatch(),
Value.doNotMatch(),
Value.doNotMatch(),
Value.doNotMatch());
}
@Test
public void testMkGeneric() {
assertEquals("sl", Value.mk(Value.STRING, "sl").get());
new Value.StringValue("23");
}
@Test
public void testEquality() {
assertEquals(Value.mk(true), Value.mk(true));
assertEquals(Value.mk(12L), Value.mk(12L));
assertEquals(Value.mk("test"), Value.mk("test"));
final Date now = new Date();
assertEquals(Value.mk(now), Value.mk(now));
assertNotEquals(Value.mk(true), Value.mk(false));
assertNotEquals(Value.mk(11L), Value.mk(15L));
assertNotEquals(Value.mk("test"), Value.mk("teest"));
assertNotEquals(Value.mk(now), Value.mk(new Date(0)));
}
private static final Fn<Object, String> asString = new Fn<Object, String>() {
@Override public String apply(Object o) {
return o.toString();
}
};
}