/* * Copyright 2011 Goldman Sachs. * * 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.gs.collections.impl.block.function; import com.gs.collections.api.block.function.Function; import com.gs.collections.impl.block.factory.StringFunctions; import com.gs.collections.impl.list.mutable.FastList; import com.gs.collections.impl.test.Verify; import org.junit.Assert; import org.junit.Test; public final class StringFunctionsTest { @Test public void toUpperCase() { Function<String, String> function = StringFunctions.toUpperCase(); Assert.assertEquals("UPPER", function.valueOf("upper")); Assert.assertEquals("UPPER", function.valueOf("Upper")); Assert.assertEquals("UPPER", function.valueOf("UPPER")); Assert.assertSame("UPPER", function.valueOf("UPPER")); } @Test public void toLowerCase() { Function<String, String> function = StringFunctions.toLowerCase(); Assert.assertEquals("lower", function.valueOf("LOWER")); Assert.assertEquals("lower", function.valueOf("Lower")); Assert.assertEquals("lower", function.valueOf("lower")); Assert.assertSame("lower", function.valueOf("lower")); } @Test public void toInteger() { Assert.assertEquals(-42L, StringFunctions.toInteger().valueOf("-42").longValue()); Verify.assertInstanceOf(Integer.class, StringFunctions.toInteger().valueOf("10")); } @Test public void length() { Function<String, Integer> function = StringFunctions.length(); Assert.assertEquals(Integer.valueOf(6), function.valueOf("string")); Assert.assertEquals(Integer.valueOf(0), function.valueOf("")); Assert.assertEquals("string.length()", function.toString()); } @Test public void trim() { Function<String, String> function = StringFunctions.trim(); Assert.assertEquals("trim", function.valueOf("trim ")); Assert.assertEquals("trim", function.valueOf(" trim")); Assert.assertEquals("trim", function.valueOf(" trim ")); Assert.assertEquals("trim", function.valueOf("trim")); Assert.assertSame("trim", function.valueOf("trim")); Assert.assertEquals("string.trim()", function.toString()); } @Test public void firstLetter() { Function<String, Character> function = StringFunctions.firstLetter(); Assert.assertNull(function.valueOf(null)); Assert.assertNull(function.valueOf("")); Assert.assertEquals('A', function.valueOf("Autocthonic").charValue()); } @Test public void subString() { Function<String, String> function1 = StringFunctions.subString(2, 5); String testString = "habits"; Assert.assertEquals("bit", function1.valueOf(testString)); Verify.assertContains("string.subString", function1.toString()); Function<String, String> function2 = StringFunctions.subString(0, testString.length()); Assert.assertEquals(testString, function2.valueOf(testString)); Function<String, String> function3 = StringFunctions.subString(0, testString.length() + 1); Verify.assertThrows(StringIndexOutOfBoundsException.class, () -> function3.valueOf(testString)); Function<String, String> function4 = StringFunctions.subString(-1, 1); Verify.assertThrows(StringIndexOutOfBoundsException.class, () -> function4.valueOf(testString)); } @Test(expected = StringIndexOutOfBoundsException.class) public void subString_throws_on_short_string() { StringFunctions.subString(2, 4).valueOf("hi"); } @Test(expected = NullPointerException.class) public void subString_throws_on_null() { StringFunctions.subString(2, 4).valueOf(null); } @Test public void toPrimitiveBoolean() { Assert.assertTrue(StringFunctions.toPrimitiveBoolean().booleanValueOf("true")); Assert.assertFalse(StringFunctions.toPrimitiveBoolean().booleanValueOf("nah")); } @Test public void toPrimitiveByte() { Assert.assertEquals((byte) 16, StringFunctions.toPrimitiveByte().byteValueOf("16")); } @Test public void toFirstChar() { Assert.assertEquals('X', StringFunctions.toFirstChar().charValueOf("X-ray")); } @Test public void toPrimitiveChar() { Assert.assertEquals('A', StringFunctions.toPrimitiveChar().charValueOf("65")); } @Test(expected = StringIndexOutOfBoundsException.class) public void toPrimitiveCharWithEmptyString() { StringFunctions.toFirstChar().charValueOf(""); } @Test public void toPrimitiveDouble() { Assert.assertEquals(3.14159265359d, StringFunctions.toPrimitiveDouble().doubleValueOf("3.14159265359"), 0.0); } @Test public void toPrimitiveFloat() { Assert.assertEquals(3.1415d, StringFunctions.toPrimitiveFloat().floatValueOf("3.1415"), 0.00001); } @Test public void toPrimitiveInt() { Assert.assertEquals(256, StringFunctions.toPrimitiveInt().intValueOf("256")); } @Test public void toPrimitiveLong() { Assert.assertEquals(0x7fffffffffffffffL, StringFunctions.toPrimitiveLong().longValueOf("9223372036854775807")); } @Test public void toPrimitiveShort() { Assert.assertEquals(-32768, StringFunctions.toPrimitiveShort().shortValueOf("-32768")); } @Test public void append() { Verify.assertContainsAll(FastList.newListWith("1", "2", "3", "4", "5").collect(StringFunctions.append("!")), "1!", "2!", "3!", "4!", "5!"); } @Test public void prepend() { Verify.assertContainsAll(FastList.newListWith("1", "2", "3", "4", "5").collect(StringFunctions.prepend("@")), "@1", "@2", "@3", "@4", "@5"); } @Test public void classIsNonInstantiable() { Verify.assertClassNonInstantiable(StringFunctions.class); } }