001/* 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the 007 * "License"); you may not use this file except in compliance 008 * with the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, software 013 * distributed under the License is distributed on an "AS IS" BASIS, 014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 015 * See the License for the specific language governing permissions and 016 * limitations under the License. 017 */ 018package org.apache.hadoop.hbase.hbtop.screen.top; 019 020import static org.hamcrest.CoreMatchers.is; 021import static org.hamcrest.MatcherAssert.assertThat; 022import static org.mockito.ArgumentMatchers.any; 023import static org.mockito.ArgumentMatchers.eq; 024import static org.mockito.Mockito.inOrder; 025import static org.mockito.Mockito.verify; 026import static org.mockito.Mockito.when; 027 028import java.util.ArrayList; 029import java.util.List; 030import java.util.function.Function; 031import org.apache.hadoop.hbase.HBaseClassTestRule; 032import org.apache.hadoop.hbase.hbtop.screen.ScreenView; 033import org.apache.hadoop.hbase.testclassification.SmallTests; 034import org.junit.Before; 035import org.junit.ClassRule; 036import org.junit.Test; 037import org.junit.experimental.categories.Category; 038import org.junit.runner.RunWith; 039import org.mockito.InOrder; 040import org.mockito.Mock; 041import org.mockito.runners.MockitoJUnitRunner; 042 043@Category(SmallTests.class) 044@RunWith(MockitoJUnitRunner.class) 045public class TestInputModeScreenPresenter { 046 047 @ClassRule 048 public static final HBaseClassTestRule CLASS_RULE = 049 HBaseClassTestRule.forClass(TestInputModeScreenPresenter.class); 050 051 private static final String TEST_INPUT_MESSAGE = "test input message"; 052 053 @Mock 054 private InputModeScreenView inputModeScreenView; 055 056 @Mock 057 private TopScreenView topScreenView; 058 059 @Mock 060 private Function<String, ScreenView> resultListener; 061 062 private InputModeScreenPresenter inputModeScreenPresenter; 063 064 @Before 065 public void setup() { 066 List<String> histories = new ArrayList<>(); 067 histories.add("history1"); 068 histories.add("history2"); 069 070 inputModeScreenPresenter = new InputModeScreenPresenter(inputModeScreenView, TEST_INPUT_MESSAGE, 071 histories, resultListener); 072 } 073 074 @Test 075 public void testInit() { 076 inputModeScreenPresenter.init(); 077 078 verify(inputModeScreenView).showInput(eq(TEST_INPUT_MESSAGE), eq(""), eq(0)); 079 } 080 081 @Test 082 public void testCharacter() { 083 inputModeScreenPresenter.character('a'); 084 inputModeScreenPresenter.character('b'); 085 inputModeScreenPresenter.character('c'); 086 087 InOrder inOrder = inOrder(inputModeScreenView); 088 inOrder.verify(inputModeScreenView).showInput(any(), eq("a"), eq(1)); 089 inOrder.verify(inputModeScreenView).showInput(any(), eq("ab"), eq(2)); 090 inOrder.verify(inputModeScreenView).showInput(any(), eq("abc"), eq(3)); 091 } 092 093 @Test 094 public void testArrowLeftAndRight() { 095 inputModeScreenPresenter.character('a'); 096 inputModeScreenPresenter.character('b'); 097 inputModeScreenPresenter.character('c'); 098 inputModeScreenPresenter.arrowLeft(); 099 inputModeScreenPresenter.arrowLeft(); 100 inputModeScreenPresenter.arrowLeft(); 101 inputModeScreenPresenter.arrowLeft(); 102 inputModeScreenPresenter.arrowRight(); 103 inputModeScreenPresenter.arrowRight(); 104 inputModeScreenPresenter.arrowRight(); 105 inputModeScreenPresenter.arrowRight(); 106 107 InOrder inOrder = inOrder(inputModeScreenView); 108 inOrder.verify(inputModeScreenView).showInput(any(), eq("a"), eq(1)); 109 inOrder.verify(inputModeScreenView).showInput(any(), eq("ab"), eq(2)); 110 inOrder.verify(inputModeScreenView).showInput(any(), eq("abc"), eq(3)); 111 inOrder.verify(inputModeScreenView).showInput(any(), eq("abc"), eq(2)); 112 inOrder.verify(inputModeScreenView).showInput(any(), eq("abc"), eq(1)); 113 inOrder.verify(inputModeScreenView).showInput(any(), eq("abc"), eq(0)); 114 inOrder.verify(inputModeScreenView).showInput(any(), eq("abc"), eq(1)); 115 inOrder.verify(inputModeScreenView).showInput(any(), eq("abc"), eq(2)); 116 inOrder.verify(inputModeScreenView).showInput(any(), eq("abc"), eq(3)); 117 } 118 119 @Test 120 public void testHomeAndEnd() { 121 inputModeScreenPresenter.character('a'); 122 inputModeScreenPresenter.character('b'); 123 inputModeScreenPresenter.character('c'); 124 inputModeScreenPresenter.home(); 125 inputModeScreenPresenter.home(); 126 inputModeScreenPresenter.end(); 127 inputModeScreenPresenter.end(); 128 129 InOrder inOrder = inOrder(inputModeScreenView); 130 inOrder.verify(inputModeScreenView).showInput(any(), eq("a"), eq(1)); 131 inOrder.verify(inputModeScreenView).showInput(any(), eq("ab"), eq(2)); 132 inOrder.verify(inputModeScreenView).showInput(any(), eq("abc"), eq(3)); 133 inOrder.verify(inputModeScreenView).showInput(any(), eq("abc"), eq(0)); 134 inOrder.verify(inputModeScreenView).showInput(any(), eq("abc"), eq(3)); 135 } 136 137 @Test 138 public void testBackspace() { 139 inputModeScreenPresenter.character('a'); 140 inputModeScreenPresenter.character('b'); 141 inputModeScreenPresenter.character('c'); 142 inputModeScreenPresenter.backspace(); 143 inputModeScreenPresenter.backspace(); 144 inputModeScreenPresenter.backspace(); 145 inputModeScreenPresenter.backspace(); 146 147 InOrder inOrder = inOrder(inputModeScreenView); 148 inOrder.verify(inputModeScreenView).showInput(any(), eq("a"), eq(1)); 149 inOrder.verify(inputModeScreenView).showInput(any(), eq("ab"), eq(2)); 150 inOrder.verify(inputModeScreenView).showInput(any(), eq("abc"), eq(3)); 151 inOrder.verify(inputModeScreenView).showInput(any(), eq("ab"), eq(2)); 152 inOrder.verify(inputModeScreenView).showInput(any(), eq("a"), eq(1)); 153 inOrder.verify(inputModeScreenView).showInput(any(), eq(""), eq(0)); 154 } 155 156 @Test 157 public void testDelete() { 158 inputModeScreenPresenter.character('a'); 159 inputModeScreenPresenter.character('b'); 160 inputModeScreenPresenter.character('c'); 161 inputModeScreenPresenter.delete(); 162 inputModeScreenPresenter.arrowLeft(); 163 inputModeScreenPresenter.delete(); 164 165 InOrder inOrder = inOrder(inputModeScreenView); 166 inOrder.verify(inputModeScreenView).showInput(any(), eq("a"), eq(1)); 167 inOrder.verify(inputModeScreenView).showInput(any(), eq("ab"), eq(2)); 168 inOrder.verify(inputModeScreenView).showInput(any(), eq("abc"), eq(3)); 169 inOrder.verify(inputModeScreenView).showInput(any(), eq("abc"), eq(2)); 170 inOrder.verify(inputModeScreenView).showInput(any(), eq("ab"), eq(2)); 171 } 172 173 @Test 174 public void testHistories() { 175 inputModeScreenPresenter.character('a'); 176 inputModeScreenPresenter.character('b'); 177 inputModeScreenPresenter.character('c'); 178 inputModeScreenPresenter.arrowUp(); 179 inputModeScreenPresenter.arrowUp(); 180 inputModeScreenPresenter.arrowUp(); 181 inputModeScreenPresenter.arrowDown(); 182 inputModeScreenPresenter.arrowDown(); 183 inputModeScreenPresenter.arrowDown(); 184 185 InOrder inOrder = inOrder(inputModeScreenView); 186 inOrder.verify(inputModeScreenView).showInput(any(), eq("a"), eq(1)); 187 inOrder.verify(inputModeScreenView).showInput(any(), eq("ab"), eq(2)); 188 inOrder.verify(inputModeScreenView).showInput(any(), eq("abc"), eq(3)); 189 inOrder.verify(inputModeScreenView).showInput(any(), eq("history2"), eq(8)); 190 inOrder.verify(inputModeScreenView).showInput(any(), eq("history1"), eq(8)); 191 inOrder.verify(inputModeScreenView).showInput(any(), eq("history2"), eq(8)); 192 } 193 194 @Test 195 public void testReturnToTopScreen() { 196 when(resultListener.apply(any())).thenReturn(topScreenView); 197 198 inputModeScreenPresenter.character('a'); 199 inputModeScreenPresenter.character('b'); 200 inputModeScreenPresenter.character('c'); 201 202 assertThat(inputModeScreenPresenter.returnToNextScreen(), is(topScreenView)); 203 verify(resultListener).apply(eq("abc")); 204 } 205}