/*
* 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.mapping.table;
import static org.assertj.core.api.Assertions.assertThat;
import org.junit.Before;
import org.junit.Test;
import org.rf.ide.core.testdata.model.FilePosition;
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;
/**
* @author wypych
*/
public class PrettyAlignSpaceUtilityTest {
private PrettyAlignSpaceUtility prettyAlignExtractor;
@Test
public void test_method_extractPrettyAlignWhitespaces_givenTokenWithPrettyAlign_SuffixAndPreffix_whenShouldDoExtraction_thenCheckIfTextWithoutSpaces() {
// prepare
final RobotLine line = new RobotLine(1, null);
final String rawAndText = " data ";
final RobotToken token = RobotToken.create(rawAndText);
final FilePosition fp = new FilePosition(10, 10, 20);
token.setStartOffset(fp.getOffset());
token.setLineNumber(fp.getLine());
token.setStartColumn(fp.getColumn());
token.setType(RobotTokenType.UNKNOWN);
line.addLineElement(token);
// execute
prettyAlignExtractor.extractPrettyAlignWhitespaces(line, token, rawAndText);
// verify
assertThat(line.getLineElements()).hasSize(3);
assertToken(line.getLineElements().get(0), " ", RobotTokenType.PRETTY_ALIGN_SPACE,
new FilePosition(10, 10, 20));
assertToken(line.getLineElements().get(1), "data", RobotTokenType.UNKNOWN, new FilePosition(10, 13, 23));
assertThat(line.getLineElements().get(1)).isSameAs(token);
assertToken(line.getLineElements().get(2), " ", RobotTokenType.PRETTY_ALIGN_SPACE,
new FilePosition(10, 17, 27));
}
@Test
public void test_method_extractPrettyAlignWhitespaces_givenTokenWithPrettyAlignPreffix_whenShouldDoExtraction_thenCheckIfTextWithoutSpaces() {
// prepare
final RobotLine line = new RobotLine(1, null);
final String rawAndText = "data ";
final RobotToken token = RobotToken.create(rawAndText);
final FilePosition fp = new FilePosition(10, 10, 20);
token.setStartOffset(fp.getOffset());
token.setLineNumber(fp.getLine());
token.setStartColumn(fp.getColumn());
token.setType(RobotTokenType.UNKNOWN);
line.addLineElement(token);
// execute
prettyAlignExtractor.extractPrettyAlignWhitespaces(line, token, rawAndText);
// verify
assertThat(line.getLineElements()).hasSize(2);
assertToken(line.getLineElements().get(0), "data", RobotTokenType.UNKNOWN, new FilePosition(10, 10, 20));
assertThat(line.getLineElements().get(0)).isSameAs(token);
assertToken(line.getLineElements().get(1), " ", RobotTokenType.PRETTY_ALIGN_SPACE,
new FilePosition(10, 14, 24));
}
@Test
public void test_method_extractPrettyAlignWhitespaces_givenTokenWithPrettyAlignSuffix_whenShouldDoExtraction_thenCheckIfTextWithoutSpaces() {
// prepare
final RobotLine line = new RobotLine(1, null);
final String rawAndText = " data";
final RobotToken token = RobotToken.create(rawAndText);
final FilePosition fp = new FilePosition(10, 10, 20);
token.setStartOffset(fp.getOffset());
token.setLineNumber(fp.getLine());
token.setStartColumn(fp.getColumn());
token.setType(RobotTokenType.UNKNOWN);
line.addLineElement(token);
// execute
prettyAlignExtractor.extractPrettyAlignWhitespaces(line, token, rawAndText);
// verify
assertThat(line.getLineElements()).hasSize(2);
assertToken(line.getLineElements().get(0), " ", RobotTokenType.PRETTY_ALIGN_SPACE,
new FilePosition(10, 10, 20));
assertToken(line.getLineElements().get(1), "data", RobotTokenType.UNKNOWN, new FilePosition(10, 13, 23));
assertThat(line.getLineElements().get(1)).isSameAs(token);
}
@Test
public void test_method_extractPrettyAlignWhitespaces_givenPrettyAlignToken_whenShouldNotDoAnything_thenCheckIfTextIsReturnAsItWas() {
// prepare
final RobotLine line = new RobotLine(1, null);
final String rawAndText = " ";
final RobotToken token = RobotToken.create(rawAndText);
final FilePosition fp = new FilePosition(10, 10, 10);
token.setStartOffset(fp.getOffset());
token.setLineNumber(fp.getLine());
token.setStartColumn(fp.getColumn());
token.setType(RobotTokenType.PRETTY_ALIGN_SPACE);
line.addLineElement(token);
// execute
prettyAlignExtractor.extractPrettyAlignWhitespaces(line, token, rawAndText);
// verify
assertThat(line.getLineElements()).hasSize(1);
assertThat(line.getLineElements()).containsExactly(token);
assertToken(token, rawAndText, RobotTokenType.PRETTY_ALIGN_SPACE, fp);
}
private void assertToken(final IRobotLineElement token, final String rawAndText, final RobotTokenType type,
final FilePosition fp) {
assertThat(token.getText()).isEqualTo(rawAndText);
assertThat(token.getRaw()).isEqualTo(rawAndText);
assertThat(token.getTypes().get(0)).isEqualTo(type);
assertThat(token.getFilePosition().isSamePlace(fp)).as("got position %s", token.getFilePosition()).isTrue();
}
@Before
public void setUp() {
this.prettyAlignExtractor = new PrettyAlignSpaceUtility();
}
}