/* * 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; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.io.File; import java.util.Arrays; import java.util.List; import org.junit.Test; import org.rf.ide.core.executor.RobotRuntimeEnvironment; import org.rf.ide.core.testdata.RobotParser.RobotParserConfig; import org.rf.ide.core.testdata.model.RobotFile; import org.rf.ide.core.testdata.model.RobotFileOutput; import org.rf.ide.core.testdata.model.RobotFileOutput.RobotFileType; import org.rf.ide.core.testdata.model.RobotFileOutput.Status; import org.rf.ide.core.testdata.model.RobotProjectHolder; import org.rf.ide.core.testdata.text.read.IRobotLineElement; import org.rf.ide.core.testdata.text.read.RobotLine; 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.read.separators.Separator; /** * @author wypych */ public class TrashCommentsParsingTest { @Test public void test_givenMultipleRobotExecutableLines_withCommentsJoinedByPreviouseLineContinue_shouldGives_4RobotExecutableLines() throws Exception { // prepare final RobotRuntimeEnvironment runtime = mock(RobotRuntimeEnvironment.class); when(runtime.getVersion()).thenReturn("2.9"); final RobotProjectHolder projectHolder = mock(RobotProjectHolder.class); when(projectHolder.getRobotRuntime()).thenReturn(runtime); final String mainPath = "parser/bugs/"; final File file = new File(this.getClass().getResource(mainPath + "TrashCommentsAtTheBeginning.robot").toURI()); when(projectHolder.shouldBeLoaded(file)).thenReturn(true); // execute final RobotParser parser = RobotParser.create(projectHolder, RobotParserConfig.allImportsLazy()); final List<RobotFileOutput> parsed = parser.parse(file); // verify assertThat(parsed).hasSize(1); final RobotFileOutput robotFileOutput = parsed.get(0); assertThat(robotFileOutput.getStatus()).isEqualTo(Status.PASSED); assertThat(robotFileOutput.getType()).isEqualTo(RobotFileType.UNKNOWN); final RobotFile fileModel = robotFileOutput.getFileModel(); assertThat(fileModel.getSettingTable().isPresent()).isFalse(); assertThat(fileModel.getVariableTable().isPresent()).isFalse(); assertThat(fileModel.getTestCaseTable().isPresent()).isFalse(); assertThat(fileModel.getKeywordTable().isPresent()).isFalse(); final List<RobotLine> fileContent = fileModel.getFileContent(); assertThat(fileContent).hasSize(6); assertLine(fileContent.get(0), RobotToken.create("# comment", Arrays.asList(RobotTokenType.START_HASH_COMMENT))); assertLine(fileContent.get(1), RobotToken.create("#", Arrays.asList(RobotTokenType.START_HASH_COMMENT)), separator("\t"), RobotToken.create("*** Settings ***", Arrays.asList(RobotTokenType.COMMENT_CONTINUE, RobotTokenType.SETTINGS_TABLE_HEADER))); assertLine(fileContent.get(2), RobotToken.create("#d", Arrays.asList(RobotTokenType.START_HASH_COMMENT)), separator("\t"), RobotToken.create("ok", Arrays.asList(RobotTokenType.COMMENT_CONTINUE, RobotTokenType.UNKNOWN))); assertLine(fileContent.get(3), RobotToken.create("*** unknown header ***", Arrays.asList(RobotTokenType.USER_OWN_TABLE_HEADER))); assertLine(fileContent.get(4), RobotToken.create("d", Arrays.asList(RobotTokenType.UNKNOWN)), separator("\t"), RobotToken.create("#start", Arrays.asList(RobotTokenType.START_HASH_COMMENT)), separator("\t"), RobotToken.create("continue", Arrays.asList(RobotTokenType.COMMENT_CONTINUE, RobotTokenType.UNKNOWN))); } private void assertLine(final RobotLine toTest, final IRobotLineElement... toks) { final List<IRobotLineElement> lineElements = toTest.getLineElements(); final int size = toks.length; assertThat(lineElements).hasSize(size); for (int i = 0; i < size; i++) { final IRobotLineElement elem = lineElements.get(i); final IRobotLineElement expToken = toks[i]; assertThat(expToken).hasSameClassAs(elem); assertThat(expToken.getRaw()).isEqualTo(elem.getRaw()); assertThat(expToken.getText()).isEqualTo(elem.getText()); assertThat(expToken.getTypes()).containsExactlyElementsOf(elem.getTypes()); } } private static Separator separator(final String text) { return Separator.matchSeparator(text); } }