/* * Copyright 2016 Nokia Solutions and Networks * Licensed under the Apache License, Version 2.0, * see license.txt file for details. */ package org.robotframework.ide.eclipse.main.plugin.tableeditor.source.assist; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import org.eclipse.core.resources.IFile; import org.junit.Test; import org.robotframework.ide.eclipse.main.plugin.RedPreferences; import org.robotframework.ide.eclipse.main.plugin.mockmodel.RobotSuiteFileCreator; import org.robotframework.ide.eclipse.main.plugin.model.RobotSuiteFile; import org.robotframework.ide.eclipse.main.plugin.tableeditor.source.assist.SuiteSourceAssistantContext.AssistPreferences; import com.google.common.base.Supplier; public class SuiteSourceAssistantContextTest { @Test public void contextProvidesModelSuppliedByGivenSupplier() { final RobotSuiteFile model = new RobotSuiteFileCreator().build(); assertThat(createContext(null).getModel()).isNull(); assertThat(createContext(model).getModel()).isSameAs(model); } @Test public void contextProperlyRecognizesTsvModel() { final RobotSuiteFile robotModel = new RobotSuiteFileCreator().buildReadOnly(); final RobotSuiteFile tsvModel = new RobotSuiteFileCreator().buildReadOnlyTsv(); assertThat(createContext(tsvModel).isTsvFile()).isTrue(); assertThat(createContext(robotModel).isTsvFile()).isFalse(); } @Test public void contextReturnsFileUsedByModel() { final RobotSuiteFile model = spy(new RobotSuiteFileCreator().build()); final IFile file = mock(IFile.class); when(model.getFile()).thenReturn(file); assertThat(createContext(model).getFile()).isSameAs(file); } @Test public void contextCachesAutomaticKeywordQualifiedNamePrefixPreference() { final MockRedPreferences preferences = spy(new MockRedPreferences(true, " ")); final SuiteSourceAssistantContext context = createContext(null, preferences); for (int i = 0; i < 10; i++) { assertThat(context.isKeywordPrefixAutoAdditionEnabled()).isTrue(); } preferences.setAssistantKeywordPrefixAutoAdditionEnabled(false); for (int i = 0; i < 10; i++) { assertThat(context.isKeywordPrefixAutoAdditionEnabled()).isTrue(); } context.refreshPreferences(); for (int i = 0; i < 10; i++) { assertThat(context.isKeywordPrefixAutoAdditionEnabled()).isFalse(); } verify(preferences, times(2)).isAssistantKeywordPrefixAutoAdditionEnabled(); } @Test public void contextCachesRobotFormatSeparatorPreference() { final RobotSuiteFile model = new RobotSuiteFileCreator().buildReadOnly(); final MockRedPreferences preferences = spy(new MockRedPreferences(true, " ")); final SuiteSourceAssistantContext context = createContext(model, preferences); for (int i = 0; i < 10; i++) { assertThat(context.getSeparatorToFollow()).isEqualTo(" "); } preferences.setSeparatorToUseInRobot(" | "); for (int i = 0; i < 10; i++) { assertThat(context.getSeparatorToFollow()).isEqualTo(" "); } context.refreshPreferences(); for (int i = 0; i < 10; i++) { assertThat(context.getSeparatorToFollow()).isEqualTo(" | "); } verify(preferences, times(2)).getSeparatorToUse(false); } @Test public void contextCachesTsvFormatSeparatorPreference() { final RobotSuiteFile model = new RobotSuiteFileCreator().buildReadOnlyTsv(); final MockRedPreferences preferences = spy(new MockRedPreferences(true, "\t")); final SuiteSourceAssistantContext context = createContext(model, preferences); for (int i = 0; i < 10; i++) { assertThat(context.getSeparatorToFollow()).isEqualTo("\t"); } preferences.setSeparatorToUseInTsv("\t\t"); for (int i = 0; i < 10; i++) { assertThat(context.getSeparatorToFollow()).isEqualTo("\t"); } context.refreshPreferences(); for (int i = 0; i < 10; i++) { assertThat(context.getSeparatorToFollow()).isEqualTo("\t\t"); } verify(preferences, times(2)).getSeparatorToUse(true); } @Test public void contextCachesAutoActivationCharsPreference() { final RobotSuiteFile model = new RobotSuiteFileCreator().buildReadOnlyTsv(); final MockRedPreferences preferences = spy(new MockRedPreferences(true, "\t", new char[] { 'a', 'b', 'c' })); final SuiteSourceAssistantContext context = createContext(model, preferences); for (int i = 0; i < 10; i++) { assertThat(context.getAssistantAutoActivationChars()).containsExactly('a', 'b', 'c'); } preferences.setAssistatntAutoActivationChars(new char[] { 'x', 'y', 'z' }); for (int i = 0; i < 10; i++) { assertThat(context.getAssistantAutoActivationChars()).containsExactly('a', 'b', 'c'); } context.refreshPreferences(); for (int i = 0; i < 10; i++) { assertThat(context.getAssistantAutoActivationChars()).containsExactly('x', 'y', 'z'); } verify(preferences, times(2)).getAssistantAutoActivationChars(); } private SuiteSourceAssistantContext createContext(final RobotSuiteFile model) { return new SuiteSourceAssistantContext(new Supplier<RobotSuiteFile>() { @Override public RobotSuiteFile get() { return model; } }); } private SuiteSourceAssistantContext createContext(final RobotSuiteFile model, final RedPreferences redPreferences) { return new SuiteSourceAssistantContext(new Supplier<RobotSuiteFile>() { @Override public RobotSuiteFile get() { return model; } }, new AssistPreferences(redPreferences)); } }