/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with this * work for additional information regarding copyright ownership. The ASF * licenses this file to You under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package org.apache.sling.testing.junit.rules; import org.junit.internal.runners.statements.FailOnTimeout; import org.junit.rules.TestRule; import org.junit.runner.Description; import org.junit.runners.model.Statement; /** * Rule to timeout a test. */ public class TestTimeout implements TestRule { private int fMillis; private static final int DEFAULT_TIMEOUT = Integer.getInteger("test.timeout.milliseconds", 0); public TestTimeout(int fMillis) { this.fMillis = fMillis; } /** * Constructor: reads the default timeout value from the "test.timeout.milliseconds" property. * If the property doesn't exist or has the value "0", the statement won't timeout. */ public TestTimeout() { this.fMillis = DEFAULT_TIMEOUT; } public Statement apply(Statement base, Description description) { if (fMillis > 0) { return new FailOnTimeout(base, fMillis); } else { return base; } } }