/* * Copyright 2010 The Rabbit Eclipse Plug-in Project * * 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 rabbit.ui.internal.pages; import static rabbit.ui.internal.pages.Category.DATE; import static rabbit.ui.internal.pages.Category.FILE; import rabbit.ui.IProvider; import rabbit.ui.internal.util.CategoryProvider; import rabbit.ui.internal.util.ICategorizer; import rabbit.ui.internal.util.ICategory; import rabbit.ui.internal.util.ICategoryProvider; import rabbit.ui.internal.util.IConverter; import rabbit.ui.internal.util.TreePathValueProvider; import com.google.common.collect.Lists; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.nullValue; import static org.junit.Assert.assertThat; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.mock; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.TreeColumn; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.XMLMemento; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; import static java.util.Arrays.asList; import java.util.List; /** * Tests for {@link StateHelper}. */ public class StateHelperTest { private StateHelper helper; private Shell shell; private Tree tree; @Before public void create() throws Exception { helper = StateHelper.of(XMLMemento.createWriteRoot("Testing"), "MyId"); shell = new Shell(PlatformUI.getWorkbench().getDisplay()); tree = new Tree(shell, SWT.NONE); } @After public void dispose() { shell.dispose(); } @Test public void restoreCategoriesShouldDoNothingIfNoCategoriesHaveBeenSaved() { ICategory[] categories = {DATE, FILE}; ICategoryProvider provider = new CategoryProvider(categories, categories); helper.restoreCategories(provider); assertThat(provider.getSelected(), equalTo(asList(categories))); } @Test(expected = NullPointerException.class) public void restoreCategoriesShouldThrowAnExceptionIfProviderIsNull() { helper.restoreCategories(null); } @Test public void restoreColumnWidthsShouldDoNothingIfNoWidthsHaveBeenSaved() { int width = 123; TreeColumn column = new TreeColumn(tree, SWT.NONE); column.setWidth(width); helper.restoreColumnWidths(new TreeColumn[]{column}); assertThat(column.getWidth(), equalTo(width)); } @Test(expected = NullPointerException.class) public void restoreColumnWidthsShouldThrowAnExceptionIfArgumentIsNull() { helper.restoreColumnWidths(null); } @Test(expected = NullPointerException.class) public void restoreColumnWidthsShouldThrowAnExceptionIfColumnsContainNull() { helper.restoreColumnWidths(new TreeColumn[]{null}); } @Test public void restoreVisualCategoryShouldDoNothingIsNoCategoryHasBeenSaved() { ICategorizer categorizer = mock(ICategorizer.class); given(categorizer.hasCategory(Mockito.<ICategory> any())).willReturn(true); @SuppressWarnings("unchecked") TreePathValueProvider provider = new TreePathValueProvider(categorizer, mock(IProvider.class), mock(IConverter.class)); provider.setVisualCategory(FILE); helper.restoreVisualCategory(provider); assertThat(provider.getVisualCategory(), equalTo((ICategory) FILE)); } @Test(expected = NullPointerException.class) public void restoreVisualCategoryShouldThrowAnExceptionIfArgumentIsNull() { helper.restoreVisualCategory(null); } @Test public void retrieveSavedCategoriesShouldReturnTheSavedCategories() { Category[] array = {DATE, FILE}; helper.saveCategories(array); assertThat(helper.retrieveSavedCategories(), equalTo(asList(array))); } @Test public void retrieveSavedCategoryShouldReturnNullIfNoneHasBeenSave() { assertThat(helper.retrieveSavedCategories(), nullValue()); } @Test public void retrieveSavedVisualCategoryShouldReturnNullIfNoneHasBeenSaved() { assertThat(helper.retrieveSavedVisualCategory(), nullValue()); } @Test public void retrieveSavedVisualCategoryShouldReturnTheSavedCategory() { helper.saveVisualCategory(DATE); assertThat(helper.retrieveSavedVisualCategory(), equalTo(DATE)); } @Test(expected = NullPointerException.class) public void saveCategoriesShouldThrowAnExceptionIfCategoriesContainNull() { helper.saveCategories(new Category[]{null}); } @Test(expected = NullPointerException.class) public void saveColumnWidthsShouldThrowAnExceptionIfArgumentIsNull() { helper.saveColumnWidths(null); } @Test(expected = NullPointerException.class) public void saveColumnWidthsShouldThrowAnExceptionIfColumnsContainNull() { helper.saveColumnWidths(new TreeColumn[]{null}); } @Test(expected = NullPointerException.class) public void saveVisualCategoryShouldThrowAnExceptionIfArgumentIsNull() { helper.saveVisualCategory(null); } @Test public void shouldBeAbleToPersistAndRestoreMultipleStates() { // For saving the visual category: Category visualCategory = FILE; ICategorizer categorizer = mock(ICategorizer.class); given(categorizer.hasCategory(Mockito.<ICategory> any())).willReturn(true); @SuppressWarnings("unchecked") TreePathValueProvider valueProvider = new TreePathValueProvider( categorizer, mock(IProvider.class), mock(IConverter.class), visualCategory); // For saving the column widths: int width = 101; TreeColumn column = new TreeColumn(tree, SWT.NONE); column.setWidth(width); // For saving the selected categories: final List<Category> expectedCategories = asList(DATE, FILE); final List<Category> actualCategories = Lists.newArrayList(); ICategoryProvider categoryProvider = mock(ICategoryProvider.class); doAnswer(new Answer<Void>() { @Override public Void answer(InvocationOnMock invocation) throws Throwable { for (Object obj : invocation.getArguments()) { actualCategories.add((Category) obj); } return null; } }).when(categoryProvider) .setSelected(expectedCategories.toArray(new Category[0])); // Save the states: helper .saveCategories(expectedCategories.toArray(new Category[0])) .saveVisualCategory(visualCategory) .saveColumnWidths(new TreeColumn[]{column}); // Change the states: categoryProvider.setSelected(FILE); valueProvider.setVisualCategory(DATE); column.setWidth(1); // Restore: helper .restoreCategories(categoryProvider) .restoreVisualCategory(valueProvider) .restoreColumnWidths(new TreeColumn[]{column}); assertThat(actualCategories, equalTo(expectedCategories)); assertThat(column.getWidth(), equalTo(width)); assertThat(valueProvider.getVisualCategory(), equalTo((ICategory) visualCategory)); } @Test public void shouldPersistTheCategories() { final List<Category> expected = asList(DATE, FILE); final List<Category> actual = Lists.newArrayList(); ICategoryProvider provider = mock(ICategoryProvider.class); doAnswer(new Answer<Void>() { @Override public Void answer(InvocationOnMock invocation) throws Throwable { for (Object obj : invocation.getArguments()) { actual.add((Category) obj); } return null; } }).when(provider).setSelected(expected.toArray(new Category[0])); helper.saveCategories(expected.toArray(new Category[0])); helper.restoreCategories(provider); assertThat(actual, equalTo(expected)); } @Test public void shouldPersistTheColumnWidths() { int width1 = 101; int width2 = 20; TreeColumn column1 = new TreeColumn(tree, SWT.NONE); column1.setWidth(width1); TreeColumn column2 = new TreeColumn(tree, SWT.NONE); column2.setWidth(width2); helper.saveColumnWidths(new TreeColumn[]{column1, column2}); column1.setWidth(1); column2.setWidth(2); helper.restoreColumnWidths(new TreeColumn[]{column1, column2}); assertThat(column1.getWidth(), equalTo(width1)); assertThat(column2.getWidth(), equalTo(width2)); } @Test public void shouldPersistTheVisualCategory() { ICategorizer categorizer = mock(ICategorizer.class); given(categorizer.hasCategory(Mockito.<ICategory> any())).willReturn(true); @SuppressWarnings("unchecked") TreePathValueProvider provider = new TreePathValueProvider(categorizer, mock(IProvider.class), mock(IConverter.class), FILE); helper.saveVisualCategory(DATE); helper.restoreVisualCategory(provider); assertThat(provider.getVisualCategory(), equalTo((ICategory) DATE)); } }