/*
* Copyright 2016 Nokia Solutions and Networks
* Licensed under the Apache License, Version 2.0,
* see license.txt file for details.
*/
package org.rf.ide.core.testdata.model.presenter.update;
import static com.google.common.collect.Iterables.transform;
import static com.google.common.collect.Lists.newArrayList;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verifyZeroInteractions;
import java.util.ArrayList;
import java.util.List;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.rf.ide.core.testdata.model.AModelElement;
import org.rf.ide.core.testdata.model.ModelType;
import org.rf.ide.core.testdata.model.RobotFile;
import org.rf.ide.core.testdata.model.RobotFileOutput;
import org.rf.ide.core.testdata.model.RobotVersion;
import org.rf.ide.core.testdata.model.table.KeywordTable;
import org.rf.ide.core.testdata.model.table.RobotExecutableRow;
import org.rf.ide.core.testdata.model.table.TestCaseTable;
import org.rf.ide.core.testdata.model.table.keywords.KeywordArguments;
import org.rf.ide.core.testdata.model.table.keywords.KeywordDocumentation;
import org.rf.ide.core.testdata.model.table.keywords.KeywordReturn;
import org.rf.ide.core.testdata.model.table.keywords.KeywordTags;
import org.rf.ide.core.testdata.model.table.keywords.KeywordTeardown;
import org.rf.ide.core.testdata.model.table.keywords.KeywordTimeout;
import org.rf.ide.core.testdata.model.table.keywords.KeywordUnknownSettings;
import org.rf.ide.core.testdata.model.table.keywords.UserKeyword;
import org.rf.ide.core.testdata.model.table.testcases.TestCase;
import org.rf.ide.core.testdata.model.table.testcases.TestCaseSetup;
import org.rf.ide.core.testdata.model.table.testcases.TestCaseTags;
import org.rf.ide.core.testdata.model.table.testcases.TestCaseTeardown;
import org.rf.ide.core.testdata.model.table.testcases.TestCaseTemplate;
import org.rf.ide.core.testdata.model.table.testcases.TestCaseTimeout;
import org.rf.ide.core.testdata.model.table.testcases.TestCaseUnknownSettings;
import org.rf.ide.core.testdata.model.table.testcases.TestDocumentation;
import org.rf.ide.core.testdata.text.read.IRobotTokenType;
import org.rf.ide.core.testdata.text.read.recognizer.RobotToken;
import org.rf.ide.core.testdata.text.read.recognizer.RobotTokenType;
import org.rf.ide.core.testdata.text.write.NewRobotFileTestHelper;
import com.google.common.base.Function;
public class KeywordTableModelUpdaterTest {
private final List<ModelType> testCaseModelTypes = newArrayList(ModelType.TEST_CASE_EXECUTABLE_ROW,
ModelType.TEST_CASE_SETTING_UNKNOWN, ModelType.TEST_CASE_DOCUMENTATION, ModelType.TEST_CASE_TAGS,
ModelType.TEST_CASE_TEARDOWN, ModelType.TEST_CASE_TIMEOUT, ModelType.TEST_CASE_SETUP,
ModelType.TEST_CASE_TEMPLATE);
private static KeywordTable keywordTable;
private static KeywordTableModelUpdater modelUpdater;
private UserKeyword userKeyword;
@BeforeClass
public static void setupModel() {
final RobotFile model = NewRobotFileTestHelper.getModelFileToModify("2.9");
model.includeKeywordTableSection();
keywordTable = model.getKeywordTable();
modelUpdater = new KeywordTableModelUpdater();
}
@Before
public void setupKeyword() {
userKeyword = keywordTable.createUserKeyword("UserKeyword");
}
@Test
public void testOperationAvailabilityForDifferentTokenTypes() {
assertThat(modelUpdater.getOperationHandler(RobotTokenType.KEYWORD_ACTION_NAME)).isNotNull();
assertThat(modelUpdater.getOperationHandler(RobotTokenType.KEYWORD_SETTING_UNKNOWN_DECLARATION)).isNotNull();
assertThat(modelUpdater.getOperationHandler(RobotTokenType.KEYWORD_SETTING_DOCUMENTATION)).isNotNull();
assertThat(modelUpdater.getOperationHandler(RobotTokenType.KEYWORD_SETTING_TAGS)).isNotNull();
assertThat(modelUpdater.getOperationHandler(RobotTokenType.KEYWORD_SETTING_TEARDOWN)).isNotNull();
assertThat(modelUpdater.getOperationHandler(RobotTokenType.KEYWORD_SETTING_TIMEOUT)).isNotNull();
assertThat(modelUpdater.getOperationHandler(RobotTokenType.KEYWORD_SETTING_ARGUMENTS)).isNotNull();
assertThat(modelUpdater.getOperationHandler(RobotTokenType.KEYWORD_SETTING_RETURN)).isNotNull();
}
@Test
public void testOperationAvailabilityForDifferentModelTypes() {
assertThat(modelUpdater.getOperationHandler(ModelType.USER_KEYWORD_EXECUTABLE_ROW)).isNotNull();
assertThat(modelUpdater.getOperationHandler(ModelType.USER_KEYWORD_SETTING_UNKNOWN)).isNotNull();
assertThat(modelUpdater.getOperationHandler(ModelType.USER_KEYWORD_DOCUMENTATION)).isNotNull();
assertThat(modelUpdater.getOperationHandler(ModelType.USER_KEYWORD_TAGS)).isNotNull();
assertThat(modelUpdater.getOperationHandler(ModelType.USER_KEYWORD_TEARDOWN)).isNotNull();
assertThat(modelUpdater.getOperationHandler(ModelType.USER_KEYWORD_TIMEOUT)).isNotNull();
assertThat(modelUpdater.getOperationHandler(ModelType.USER_KEYWORD_SETTING_UNKNOWN)).isNotNull();
assertThat(modelUpdater.getOperationHandler(ModelType.USER_KEYWORD_RETURN)).isNotNull();
for (final ModelType kwModelType : testCaseModelTypes) {
assertThat(modelUpdater.getOperationHandler(kwModelType)).isNotNull();
}
}
@Test
public void handlersForKeywordCannotCreateUpdateBulkUpdateOrRemoveAnything() {
final AModelElement<?> element = mock(AModelElement.class);
final UserKeyword keyword = mock(UserKeyword.class);
for (final ModelType tcModelType : testCaseModelTypes) {
final IExecutablesStepsHolderElementOperation<UserKeyword> handler = modelUpdater
.getOperationHandler(tcModelType);
try {
handler.create(keyword, "action", newArrayList("1", "2"), "");
fail("Expected exception");
} catch (final UnsupportedOperationException e) {
// we expected that
}
try {
handler.update(element, 0, "arg");
fail("Expected exception");
} catch (final UnsupportedOperationException e) {
// we expected that
}
try {
handler.update(element, newArrayList("arg1", "arg2"));
fail("Expected exception");
} catch (final UnsupportedOperationException e) {
// we expected that
}
try {
handler.remove(keyword, element);
fail("Expected exception");
} catch (final UnsupportedOperationException e) {
// we expected that
}
}
verifyZeroInteractions(keyword, element);
}
@Test
public void testExecutableRowCRUD() {
final ArrayList<String> execArgs = newArrayList("arg1", "arg2");
final String comment = "comment";
final String keywordName = "call";
final AModelElement<?> modelElement = modelUpdater.createExecutableRow(userKeyword, 0, keywordName, comment,
execArgs);
assertTrue(modelElement.getModelType() == ModelType.USER_KEYWORD_EXECUTABLE_ROW);
final RobotExecutableRow<?> executable = (RobotExecutableRow<?>) modelElement;
checkSetting(executable.getArguments(), execArgs, executable.getComment(), comment);
final String newArg3 = "arg3";
execArgs.set(1, newArg3);
final String newArg4 = "arg4";
execArgs.add(newArg4);
final String newComment = "new comment";
modelUpdater.updateArgument(executable, 1, newArg3);
modelUpdater.updateArgument(executable, 2, newArg4);
modelUpdater.updateComment(executable, newComment);
checkSetting(executable.getArguments(), execArgs, executable.getComment(), newComment);
final ArrayList<String> newArgs = newArrayList("1", "2", "3");
modelUpdater.setArguments(executable, newArgs);
checkSetting(executable.getArguments(), newArgs, executable.getComment(), newComment);
checkRemoveMethod(userKeyword.getKeywordExecutionRows(), modelElement);
}
@Test
public void testArgumentsCRUD() {
final String keywordSettingName = "[Arguments]";
final List<String> settingArgs = newArrayList("arg1", "arg2");
final String comment = "comment";
final AModelElement<?> modelElement = modelUpdater.createSetting(userKeyword, keywordSettingName, comment,
settingArgs);
assertTrue(modelElement.getModelType() == ModelType.USER_KEYWORD_ARGUMENTS);
final KeywordArguments setting = (KeywordArguments) modelElement;
checkSetting(setting.getArguments(), settingArgs, setting.getComment(), comment);
final String newArg3 = "arg3";
settingArgs.set(1, newArg3);
final String newArg4 = "arg4";
settingArgs.add(newArg4);
final String newComment = "new comment";
modelUpdater.updateArgument(setting, 1, newArg3);
modelUpdater.updateArgument(setting, 2, newArg4);
modelUpdater.updateComment(setting, newComment);
checkSetting(setting.getArguments(), settingArgs, setting.getComment(), newComment);
final ArrayList<String> newArgs = newArrayList("1", "2", "3");
modelUpdater.setArguments(setting, newArgs);
checkSetting(setting.getArguments(), newArgs, setting.getComment(), newComment);
checkRemoveMethod(userKeyword.getArguments(), modelElement);
}
@Test
public void testDocumentationCRUD() {
final String keywordSettingName = "[Documentation]";
final List<String> settingArgs = newArrayList("arg1", "arg2");
final String comment = "comment";
final AModelElement<?> modelElement = modelUpdater.createSetting(userKeyword, keywordSettingName, comment,
settingArgs);
assertTrue(modelElement.getModelType() == ModelType.USER_KEYWORD_DOCUMENTATION);
final KeywordDocumentation setting = (KeywordDocumentation) modelElement;
checkSetting(setting.getDocumentationText(), settingArgs, setting.getComment(), comment);
settingArgs.clear();
final String newArg3 = "arg3";
settingArgs.add(newArg3);
final String newComment = "new comment";
modelUpdater.updateArgument(setting, 0, newArg3);
modelUpdater.updateComment(setting, newComment);
checkSetting(setting.getDocumentationText(), newArrayList(newArg3), setting.getComment(), newComment);
modelUpdater.setArguments(setting, newArrayList("1", "2", "3"));
checkSetting(setting.getDocumentationText(), newArrayList("1"), setting.getComment(), newComment);
checkRemoveMethod(userKeyword.getDocumentation(), modelElement);
}
@Test
public void testTagsCRUD() {
final String keywordSettingName = "[Tags]";
final List<String> settingArgs = newArrayList("arg1", "arg2");
final String comment = "comment";
final AModelElement<?> modelElement = modelUpdater.createSetting(userKeyword, keywordSettingName, comment,
settingArgs);
assertTrue(modelElement.getModelType() == ModelType.USER_KEYWORD_TAGS);
final KeywordTags setting = (KeywordTags) modelElement;
checkSetting(setting.getTags(), settingArgs, setting.getComment(), comment);
final String newArg3 = "arg3";
settingArgs.set(1, newArg3);
final String newArg4 = "arg4";
settingArgs.add(newArg4);
final String newComment = "new comment";
modelUpdater.updateArgument(setting, 1, newArg3);
modelUpdater.updateArgument(setting, 2, newArg4);
modelUpdater.updateComment(setting, newComment);
checkSetting(setting.getTags(), settingArgs, setting.getComment(), newComment);
final ArrayList<String> newArgs = newArrayList("1", "2", "3");
modelUpdater.setArguments(setting, newArgs);
checkSetting(setting.getTags(), newArgs, setting.getComment(), newComment);
checkRemoveMethod(userKeyword.getTags(), modelElement);
}
@Test
public void testTimeoutCRUD() {
final String keywordSettingName = "[Timeout]";
final String timeout = "2 seconds";
final List<String> settingArgs = newArrayList("arg1", "arg2");
final List<String> args = newArrayList(timeout);
args.addAll(settingArgs);
final String comment = "comment";
final AModelElement<?> modelElement = modelUpdater.createSetting(userKeyword, keywordSettingName, comment,
args);
assertTrue(modelElement.getModelType() == ModelType.USER_KEYWORD_TIMEOUT);
final KeywordTimeout setting = (KeywordTimeout) modelElement;
checkSetting(setting.getTimeout(), timeout, setting.getMessage(), settingArgs, setting.getComment(), comment);
final String newTimeout = "3 seconds";
final String newArg3 = "arg3";
settingArgs.set(1, newArg3);
final String newArg4 = "arg4";
settingArgs.add(newArg4);
final String newComment = "new comment";
modelUpdater.updateArgument(setting, 0, newTimeout);
modelUpdater.updateArgument(setting, 2, newArg3);
modelUpdater.updateArgument(setting, 3, newArg4);
modelUpdater.updateComment(setting, newComment);
checkSetting(setting.getTimeout(), newTimeout, setting.getMessage(), settingArgs, setting.getComment(),
newComment);
modelUpdater.setArguments(setting, newArrayList("1", "2", "3"));
checkSetting(setting.getTimeout(), "1", setting.getMessage(), newArrayList("2", "3"), setting.getComment(),
newComment);
checkRemoveMethod(userKeyword.getTimeouts(), modelElement);
}
@Test
public void testTeardownCRUD() {
final String keywordSettingName = "[Teardown]";
final String teardown = "teardown";
final List<String> settingArgs = newArrayList("arg1", "arg2");
final List<String> args = newArrayList(teardown);
args.addAll(settingArgs);
final String comment = "comment";
final AModelElement<?> modelElement = modelUpdater.createSetting(userKeyword, keywordSettingName, comment,
args);
assertTrue(modelElement.getModelType() == ModelType.USER_KEYWORD_TEARDOWN);
final KeywordTeardown setting = (KeywordTeardown) modelElement;
checkSetting(setting.getKeywordName(), teardown, setting.getArguments(), settingArgs, setting.getComment(),
comment);
final String newTeardown = "teardown2";
final String newArg3 = "arg3";
settingArgs.set(1, newArg3);
final String newArg4 = "arg4";
settingArgs.add(newArg4);
final String newComment = "new comment";
modelUpdater.updateArgument(setting, 0, newTeardown);
modelUpdater.updateArgument(setting, 2, newArg3);
modelUpdater.updateArgument(setting, 3, newArg4);
modelUpdater.updateComment(setting, newComment);
checkSetting(setting.getKeywordName(), newTeardown, setting.getArguments(), settingArgs, setting.getComment(),
newComment);
modelUpdater.setArguments(setting, newArrayList("1", "2", "3"));
checkSetting(setting.getKeywordName(), "1", setting.getArguments(), newArrayList("2", "3"),
setting.getComment(), newComment);
checkRemoveMethod(userKeyword.getTeardowns(), modelElement);
}
@Test
public void testReturnCRUD() {
final String keywordSettingName = "[Return]";
final List<String> settingArgs = newArrayList("arg1", "arg2");
final String comment = "comment";
final AModelElement<?> modelElement = modelUpdater.createSetting(userKeyword, keywordSettingName, comment,
settingArgs);
assertTrue(modelElement.getModelType() == ModelType.USER_KEYWORD_RETURN);
final KeywordReturn setting = (KeywordReturn) modelElement;
checkSetting(setting.getReturnValues(), settingArgs, setting.getComment(), comment);
final String newArg3 = "arg3";
settingArgs.set(1, newArg3);
final String newArg4 = "arg4";
settingArgs.add(newArg4);
final String newComment = "new comment";
modelUpdater.updateArgument(setting, 1, newArg3);
modelUpdater.updateArgument(setting, 2, newArg4);
modelUpdater.updateComment(setting, newComment);
checkSetting(setting.getReturnValues(), settingArgs, setting.getComment(), newComment);
final ArrayList<String> newArgs = newArrayList("1", "2", "3");
modelUpdater.setArguments(setting, newArgs);
checkSetting(setting.getReturnValues(), newArgs, setting.getComment(), newComment);
checkRemoveMethod(userKeyword.getReturns(), modelElement);
}
@Test(expected = IllegalArgumentException.class)
public void exceptionIsThrown_whenCreatingExecutableRowForNullCase() {
modelUpdater.createExecutableRow(null, 0, "some action", "comment", newArrayList("a", "b", "c"));
}
@Test(expected = IndexOutOfBoundsException.class)
public void outOfBoundsExceptionIsThrown_whenTryingToCreateExecutableRowWithMismatchingIndex() {
assertThat(userKeyword.getKeywordExecutionRows()).isEmpty();
modelUpdater.createExecutableRow(userKeyword, 2, "some action", "comment", newArrayList("a", "b", "c"));
}
@Test(expected = IllegalArgumentException.class)
public void exceptionIsThrown_whenCreatingSettingForNullCase() {
modelUpdater.createSetting(null, "Setup", "comment", newArrayList("a", "b", "c"));
}
@Test
public void testUnknownCRUD() {
final ArrayList<String> settingArgs = newArrayList("arg1", "arg2");
final String comment = "comment";
final String keywordSettingName = "[Unknown]";
final AModelElement<?> modelElement = modelUpdater.createSetting(userKeyword, keywordSettingName, comment,
settingArgs);
assertTrue(modelElement.getModelType() == ModelType.USER_KEYWORD_SETTING_UNKNOWN);
final KeywordUnknownSettings setting = (KeywordUnknownSettings) modelElement;
checkSetting(setting.getArguments(), settingArgs, setting.getComment(), comment);
final String newArg3 = "arg3";
settingArgs.set(1, newArg3);
final String newArg4 = "arg4";
settingArgs.add(newArg4);
final String newComment = "new comment";
modelUpdater.updateArgument(setting, 1, newArg3);
modelUpdater.updateArgument(setting, 2, newArg4);
modelUpdater.updateComment(setting, newComment);
checkSetting(setting.getArguments(), settingArgs, setting.getComment(), newComment);
checkRemoveMethod(userKeyword.getUnknownSettings(), modelElement);
}
@Test
public void testUpdateParent() {
final RobotToken declaration = new RobotToken();
final KeywordArguments args = new KeywordArguments(declaration);
final KeywordDocumentation doc = new KeywordDocumentation(declaration);
final KeywordTags tags = new KeywordTags(declaration);
final KeywordTimeout timeout = new KeywordTimeout(declaration);
final KeywordTeardown teardown = new KeywordTeardown(declaration);
final KeywordReturn returnValue = new KeywordReturn(declaration);
modelUpdater.insert(userKeyword, 0, args);
modelUpdater.insert(userKeyword, 0, doc);
modelUpdater.insert(userKeyword, 0, tags);
modelUpdater.insert(userKeyword, 0, timeout);
modelUpdater.insert(userKeyword, 0, teardown);
modelUpdater.insert(userKeyword, 0, returnValue);
assertTrue(userKeyword.getArguments().contains(args));
assertTrue(userKeyword.getDocumentation().contains(doc));
assertTrue(userKeyword.getTags().contains(tags));
assertTrue(userKeyword.getTimeouts().contains(timeout));
assertTrue(userKeyword.getTeardowns().contains(teardown));
assertTrue(userKeyword.getReturns().contains(returnValue));
}
@Test
public void testCaseExecutableRowIsProperlyMorphedIntoExecutableRow_whenInserted() {
final RobotExecutableRow<TestCase> tcExecutionRow = new RobotExecutableRow<>();
tcExecutionRow.setAction(RobotToken.create("action"));
tcExecutionRow.addArgument(RobotToken.create("a"));
tcExecutionRow.addArgument(RobotToken.create("b"));
tcExecutionRow.setComment("comment");
final TestCase testCase = createCase();
testCase.addTestExecutionRow(tcExecutionRow);
final UserKeyword keyword = createKeyword();
assertThat(keyword.getKeywordExecutionRows()).isEmpty();
modelUpdater.insert(keyword, 0, tcExecutionRow);
assertThat(keyword.getKeywordExecutionRows()).hasSize(1);
final RobotExecutableRow<UserKeyword> row = keyword.getKeywordExecutionRows().get(0);
assertThat(row.getParent()).isSameAs(keyword);
assertThat(row.getModelType()).isEqualTo(ModelType.USER_KEYWORD_EXECUTABLE_ROW);
assertThat(transform(row.getElementTokens(), toText())).containsExactly("action", "a", "b", "#comment");
assertThat(transform(row.getElementTokens(), toType())).containsExactly(RobotTokenType.KEYWORD_ACTION_NAME,
RobotTokenType.KEYWORD_ACTION_ARGUMENT, RobotTokenType.KEYWORD_ACTION_ARGUMENT,
RobotTokenType.START_HASH_COMMENT);
}
@Test
public void testCaseSetupSettingIsProperlyMorphedIntoUnknownSetting_whenInserted() {
final TestCaseSetup setupSetting = (TestCaseSetup) new TestCaseTableModelUpdater()
.createSetting(createCase(), "[Setup]", "comment", newArrayList("a", "b", "c"));
final UserKeyword keyword = createKeyword();
assertThat(keyword.getUnknownSettings()).isEmpty();
modelUpdater.insert(keyword, 0, setupSetting);
assertThat(keyword.getUnknownSettings()).hasSize(1);
final KeywordUnknownSettings setting = keyword.getUnknownSettings().get(0);
assertThat(setting.getParent()).isSameAs(keyword);
assertThat(setting.getModelType()).isEqualTo(ModelType.USER_KEYWORD_SETTING_UNKNOWN);
assertThat(transform(setting.getElementTokens(), toText())).containsExactly("[Setup]", "a", "b", "c",
"#comment");
assertThat(transform(setting.getElementTokens(), toType())).containsExactly(
RobotTokenType.KEYWORD_SETTING_UNKNOWN_DECLARATION, RobotTokenType.KEYWORD_SETTING_UNKNOWN_ARGUMENTS,
RobotTokenType.KEYWORD_SETTING_UNKNOWN_ARGUMENTS, RobotTokenType.KEYWORD_SETTING_UNKNOWN_ARGUMENTS,
RobotTokenType.START_HASH_COMMENT);
}
@Test
public void testCaseTemplateSettingIsProperlyMorphedIntoUnknownSetting_whenInserted() {
final TestCaseTemplate templateSetting = (TestCaseTemplate) new TestCaseTableModelUpdater()
.createSetting(createCase(), "[Template]", "comment", newArrayList("a", "b", "c"));
final UserKeyword keyword = createKeyword();
assertThat(keyword.getUnknownSettings()).isEmpty();
modelUpdater.insert(keyword, 0, templateSetting);
assertThat(keyword.getUnknownSettings()).hasSize(1);
final KeywordUnknownSettings setting = keyword.getUnknownSettings().get(0);
assertThat(setting.getParent()).isSameAs(keyword);
assertThat(setting.getModelType()).isEqualTo(ModelType.USER_KEYWORD_SETTING_UNKNOWN);
assertThat(transform(setting.getElementTokens(), toText())).containsExactly("[Template]", "a", "b", "c",
"#comment");
assertThat(transform(setting.getElementTokens(), toType())).containsExactly(
RobotTokenType.KEYWORD_SETTING_UNKNOWN_DECLARATION, RobotTokenType.KEYWORD_SETTING_UNKNOWN_ARGUMENTS,
RobotTokenType.KEYWORD_SETTING_UNKNOWN_ARGUMENTS, RobotTokenType.KEYWORD_SETTING_UNKNOWN_ARGUMENTS,
RobotTokenType.START_HASH_COMMENT);
}
@Test
public void testCaseTagsSettingIsProperlyMorphedIntoTagsSetting_whenInserted() {
final TestCaseTags tagsSettingSetting = (TestCaseTags) new TestCaseTableModelUpdater()
.createSetting(createCase(), "[Tags]", "comment", newArrayList("a", "b", "c"));
final UserKeyword keyword = createKeyword();
assertThat(keyword.getTags()).isEmpty();
modelUpdater.insert(keyword, 0, tagsSettingSetting);
assertThat(keyword.getTags()).hasSize(1);
final KeywordTags setting = keyword.getTags().get(0);
assertThat(setting.getParent()).isSameAs(keyword);
assertThat(setting.getModelType()).isEqualTo(ModelType.USER_KEYWORD_TAGS);
assertThat(transform(setting.getElementTokens(), toText())).containsExactly("[Tags]", "a", "b", "c",
"#comment");
assertThat(transform(setting.getElementTokens(), toType())).containsExactly(
RobotTokenType.KEYWORD_SETTING_TAGS, RobotTokenType.KEYWORD_SETTING_TAGS_TAG_NAME,
RobotTokenType.KEYWORD_SETTING_TAGS_TAG_NAME, RobotTokenType.KEYWORD_SETTING_TAGS_TAG_NAME,
RobotTokenType.START_HASH_COMMENT);
}
@Test
public void testCaseTeardownSettingIsProperlyMorphedIntoTeardownSetting_whenInserted() {
final TestCaseTeardown teardownSetting = (TestCaseTeardown) new TestCaseTableModelUpdater()
.createSetting(createCase(), "[Teardown]", "comment", newArrayList("a", "b", "c"));
final UserKeyword keyword = createKeyword();
assertThat(keyword.getTeardowns()).isEmpty();
modelUpdater.insert(keyword, 0, teardownSetting);
assertThat(keyword.getTeardowns()).hasSize(1);
final KeywordTeardown setting = keyword.getTeardowns().get(0);
assertThat(setting.getParent()).isSameAs(keyword);
assertThat(setting.getModelType()).isEqualTo(ModelType.USER_KEYWORD_TEARDOWN);
assertThat(transform(setting.getElementTokens(), toText())).containsExactly("[Teardown]", "a", "b", "c",
"#comment");
assertThat(transform(setting.getElementTokens(), toType())).containsExactly(
RobotTokenType.KEYWORD_SETTING_TEARDOWN, RobotTokenType.KEYWORD_SETTING_TEARDOWN_KEYWORD_NAME,
RobotTokenType.KEYWORD_SETTING_TEARDOWN_KEYWORD_ARGUMENT,
RobotTokenType.KEYWORD_SETTING_TEARDOWN_KEYWORD_ARGUMENT, RobotTokenType.START_HASH_COMMENT);
}
@Test
public void testCaseTimeoutSettingIsProperlyMorphedIntoTimeoutSetting_whenInserted() {
final TestCaseTimeout timeoutSetting = (TestCaseTimeout) new TestCaseTableModelUpdater()
.createSetting(createCase(), "[Timeout]", "comment", newArrayList("a", "b", "c"));
final UserKeyword keyword = createKeyword();
assertThat(keyword.getTimeouts()).isEmpty();
modelUpdater.insert(keyword, 0, timeoutSetting);
assertThat(keyword.getTimeouts()).hasSize(1);
final KeywordTimeout setting = keyword.getTimeouts().get(0);
assertThat(setting.getParent()).isSameAs(keyword);
assertThat(setting.getModelType()).isEqualTo(ModelType.USER_KEYWORD_TIMEOUT);
assertThat(transform(setting.getElementTokens(), toText())).containsExactly("[Timeout]", "a", "b", "c",
"#comment");
assertThat(transform(setting.getElementTokens(), toType())).containsExactly(
RobotTokenType.KEYWORD_SETTING_TIMEOUT, RobotTokenType.KEYWORD_SETTING_TIMEOUT_VALUE,
RobotTokenType.KEYWORD_SETTING_TIMEOUT_MESSAGE, RobotTokenType.KEYWORD_SETTING_TIMEOUT_MESSAGE,
RobotTokenType.START_HASH_COMMENT);
}
@Test
public void testCaseDocumentationSettingIsProperlyMorphedIntoDocumentationSetting_whenInserted() {
final TestDocumentation docSetting = (TestDocumentation) new TestCaseTableModelUpdater()
.createSetting(createCase(), "[Documentation]", "comment", newArrayList("a", "b", "c"));
final UserKeyword keyword = createKeyword();
assertThat(keyword.getDocumentation()).isEmpty();
modelUpdater.insert(keyword, 0, docSetting);
assertThat(keyword.getDocumentation()).hasSize(1);
final KeywordDocumentation setting = keyword.getDocumentation().get(0);
assertThat(setting.getParent()).isSameAs(keyword);
assertThat(setting.getModelType()).isEqualTo(ModelType.USER_KEYWORD_DOCUMENTATION);
assertThat(transform(setting.getElementTokens(), toText())).containsExactly("[Documentation]", "a", "b", "c",
"#comment");
assertThat(transform(setting.getElementTokens(), toType())).containsExactly(
RobotTokenType.KEYWORD_SETTING_DOCUMENTATION, RobotTokenType.KEYWORD_SETTING_DOCUMENTATION_TEXT,
RobotTokenType.KEYWORD_SETTING_DOCUMENTATION_TEXT, RobotTokenType.KEYWORD_SETTING_DOCUMENTATION_TEXT,
RobotTokenType.START_HASH_COMMENT);
}
@Test
public void testCaseUnknownSetupSettingIsProperlyMorphedIntoArgumentsSetting_whenInserted() {
final TestCaseUnknownSettings tcSetting = new TestCaseUnknownSettings(RobotToken.create("[Arguments]"));
tcSetting.addArgument(RobotToken.create("a"));
tcSetting.addArgument(RobotToken.create("b"));
tcSetting.addArgument(RobotToken.create("c"));
tcSetting.setComment("comment");
final UserKeyword keyword = createKeyword();
assertThat(keyword.getArguments()).isEmpty();
modelUpdater.insert(keyword, 0, tcSetting);
assertThat(keyword.getArguments()).hasSize(1);
final KeywordArguments setting = keyword.getArguments().get(0);
assertThat(setting.getParent()).isSameAs(keyword);
assertThat(setting.getModelType()).isEqualTo(ModelType.USER_KEYWORD_ARGUMENTS);
assertThat(transform(setting.getElementTokens(), toText())).containsExactly("[Arguments]", "a", "b", "c",
"#comment");
assertThat(transform(setting.getElementTokens(), toType())).containsExactly(
RobotTokenType.KEYWORD_SETTING_ARGUMENTS, RobotTokenType.KEYWORD_SETTING_ARGUMENT,
RobotTokenType.KEYWORD_SETTING_ARGUMENT, RobotTokenType.KEYWORD_SETTING_ARGUMENT,
RobotTokenType.START_HASH_COMMENT);
}
@Test
public void testCaseUnknownTemplateSettingIsProperlyMorphedIntoReturnSetting_whenInserted() {
final TestCaseUnknownSettings tcSetting = new TestCaseUnknownSettings(RobotToken.create("[Return]"));
tcSetting.addArgument(RobotToken.create("a"));
tcSetting.addArgument(RobotToken.create("b"));
tcSetting.addArgument(RobotToken.create("c"));
tcSetting.setComment("comment");
final UserKeyword keyword = createKeyword();
assertThat(keyword.getReturns()).isEmpty();
modelUpdater.insert(keyword, 0, tcSetting);
assertThat(keyword.getReturns()).hasSize(1);
final KeywordReturn setting = keyword.getReturns().get(0);
assertThat(setting.getParent()).isSameAs(keyword);
assertThat(setting.getModelType()).isEqualTo(ModelType.USER_KEYWORD_RETURN);
assertThat(transform(setting.getElementTokens(), toText())).containsExactly("[Return]", "a", "b", "c",
"#comment");
assertThat(transform(setting.getElementTokens(), toType())).containsExactly(
RobotTokenType.KEYWORD_SETTING_RETURN, RobotTokenType.KEYWORD_SETTING_RETURN_VALUE,
RobotTokenType.KEYWORD_SETTING_RETURN_VALUE, RobotTokenType.KEYWORD_SETTING_RETURN_VALUE,
RobotTokenType.START_HASH_COMMENT);
}
@Test
public void testCaseUnknownTemplateSettingIsProperlyMorphedIntoUnknownSetting_whenInserted() {
final TestCaseUnknownSettings tcSetting = new TestCaseUnknownSettings(RobotToken.create("[something]"));
tcSetting.addArgument(RobotToken.create("a"));
tcSetting.addArgument(RobotToken.create("b"));
tcSetting.addArgument(RobotToken.create("c"));
tcSetting.setComment("comment");
final UserKeyword keyword = createKeyword();
assertThat(keyword.getUnknownSettings()).isEmpty();
modelUpdater.insert(keyword, 0, tcSetting);
assertThat(keyword.getUnknownSettings()).hasSize(1);
final KeywordUnknownSettings setting = keyword.getUnknownSettings().get(0);
assertThat(setting.getParent()).isSameAs(keyword);
assertThat(setting.getModelType()).isEqualTo(ModelType.USER_KEYWORD_SETTING_UNKNOWN);
assertThat(transform(setting.getElementTokens(), toText())).containsExactly("[something]", "a", "b", "c",
"#comment");
assertThat(transform(setting.getElementTokens(), toType())).containsExactly(
RobotTokenType.KEYWORD_SETTING_UNKNOWN_DECLARATION, RobotTokenType.KEYWORD_SETTING_UNKNOWN_ARGUMENTS,
RobotTokenType.KEYWORD_SETTING_UNKNOWN_ARGUMENTS, RobotTokenType.KEYWORD_SETTING_UNKNOWN_ARGUMENTS,
RobotTokenType.START_HASH_COMMENT);
}
private void checkSetting(final RobotToken actualKeywordName, final String expectedKeywordName,
final List<RobotToken> actualArguments, final List<String> expectedArguments,
final List<RobotToken> actualComments, final String expectedComment) {
assertTrue(actualKeywordName.getText().equals(expectedKeywordName));
checkSettingArguments(actualArguments, expectedArguments);
checkSettingComment(actualComments, expectedComment);
}
private void checkSetting(final List<RobotToken> actualArguments, final List<String> expectedArguments,
final List<RobotToken> actualComments, final String expectedComment) {
checkSettingArguments(actualArguments, expectedArguments);
checkSettingComment(actualComments, expectedComment);
}
private void checkSettingComment(final List<RobotToken> actualComments, final String expectedComment) {
assertTrue(actualComments.get(0).getText().equals("#" + expectedComment));
}
private void checkSettingArguments(final List<RobotToken> actualArguments, final List<String> expectedArguments) {
assertEquals(expectedArguments.size(), actualArguments.size());
for (int i = 0; i < actualArguments.size(); i++) {
assertTrue(actualArguments.get(i).getText().equals(expectedArguments.get(i)));
}
}
private void checkRemoveMethod(final List<?> keywordSettings, final AModelElement<?> modelElement) {
assertFalse(keywordSettings.isEmpty());
modelUpdater.remove(userKeyword, modelElement);
assertTrue(keywordSettings.isEmpty());
}
private static TestCase createCase() {
final RobotFileOutput parentFileOutput = new RobotFileOutput(RobotVersion.from("3.0.0"));
final RobotFile parent = new RobotFile(parentFileOutput);
final TestCaseTable table = new TestCaseTable(parent);
final TestCase testCase = new TestCase(RobotToken.create("case"));
testCase.setParent(table);
table.addTest(testCase);
return testCase;
}
private static UserKeyword createKeyword() {
final RobotFileOutput parentFileOutput = new RobotFileOutput(RobotVersion.from("3.0.0"));
final RobotFile parent = new RobotFile(parentFileOutput);
final KeywordTable table = new KeywordTable(parent);
final UserKeyword keyword = new UserKeyword(RobotToken.create("kw"));
keyword.setParent(table);
table.addKeyword(keyword);
return keyword;
}
private static Function<RobotToken, String> toText() {
return new Function<RobotToken, String>() {
@Override
public String apply(final RobotToken token) {
return token.getText();
}
};
}
private static Function<RobotToken, IRobotTokenType> toType() {
return new Function<RobotToken, IRobotTokenType>() {
@Override
public IRobotTokenType apply(final RobotToken token) {
return token.getTypes().get(0);
}
};
}
}