1 /* 2 * The JUnit-addons Software License, Version 1.0 3 * (based on the Apache Software License, Version 1.1) 4 * 5 * Copyright (c) 2002-2003 Vladimir R. Bossicard. All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 11 * 1. Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * 14 * 2. Redistributions in binary form must reproduce the above copyright 15 * notice, this list of conditions and the following disclaimer in 16 * the documentation and/or other materials provided with the 17 * distribution. 18 * 19 * 3. The end-user documentation included with the redistribution, if 20 * any, must include the following acknowlegement: 21 * "This product includes software developed by Vladimir R. 22 * Bossicard as well as other contributors 23 * (http://junit-addons.sourceforge.net/)." 24 * Alternately, this acknowlegement may appear in the software itself, 25 * if and wherever such third-party acknowlegements normally appear. 26 * 27 * 4. The names "JUnit-addons" must not be used to endorse or promote 28 * products derived from this software without prior written 29 * permission. For written permission, please contact 30 * vbossica@users.sourceforge.net. 31 * 32 * 5. Products derived from this software may not be called "JUnit-addons" 33 * nor may "JUnit-addons" appear in their names without prior written 34 * permission of the project managers. 35 * 36 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED 37 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 38 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 39 * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR 40 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 41 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 42 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 43 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 44 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 45 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 46 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 47 * SUCH DAMAGE. 48 * ====================================================================== 49 * 50 * This software consists of voluntary contributions made by many 51 * individuals. For more information on the JUnit-addons Project, please 52 * see <http://junit-addons.sourceforge.net/>. 53 */ 54 55 package junitx.framework; 56 57 import junit.framework.Assert; 58 59 import java.util.ArrayList; 60 import java.util.Arrays; 61 62 /** 63 * A set of assert methods specially targetted to asserting arrays. 64 * 65 * @version $Revision: 1.11 $ $Date: 2003/04/14 01:06:32 $ 66 * @author <a href="mailto:vbossica@users.sourceforge.net">Vladimir R. Bossicard</a> 67 */ 68 public class ArrayAssert { 69 70 /** 71 * Don't let anyone have access to this constructor. 72 */ 73 private ArrayAssert() { 74 } 75 76 /** 77 * Asserts that two arrays are equal. Throws an 78 * <tt>AssertionFailedError</tt> if they are not. 79 * 80 * Two arrays are considered equals if: 81 * <ul> 82 * <li>their respective lengths are the same</li> 83 * <li>the respective messages must be equal</li> 84 * <li>the respective localized messages must be equal</li> 85 * </ul> 86 */ 87 static public void assertEquals(String message, 88 Object[] expected, 89 Object[] actual) { 90 if (Arrays.equals(expected, actual)) { 91 return; 92 } 93 94 String formatted = ""; 95 if (message != null) { 96 formatted = message + " "; 97 } 98 99 Assert.assertNotNull(formatted + "expected array: <not null> but was <null>", expected); 100 Assert.assertNotNull(formatted + "expected array: <null> but was <not null>", actual); 101 Assert.assertEquals(formatted + "[array length] ", expected.length, actual.length); 102 for (int i = 0; i < expected.length; i++) { 103 Assert.assertEquals(formatted + "[position " + i + "]", expected[i], actual[i]); 104 } 105 } 106 107 /** 108 * Asserts that two arrays are equal. Throws an 109 * <tt>AssertionFailedError</tt> if they are not. 110 */ 111 static public void assertEquals(Object[] expected, 112 Object[] actual) { 113 assertEquals(null, expected, actual); 114 } 115 116 /** 117 * Asserts that two arrays are equal. Two arrays are considered equal if: 118 * <ul> 119 * <li>their respective lengths are the same</i> 120 * <li>all corresponding pairs of elements are equal (within the delta range) 121 * <li>both array references are <code>null</code> 122 * </ul> 123 * 124 * @param expected a double array of expected values 125 * @param actual a double array of actual values 126 * @param delta tolerated delta 127 */ 128 public static void assertEquals(double[] expected, 129 double[] actual, 130 double delta) { 131 assertEquals(null, expected, actual, delta); 132 } 133 134 /** 135 * Asserts that two arrays are equal. Two arrays are considered equal if: 136 * <ul> 137 * <li>their respective lengths are the same</i> 138 * <li>all corresponding pairs of elements are equal (within the delta range) 139 * <li>both array references are <code>null</code> 140 * </ul> 141 * 142 * @param message message to display when arrays are not equal 143 * @param expected a double array of expected values 144 * @param actual a double array of actual values 145 * @param delta tolerated delta 146 */ 147 public static void assertEquals(String message, 148 double[] expected, 149 double[] actual, 150 double delta) { 151 if (Arrays.equals(expected, actual)) { 152 return; 153 } 154 155 String formatted = ""; 156 if (message != null) { 157 formatted = message + " "; 158 } 159 160 Assert.assertNotNull(formatted + "expected array: <not null> but was <null>", expected); 161 Assert.assertNotNull(formatted + "expected array: <null> but was <not null>", actual); 162 Assert.assertEquals(formatted + "[array length] ", expected.length, actual.length); 163 for (int i = 0; i < actual.length; i++) { 164 Assert.assertEquals(formatted + "[position " + i + "]", expected[i], actual[i], delta); 165 } 166 } 167 168 /** 169 * Asserts that two arrays are equal. Two arrays are considered equal if: 170 * <ul> 171 * <li>their respective lengths are the same</i> 172 * <li>all corresponding pairs of elements are equal (within the delta range) 173 * <li>both array references are <code>null</code> 174 * </ul> 175 * 176 * @param message message to display when arrays are not equal 177 * @param expected a float array of expected values 178 * @param actual a float array of actual values 179 * @param delta tolerated delta 180 */ 181 public static void assertEquals(String message, 182 float[] expected, 183 float[] actual, 184 float delta) { 185 if (Arrays.equals(expected, actual)) { 186 return; 187 } 188 189 String formatted = ""; 190 if (message != null) { 191 formatted = message + " "; 192 } 193 194 Assert.assertNotNull(formatted + "expected array: <not null> but was <null>", expected); 195 Assert.assertNotNull(formatted + "expected array: <null> but was <not null>", actual); 196 Assert.assertEquals(formatted + "[array length] ", expected.length, actual.length); 197 for (int i = 0; i < actual.length; i++) { 198 Assert.assertEquals(formatted + "[position " + i + "]", expected[i], actual[i], delta); 199 } 200 } 201 202 /** 203 * Asserts that two arrays are equal. Two arrays are considered equal if: 204 * <ul> 205 * <li>their respective lengths are the same</i> 206 * <li>all corresponding pairs of elements are equal (within the delta range) 207 * <li>both array references are <code>null</code> 208 * </ul> 209 * 210 * @param expected a float array of expected values 211 * @param actual a float array of actual values 212 * @param delta tolerated delta 213 */ 214 public static void assertEquals(float[] expected, 215 float[] actual, 216 float delta) { 217 assertEquals(null, expected, actual, delta); 218 } 219 220 /** 221 * Asserts that two arrays are equal. Two arrays are considered equal if: 222 * <ul> 223 * <li>their respective lengths are the same</i> 224 * <li>all corresponding pairs of elements are equal 225 * <li>both array references are <code>null</code> 226 * </ul> 227 * 228 * @param message message to display when arrays are not equal 229 * @param expected a long array of expected values 230 * @param actual a long array of actual values 231 */ 232 public static void assertEquals(String message, 233 long[] expected, 234 long[] actual) { 235 if (Arrays.equals(expected, actual)) { 236 return; 237 } 238 239 String formatted = ""; 240 if (message != null) { 241 formatted = message + " "; 242 } 243 244 Assert.assertNotNull(formatted + "expected array: <not null> but was <null>", expected); 245 Assert.assertNotNull(formatted + "expected array: <null> but was <not null>", actual); 246 Assert.assertEquals(formatted + "[array length] ", expected.length, actual.length); 247 for (int i = 0; i < actual.length; i++) { 248 Assert.assertEquals(formatted + "[position " + i + "]", expected[i], actual[i]); 249 } 250 } 251 252 /** 253 * Asserts that two arrays are equal. Two arrays are considered equal if: 254 * <ul> 255 * <li>their respective lengths are the same</i> 256 * <li>all corresponding pairs of elements are equal 257 * <li>both array references are <code>null</code> 258 * </ul> 259 * 260 * @param expected a long array of expected values 261 * @param actual a long array of actual values 262 */ 263 public static void assertEquals(long[] expected, 264 long[] actual) { 265 assertEquals(null, expected, actual); 266 } 267 268 /** 269 * Asserts that two arrays are equal. Two arrays are considered equal if: 270 * <ul> 271 * <li>their respective lengths are the same</i> 272 * <li>all corresponding pairs of elements are equal 273 * <li>both array references are <code>null</code> 274 * </ul> 275 * 276 * @param message message to display when arrays are not equal 277 * @param expected an int array of expected values 278 * @param actual an int array of actual values 279 */ 280 public static void assertEquals(String message, 281 int[] expected, 282 int[] actual) { 283 if (Arrays.equals(expected, actual)) { 284 return; 285 } 286 287 String formatted = ""; 288 if (message != null) { 289 formatted = message + " "; 290 } 291 292 Assert.assertNotNull(formatted + "expected array: <not null> but was <null>", expected); 293 Assert.assertNotNull(formatted + "expected array: <null> but was <not null>", actual); 294 Assert.assertEquals(formatted + "[array length] ", expected.length, actual.length); 295 296 for (int i = 0; i < actual.length; i++) { 297 Assert.assertEquals(formatted + "[position " + i + "]", expected[i], actual[i]); 298 } 299 } 300 301 /** 302 * Asserts that two arrays are equal. Two arrays are considered equal if: 303 * <ul> 304 * <li>their respective lengths are the same</i> 305 * <li>all corresponding pairs of elements are equal 306 * <li>both array references are <code>null</code> 307 * </ul> 308 * 309 * @param expected an int array of expected values 310 * @param actual an int array of actual values 311 */ 312 public static void assertEquals(int[] expected, 313 int[] actual) { 314 assertEquals(null, expected, actual); 315 } 316 317 /** 318 * Asserts that two arrays are equal. Two arrays are considered equal if: 319 * <ul> 320 * <li>their respective lengths are the same</i> 321 * <li>all corresponding pairs of elements are equal 322 * <li>both array references are <code>null</code> 323 * </ul> 324 * 325 * @param message message to display when arrays are not equal 326 * @param expected a short array of expected values 327 * @param actual a short array of actual values 328 */ 329 public static void assertEquals(String message, 330 short[] expected, 331 short[] actual) { 332 if (Arrays.equals(expected, actual)) { 333 return; 334 } 335 336 String formatted = ""; 337 if (message != null) { 338 formatted = message + " "; 339 } 340 341 Assert.assertNotNull(formatted + "expected array: <not null> but was <null>", expected); 342 Assert.assertNotNull(formatted + "expected array: <null> but was <not null>", actual); 343 Assert.assertEquals(formatted + "[array length] ", expected.length, actual.length); 344 345 for (int i = 0; i < actual.length; i++) { 346 Assert.assertEquals(formatted + "[position " + i + "]", expected[i], actual[i]); 347 } 348 } 349 350 /** 351 * Asserts that two arrays are equal. Two arrays are considered equal if: 352 * <ul> 353 * <li>their respective lengths are the same</i> 354 * <li>all corresponding pairs of elements are equal 355 * <li>both array references are <code>null</code> 356 * </ul> 357 * 358 * @param expected a short array of expected values 359 * @param actual a short array of actual values 360 */ 361 public static void assertEquals(short[] expected, 362 short[] actual) { 363 assertEquals(null, expected, actual); 364 } 365 366 /** 367 * Asserts that two arrays are equal. Two arrays are considered equal if: 368 * <ul> 369 * <li>their respective lengths are the same</i> 370 * <li>all corresponding pairs of elements are equal 371 * <li>both array references are <code>null</code> 372 * </ul> 373 * 374 * @param message message to display when arrays are not equal 375 * @param expected a short array of expected values 376 * @param actual a short array of actual values 377 */ 378 public static void assertEquals(String message, 379 char[] expected, 380 char[] actual) { 381 if (Arrays.equals(expected, actual)) { 382 return; 383 } 384 385 String formatted = ""; 386 if (message != null) { 387 formatted = message + " "; 388 } 389 390 Assert.assertNotNull(formatted + "expected array: <not null> but was <null>", expected); 391 Assert.assertNotNull(formatted + "expected array: <null> but was <not null>", actual); 392 Assert.assertEquals(formatted + "[array length] ", expected.length, actual.length); 393 for (int i = 0; i < actual.length; i++) { 394 Assert.assertEquals(formatted + "[position " + i + "]", expected[i], actual[i]); 395 } 396 } 397 398 /** 399 * Asserts that two arrays are equal. Two arrays are considered equal if: 400 * <ul> 401 * <li>their respective lengths are the same</i> 402 * <li>all corresponding pairs of elements are equal 403 * <li>both array references are <code>null</code> 404 * </ul> 405 * 406 * @param expected a short array of expected values 407 * @param actual a short array of actual values 408 */ 409 public static void assertEquals(char[] expected, 410 char[] actual) { 411 assertEquals(null, expected, actual); 412 } 413 414 /** 415 * Asserts that two arrays are equal. Two arrays are considered equal if: 416 * <ul> 417 * <li>their respective lengths are the same</i> 418 * <li>all corresponding pairs of elements are equal 419 * <li>both array references are <code>null</code> 420 * </ul> 421 * 422 * @param message message to display when arrays are not equal 423 * @param expected a short array of expected values 424 * @param actual a short array of actual values 425 */ 426 public static void assertEquals(String message, 427 boolean[] expected, 428 boolean[] actual) { 429 if (Arrays.equals(expected, actual)) { 430 return; 431 } 432 433 String formatted = ""; 434 if (message != null) { 435 formatted = message + " "; 436 } 437 438 Assert.assertNotNull(formatted + "expected array: <not null> but was <null>", expected); 439 Assert.assertNotNull(formatted + "expected array: <null> but was <not null>", actual); 440 Assert.assertEquals(formatted + "[array length] ", expected.length, actual.length); 441 for (int i = 0; i < actual.length; i++) { 442 Assert.assertEquals(formatted + "[position " + i + "]", expected[i], actual[i]); 443 } 444 } 445 446 /** 447 * Asserts that two arrays are equal. Two arrays are considered equal if: 448 * <ul> 449 * <li>their respective lengths are the same</i> 450 * <li>all corresponding pairs of elements are equal 451 * <li>both array references are <code>null</code> 452 * </ul> 453 * 454 * @param expected a short array of expected values 455 * @param actual a short array of actual values 456 */ 457 public static void assertEquals(boolean[] expected, 458 boolean[] actual) { 459 assertEquals(null, expected, actual); 460 } 461 462 /** 463 * Asserts that two arrays are equal. Two arrays are considered equal if: 464 * <ul> 465 * <li>their respective lengths are the same</i> 466 * <li>all corresponding pairs of elements are equal 467 * <li>both array references are <code>null</code> 468 * </ul> 469 * 470 * @param message message to display when arrays are not equal 471 * @param expected a byte array of expected values 472 * @param actual a byte array of actual values 473 */ 474 public static void assertEquals(String message, 475 byte[] expected, 476 byte[] actual) { 477 if (Arrays.equals(expected, actual)) { 478 return; 479 } 480 481 String formatted = ""; 482 if (message != null) { 483 formatted = message + " "; 484 } 485 486 Assert.assertNotNull(formatted + "expected array: <not null> but was <null>", expected); 487 Assert.assertNotNull(formatted + "expected array: <null> but was <not null>", actual); 488 Assert.assertEquals(formatted + "[array length] ", expected.length, actual.length); 489 for (int i = 0; i < actual.length; i++) { 490 Assert.assertEquals(formatted + "[position " + i + "]", expected[i], actual[i]); 491 } 492 } 493 494 /** 495 * Asserts that two arrays are equal. Two arrays are considered equal if: 496 * <ul> 497 * <li>their respective lengths are the same</i> 498 * <li>all corresponding pairs of elements are equal 499 * <li>both array references are <code>null</code> 500 * </ul> 501 * 502 * @param expected a byte array of expected values 503 * @param actual a byte array of actual values 504 */ 505 public static void assertEquals(byte[] expected, 506 byte[] actual) { 507 assertEquals(null, expected, actual); 508 } 509 510 /** 511 * Asserts that two arrays have the same elements, but not necessarily in 512 * the same order. If order is important then use assertEquals(). If a 513 * difference is found, the object is listed by calling its toString() method. 514 * Arrays are equal if both are <i>null</i>. 515 * 516 * Equality of objects uses the equals method. 517 * 518 * @see #assertEquals(String message, Object[] expected, Object[] actual) 519 * 520 * @param message message to display when arrays are not equal 521 * @param expected an Object array of expected values 522 * @param actual an Object array of actual values 523 */ 524 public static void assertEquivalenceArrays(String message, 525 Object[] expected, 526 Object[] actual) { 527 if (Arrays.equals(expected, actual)) { 528 return; 529 } 530 531 String formatted = ""; 532 if (message != null) { 533 formatted = message + " "; 534 } 535 536 Assert.assertNotNull(formatted + "expected array: <not null> but was <null>", expected); 537 Assert.assertNotNull(formatted + "expected array: <null> but was <not null>", actual); 538 539 ArrayList missing = new ArrayList(); 540 for (int i = 0; i < expected.length; i++) { 541 missing.add(expected[i]); 542 } 543 544 ArrayList extra = new ArrayList(); 545 for (int i = 0; i < actual.length; i++) { 546 extra.add(actual[i]); 547 } 548 549 ArrayList missingClone = (ArrayList) missing.clone(); 550 missing.removeAll(extra); 551 extra.removeAll(missingClone); 552 553 Assert.assertTrue(formatted + "[Missing elements: " + missing + "]", missing.size() == 0); 554 Assert.assertTrue(formatted + "[Extra elements: " + extra + "]", extra.size() == 0); 555 } 556 557 /** 558 * Assertion that both arrays has the same elements, but not necessarily in 559 * the same order. If order is important then use assertEquals(). If a 560 * difference is found, the object is listed by calling its toString() method. 561 * Arrays are equal if both are <i>null</i>. 562 * 563 * Equality of objects uses the equals method. 564 * 565 * @see #assertEquals(String message, Object[] expected, Object[] actual) 566 * 567 * @param expected an Object array of expected values 568 * @param actual an Object array of actual values 569 */ 570 public static void assertEquivalenceArrays(Object[] expected, 571 Object[] actual) { 572 assertEquivalenceArrays(null, expected, actual); 573 } 574 575 }