FunctionsTest.java revision 1d580d0f6ee4f21eb309ba7b509d2c6d671c4044
11d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/* 21d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Copyright (C) 2005 The Guava Authors 31d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 41d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Licensed under the Apache License, Version 2.0 (the "License"); 51d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * you may not use this file except in compliance with the License. 61d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * You may obtain a copy of the License at 71d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 81d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * http://www.apache.org/licenses/LICENSE-2.0 91d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Unless required by applicable law or agreed to in writing, software 111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * distributed under the License is distributed on an "AS IS" BASIS, 121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * See the License for the specific language governing permissions and 141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * limitations under the License. 151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpackage com.google.common.base; 181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtCompatible; 201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtIncompatible; 211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.ImmutableMap; 221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.Maps; 231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.testing.EqualsTester; 241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.testing.NullPointerTester; 251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.testing.SerializableTester; 261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport junit.framework.TestCase; 281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.io.Serializable; 301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Map; 311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/** 331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Tests for {@link Functions}. 341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Mike Bostock 361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Vlad Patryshev 371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert@GwtCompatible(emulated = true) 391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic class FunctionsTest extends TestCase { 401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testIdentity_same() { 421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Function<String, String> identity = Functions.identity(); 431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(identity.apply(null)); 441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame("foo", identity.apply("foo")); 451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testIdentity_notSame() { 481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Function<Long, Long> identity = Functions.identity(); 491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNotSame(new Long(135135L), identity.apply(new Long(135135L))); 501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("SerializableTester") 531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testIdentitySerializable() { 541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert checkCanReserializeSingleton(Functions.identity()); 551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testToStringFunction_apply() { 581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("3", Functions.toStringFunction().apply(3)); 591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("hiya", Functions.toStringFunction().apply("hiya")); 601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("I'm a string", 611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Functions.toStringFunction().apply( 621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new Object() { 631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public String toString() { 641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return "I'm a string"; 651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert })); 671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Functions.toStringFunction().apply(null); 691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("expected NullPointerException"); 701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException e) { 711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // expected 721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("SerializableTester") 761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testToStringFunctionSerializable() { 771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert checkCanReserializeSingleton(Functions.toStringFunction()); 781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("NullPointerTester") 811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testNullPointerExceptions() throws Exception { 821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert NullPointerTester tester = new NullPointerTester(); 831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert tester.testAllPublicStaticMethods(Functions.class); 841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testForMapWithoutDefault() { 871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map<String, Integer> map = Maps.newHashMap(); 881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put("One", 1); 891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put("Three", 3); 901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put("Null", null); 911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Function<String, Integer> function = Functions.forMap(map); 921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, function.apply("One").intValue()); 941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(3, function.apply("Three").intValue()); 951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(function.apply("Null")); 961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert function.apply("Two"); 991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 1001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) { 1011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new EqualsTester() 1041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addEqualityGroup(function, Functions.forMap(map)) 1051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addEqualityGroup(Functions.forMap(map, 42)) 1061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .testEquals(); 1071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("SerializableTester") 1101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testForMapWithoutDefaultSerializable() { 1111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert checkCanReserialize(Functions.forMap(ImmutableMap.of(1, 2))); 1121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testForMapWithDefault() { 1151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map<String, Integer> map = Maps.newHashMap(); 1161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put("One", 1); 1171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put("Three", 3); 1181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put("Null", null); 1191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Function<String, Integer> function = Functions.forMap(map, 42); 1201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, function.apply("One").intValue()); 1221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(42, function.apply("Two").intValue()); 1231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(3, function.apply("Three").intValue()); 1241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(function.apply("Null")); 1251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new EqualsTester() 1271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addEqualityGroup(function, Functions.forMap(map, 42)) 1281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addEqualityGroup(Functions.forMap(map)) 1291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addEqualityGroup(Functions.forMap(map, null)) 1301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addEqualityGroup(Functions.forMap(map, 43)) 1311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .testEquals(); 1321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("SerializableTester") 1351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testForMapWithDefault_includeSerializable() { 1361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map<String, Integer> map = Maps.newHashMap(); 1371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put("One", 1); 1381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put("Three", 3); 1391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Function<String, Integer> function = Functions.forMap(map, 42); 1401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, function.apply("One").intValue()); 1421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(42, function.apply("Two").intValue()); 1431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(3, function.apply("Three").intValue()); 1441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new EqualsTester() 1461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addEqualityGroup( 1471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert function, 1481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Functions.forMap(map, 42), 1491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SerializableTester.reserialize(function)) 1501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addEqualityGroup(Functions.forMap(map)) 1511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addEqualityGroup(Functions.forMap(map, null)) 1521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addEqualityGroup(Functions.forMap(map, 43)) 1531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .testEquals(); 1541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("SerializableTester") 1571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testForMapWithDefaultSerializable() { 1581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert checkCanReserialize(Functions.forMap(ImmutableMap.of(1, 2), 3)); 1591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testForMapWithDefault_null() { 1621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMap<String, Integer> map = ImmutableMap.of("One", 1); 1631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Function<String, Integer> function = Functions.forMap(map, null); 1641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals((Integer) 1, function.apply("One")); 1661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(function.apply("Two")); 1671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // check basic sanity of equals and hashCode 1691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new EqualsTester() 1701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addEqualityGroup(function) 1711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addEqualityGroup(Functions.forMap(map, 1)) 1721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .testEquals(); 1731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("SerializableTester") 1761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testForMapWithDefault_null_compareWithSerializable() { 1771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMap<String, Integer> map = ImmutableMap.of("One", 1); 1781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Function<String, Integer> function = Functions.forMap(map, null); 1791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals((Integer) 1, function.apply("One")); 1811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(function.apply("Two")); 1821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // check basic sanity of equals and hashCode 1841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new EqualsTester() 1851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addEqualityGroup(function, SerializableTester.reserialize(function)) 1861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addEqualityGroup(Functions.forMap(map, 1)) 1871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .testEquals(); 1881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testForMapWildCardWithDefault() { 1911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map<String, Integer> map = Maps.newHashMap(); 1921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put("One", 1); 1931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put("Three", 3); 1941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Number number = Double.valueOf(42); 1951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Function<String, Number> function = Functions.forMap(map, number); 1961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, function.apply("One").intValue()); 1981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(number, function.apply("Two")); 1991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(3L, function.apply("Three").longValue()); 2001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testComposition() { 2031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map<String, Integer> mJapaneseToInteger = Maps.newHashMap(); 2041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert mJapaneseToInteger.put("Ichi", 1); 2051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert mJapaneseToInteger.put("Ni", 2); 2061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert mJapaneseToInteger.put("San", 3); 2071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Function<String, Integer> japaneseToInteger = 2081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Functions.forMap(mJapaneseToInteger); 2091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map<Integer, String> mIntegerToSpanish = Maps.newHashMap(); 2111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert mIntegerToSpanish.put(1, "Uno"); 2121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert mIntegerToSpanish.put(3, "Tres"); 2131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert mIntegerToSpanish.put(4, "Cuatro"); 2141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Function<Integer, String> integerToSpanish = 2151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Functions.forMap(mIntegerToSpanish); 2161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Function<String, String> japaneseToSpanish = 2181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Functions.compose(integerToSpanish, japaneseToInteger); 2191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("Uno", japaneseToSpanish.apply("Ichi")); 2211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 2221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert japaneseToSpanish.apply("Ni"); 2231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 2241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException e) { 2251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("Tres", japaneseToSpanish.apply("San")); 2271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 2281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert japaneseToSpanish.apply("Shi"); 2291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 2301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException e) { 2311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new EqualsTester() 2341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addEqualityGroup( 2351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert japaneseToSpanish, 2361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Functions.compose(integerToSpanish, japaneseToInteger)) 2371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addEqualityGroup(japaneseToInteger) 2381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addEqualityGroup(integerToSpanish) 2391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addEqualityGroup( 2401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Functions.compose(japaneseToInteger, integerToSpanish)) 2411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .testEquals(); 2421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("SerializableTester") 2451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testComposition_includeReserializabled() { 2461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map<String, Integer> mJapaneseToInteger = Maps.newHashMap(); 2471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert mJapaneseToInteger.put("Ichi", 1); 2481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert mJapaneseToInteger.put("Ni", 2); 2491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert mJapaneseToInteger.put("San", 3); 2501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Function<String, Integer> japaneseToInteger = 2511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Functions.forMap(mJapaneseToInteger); 2521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map<Integer, String> mIntegerToSpanish = Maps.newHashMap(); 2541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert mIntegerToSpanish.put(1, "Uno"); 2551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert mIntegerToSpanish.put(3, "Tres"); 2561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert mIntegerToSpanish.put(4, "Cuatro"); 2571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Function<Integer, String> integerToSpanish = 2581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Functions.forMap(mIntegerToSpanish); 2591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Function<String, String> japaneseToSpanish = 2611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Functions.compose(integerToSpanish, japaneseToInteger); 2621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new EqualsTester() 2641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addEqualityGroup( 2651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert japaneseToSpanish, 2661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Functions.compose(integerToSpanish, japaneseToInteger), 2671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SerializableTester.reserialize(japaneseToSpanish)) 2681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addEqualityGroup(japaneseToInteger) 2691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addEqualityGroup(integerToSpanish) 2701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addEqualityGroup( 2711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Functions.compose(japaneseToInteger, integerToSpanish)) 2721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .testEquals(); 2731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCompositionWildcard() { 2761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map<String, Integer> mapJapaneseToInteger = Maps.newHashMap(); 2771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Function<String, Integer> japaneseToInteger = 2781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Functions.forMap(mapJapaneseToInteger); 2791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Function<Object, String> numberToSpanish = Functions.constant("Yo no se"); 2811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Function<String, String> japaneseToSpanish = 2831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Functions.compose(numberToSpanish, japaneseToInteger); 2841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static class HashCodeFunction implements Function<Object, Integer> { 2871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 2881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public Integer apply(Object o) { 2891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return (o == null) ? 0 : o.hashCode(); 2901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testComposeOfFunctionsIsAssociative() { 2941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map<Float, String> m = ImmutableMap.of( 2951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4.0f, "A", 3.0f, "B", 2.0f, "C", 1.0f, "D"); 2961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Function<? super Integer, Boolean> h = Functions.constant(Boolean.TRUE); 2971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Function<? super String, Integer> g = new HashCodeFunction(); 2981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Function<Float, String> f = Functions.forMap(m, "F"); 2991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Function<Float, Boolean> c1 = Functions.compose(Functions.compose(h, g), f); 3011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Function<Float, Boolean> c2 = Functions.compose(h, Functions.compose(g, f)); 3021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Might be nice (eventually) to have: 3041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // assertEquals(c1, c2); 3051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // But for now, settle for this: 3071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(c1.hashCode(), c2.hashCode()); 3081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(c1.apply(1.0f), c2.apply(1.0f)); 3101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(c1.apply(5.0f), c2.apply(5.0f)); 3111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testComposeOfPredicateAndFunctionIsAssociative() { 3141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map<Float, String> m = ImmutableMap.of( 3151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4.0f, "A", 3.0f, "B", 2.0f, "C", 1.0f, "D"); 3161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Predicate<? super Integer> h = Predicates.equalTo(42); 3171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Function<? super String, Integer> g = new HashCodeFunction(); 3181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Function<Float, String> f = Functions.forMap(m, "F"); 3191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Predicate<Float> p1 = Predicates.compose(Predicates.compose(h, g), f); 3211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Predicate<Float> p2 = Predicates.compose(h, Functions.compose(g, f)); 3221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Might be nice (eventually) to have: 3241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // assertEquals(p1, p2); 3251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // But for now, settle for this: 3271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(p1.hashCode(), p2.hashCode()); 3281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(p1.apply(1.0f), p2.apply(1.0f)); 3301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(p1.apply(5.0f), p2.apply(5.0f)); 3311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testForPredicate() { 3341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Function<Object, Boolean> alwaysTrue = 3351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Functions.forPredicate(Predicates.alwaysTrue()); 3361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Function<Object, Boolean> alwaysFalse = 3371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Functions.forPredicate(Predicates.alwaysFalse()); 3381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(alwaysTrue.apply(0)); 3401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(alwaysFalse.apply(0)); 3411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new EqualsTester() 3431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addEqualityGroup( 3441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert alwaysTrue, Functions.forPredicate(Predicates.alwaysTrue())) 3451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addEqualityGroup(alwaysFalse) 3461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addEqualityGroup(Functions.identity()) 3471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .testEquals(); 3481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("SerializableTester") 3511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testForPredicateSerializable() { 3521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert checkCanReserialize(Functions.forPredicate(Predicates.equalTo(5))); 3531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testConstant() { 3561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Function<Object, Object> f = Functions.<Object>constant("correct"); 3571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("correct", f.apply(new Object())); 3581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("correct", f.apply(null)); 3591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Function<Object, String> g = Functions.constant(null); 3611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(null, g.apply(2)); 3621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(null, g.apply(null)); 3631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new EqualsTester() 3651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addEqualityGroup(f, Functions.constant("correct")) 3661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addEqualityGroup(Functions.constant("incorrect")) 3671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addEqualityGroup(Functions.toStringFunction()) 3681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addEqualityGroup(g) 3691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .testEquals(); 3701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new EqualsTester() 3721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addEqualityGroup(g, Functions.constant(null)) 3731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addEqualityGroup(Functions.constant("incorrect")) 3741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addEqualityGroup(Functions.toStringFunction()) 3751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addEqualityGroup(f) 3761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .testEquals(); 3771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("SerializableTester") 3801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testConstantSerializable() { 3811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert checkCanReserialize(Functions.constant(5)); 3821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static class CountingSupplier 3851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert implements Supplier<Integer>, Serializable { 3861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static final long serialVersionUID = 0; 3881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private int value; 3901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 3921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public Integer get() { 3931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ++value; 3941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 3971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public boolean equals(Object obj) { 3981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert if (obj instanceof CountingSupplier) { 3991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return this.value == ((CountingSupplier) obj).value; 4001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return false; 4021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 4051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public int hashCode() { 4061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return value; 4071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testForSupplier() { 4111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Supplier<Integer> supplier = new CountingSupplier(); 4121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Function<Object, Integer> function = Functions.forSupplier(supplier); 4131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, (int) function.apply(null)); 4151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2, (int) function.apply("foo")); 4161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new EqualsTester() 4181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addEqualityGroup(function, Functions.forSupplier(supplier)) 4191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addEqualityGroup(Functions.forSupplier(new CountingSupplier())) 4201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addEqualityGroup(Functions.forSupplier(Suppliers.ofInstance(12))) 4211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addEqualityGroup(Functions.toStringFunction()) 4221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .testEquals(); 4231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("SerializableTester") 4261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testForSupplierSerializable() { 4271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert checkCanReserialize(Functions.forSupplier(new CountingSupplier())); 4281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("SerializableTester") 4311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private <Y> void checkCanReserialize(Function<? super Integer, Y> f) { 4321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Function<? super Integer, Y> g = SerializableTester.reserializeAndAssert(f); 4331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int i = 1; i < 5; i++) { 4341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // convoluted way to check that the same result happens from each 4351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Y expected = null; 4361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 4371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert expected = f.apply(i); 4381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException e) { 4391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 4401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert g.apply(i); 4411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 4421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException ok) { 4431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert continue; 4441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(expected, g.apply(i)); 4471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("SerializableTester") 4511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private <Y> void checkCanReserializeSingleton(Function<? super String, Y> f) { 4521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Function<? super String, Y> g = SerializableTester.reserializeAndAssert(f); 4531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(f, g); 4541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (Integer i = 1; i < 5; i++) { 4551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(f.apply(i.toString()), g.apply(i.toString())); 4561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert} 460