/* * 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.text.read.postfixes; import java.util.List; import org.rf.ide.core.testdata.model.RobotFile; import org.rf.ide.core.testdata.model.RobotFileOutput; 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.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.TestCaseUnknownSettings; 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; /** * @author wypych */ public class UnknownSettingsInExecutableTablesFixer implements IPostProcessFixAction { @Override public void applyFix(final RobotFileOutput parsingOutput) { final RobotFile fileModel = parsingOutput.getFileModel(); final TestCaseTable testCaseTable = fileModel.getTestCaseTable(); final KeywordTable keywordTable = fileModel.getKeywordTable(); if (testCaseTable.isPresent()) { fixInTestCaseTable(testCaseTable); } if (keywordTable.isPresent()) { fixInUserKeywordTable(keywordTable); } } private void fixInUserKeywordTable(final KeywordTable keywordTable) { List<UserKeyword> keywords = keywordTable.getKeywords(); for (final UserKeyword userKeyword : keywords) { for (int i = 0; i < userKeyword.getExecutionContext().size(); i++) { RobotExecutableRow<UserKeyword> robotExecutableRow = userKeyword.getExecutionContext().get(i); String raw = robotExecutableRow.getAction().getRaw().trim(); if (raw.startsWith("[") && raw.endsWith("]")) { userKeyword.removeExecutableLineWithIndex(i); i--; KeywordUnknownSettings keywordUnknownSettings = new KeywordUnknownSettings( robotExecutableRow.getDeclaration()); List<IRobotTokenType> types = robotExecutableRow.getDeclaration().getTypes(); types.clear(); types.add(RobotTokenType.KEYWORD_SETTING_UNKNOWN_DECLARATION); for (final RobotToken argument : robotExecutableRow.getArguments()) { List<IRobotTokenType> argTypes = argument.getTypes(); argTypes.clear(); argTypes.add(RobotTokenType.KEYWORD_SETTING_UNKNOWN_ARGUMENTS); keywordUnknownSettings.addArgument(argument); } for (final RobotToken commentPart : robotExecutableRow.getComment()) { keywordUnknownSettings.addCommentPart(commentPart); } userKeyword.addUnknownSettings(keywordUnknownSettings); } } } } private void fixInTestCaseTable(final TestCaseTable testCaseTable) { List<TestCase> testCases = testCaseTable.getTestCases(); for (final TestCase testCase : testCases) { for (int i = 0; i < testCase.getExecutionContext().size(); i++) { RobotExecutableRow<TestCase> robotExecutableRow = testCase.getExecutionContext().get(i); String raw = robotExecutableRow.getAction().getRaw().trim(); if (raw.startsWith("[") && raw.endsWith("]")) { testCase.removeExecutableLineWithIndex(i); i--; TestCaseUnknownSettings testCaseUnknownSettings = new TestCaseUnknownSettings( robotExecutableRow.getDeclaration()); List<IRobotTokenType> types = robotExecutableRow.getDeclaration().getTypes(); types.clear(); types.add(RobotTokenType.TEST_CASE_SETTING_UNKNOWN_DECLARATION); for (final RobotToken argument : robotExecutableRow.getArguments()) { List<IRobotTokenType> argTypes = argument.getTypes(); argTypes.clear(); argTypes.add(RobotTokenType.TEST_CASE_SETTING_UNKNOWN_ARGUMENTS); testCaseUnknownSettings.addArgument(argument); } for (final RobotToken commentPart : robotExecutableRow.getComment()) { testCaseUnknownSettings.addCommentPart(commentPart); } testCase.addUnknownSettings(testCaseUnknownSettings); } } } } }