package org.odata4j.test.unit.core; import java.math.BigDecimal; import java.util.HashMap; import java.util.Map; import junit.framework.Assert; import org.junit.Test; import org.odata4j.core.NamedValue; import org.odata4j.core.OEntityKey; import org.odata4j.core.OEntityKey.KeyType; import org.odata4j.core.OProperties; public class OEntityKeyTest { @Test public void parseTests() { Assert.assertEquals(k(1), OEntityKey.parse("(1)")); Assert.assertEquals(k(1), OEntityKey.parse("1")); Assert.assertEquals(k(1L), OEntityKey.parse("(1L)")); Assert.assertEquals(k("a"), OEntityKey.parse("('a')")); Assert.assertEquals(k("a"), OEntityKey.parse("(s='a')")); Assert.assertEquals(k("PartitionKey", "", "RowKey", "1"), OEntityKey.parse("(PartitionKey='',RowKey='1')")); Assert.assertEquals(k(new BigDecimal("43.9000")), OEntityKey.parse("(43.9000M)")); } @Test public void createTests() { sk("1", 1); sk("1L", 1L); sk("1", (short) 1); sk("-5", (byte) -5); sk("true", true); sk("'1'", "1"); sk("'1'", '1'); sk("'quo''te'", "quo'te"); sk("1", OProperties.int32("n", 1), 1); Assert.assertEquals(k(1).hashCode(), k(1).hashCode()); Assert.assertEquals(k(1), k(1)); ck("a=1,b=2", OProperties.int32("a", 1), OProperties.int32("b", 2)); ck("a=1,b=2", k("a", 1, "b", 2)); i((Object[]) null); i(); i(1, 1); i(OProperties.int32("a", 1), 1); i(OProperties.int32("a", 1), null); i(OProperties.int32("a", 1), OProperties.string("b", null)); i(OProperties.int32("a", 1), OProperties.int32(null, 2)); i(OProperties.int32("a", 1), OProperties.int32("", 2)); i(new StringBuilder()); } private static void i(Object... values) { try { OEntityKey.create(values); } catch (IllegalArgumentException e) { // expected return; } Assert.fail("Did not throw expected IllegalArgumentException"); } private static OEntityKey k(Object value) { return OEntityKey.create(value); } private static OEntityKey k(Object... nameValues) { Map<String, Object> rt = new HashMap<String, Object>(); for (int i = 0; i < nameValues.length; i += 2) { String name = (String) nameValues[i]; Object value = nameValues[i + 1]; rt.put(name, value); } return OEntityKey.create(rt); } private static void ck(String keyString, NamedValue<?>... nvs) { OEntityKey k = OEntityKey.create((Object[]) nvs); ck(keyString, k); } private static void ck(String keyString, OEntityKey k) { Assert.assertNotNull(k); Assert.assertTrue(k.getKeyType() == KeyType.COMPLEX); Assert.assertEquals("(" + keyString + ")", k.toKeyString()); } private static void sk(String keyString, Object singleValue) { sk(keyString, singleValue, singleValue); } private static void sk(String keyString, Object singleValueInput, Object singleValue) { OEntityKey k = k(singleValueInput); Assert.assertNotNull(k); Assert.assertTrue(k.getKeyType() == KeyType.SINGLE); Assert.assertEquals(singleValue, k.asSingleValue()); Assert.assertEquals("(" + keyString + ")", k.toKeyString()); } }