001/* 002 * ModeShape (http://www.modeshape.org) 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016package org.modeshape.common.collection; 017 018import static org.hamcrest.core.Is.is; 019import static org.junit.Assert.assertThat; 020import java.util.Iterator; 021import org.modeshape.common.CommonI18n; 022import org.modeshape.common.collection.Problem.Status; 023import org.modeshape.common.i18n.I18n; 024import org.junit.Before; 025import org.junit.Test; 026 027/** 028 * @author Randall Hauch 029 */ 030public abstract class AbstractProblemsTest { 031 032 private Problems problems; 033 private Problem error; 034 private Problem warning; 035 private Problem info; 036 private I18n message; 037 private Throwable throwable; 038 private String location; 039 private String resource; 040 041 @Before 042 public void beforeEach() throws Exception { 043 problems = createProblems(); 044 message = CommonI18n.argumentMayNotBeNull; 045 error = new Problem(Status.ERROR, 1, message, new Object[] {"error msg"}, null, null, null); 046 warning = new Problem(Status.WARNING, 1, message, new Object[] {"warning msg"}, null, null, null); 047 info = new Problem(Status.INFO, 1, message, new Object[] {"info msg"}, null, null, null); 048 throwable = new IllegalArgumentException(message.text("throwable")); 049 resource = "SomeResource"; 050 location = "/Meaningless/location"; 051 } 052 053 protected abstract Problems createProblems(); 054 055 @Test 056 public void shouldBeEmptyImmediatelyAfterInstantiation() { 057 assertThat(problems.isEmpty(), is(true)); 058 assertThat(problems.size(), is(0)); 059 } 060 061 @Test 062 public void shouldAddErrorByMessageAndParametersUsingDefaultCode() { 063 error = new Problem(Status.ERROR, Problem.DEFAULT_CODE, message, new Object[] {"error msg"}, null, null, null); 064 problems.addError(error.getMessage(), error.getParameters()); 065 assertThat(problems.iterator().next(), is(error)); 066 assertThat(problems.isEmpty(), is(false)); 067 assertThat(problems.size(), is(1)); 068 } 069 070 @Test 071 public void shouldAddErrorByCodeAndMesssageAndParameters() { 072 problems.addError(error.getCode(), error.getMessage(), error.getParameters()); 073 assertThat(problems.iterator().next(), is(error)); 074 assertThat(problems.isEmpty(), is(false)); 075 assertThat(problems.size(), is(1)); 076 } 077 078 @Test 079 public void shouldAddErrorByThrowableAndMessageAndParametersUsingDefaultCode() { 080 error = new Problem(Status.ERROR, Problem.DEFAULT_CODE, message, new Object[] {"error msg"}, null, null, throwable); 081 problems.addError(error.getThrowable(), error.getMessage(), error.getParameters()); 082 assertThat(problems.iterator().next(), is(error)); 083 assertThat(problems.isEmpty(), is(false)); 084 assertThat(problems.size(), is(1)); 085 } 086 087 @Test 088 public void shouldAddErrorByThrowableAndCodeAndMessageAndParameters() { 089 error = new Problem(Status.ERROR, 1, message, new Object[] {"error msg"}, null, null, throwable); 090 problems.addError(error.getThrowable(), error.getCode(), error.getMessage(), error.getParameters()); 091 assertThat(problems.iterator().next(), is(error)); 092 assertThat(problems.isEmpty(), is(false)); 093 assertThat(problems.size(), is(1)); 094 } 095 096 @Test 097 public void shouldAddErrorByMessageAndResourceAndLocationAndParametersUsingDefaultCode() { 098 error = new Problem(Status.ERROR, Problem.DEFAULT_CODE, message, new Object[] {"error msg"}, resource, location, null); 099 problems.addError(error.getResource(), error.getLocation(), error.getMessage(), error.getParameters()); 100 assertThat(problems.iterator().next(), is(error)); 101 assertThat(problems.isEmpty(), is(false)); 102 assertThat(problems.size(), is(1)); 103 } 104 105 @Test 106 public void shouldAddErrorByCodeAndMesssageAndResourceAndLocationAndParameters() { 107 error = new Problem(Status.ERROR, 1, message, new Object[] {"error msg"}, resource, location, null); 108 problems.addError(error.getCode(), error.getResource(), error.getLocation(), error.getMessage(), error.getParameters()); 109 assertThat(problems.iterator().next(), is(error)); 110 assertThat(problems.isEmpty(), is(false)); 111 assertThat(problems.size(), is(1)); 112 } 113 114 @Test 115 public void shouldAddErrorByThrowableAndMessageAndResourceAndLocationAndParametersUsingDefaultCode() { 116 error = new Problem(Status.ERROR, Problem.DEFAULT_CODE, message, new Object[] {"error msg"}, resource, location, 117 throwable); 118 problems.addError(error.getThrowable(), 119 error.getResource(), 120 error.getLocation(), 121 error.getMessage(), 122 error.getParameters()); 123 assertThat(problems.iterator().next(), is(error)); 124 assertThat(problems.isEmpty(), is(false)); 125 assertThat(problems.size(), is(1)); 126 } 127 128 @Test 129 public void shouldAddErrorByThrowableAndCodeAndMessageAndResourceAndLocationAndParameters() { 130 error = new Problem(Status.ERROR, 1, message, new Object[] {"error msg"}, resource, location, throwable); 131 problems.addError(error.getThrowable(), 132 error.getCode(), 133 error.getResource(), 134 error.getLocation(), 135 error.getMessage(), 136 error.getParameters()); 137 assertThat(problems.iterator().next(), is(error)); 138 assertThat(problems.isEmpty(), is(false)); 139 assertThat(problems.size(), is(1)); 140 } 141 142 @Test 143 public void shouldAddWarningByMessageAndParametersUsingDefaultCode() { 144 warning = new Problem(Status.WARNING, Problem.DEFAULT_CODE, message, new Object[] {"warning msg"}, null, null, null); 145 problems.addWarning(warning.getMessage(), warning.getParameters()); 146 assertThat(problems.iterator().next(), is(warning)); 147 assertThat(problems.isEmpty(), is(false)); 148 assertThat(problems.size(), is(1)); 149 } 150 151 @Test 152 public void shouldAddWarningByCodeAndMesssageAndParameters() { 153 problems.addWarning(warning.getCode(), warning.getMessage(), warning.getParameters()); 154 assertThat(problems.iterator().next(), is(warning)); 155 assertThat(problems.isEmpty(), is(false)); 156 assertThat(problems.size(), is(1)); 157 } 158 159 @Test 160 public void shouldAddWarningByThrowableAndMessageAndParametersUsingDefaultCode() { 161 warning = new Problem(Status.WARNING, Problem.DEFAULT_CODE, message, new Object[] {"warning msg"}, null, null, throwable); 162 problems.addWarning(warning.getThrowable(), warning.getMessage(), warning.getParameters()); 163 assertThat(problems.iterator().next(), is(warning)); 164 assertThat(problems.isEmpty(), is(false)); 165 assertThat(problems.size(), is(1)); 166 } 167 168 @Test 169 public void shouldAddWarningByThrowableAndCodeAndMessageAndParameters() { 170 warning = new Problem(Status.WARNING, 1, message, new Object[] {"warning msg"}, null, null, throwable); 171 problems.addWarning(warning.getThrowable(), warning.getCode(), warning.getMessage(), warning.getParameters()); 172 assertThat(problems.iterator().next(), is(warning)); 173 assertThat(problems.isEmpty(), is(false)); 174 assertThat(problems.size(), is(1)); 175 } 176 177 @Test 178 public void shouldAddWarningByMessageAndResourceAndLocationAndParametersUsingDefaultCode() { 179 warning = new Problem(Status.WARNING, Problem.DEFAULT_CODE, message, new Object[] {"warning msg"}, resource, location, 180 null); 181 problems.addWarning(warning.getResource(), warning.getLocation(), warning.getMessage(), warning.getParameters()); 182 assertThat(problems.iterator().next(), is(warning)); 183 assertThat(problems.isEmpty(), is(false)); 184 assertThat(problems.size(), is(1)); 185 } 186 187 @Test 188 public void shouldAddWarningByCodeAndMesssageAndResourceAndLocationAndParameters() { 189 warning = new Problem(Status.WARNING, 1, message, new Object[] {"warning msg"}, resource, location, null); 190 problems.addWarning(warning.getCode(), 191 warning.getResource(), 192 warning.getLocation(), 193 warning.getMessage(), 194 warning.getParameters()); 195 assertThat(problems.iterator().next(), is(warning)); 196 assertThat(problems.isEmpty(), is(false)); 197 assertThat(problems.size(), is(1)); 198 } 199 200 @Test 201 public void shouldAddWarningByThrowableAndMessageAndResourceAndLocationAndParametersUsingDefaultCode() { 202 warning = new Problem(Status.WARNING, Problem.DEFAULT_CODE, message, new Object[] {"warning msg"}, resource, location, 203 throwable); 204 problems.addWarning(warning.getThrowable(), 205 warning.getResource(), 206 warning.getLocation(), 207 warning.getMessage(), 208 warning.getParameters()); 209 assertThat(problems.iterator().next(), is(warning)); 210 assertThat(problems.isEmpty(), is(false)); 211 assertThat(problems.size(), is(1)); 212 } 213 214 @Test 215 public void shouldAddWarningByThrowableAndCodeAndMessageAndResourceAndLocationAndParameters() { 216 warning = new Problem(Status.WARNING, 1, message, new Object[] {"warning msg"}, resource, location, throwable); 217 problems.addWarning(warning.getThrowable(), 218 warning.getCode(), 219 warning.getResource(), 220 warning.getLocation(), 221 warning.getMessage(), 222 warning.getParameters()); 223 assertThat(problems.iterator().next(), is(warning)); 224 assertThat(problems.isEmpty(), is(false)); 225 assertThat(problems.size(), is(1)); 226 } 227 228 @Test 229 public void shouldAddInfoByMessageAndParametersUsingDefaultCode() { 230 info = new Problem(Status.INFO, Problem.DEFAULT_CODE, message, new Object[] {"info msg"}, null, null, null); 231 problems.addInfo(info.getMessage(), info.getParameters()); 232 assertThat(problems.iterator().next(), is(info)); 233 assertThat(problems.isEmpty(), is(false)); 234 assertThat(problems.size(), is(1)); 235 } 236 237 @Test 238 public void shouldAddInfoByCodeAndMesssageAndParameters() { 239 problems.addInfo(info.getCode(), info.getMessage(), info.getParameters()); 240 assertThat(problems.iterator().next(), is(info)); 241 assertThat(problems.isEmpty(), is(false)); 242 assertThat(problems.size(), is(1)); 243 } 244 245 @Test 246 public void shouldAddInfoByThrowableAndMessageAndParametersUsingDefaultCode() { 247 info = new Problem(Status.INFO, Problem.DEFAULT_CODE, message, new Object[] {"info msg"}, null, null, throwable); 248 problems.addInfo(info.getThrowable(), info.getMessage(), info.getParameters()); 249 assertThat(problems.iterator().next(), is(info)); 250 assertThat(problems.isEmpty(), is(false)); 251 assertThat(problems.size(), is(1)); 252 } 253 254 @Test 255 public void shouldAddInfoByThrowableAndCodeAndMessageAndParameters() { 256 info = new Problem(Status.INFO, 1, message, new Object[] {"info msg"}, null, null, throwable); 257 problems.addInfo(info.getThrowable(), info.getCode(), info.getMessage(), info.getParameters()); 258 assertThat(problems.iterator().next(), is(info)); 259 assertThat(problems.isEmpty(), is(false)); 260 assertThat(problems.size(), is(1)); 261 } 262 263 @Test 264 public void shouldAddInfoByMessageAndResourceAndLocationAndParametersUsingDefaultCode() { 265 info = new Problem(Status.INFO, Problem.DEFAULT_CODE, message, new Object[] {"info msg"}, resource, location, null); 266 problems.addInfo(info.getResource(), info.getLocation(), info.getMessage(), info.getParameters()); 267 assertThat(problems.iterator().next(), is(info)); 268 assertThat(problems.isEmpty(), is(false)); 269 assertThat(problems.size(), is(1)); 270 } 271 272 @Test 273 public void shouldAddInfoByCodeAndMesssageAndResourceAndLocationAndParameters() { 274 info = new Problem(Status.INFO, 1, message, new Object[] {"info msg"}, resource, location, null); 275 problems.addInfo(info.getCode(), info.getResource(), info.getLocation(), info.getMessage(), info.getParameters()); 276 assertThat(problems.iterator().next(), is(info)); 277 assertThat(problems.isEmpty(), is(false)); 278 assertThat(problems.size(), is(1)); 279 } 280 281 @Test 282 public void shouldAddInfoByThrowableAndMessageAndResourceAndLocationAndParametersUsingDefaultCode() { 283 info = new Problem(Status.INFO, Problem.DEFAULT_CODE, message, new Object[] {"info msg"}, resource, location, throwable); 284 problems.addInfo(info.getThrowable(), info.getResource(), info.getLocation(), info.getMessage(), info.getParameters()); 285 assertThat(problems.iterator().next(), is(info)); 286 assertThat(problems.isEmpty(), is(false)); 287 assertThat(problems.size(), is(1)); 288 } 289 290 @Test 291 public void shouldAddInfoByThrowableAndCodeAndMessageAndResourceAndLocationAndParameters() { 292 info = new Problem(Status.INFO, 1, message, new Object[] {"info msg"}, resource, location, throwable); 293 problems.addInfo(info.getThrowable(), 294 info.getCode(), 295 info.getResource(), 296 info.getLocation(), 297 info.getMessage(), 298 info.getParameters()); 299 assertThat(problems.iterator().next(), is(info)); 300 assertThat(problems.isEmpty(), is(false)); 301 assertThat(problems.size(), is(1)); 302 } 303 304 @Test 305 public void shouldAddProblemsAndMaintainOrder() { 306 assertThat(problems.hasErrors(), is(false)); 307 assertThat(problems.hasWarnings(), is(false)); 308 assertThat(problems.hasInfo(), is(false)); 309 assertThat(problems.isEmpty(), is(true)); 310 assertThat(problems.size(), is(0)); 311 problems.addWarning(warning.getThrowable(), 312 warning.getCode(), 313 warning.getResource(), 314 warning.getLocation(), 315 warning.getMessage(), 316 warning.getParameters()); 317 assertThat(problems.hasErrors(), is(false)); 318 assertThat(problems.hasWarnings(), is(true)); 319 assertThat(problems.hasInfo(), is(false)); 320 assertThat(problems.isEmpty(), is(false)); 321 assertThat(problems.size(), is(1)); 322 problems.addError(error.getThrowable(), 323 error.getCode(), 324 error.getResource(), 325 error.getLocation(), 326 error.getMessage(), 327 error.getParameters()); 328 assertThat(problems.hasErrors(), is(true)); 329 assertThat(problems.hasWarnings(), is(true)); 330 assertThat(problems.hasInfo(), is(false)); 331 assertThat(problems.isEmpty(), is(false)); 332 assertThat(problems.size(), is(2)); 333 problems.addInfo(info.getThrowable(), 334 info.getCode(), 335 info.getResource(), 336 info.getLocation(), 337 info.getMessage(), 338 info.getParameters()); 339 assertThat(problems.hasErrors(), is(true)); 340 assertThat(problems.hasWarnings(), is(true)); 341 assertThat(problems.hasInfo(), is(true)); 342 assertThat(problems.isEmpty(), is(false)); 343 assertThat(problems.size(), is(3)); 344 problems.addWarning(warning.getThrowable(), 345 warning.getCode(), 346 warning.getResource(), 347 warning.getLocation(), 348 warning.getMessage(), 349 warning.getParameters()); 350 problems.addError(error.getThrowable(), 351 error.getCode(), 352 error.getResource(), 353 error.getLocation(), 354 error.getMessage(), 355 error.getParameters()); 356 problems.addWarning(warning.getThrowable(), 357 warning.getCode(), 358 warning.getResource(), 359 warning.getLocation(), 360 warning.getMessage(), 361 warning.getParameters()); 362 problems.addError(error.getThrowable(), 363 error.getCode(), 364 error.getResource(), 365 error.getLocation(), 366 error.getMessage(), 367 error.getParameters()); 368 assertThat(problems.hasErrors(), is(true)); 369 assertThat(problems.hasWarnings(), is(true)); 370 assertThat(problems.hasInfo(), is(true)); 371 assertThat(problems.isEmpty(), is(false)); 372 assertThat(problems.size(), is(7)); 373 Iterator<Problem> iter = problems.iterator(); 374 assertThat(iter.next(), is(warning)); 375 assertThat(iter.next(), is(error)); 376 assertThat(iter.next(), is(info)); 377 assertThat(iter.next(), is(warning)); 378 assertThat(iter.next(), is(error)); 379 assertThat(iter.next(), is(warning)); 380 assertThat(iter.next(), is(error)); 381 assertThat(iter.hasNext(), is(false)); 382 assertThat(problems.size(), is(7)); 383 assertThat(problems.hasErrors(), is(true)); 384 assertThat(problems.hasWarnings(), is(true)); 385 assertThat(problems.hasInfo(), is(true)); 386 assertThat(problems.isEmpty(), is(false)); 387 } 388 389}