// -*- mode: java; c-basic-offset: 2; -*-
// Copyright 2009-2011 Google, All Rights reserved
// Copyright 2011-2012 MIT, All rights reserved
// Released under the Apache License, Version 2.0
// http://www.apache.org/licenses/LICENSE-2.0
package com.google.appinventor.client.editor.youngandroid.properties;
import junit.framework.TestCase;
import java.util.ArrayList;
import java.util.List;
/**
* Unit tests for {@link ListWithNone}.
*
* @author lizlooney@google.com (Liz Looney)
*/
public class ListWithNoneTest extends TestCase {
static class FakeListBox implements ListWithNone.ListBoxWrapper {
private final List<String> items = new ArrayList<String>();
private int selectedIndex = -1;
@Override
public void addItem(String item) {
items.add(item);
}
@Override
public String getItem(int index) {
return items.get(index);
}
@Override
public void removeItem(int index) {
items.remove(index);
}
@Override
public void setSelectedIndex(int index) {
selectedIndex = index;
}
};
private static final String NONE_DISPLAY_ITEM = "Nada";
private final FakeListBox fakeListBox = new FakeListBox();
private ListWithNone listWithNone;
@Override
protected void setUp() throws Exception {
super.setUp();
listWithNone = new ListWithNone(NONE_DISPLAY_ITEM, fakeListBox);
}
public void testNew() {
// The listbox should just contain the none item.
assertEquals(1, fakeListBox.items.size());
assertEquals(NONE_DISPLAY_ITEM, fakeListBox.items.get(0));
assertEquals(-1, fakeListBox.selectedIndex);
}
public void testAddItem() {
listWithNone.addItem("one");
listWithNone.addItem("two");
listWithNone.addItem("three");
// The listbox should just contain 4 items.
assertEquals(4, fakeListBox.items.size());
assertEquals(NONE_DISPLAY_ITEM, fakeListBox.items.get(0));
assertEquals("one", fakeListBox.items.get(1));
assertEquals("two", fakeListBox.items.get(2));
assertEquals("three", fakeListBox.items.get(3));
}
public void testAddItemWithDifferentDisplayItem() {
listWithNone.addItem("one", "1");
listWithNone.addItem("two", "2");
listWithNone.addItem("three", "3");
// The listbox should just contain 4 items matching the display items, not the values.
assertEquals(4, fakeListBox.items.size());
assertEquals(NONE_DISPLAY_ITEM, fakeListBox.items.get(0));
assertEquals("1", fakeListBox.items.get(1));
assertEquals("2", fakeListBox.items.get(2));
assertEquals("3", fakeListBox.items.get(3));
}
public void testSelectValue() {
listWithNone.addItem("one");
listWithNone.addItem("two");
listWithNone.addItem("three");
// Select an item.
listWithNone.selectValue("two");
assertEquals(2, fakeListBox.selectedIndex);
}
public void testRemoveValue() {
listWithNone.addItem("one");
listWithNone.addItem("two");
listWithNone.addItem("three");
// Remove an item.
listWithNone.removeValue("two");
// The listbox should just contain 3 items.
assertEquals(3, fakeListBox.items.size());
assertEquals(NONE_DISPLAY_ITEM, fakeListBox.items.get(0));
assertEquals("one", fakeListBox.items.get(1));
assertEquals("three", fakeListBox.items.get(2));
}
public void testGetValueAtIndex() {
listWithNone.addItem("one", "1");
listWithNone.addItem("two", "2");
listWithNone.addItem("three", "3");
assertEquals("", listWithNone.getValueAtIndex(0));
assertEquals("one", listWithNone.getValueAtIndex(1));
assertEquals("two", listWithNone.getValueAtIndex(2));
assertEquals("three", listWithNone.getValueAtIndex(3));
try {
listWithNone.getValueAtIndex(4);
fail();
} catch (IndexOutOfBoundsException e) {
// expected
}
}
public void testIndexOfValue() {
listWithNone.addItem("one", "1");
listWithNone.addItem("two", "2");
listWithNone.addItem("three", "3");
assertEquals(0, listWithNone.indexOfValue(""));
assertEquals(1, listWithNone.indexOfValue("one"));
assertEquals(2, listWithNone.indexOfValue("two"));
assertEquals(3, listWithNone.indexOfValue("three"));
assertEquals(-1, listWithNone.indexOfValue("four"));
}
public void testContainsValue() {
listWithNone.addItem("one", "1");
listWithNone.addItem("two", "2");
listWithNone.addItem("three", "3");
assertTrue(listWithNone.containsValue(""));
assertTrue(listWithNone.containsValue("one"));
assertTrue(listWithNone.containsValue("two"));
assertTrue(listWithNone.containsValue("three"));
assertFalse(listWithNone.containsValue("four"));
}
public void testGetDisplayItemForValue() {
listWithNone.addItem("one", "1");
listWithNone.addItem("two", "2");
listWithNone.addItem("three", "3");
assertEquals(NONE_DISPLAY_ITEM, listWithNone.getDisplayItemForValue(""));
assertEquals("1", listWithNone.getDisplayItemForValue("one"));
assertEquals("2", listWithNone.getDisplayItemForValue("two"));
assertEquals("3", listWithNone.getDisplayItemForValue("three"));
try {
listWithNone.getDisplayItemForValue("four");
fail();
} catch (IllegalArgumentException e) {
// expected
}
}
}