1 /**
2 * Copyright (c) 2021 QOS.ch
3 * All rights reserved.
4 *
5 * Permission is hereby granted, free of charge, to any person obtaining
6 * a copy of this software and associated documentation files (the
7 * "Software"), to deal in the Software without restriction, including
8 * without limitation the rights to use, copy, modify, merge, publish,
9 * distribute, sublicense, and/or sell copies of the Software, and to
10 * permit persons to whom the Software is furnished to do so, subject to
11 * the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be
14 * included in all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23 *
24 */
25
26 package org.slf4j.rule;
27
28 import org.junit.rules.TestRule;
29 import org.junit.runner.Description;
30 import org.junit.runners.model.Statement;
31
32 // This class has been inspired by the article "A JUnit Rule to Run a Test in Its Own Thread"
33 // published by Frank Appel, author of the book "Testing with JUnit" published by Packt publishing.
34 //
35 // See also
36 // https://www.codeaffine.com/2014/07/21/a-junit-rule-to-run-a-test-in-its-own-thread/
37
38 public class RunInNewThreadRule implements TestRule {
39
40 @Override
41 public Statement apply(Statement base, Description description) {
42 RunInNewThread desiredAnnotaton = description.getAnnotation(RunInNewThread.class);
43
44 if (desiredAnnotaton == null) {
45 System.out.println("test "+ description.getMethodName() +" not annotated");
46 return base;
47 } else {
48 long timeout = desiredAnnotaton.timeout();
49 System.out.println("running "+ description.getMethodName() +" in separate tjread");
50 return new RunInNewThreadStatement(base, timeout);
51 }
52 }
53
54 }