1 /* 2 * Copyright 2007 the original author or authors. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 package org.mockftpserver.core.util; 17 18 import java.util.ArrayList; 19 import java.util.Collection; 20 import java.util.Collections; 21 import java.util.HashMap; 22 import java.util.Map; 23 24 25 import org.apache.log4j.Logger; 26 import org.mockftpserver.core.util.Assert; 27 import org.mockftpserver.core.util.AssertFailedException; 28 import org.mockftpserver.test.AbstractTest; 29 30 /** 31 * Tests for the Assert class 32 * 33 * @version $Revision$ - $Date$ 34 * 35 * @author Chris Mair 36 */ 37 public class AssertTest extends AbstractTest { 38 39 private static final Logger LOG = Logger.getLogger(AssertTest.class); 40 41 /** 42 * This interface defines a generic closure (a generic wrapper for a block of code). 43 */ 44 private static interface ExceptionClosure { 45 /** 46 * Execute arbitrary logic that can throw any type of Exception 47 * @throws Exception 48 */ 49 public void execute() throws Exception; 50 } 51 52 53 private static final String MESSAGE = "exception message"; 54 55 /** 56 * Test the assertNull() method 57 */ 58 public void testAssertNull() { 59 60 Assert.isNull(null, MESSAGE); 61 62 try { 63 Assert.isNull("OK", MESSAGE); 64 fail("Expected IllegalArumentException"); 65 } 66 catch (AssertFailedException expected) { 67 LOG.info("Expected: " + expected); 68 assertExceptionMessageContains(expected, MESSAGE); 69 } 70 } 71 72 73 /** 74 * Test the assertNotNull() method 75 */ 76 public void testAssertNotNull() { 77 78 Assert.notNull("OK", MESSAGE); 79 80 try { 81 Assert.notNull(null, MESSAGE); 82 fail("Expected IllegalArumentException"); 83 } 84 catch (AssertFailedException expected) { 85 LOG.info("Expected: " + expected); 86 assertExceptionMessageContains(expected, MESSAGE); 87 } 88 } 89 90 /** 91 * Test the assertTrue() method 92 */ 93 public void testAssertTrue() throws Exception { 94 95 Assert.isTrue(true, MESSAGE); 96 97 verifyThrowsAssertFailedException(true, new ExceptionClosure() { 98 public void execute() throws Exception { 99 Assert.isTrue(false, MESSAGE); 100 } 101 }); 102 } 103 104 /** 105 * Test the assertFalse() method 106 */ 107 public void testAssertFalse() throws Exception { 108 109 Assert.isFalse(false, MESSAGE); 110 111 verifyThrowsAssertFailedException(true, new ExceptionClosure() { 112 public void execute() throws Exception { 113 Assert.isFalse(true, MESSAGE); 114 } 115 }); 116 } 117 118 /** 119 * Test the assertNotEmpty(Collection,String) method 120 */ 121 public void testAssertNotNullOrEmpty_Collection() throws Exception { 122 123 final Collection COLLECTION = Collections.singletonList("item"); 124 Assert.notNullOrEmpty(COLLECTION, MESSAGE); 125 126 verifyThrowsAssertFailedException(true, new ExceptionClosure() { 127 public void execute() throws Exception { 128 Assert.notNullOrEmpty((Collection) null, MESSAGE); 129 } 130 }); 131 132 verifyThrowsAssertFailedException(true, new ExceptionClosure() { 133 public void execute() throws Exception { 134 Assert.notNullOrEmpty(new ArrayList(), MESSAGE); 135 } 136 }); 137 } 138 139 /** 140 * Test the assertNotEmpty(Map,String) method 141 */ 142 public void testAssertNotNullOrEmpty_Map() throws Exception { 143 144 final Map MAP = Collections.singletonMap("key", "value"); 145 Assert.notNullOrEmpty(MAP, MESSAGE); 146 147 verifyThrowsAssertFailedException(true, new ExceptionClosure() { 148 public void execute() throws Exception { 149 Assert.notNullOrEmpty((Map) null, MESSAGE); 150 } 151 }); 152 153 verifyThrowsAssertFailedException(true, new ExceptionClosure() { 154 public void execute() throws Exception { 155 Assert.notNullOrEmpty(new HashMap(), MESSAGE); 156 } 157 }); 158 } 159 160 /** 161 * Test the assertNotEmpty(Objecct[],String) method 162 */ 163 public void testAssertNotNullOrEmpty_array() throws Exception { 164 165 final Object[] ARRAY = { "1", "2" }; 166 Assert.notNullOrEmpty(ARRAY, MESSAGE); 167 168 verifyThrowsAssertFailedException(true, new ExceptionClosure() { 169 public void execute() throws Exception { 170 Assert.notNullOrEmpty((Object[]) null, MESSAGE); 171 } 172 }); 173 174 verifyThrowsAssertFailedException(true, new ExceptionClosure() { 175 public void execute() throws Exception { 176 Assert.notNullOrEmpty(new String[] { }, MESSAGE); 177 } 178 }); 179 } 180 181 /** 182 * Test the assertNotEmpty(String,String) method 183 */ 184 public void testAssertNotNullOrEmpty_String() throws Exception { 185 186 Assert.notNullOrEmpty("OK", MESSAGE); 187 188 verifyThrowsAssertFailedException(true, new ExceptionClosure() { 189 public void execute() throws Exception { 190 Assert.notNullOrEmpty((String) null, MESSAGE); 191 } 192 }); 193 194 verifyThrowsAssertFailedException(true, new ExceptionClosure() { 195 public void execute() throws Exception { 196 Assert.notNullOrEmpty("", MESSAGE); 197 } 198 }); 199 } 200 201 //------------------------------------------------------------------------- 202 // Helper Methods 203 //------------------------------------------------------------------------- 204 205 private void assertExceptionMessageContains(Throwable exception, String text) { 206 String message = exception.getMessage(); 207 assertTrue("Exception message [" + message + "] does not contain [" + text + "]", message.indexOf(text) != -1); 208 } 209 210 /** 211 * Verify that execution of the ExceptionClosure (code block) results in an 212 * AssertFailedException being thrown with the constant MESSAGE as its message. 213 * @param closure - the ExceptionClosure encapsulating the code to execute 214 */ 215 private void verifyThrowsAssertFailedException(boolean checkMessage, ExceptionClosure closure) 216 throws Exception { 217 218 try { 219 closure.execute(); 220 fail("Expected IllegalArumentException"); 221 } 222 catch (AssertFailedException expected) { 223 LOG.info("Expected: " + expected); 224 if (checkMessage) { 225 assertExceptionMessageContains(expected, MESSAGE); 226 } 227 } 228 } 229 230 } 231