blob: ad9188b0302c9963069f59efd747377e605e69e0 [file] [log] [blame]
/*
* Copyright 2010 Google Inc.
*
* Licensed 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 com.google.gwt.user.client.ui;
import com.google.gwt.user.client.ui.SuggestBox.SuggestionCallback;
import com.google.gwt.user.client.ui.SuggestBox.SuggestionDisplay;
import com.google.gwt.user.client.ui.SuggestOracle.Suggestion;
import java.util.ArrayList;
import java.util.List;
/**
* Base tests for {@link SuggestionDisplay}.
*/
public abstract class SuggestionDisplayTestBase extends WidgetTestBase {
/**
* A no-op callback used for testing.
*/
protected static final SuggestionCallback NULL_CALLBACK = new SuggestionCallback() {
public void onSuggestionSelected(Suggestion suggestion) {
}
};
/**
* A simple {@link Suggestion} implementation that uses a single string for
* both the display and replacement string.
*/
private static class SimpleSuggestion implements Suggestion {
public String text;
public SimpleSuggestion(String text) {
this.text = text;
}
public String getDisplayString() {
return text;
}
public String getReplacementString() {
return text;
}
}
public void testMoveSelectionUpAndDown() {
SuggestBox box = new SuggestBox();
SuggestionDisplay display = box.getSuggestionDisplay();
SuggestOracle oracle = box.getSuggestOracle();
// Show some suggestions.
List<Suggestion> suggestions = createSuggestions("test0", "test1", "test2",
"test3");
display.showSuggestions(box, suggestions, false, false, NULL_CALLBACK);
assertNull(display.getCurrentSelection());
display.moveSelectionDown();
assertEquals(suggestions.get(0), display.getCurrentSelection());
display.moveSelectionDown();
assertEquals(suggestions.get(1), display.getCurrentSelection());
display.moveSelectionDown();
assertEquals(suggestions.get(2), display.getCurrentSelection());
display.moveSelectionUp();
assertEquals(suggestions.get(1), display.getCurrentSelection());
display.moveSelectionUp();
assertEquals(suggestions.get(0), display.getCurrentSelection());
}
public void testShowSuggestionsAutoSelectDisabled() {
SuggestBox box = new SuggestBox();
SuggestionDisplay display = box.getSuggestionDisplay();
SuggestOracle oracle = box.getSuggestOracle();
// Show some suggestions with auto select disabled.
List<Suggestion> suggestions = createSuggestions("test0", "test1", "test2");
display.showSuggestions(box, suggestions, false, false, NULL_CALLBACK);
// Nothing should be selected.
assertNull(display.getCurrentSelection());
}
public void testShowSuggestionsAutoSelectEnabled() {
SuggestBox box = new SuggestBox();
SuggestionDisplay display = box.getSuggestionDisplay();
SuggestOracle oracle = box.getSuggestOracle();
// Show some suggestions with auto select enabled.
List<Suggestion> suggestions = createSuggestions("test0", "test1", "test2");
display.showSuggestions(box, suggestions, false, true, NULL_CALLBACK);
// First item should be selected.
assertEquals(suggestions.get(0), display.getCurrentSelection());
}
/**
* Create a list of {@link Suggestion}.
*
* @param items the items to add to the list
* @return the list of suggestions
*/
protected List<Suggestion> createSuggestions(String... items) {
List<Suggestion> suggestions = new ArrayList<Suggestion>();
for (String item : items) {
suggestions.add(new SimpleSuggestion(item));
}
return suggestions;
}
/**
* Create a new {@link SuggestionDisplay} to test.
*
* @return the {@link SuggestionDisplay}
*/
protected abstract SuggestionDisplay createSuggestionDisplay();
/**
* Create a new {@link SuggestBox}.
*
* @return the {@link SuggestBox}
*/
protected SuggestBox createSuggestBox() {
MultiWordSuggestOracle oracle = createOracle();
return new SuggestBox(oracle, new TextBox(), createSuggestionDisplay());
}
private MultiWordSuggestOracle createOracle() {
MultiWordSuggestOracle oracle = new MultiWordSuggestOracle();
oracle.add("test");
oracle.add("test1");
oracle.add("test2");
oracle.add("test3");
oracle.add("test4");
oracle.add("john");
return oracle;
}
}