1 /******************************************************************************* 2 * Copyright (c) 2011 Google, Inc. 3 * All rights reserved. This program and the accompanying materials 4 * are made available under the terms of the Eclipse Public License v1.0 5 * which accompanies this distribution, and is available at 6 * http://www.eclipse.org/legal/epl-v10.html 7 * 8 * Contributors: 9 * Google, Inc. - initial API and implementation 10 *******************************************************************************/ 11 package org.eclipse.wb.internal.core.utils.check; 12 13 import java.text.MessageFormat; 14 15 /** 16 * <code>Assert</code> is useful for for embedding runtime sanity checks in code. The predicate 17 * methods all test a condition and throw some type of unchecked exception if the condition does not 18 * hold. 19 * <p> 20 * Assertion failure exceptions, like most runtime exceptions, are thrown when something is 21 * misbehaving. Assertion failures are invariably unspecified behavior; consequently, clients should 22 * never rely on these being thrown (and certainly should not being catching them specifically). 23 * 24 * @author scheglov_ke 25 * @coverage core.util 26 */ 27 public final class Assert { 28 //////////////////////////////////////////////////////////////////////////// 29 // 30 // Constructor 31 // 32 //////////////////////////////////////////////////////////////////////////// 33 private Assert() { 34 } 35 36 //////////////////////////////////////////////////////////////////////////// 37 // 38 // "legal" 39 // 40 //////////////////////////////////////////////////////////////////////////// 41 /** 42 * Asserts that an argument is legal. If the given boolean is not <code>true</code>, an 43 * <code>IllegalArgumentException</code> is thrown. 44 * 45 * @param expression 46 * the boolean expression of the check 47 * @return <code>true</code> if the check passes (does not return if the check fails) 48 * @exception IllegalArgumentException 49 * if the legality test failed 50 */ 51 public static boolean isLegal(boolean expression) { 52 return isLegal(expression, ""); //$NON-NLS-1$ 53 } 54 55 /** 56 * Asserts that an argument is legal. If the given boolean is not <code>true</code>, an 57 * <code>IllegalArgumentException</code> is thrown. The given message is included in that 58 * exception, to aid debugging. 59 * 60 * @param expression 61 * the boolean expression of the check 62 * @param message 63 * the message to include in the exception 64 * @return <code>true</code> if the check passes (does not return if the check fails) 65 * @exception IllegalArgumentException 66 * if the legality test failed 67 */ 68 public static boolean isLegal(boolean expression, String message) { 69 if (!expression) { 70 throw new IllegalArgumentException(message); 71 } 72 return expression; 73 } 74 75 //////////////////////////////////////////////////////////////////////////// 76 // 77 // "null" 78 // 79 //////////////////////////////////////////////////////////////////////////// 80 /** 81 * Asserts that the given object is <code>null</code>. If this is not the case, some kind of 82 * unchecked exception is thrown. 83 * 84 * @param object 85 * the value to test 86 */ 87 public static void isNull(Object object) { 88 isNull(object, ""); //$NON-NLS-1$ 89 } 90 91 /** 92 * Asserts that the given object is <code>null</code>. If this is not the case, some kind of 93 * unchecked exception is thrown. The given message is included in that exception, to aid 94 * debugging. 95 * 96 * @param object 97 * the value to test 98 * @param message 99 * the message to include in the exception 100 */ 101 public static void isNull(Object object, String message) { 102 if (object != null) { 103 throw new AssertionFailedException("null argument expected: " + message); //$NON-NLS-1$ 104 } 105 } 106 107 /** 108 * Asserts that the given object is not <code>null</code>. If this is not the case, some kind of 109 * unchecked exception is thrown. The given message is included in that exception, to aid 110 * debugging. 111 * 112 * @param object 113 * the value to test 114 * @param errorFormat 115 * the format of error message to produce if the check fails, as expected by 116 * {@link String#format(String, Object...)}. For example 117 * <code>"Execution flow problem. %s expected, but %s found."</code>. 118 * @param args 119 * the arguments for {@code errorFormat} 120 */ 121 public static void isNull(Object object, String errorFormat, Object... args) { 122 if (object != null) { 123 fail("null argument expected: " + String.format(errorFormat, args)); //$NON-NLS-1$ 124 } 125 } 126 127 /** 128 * @param errorFormat 129 * the format of error message suitable for {@link MessageFormat}. 130 * @param errorFormat 131 * the format of error message to produce if the check fails, as expected by 132 * {@link MessageFormat}. For example 133 * <code>"Execution flow problem. {0} expected, but {1} found."</code>. 134 */ 135 public static void isNull2(Object object, String errorFormat, Object... args) { 136 if (object != null) { 137 String message = "null argument expected: " + MessageFormat.format(errorFormat, args); //$NON-NLS-1$ 138 fail(message); 139 } 140 } 141 142 //////////////////////////////////////////////////////////////////////////// 143 // 144 // not "null" 145 // 146 //////////////////////////////////////////////////////////////////////////// 147 /** 148 * Asserts that the given object is not <code>null</code>. If this is not the case, some kind of 149 * unchecked exception is thrown. 150 * 151 * @param object 152 * the value to test 153 */ 154 public static void isNotNull(Object object) { 155 isNotNull(object, ""); //$NON-NLS-1$ 156 } 157 158 /** 159 * Asserts that the given object is not <code>null</code>. If this is not the case, some kind of 160 * unchecked exception is thrown. The given message is included in that exception, to aid 161 * debugging. 162 * 163 * @param object 164 * the value to test 165 * @param message 166 * the message to include in the exception 167 */ 168 public static void isNotNull(Object object, String message) { 169 if (object == null) { 170 fail("null argument: " + message); //$NON-NLS-1$ 171 } 172 } 173 174 /** 175 * Asserts that the given object is not <code>null</code>. If this is not the case, some kind of 176 * unchecked exception is thrown. The given message is included in that exception, to aid 177 * debugging. 178 * 179 * @param object 180 * the value to test 181 * @param errorFormat 182 * the format of error message to produce if the check fails, as expected by 183 * {@link String#format(String, Object...)}. For example 184 * <code>"Execution flow problem. %s expected, but %s found."</code>. 185 * @param args 186 * the arguments for {@code errorFormat} 187 */ 188 public static void isNotNull(Object object, String errorFormat, Object... args) { 189 if (object == null) { 190 fail("null argument: " + String.format(errorFormat, args)); //$NON-NLS-1$ 191 } 192 } 193 194 /** 195 * @param errorFormat 196 * the format of error message suitable for {@link MessageFormat}. 197 * @param errorFormat 198 * the format of error message to produce if the check fails, as expected by 199 * {@link MessageFormat}. For example 200 * <code>"Execution flow problem. {0} expected, but {1} found."</code>. 201 */ 202 public static void isNotNull2(Object object, String errorFormat, Object... args) { 203 if (object == null) { 204 String message = "null argument: " + MessageFormat.format(errorFormat, args); //$NON-NLS-1$ 205 fail(message); 206 } 207 } 208 209 //////////////////////////////////////////////////////////////////////////// 210 // 211 // Fail 212 // 213 //////////////////////////////////////////////////////////////////////////// 214 /** 215 * Fails with given message. 216 * 217 * @param message 218 * the message to include in the exception 219 */ 220 public static void fail(String message) { 221 throw new AssertionFailedException(message); 222 } 223 224 /** 225 * @param errorFormat 226 * the format of error message to produce if the check fails, as expected by 227 * {@link MessageFormat}. For example <code>"{0} expected, but {1} found."</code>. 228 */ 229 public static void fail(String errorFormat, Object... args) { 230 String message = MessageFormat.format(errorFormat, args); 231 throw new AssertionFailedException(message); 232 } 233 234 //////////////////////////////////////////////////////////////////////////// 235 // 236 // "true" 237 // 238 //////////////////////////////////////////////////////////////////////////// 239 /** 240 * Asserts that the given boolean is <code>true</code>. If this is not the case, some kind of 241 * unchecked exception is thrown. 242 * 243 * @param expression 244 * the boolean expression of the check 245 * @return <code>true</code> if the check passes (does not return if the check fails) 246 */ 247 public static boolean isTrue(boolean expression) { 248 return isTrue(expression, ""); //$NON-NLS-1$ 249 } 250 251 /** 252 * Asserts that the given boolean is <code>true</code>. If this is not the case, some kind of 253 * unchecked exception is thrown. The given message is included in that exception, to aid 254 * debugging. 255 * 256 * @param expression 257 * the boolean expression of the check 258 * @param message 259 * the message to include in the exception 260 * @return <code>true</code> if the check passes (does not return if the check fails) 261 */ 262 public static boolean isTrue(boolean expression, String message) { 263 if (!expression) { 264 fail("assertion failed: " + message); //$NON-NLS-1$ 265 } 266 return expression; 267 } 268 269 /** 270 * Asserts that the given boolean is <code>true</code>. If this is not the case, some kind of 271 * unchecked exception is thrown. The given message is included in that exception, to aid 272 * debugging. 273 * 274 * @param expression 275 * the boolean expression of the check 276 * @param errorFormat 277 * the format of error message to produce if the check fails, as expected by 278 * {@link String#format(String, Object...)}. For example 279 * <code>"Execution flow problem. %s expected, but %s found."</code>. 280 * @param args 281 * the arguments for {@code errorFormat} 282 * @return <code>true</code> if the check passes (does not return if the check fails) 283 */ 284 public static boolean isTrue(boolean expression, String errorFormat, Object... args) { 285 if (!expression) { 286 fail("assertion failed: " + String.format(errorFormat, args)); //$NON-NLS-1$ 287 } 288 return expression; 289 } 290 291 /** 292 * Asserts that the given boolean is <code>true</code>. If this is not the case, some kind of 293 * unchecked exception is thrown. The given message is included in that exception, to aid 294 * debugging. 295 * 296 * @param expression 297 * the boolean expression to check. 298 * @param errorFormat 299 * the format of error message to produce if the check fails, as expected by 300 * {@link MessageFormat}. For example <code>"{0} expected, but {1} found."</code>. 301 */ 302 public static boolean isTrue2(boolean expression, String errorFormat, Object... args) { 303 if (!expression) { 304 fail(errorFormat, args); 305 } 306 return expression; 307 } 308 309 //////////////////////////////////////////////////////////////////////////// 310 // 311 // equals 312 // 313 //////////////////////////////////////////////////////////////////////////// 314 /** 315 * Asserts that given actual value equals expected value. If this is not the case, some kind of 316 * unchecked exception is thrown. 317 * 318 * @param expected 319 * the expected value 320 * @param the 321 * actual value to check 322 */ 323 public static void equals(int expected, int actual) { 324 equals(expected, actual, expected + " expected, but " + actual + " found"); 325 } 326 327 /** 328 * Asserts that given actual value equals expected value. If this is not the case, some kind of 329 * unchecked exception is thrown. The given message is included in that exception, to aid 330 * debugging. 331 * 332 * @param expected 333 * the expected value 334 * @param the 335 * actual value to check 336 * @param message 337 * the message to include in the exception 338 */ 339 public static void equals(int expected, int actual, String message) { 340 if (expected != actual) { 341 fail("assertation failed: " + message); 342 } 343 } 344 345 //////////////////////////////////////////////////////////////////////////// 346 // 347 // instanceOf 348 // 349 //////////////////////////////////////////////////////////////////////////// 350 /** 351 * Asserts that given object is not <code>null</code> and has class compatible with given. 352 */ 353 public static void instanceOf(Class<?> expectedClass, Object o) { 354 if (o == null) { 355 fail(expectedClass.getName() + " expected, but 'null' found."); 356 } 357 if (!expectedClass.isAssignableFrom(o.getClass())) { 358 fail(expectedClass.getName() + " expected, but " + o.getClass().getName() + " found."); 359 } 360 } 361 } 362