/*
* Copyright (c) 2011-2015 Spotify AB
*
* Licensed 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 com.spotify.asyncdatastoreclient;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;
import com.google.protobuf.ByteString;
import org.junit.Test;
import java.util.Date;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertTrue;
public class ValueTest {
@Test
public void testValueBuilder() throws Exception {
final Value value1 = Value.from("test").build();
assertEquals("test", value1.getString());
final Value value2 = Value.from(12345).build();
assertEquals(12345, value2.getInteger());
final Value value3 = Value.from(123456789L).build();
assertEquals(123456789L, value3.getInteger());
final Value value4 = Value.from(1.234).build();
assertEquals(1.234, value4.getDouble(), 0.01);
final Value value5 = Value.from(1.234f).build();
assertEquals(1.234, value5.getDouble(), 0.01);
final Value value6 = Value.from(true).build();
assertTrue(value6.getBoolean());
final Date now = new Date();
final Value value7 = Value.from(now).build();
assertEquals(now, value7.getDate());
final ByteString blob = ByteString.copyFrom(new byte[] {1, 2, 3, 4, 5, 6, 7, 8, 9});
final Value value8 = Value.from(blob).build();
assertTrue(blob.equals(value8.getBlob()));
final Entity entity9 = Entity.builder("employee", 1234567L)
.property("fullname", "Fred Blinge")
.build();
final Value value9 = Value.from(entity9).build();
assertEquals("Fred Blinge", value9.getEntity().getString("fullname"));
final Key key10 = Key.builder("employee", 1234567L).build();
final Value value10 = Value.from(key10).build();
assertEquals(1234567L, value10.getKey().getId().longValue());
final Value value11 = Value.builder(ImmutableList.of("fred", "jack")).build();
assertTrue(Iterables.elementsEqual(value11.getList(String.class), ImmutableList.of("fred", "jack")));
final Value value12 = Value.builder(ImmutableList.of("fred", "jack")).build();
assertTrue(Iterables.elementsEqual(value12.getList(), ImmutableList.of(
Value.from("fred").build(), Value.from("jack").build())));
final Value value13 = Value.from("indexed").indexed(true).build();
assertTrue(value13.isIndexed());
final Value value14 = Value.from("not_indexed").indexed(false).build();
assertFalse(value14.isIndexed());
}
@Test(expected=IllegalArgumentException.class)
public void testInvalidType() {
Value.builder('a').build();
}
@Test(expected=IllegalArgumentException.class)
public void testInvalidListType() {
Value.builder(ImmutableList.of('a')).build();
}
@Test
public void testEquals() throws Exception {
final Value value1 = Value.from("test").build();
final Value value2 = Value.from("test").build();
assertTrue(value1.equals(value2));
assertTrue(value2.equals(value1));
final Value value3 = Value.from(1.234).build();
final Value value4 = Value.from(1.234).build();
assertTrue(value3.equals(value4));
assertTrue(value4.equals(value3));
final Value value5 = Value.builder(ImmutableList.of("fred", "jack")).build();
final Value value6 = Value.builder(ImmutableList.of("fred", "jack")).build();
assertTrue(value5.equals(value6));
assertTrue(value6.equals(value5));
final Value value7 = Value.from("test").indexed(true).build();
final Value value8 = Value.from("test").indexed(true).build();
assertTrue(value7.equals(value8));
assertTrue(value8.equals(value7));
final Value value9 = Value.from("test").indexed(true).build();
final Value value10 = Value.from("test").indexed(false).build();
assertFalse(value9.equals(value10));
assertFalse(value10.equals(value9));
final Value value11 = Value.from(1.234).build();
final Value value12 = Value.builder(ImmutableList.of("fred", "jack")).build();
assertFalse(value11.equals(value12));
assertFalse(value12.equals(value11));
}
@Test
public void testHashCode() throws Exception {
final Value value1 = Value.from("test").build();
final Value value2 = Value.from("test").build();
assertEquals(value1.hashCode(), value2.hashCode());
final Value value3 = Value.from("test").indexed(false).build();
final Value value4 = Value.from("test").indexed(true).build();
assertNotEquals(value3.hashCode(), value4.hashCode());
}
@Test
public void testToString() throws Exception {
final Value value1 = Value.from("test").build();
assertEquals("test", value1.toString());
final Value value2 = Value.from(1.234).build();
assertEquals("1.234", value2.toString());
final Value value3 = Value.from(false).build();
assertEquals("false", value3.toString());
final Entity entity4 = Entity.builder("employee", 1234567L)
.property("fullname", "Fred Blinge")
.build();
final Value value4 = Value.from(entity4).build();
assertEquals("{fullname:Fred Blinge}", value4.toString());
final Key key5 = Key.builder("employee", 1234567L).build();
final Value value5 = Value.from(key5).build();
assertEquals("{employee:1234567}", value5.toString());
final Value value6 = Value.builder(ImmutableList.of("fred", "jack")).build();
assertEquals("[fred, jack]", value6.toString());
}
@Test
public void testTypeSafeBuilder() {
assertTrue(Value.from(Value.from("hello").build(), Value.from("world").build())
.build().isList());
assertTrue(Value
.from(ImmutableList.of(Value.from("hello").build(), Value.from("world").build()))
.build().isList());
assertTrue(Value.from(Key.builder("foo").build()).build().isKey());
assertTrue(Value.from("foo").build().isString());
assertTrue(Value.from(12).build().isInteger());
assertTrue(Value.from(12L).build().isInteger());
assertTrue(Value.from(new Date(42L)).build().isDate());
assertTrue(Value.from(12D).build().isDouble());
assertTrue(Value.from(12F).build().isDouble());
assertTrue(Value.from(true).build().isBoolean());
assertTrue(Value.from(ByteString.copyFrom(new byte[0])).build().isBlob());
assertTrue(Value.from(Entity.builder().build()).build().isEntity());
}
}