<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (17) -->
<title>Source code</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="source: package: org.apache.hadoop.hbase, class: TestHBaseClassTestRule, class: ParameterizedClassWithNoParametersMethod">
<meta name="generator" content="javadoc/SourceToHTMLConverter">
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
</head>
<body class="source-page">
<main role="main">
<div class="source-container">
<pre><span class="source-line-no">001</span><span id="line-1">/*</span>
<span class="source-line-no">002</span><span id="line-2"> * Licensed to the Apache Software Foundation (ASF) under one</span>
<span class="source-line-no">003</span><span id="line-3"> * or more contributor license agreements.  See the NOTICE file</span>
<span class="source-line-no">004</span><span id="line-4"> * distributed with this work for additional information</span>
<span class="source-line-no">005</span><span id="line-5"> * regarding copyright ownership.  The ASF licenses this file</span>
<span class="source-line-no">006</span><span id="line-6"> * to you under the Apache License, Version 2.0 (the</span>
<span class="source-line-no">007</span><span id="line-7"> * "License"); you may not use this file except in compliance</span>
<span class="source-line-no">008</span><span id="line-8"> * with the License.  You may obtain a copy of the License at</span>
<span class="source-line-no">009</span><span id="line-9"> *</span>
<span class="source-line-no">010</span><span id="line-10"> *     http://www.apache.org/licenses/LICENSE-2.0</span>
<span class="source-line-no">011</span><span id="line-11"> *</span>
<span class="source-line-no">012</span><span id="line-12"> * Unless required by applicable law or agreed to in writing, software</span>
<span class="source-line-no">013</span><span id="line-13"> * distributed under the License is distributed on an "AS IS" BASIS,</span>
<span class="source-line-no">014</span><span id="line-14"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
<span class="source-line-no">015</span><span id="line-15"> * See the License for the specific language governing permissions and</span>
<span class="source-line-no">016</span><span id="line-16"> * limitations under the License.</span>
<span class="source-line-no">017</span><span id="line-17"> */</span>
<span class="source-line-no">018</span><span id="line-18">package org.apache.hadoop.hbase;</span>
<span class="source-line-no">019</span><span id="line-19"></span>
<span class="source-line-no">020</span><span id="line-20">import static junit.framework.TestCase.assertEquals;</span>
<span class="source-line-no">021</span><span id="line-21"></span>
<span class="source-line-no">022</span><span id="line-22">import java.util.Arrays;</span>
<span class="source-line-no">023</span><span id="line-23">import java.util.Collection;</span>
<span class="source-line-no">024</span><span id="line-24">import java.util.List;</span>
<span class="source-line-no">025</span><span id="line-25">import org.apache.hadoop.hbase.testclassification.SmallTests;</span>
<span class="source-line-no">026</span><span id="line-26">import org.junit.ClassRule;</span>
<span class="source-line-no">027</span><span id="line-27">import org.junit.Test;</span>
<span class="source-line-no">028</span><span id="line-28">import org.junit.experimental.categories.Category;</span>
<span class="source-line-no">029</span><span id="line-29">import org.junit.runner.RunWith;</span>
<span class="source-line-no">030</span><span id="line-30">import org.junit.runners.Parameterized;</span>
<span class="source-line-no">031</span><span id="line-31">import org.junit.runners.Parameterized.Parameters;</span>
<span class="source-line-no">032</span><span id="line-32"></span>
<span class="source-line-no">033</span><span id="line-33">import org.apache.hbase.thirdparty.com.google.common.collect.Iterables;</span>
<span class="source-line-no">034</span><span id="line-34"></span>
<span class="source-line-no">035</span><span id="line-35">/**</span>
<span class="source-line-no">036</span><span id="line-36"> * Tests HBaseClassTestRule.</span>
<span class="source-line-no">037</span><span id="line-37"> */</span>
<span class="source-line-no">038</span><span id="line-38">@Category(SmallTests.class)</span>
<span class="source-line-no">039</span><span id="line-39">public class TestHBaseClassTestRule {</span>
<span class="source-line-no">040</span><span id="line-40"></span>
<span class="source-line-no">041</span><span id="line-41">  @ClassRule</span>
<span class="source-line-no">042</span><span id="line-42">  public static final HBaseClassTestRule CLASS_RULE =</span>
<span class="source-line-no">043</span><span id="line-43">    HBaseClassTestRule.forClass(TestHBaseClassTestRule.class);</span>
<span class="source-line-no">044</span><span id="line-44"></span>
<span class="source-line-no">045</span><span id="line-45">  // Test input classes of various kinds.</span>
<span class="source-line-no">046</span><span id="line-46">  private static class NonParameterizedClass {</span>
<span class="source-line-no">047</span><span id="line-47">    void dummy() {</span>
<span class="source-line-no">048</span><span id="line-48">    }</span>
<span class="source-line-no">049</span><span id="line-49"></span>
<span class="source-line-no">050</span><span id="line-50">    int dummy(int a) {</span>
<span class="source-line-no">051</span><span id="line-51">      return 0;</span>
<span class="source-line-no">052</span><span id="line-52">    }</span>
<span class="source-line-no">053</span><span id="line-53">  }</span>
<span class="source-line-no">054</span><span id="line-54"></span>
<span class="source-line-no">055</span><span id="line-55">  @RunWith(Parameterized.class)</span>
<span class="source-line-no">056</span><span id="line-56">  private static class ParameterizedClassWithNoParametersMethod {</span>
<span class="source-line-no">057</span><span id="line-57">    void dummy() {</span>
<span class="source-line-no">058</span><span id="line-58">    }</span>
<span class="source-line-no">059</span><span id="line-59">  }</span>
<span class="source-line-no">060</span><span id="line-60"></span>
<span class="source-line-no">061</span><span id="line-61">  @RunWith(Parameterized.class)</span>
<span class="source-line-no">062</span><span id="line-62">  @SuppressWarnings("UnusedMethod")</span>
<span class="source-line-no">063</span><span id="line-63">  private static class InValidParameterizedClass {</span>
<span class="source-line-no">064</span><span id="line-64">    // Not valid because parameters method is private.</span>
<span class="source-line-no">065</span><span id="line-65">    @Parameters</span>
<span class="source-line-no">066</span><span id="line-66">    private static List&lt;Object&gt; parameters() {</span>
<span class="source-line-no">067</span><span id="line-67">      return Arrays.asList(1, 2, 3, 4);</span>
<span class="source-line-no">068</span><span id="line-68">    }</span>
<span class="source-line-no">069</span><span id="line-69"></span>
<span class="source-line-no">070</span><span id="line-70">    int dummy(int a) {</span>
<span class="source-line-no">071</span><span id="line-71">      return 0;</span>
<span class="source-line-no">072</span><span id="line-72">    }</span>
<span class="source-line-no">073</span><span id="line-73">  }</span>
<span class="source-line-no">074</span><span id="line-74"></span>
<span class="source-line-no">075</span><span id="line-75">  @RunWith(Parameterized.class)</span>
<span class="source-line-no">076</span><span id="line-76">  private static class ValidParameterizedClass1 {</span>
<span class="source-line-no">077</span><span id="line-77">    @Parameters</span>
<span class="source-line-no">078</span><span id="line-78">    public static List&lt;Object&gt; parameters() {</span>
<span class="source-line-no">079</span><span id="line-79">      return Arrays.asList(1, 2, 3, 4, 5);</span>
<span class="source-line-no">080</span><span id="line-80">    }</span>
<span class="source-line-no">081</span><span id="line-81"></span>
<span class="source-line-no">082</span><span id="line-82">    int dummy(int a) {</span>
<span class="source-line-no">083</span><span id="line-83">      return 0;</span>
<span class="source-line-no">084</span><span id="line-84">    }</span>
<span class="source-line-no">085</span><span id="line-85">  }</span>
<span class="source-line-no">086</span><span id="line-86"></span>
<span class="source-line-no">087</span><span id="line-87">  @RunWith(Parameterized.class)</span>
<span class="source-line-no">088</span><span id="line-88">  private static class ValidParameterizedClass2 {</span>
<span class="source-line-no">089</span><span id="line-89">    @Parameters</span>
<span class="source-line-no">090</span><span id="line-90">    public static Object[] parameters() {</span>
<span class="source-line-no">091</span><span id="line-91">      return new Integer[] { 1, 2, 3, 4, 5, 6 };</span>
<span class="source-line-no">092</span><span id="line-92">    }</span>
<span class="source-line-no">093</span><span id="line-93">  }</span>
<span class="source-line-no">094</span><span id="line-94"></span>
<span class="source-line-no">095</span><span id="line-95">  @RunWith(Parameterized.class)</span>
<span class="source-line-no">096</span><span id="line-96">  private static class ValidParameterizedClass3 {</span>
<span class="source-line-no">097</span><span id="line-97">    @Parameters</span>
<span class="source-line-no">098</span><span id="line-98">    public static Iterable&lt;Integer&gt; parameters() {</span>
<span class="source-line-no">099</span><span id="line-99">      return Arrays.asList(1, 2, 3, 4, 5, 6, 7);</span>
<span class="source-line-no">100</span><span id="line-100">    }</span>
<span class="source-line-no">101</span><span id="line-101">  }</span>
<span class="source-line-no">102</span><span id="line-102"></span>
<span class="source-line-no">103</span><span id="line-103">  @RunWith(Parameterized.class)</span>
<span class="source-line-no">104</span><span id="line-104">  private static class ValidParameterizedClass4 {</span>
<span class="source-line-no">105</span><span id="line-105">    @Parameters</span>
<span class="source-line-no">106</span><span id="line-106">    public static Collection&lt;Integer&gt; parameters() {</span>
<span class="source-line-no">107</span><span id="line-107">      return Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);</span>
<span class="source-line-no">108</span><span id="line-108">    }</span>
<span class="source-line-no">109</span><span id="line-109">  }</span>
<span class="source-line-no">110</span><span id="line-110"></span>
<span class="source-line-no">111</span><span id="line-111">  @RunWith(Parameterized.class)</span>
<span class="source-line-no">112</span><span id="line-112">  private static class ExtendedParameterizedClass1 extends ValidParameterizedClass1 {</span>
<span class="source-line-no">113</span><span id="line-113">    // Should be inferred from the parent class.</span>
<span class="source-line-no">114</span><span id="line-114">    int dummy2(int a) {</span>
<span class="source-line-no">115</span><span id="line-115">      return 0;</span>
<span class="source-line-no">116</span><span id="line-116">    }</span>
<span class="source-line-no">117</span><span id="line-117">  }</span>
<span class="source-line-no">118</span><span id="line-118"></span>
<span class="source-line-no">119</span><span id="line-119">  @RunWith(Parameterized.class)</span>
<span class="source-line-no">120</span><span id="line-120">  private static class ExtendedParameterizedClass2 extends ValidParameterizedClass1 {</span>
<span class="source-line-no">121</span><span id="line-121">    // Should override the parent parameters class.</span>
<span class="source-line-no">122</span><span id="line-122">    @Parameters</span>
<span class="source-line-no">123</span><span id="line-123">    public static List&lt;Object&gt; parameters() {</span>
<span class="source-line-no">124</span><span id="line-124">      return Arrays.asList(1, 2, 3);</span>
<span class="source-line-no">125</span><span id="line-125">    }</span>
<span class="source-line-no">126</span><span id="line-126">  }</span>
<span class="source-line-no">127</span><span id="line-127"></span>
<span class="source-line-no">128</span><span id="line-128">  @Test</span>
<span class="source-line-no">129</span><span id="line-129">  public void testNumParameters() {</span>
<span class="source-line-no">130</span><span id="line-130">    // Invalid cases, expected to return 1.</span>
<span class="source-line-no">131</span><span id="line-131">    assertEquals(HBaseClassTestRule.getNumParameters(NonParameterizedClass.class), 1);</span>
<span class="source-line-no">132</span><span id="line-132">    assertEquals(</span>
<span class="source-line-no">133</span><span id="line-133">      HBaseClassTestRule.getNumParameters(ParameterizedClassWithNoParametersMethod.class), 1);</span>
<span class="source-line-no">134</span><span id="line-134">    assertEquals(HBaseClassTestRule.getNumParameters(InValidParameterizedClass.class), 1);</span>
<span class="source-line-no">135</span><span id="line-135">    // Valid parameterized classes.</span>
<span class="source-line-no">136</span><span id="line-136">    assertEquals(HBaseClassTestRule.getNumParameters(ValidParameterizedClass1.class),</span>
<span class="source-line-no">137</span><span id="line-137">      ValidParameterizedClass1.parameters().size());</span>
<span class="source-line-no">138</span><span id="line-138">    assertEquals(HBaseClassTestRule.getNumParameters(ValidParameterizedClass2.class),</span>
<span class="source-line-no">139</span><span id="line-139">      ValidParameterizedClass2.parameters().length);</span>
<span class="source-line-no">140</span><span id="line-140">    assertEquals(HBaseClassTestRule.getNumParameters(ValidParameterizedClass3.class),</span>
<span class="source-line-no">141</span><span id="line-141">      Iterables.size(ValidParameterizedClass3.parameters()));</span>
<span class="source-line-no">142</span><span id="line-142">    assertEquals(HBaseClassTestRule.getNumParameters(ValidParameterizedClass4.class),</span>
<span class="source-line-no">143</span><span id="line-143">      ValidParameterizedClass4.parameters().size());</span>
<span class="source-line-no">144</span><span id="line-144">    // Testing inheritance.</span>
<span class="source-line-no">145</span><span id="line-145">    assertEquals(HBaseClassTestRule.getNumParameters(ExtendedParameterizedClass1.class),</span>
<span class="source-line-no">146</span><span id="line-146">      ValidParameterizedClass1.parameters().size());</span>
<span class="source-line-no">147</span><span id="line-147">    assertEquals(HBaseClassTestRule.getNumParameters(ExtendedParameterizedClass2.class),</span>
<span class="source-line-no">148</span><span id="line-148">      ExtendedParameterizedClass2.parameters().size());</span>
<span class="source-line-no">149</span><span id="line-149">  }</span>
<span class="source-line-no">150</span><span id="line-150">}</span>




























































</pre>
</div>
</main>
</body>
</html>
