/usr/share/doc/junit4/api/src-html/org/junit/rules/DisableOnDebug.html is in junit4-doc 4.12-6.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<title>Source code</title>
<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
</head>
<body>
<div class="sourceContainer">
<pre><span class="sourceLineNo">001</span>package org.junit.rules;<a name="line.1"></a>
<span class="sourceLineNo">002</span><a name="line.2"></a>
<span class="sourceLineNo">003</span>import java.lang.management.ManagementFactory;<a name="line.3"></a>
<span class="sourceLineNo">004</span>import java.lang.management.RuntimeMXBean;<a name="line.4"></a>
<span class="sourceLineNo">005</span>import java.util.List;<a name="line.5"></a>
<span class="sourceLineNo">006</span><a name="line.6"></a>
<span class="sourceLineNo">007</span>import org.junit.runner.Description;<a name="line.7"></a>
<span class="sourceLineNo">008</span>import org.junit.runners.model.Statement;<a name="line.8"></a>
<span class="sourceLineNo">009</span><a name="line.9"></a>
<span class="sourceLineNo">010</span>/**<a name="line.10"></a>
<span class="sourceLineNo">011</span> * The {@code DisableOnDebug} Rule allows you to label certain rules to be<a name="line.11"></a>
<span class="sourceLineNo">012</span> * disabled when debugging.<a name="line.12"></a>
<span class="sourceLineNo">013</span> * <p><a name="line.13"></a>
<span class="sourceLineNo">014</span> * The most illustrative use case is for tests that make use of the<a name="line.14"></a>
<span class="sourceLineNo">015</span> * {@link Timeout} rule, when ran in debug mode the test may terminate on<a name="line.15"></a>
<span class="sourceLineNo">016</span> * timeout abruptly during debugging. Developers may disable the timeout, or<a name="line.16"></a>
<span class="sourceLineNo">017</span> * increase the timeout by making a code change on tests that need debugging and<a name="line.17"></a>
<span class="sourceLineNo">018</span> * remember revert the change afterwards or rules such as {@link Timeout} that<a name="line.18"></a>
<span class="sourceLineNo">019</span> * may be disabled during debugging may be wrapped in a {@code DisableOnDebug}.<a name="line.19"></a>
<span class="sourceLineNo">020</span> * <p><a name="line.20"></a>
<span class="sourceLineNo">021</span> * The important benefit of this feature is that you can disable such rules<a name="line.21"></a>
<span class="sourceLineNo">022</span> * without any making any modifications to your test class to remove them during<a name="line.22"></a>
<span class="sourceLineNo">023</span> * debugging.<a name="line.23"></a>
<span class="sourceLineNo">024</span> * <p><a name="line.24"></a>
<span class="sourceLineNo">025</span> * This does nothing to tackle timeouts or time sensitive code under test when<a name="line.25"></a>
<span class="sourceLineNo">026</span> * debugging and may make this less useful in such circumstances.<a name="line.26"></a>
<span class="sourceLineNo">027</span> * <p><a name="line.27"></a>
<span class="sourceLineNo">028</span> * Example usage:<a name="line.28"></a>
<span class="sourceLineNo">029</span> * <a name="line.29"></a>
<span class="sourceLineNo">030</span> * <pre><a name="line.30"></a>
<span class="sourceLineNo">031</span> * public static class DisableTimeoutOnDebugSampleTest {<a name="line.31"></a>
<span class="sourceLineNo">032</span> * <a name="line.32"></a>
<span class="sourceLineNo">033</span> * &#064;Rule<a name="line.33"></a>
<span class="sourceLineNo">034</span> * public TestRule timeout = new DisableOnDebug(new Timeout(20));<a name="line.34"></a>
<span class="sourceLineNo">035</span> * <a name="line.35"></a>
<span class="sourceLineNo">036</span> * &#064;Test<a name="line.36"></a>
<span class="sourceLineNo">037</span> * public void myTest() {<a name="line.37"></a>
<span class="sourceLineNo">038</span> * int i = 0;<a name="line.38"></a>
<span class="sourceLineNo">039</span> * assertEquals(0, i); // suppose you had a break point here to inspect i<a name="line.39"></a>
<span class="sourceLineNo">040</span> * }<a name="line.40"></a>
<span class="sourceLineNo">041</span> * }<a name="line.41"></a>
<span class="sourceLineNo">042</span> * </pre><a name="line.42"></a>
<span class="sourceLineNo">043</span> * <a name="line.43"></a>
<span class="sourceLineNo">044</span> * @since 4.12<a name="line.44"></a>
<span class="sourceLineNo">045</span> */<a name="line.45"></a>
<span class="sourceLineNo">046</span>public class DisableOnDebug implements TestRule {<a name="line.46"></a>
<span class="sourceLineNo">047</span> private final TestRule rule;<a name="line.47"></a>
<span class="sourceLineNo">048</span> private final boolean debugging;<a name="line.48"></a>
<span class="sourceLineNo">049</span><a name="line.49"></a>
<span class="sourceLineNo">050</span> /**<a name="line.50"></a>
<span class="sourceLineNo">051</span> * Create a {@code DisableOnDebug} instance with the timeout specified in<a name="line.51"></a>
<span class="sourceLineNo">052</span> * milliseconds.<a name="line.52"></a>
<span class="sourceLineNo">053</span> * <a name="line.53"></a>
<span class="sourceLineNo">054</span> * @param rule to disable during debugging<a name="line.54"></a>
<span class="sourceLineNo">055</span> */<a name="line.55"></a>
<span class="sourceLineNo">056</span> public DisableOnDebug(TestRule rule) {<a name="line.56"></a>
<span class="sourceLineNo">057</span> this(rule, ManagementFactory.getRuntimeMXBean()<a name="line.57"></a>
<span class="sourceLineNo">058</span> .getInputArguments());<a name="line.58"></a>
<span class="sourceLineNo">059</span> }<a name="line.59"></a>
<span class="sourceLineNo">060</span><a name="line.60"></a>
<span class="sourceLineNo">061</span> /**<a name="line.61"></a>
<span class="sourceLineNo">062</span> * Visible for testing purposes only.<a name="line.62"></a>
<span class="sourceLineNo">063</span> * <a name="line.63"></a>
<span class="sourceLineNo">064</span> * @param rule the rule to disable during debugging<a name="line.64"></a>
<span class="sourceLineNo">065</span> * @param inputArguments<a name="line.65"></a>
<span class="sourceLineNo">066</span> * arguments provided to the Java runtime<a name="line.66"></a>
<span class="sourceLineNo">067</span> */<a name="line.67"></a>
<span class="sourceLineNo">068</span> DisableOnDebug(TestRule rule, List<String> inputArguments) {<a name="line.68"></a>
<span class="sourceLineNo">069</span> this.rule = rule;<a name="line.69"></a>
<span class="sourceLineNo">070</span> debugging = isDebugging(inputArguments);<a name="line.70"></a>
<span class="sourceLineNo">071</span> }<a name="line.71"></a>
<span class="sourceLineNo">072</span><a name="line.72"></a>
<span class="sourceLineNo">073</span> /**<a name="line.73"></a>
<span class="sourceLineNo">074</span> * @see TestRule#apply(Statement, Description)<a name="line.74"></a>
<span class="sourceLineNo">075</span> */<a name="line.75"></a>
<span class="sourceLineNo">076</span> public Statement apply(Statement base, Description description) {<a name="line.76"></a>
<span class="sourceLineNo">077</span> if (debugging) {<a name="line.77"></a>
<span class="sourceLineNo">078</span> return base;<a name="line.78"></a>
<span class="sourceLineNo">079</span> } else {<a name="line.79"></a>
<span class="sourceLineNo">080</span> return rule.apply(base, description);<a name="line.80"></a>
<span class="sourceLineNo">081</span> }<a name="line.81"></a>
<span class="sourceLineNo">082</span> }<a name="line.82"></a>
<span class="sourceLineNo">083</span><a name="line.83"></a>
<span class="sourceLineNo">084</span> /**<a name="line.84"></a>
<span class="sourceLineNo">085</span> * Parses arguments passed to the runtime environment for debug flags<a name="line.85"></a>
<span class="sourceLineNo">086</span> * <p><a name="line.86"></a>
<span class="sourceLineNo">087</span> * Options specified in:<a name="line.87"></a>
<span class="sourceLineNo">088</span> * <ul><a name="line.88"></a>
<span class="sourceLineNo">089</span> * <li><a name="line.89"></a>
<span class="sourceLineNo">090</span> * <a href="http://docs.oracle.com/javase/6/docs/technotes/guides/jpda/conninv.html#Invocation"<a name="line.90"></a>
<span class="sourceLineNo">091</span> * >javase-6</a></li><a name="line.91"></a>
<span class="sourceLineNo">092</span> * <li><a href="http://docs.oracle.com/javase/7/docs/technotes/guides/jpda/conninv.html#Invocation"<a name="line.92"></a>
<span class="sourceLineNo">093</span> * >javase-7</a></li><a name="line.93"></a>
<span class="sourceLineNo">094</span> * <li><a href="http://docs.oracle.com/javase/8/docs/technotes/guides/jpda/conninv.html#Invocation"<a name="line.94"></a>
<span class="sourceLineNo">095</span> * >javase-8</a></li><a name="line.95"></a>
<span class="sourceLineNo">096</span> * <a name="line.96"></a>
<span class="sourceLineNo">097</span> * <a name="line.97"></a>
<span class="sourceLineNo">098</span> * @param arguments<a name="line.98"></a>
<span class="sourceLineNo">099</span> * the arguments passed to the runtime environment, usually this<a name="line.99"></a>
<span class="sourceLineNo">100</span> * will be {@link RuntimeMXBean#getInputArguments()}<a name="line.100"></a>
<span class="sourceLineNo">101</span> * @return true if the current JVM was started in debug mode, false<a name="line.101"></a>
<span class="sourceLineNo">102</span> * otherwise.<a name="line.102"></a>
<span class="sourceLineNo">103</span> */<a name="line.103"></a>
<span class="sourceLineNo">104</span> private static boolean isDebugging(List<String> arguments) {<a name="line.104"></a>
<span class="sourceLineNo">105</span> for (final String argument : arguments) {<a name="line.105"></a>
<span class="sourceLineNo">106</span> if ("-Xdebug".equals(argument)) {<a name="line.106"></a>
<span class="sourceLineNo">107</span> return true;<a name="line.107"></a>
<span class="sourceLineNo">108</span> } else if (argument.startsWith("-agentlib:jdwp")) {<a name="line.108"></a>
<span class="sourceLineNo">109</span> return true;<a name="line.109"></a>
<span class="sourceLineNo">110</span> }<a name="line.110"></a>
<span class="sourceLineNo">111</span> }<a name="line.111"></a>
<span class="sourceLineNo">112</span> return false;<a name="line.112"></a>
<span class="sourceLineNo">113</span> }<a name="line.113"></a>
<span class="sourceLineNo">114</span><a name="line.114"></a>
<span class="sourceLineNo">115</span> /**<a name="line.115"></a>
<span class="sourceLineNo">116</span> * Returns {@code true} if the JVM is in debug mode. This method may be used<a name="line.116"></a>
<span class="sourceLineNo">117</span> * by test classes to take additional action to disable code paths that<a name="line.117"></a>
<span class="sourceLineNo">118</span> * interfere with debugging if required.<a name="line.118"></a>
<span class="sourceLineNo">119</span> * <a name="line.119"></a>
<span class="sourceLineNo">120</span> * @return {@code true} if the current JVM is in debug mode, {@code false}<a name="line.120"></a>
<span class="sourceLineNo">121</span> * otherwise<a name="line.121"></a>
<span class="sourceLineNo">122</span> */<a name="line.122"></a>
<span class="sourceLineNo">123</span> public boolean isDebugging() {<a name="line.123"></a>
<span class="sourceLineNo">124</span> return debugging;<a name="line.124"></a>
<span class="sourceLineNo">125</span> }<a name="line.125"></a>
<span class="sourceLineNo">126</span><a name="line.126"></a>
<span class="sourceLineNo">127</span>}<a name="line.127"></a>
</pre>
</div>
</body>
</html>
|