/* * Copyright 2017 Nokia Solutions and Networks * Licensed under the Apache License, Version 2.0, * see license.txt file for details. */ package org.robotframework.red.nattable.painter; import static org.assertj.core.api.Assertions.assertThat; import org.eclipse.jface.viewers.StyledString; import org.eclipse.jface.viewers.Stylers; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.TextStyle; import org.junit.Test; import org.robotframework.ide.eclipse.main.plugin.tableeditor.HeaderFilterMatchesCollection; import org.robotframework.red.nattable.TableCellStringData; public class RedTableTextPainterTest { @Test public void singleLinePainterProperlyMarksMatches() { final RedTableTextPainter painter = new RedTableTextPainter(false); final String orignalText = "label"; final StyledString label = new StyledString(orignalText); final TableCellStringData data = new TableCellStringData("label", new Point(0, 0), new Point(25, 15)); painter.highlightMatches(label, orignalText, data, Stylers.Common.EMPTY_STYLER, () -> matches("label", "l")); final TextStyle matchStyle = new TextStyle(); Stylers.Common.MATCH_STYLER.applyStyles(matchStyle); assertThat(label.getString()).isEqualTo("label"); assertThat(label.getStyleRanges()).hasSize(3); assertThat(label.getStyleRanges()[0].background.getRGB()).isEqualTo(matchStyle.background.getRGB()); assertThat(label.getStyleRanges()[0].foreground).isNull(); assertThat(label.getStyleRanges()[0].borderColor).isNull(); assertThat(label.getStyleRanges()[0].borderStyle).isEqualTo(matchStyle.borderStyle); assertThat(label.getStyleRanges()[0].start).isEqualTo(0); assertThat(label.getStyleRanges()[0].length).isEqualTo(1); assertThat(label.getStyleRanges()[1].background).isNull(); assertThat(label.getStyleRanges()[1].foreground).isNull(); assertThat(label.getStyleRanges()[1].borderColor).isNull(); assertThat(label.getStyleRanges()[1].borderStyle).isEqualTo(0); assertThat(label.getStyleRanges()[1].start).isEqualTo(1); assertThat(label.getStyleRanges()[1].length).isEqualTo(3); assertThat(label.getStyleRanges()[2].background.getRGB()).isEqualTo(matchStyle.background.getRGB()); assertThat(label.getStyleRanges()[2].foreground).isNull(); assertThat(label.getStyleRanges()[2].borderColor).isNull(); assertThat(label.getStyleRanges()[2].borderStyle).isEqualTo(matchStyle.borderStyle); assertThat(label.getStyleRanges()[2].start).isEqualTo(4); assertThat(label.getStyleRanges()[2].length).isEqualTo(1); } @Test public void singleLinePainterProperlyMarksHyperlink() { final RedTableTextPainter painter = new RedTableTextPainter(false); final String orignalText = "label"; final StyledString label = new StyledString(orignalText); final TableCellStringData data = new TableCellStringData("label", new Point(0, 0), new Point(25, 15)); data.createHyperlinkAt(1, 3); painter.highlightMatches(label, orignalText, data, Stylers.Common.EMPTY_STYLER, () -> emptyMatches()); final TextStyle hyperlinkStyle = new TextStyle(); Stylers.Common.HYPERLINK_STYLER.applyStyles(hyperlinkStyle); assertThat(label.getString()).isEqualTo("label"); assertThat(label.getStyleRanges()).hasSize(3); assertThat(label.getStyleRanges()[0].background).isNull(); assertThat(label.getStyleRanges()[0].foreground).isNull(); assertThat(label.getStyleRanges()[0].borderColor).isNull(); assertThat(label.getStyleRanges()[0].underline).isFalse(); assertThat(label.getStyleRanges()[0].underlineColor).isNull(); assertThat(label.getStyleRanges()[0].start).isEqualTo(0); assertThat(label.getStyleRanges()[0].length).isEqualTo(1); assertThat(label.getStyleRanges()[1].background).isNull(); assertThat(label.getStyleRanges()[1].foreground.getRGB()).isEqualTo(hyperlinkStyle.foreground.getRGB()); assertThat(label.getStyleRanges()[1].borderColor).isNull(); assertThat(label.getStyleRanges()[1].underline).isTrue(); assertThat(label.getStyleRanges()[1].underlineColor.getRGB()).isEqualTo(hyperlinkStyle.underlineColor.getRGB()); assertThat(label.getStyleRanges()[1].start).isEqualTo(1); assertThat(label.getStyleRanges()[1].length).isEqualTo(2); assertThat(label.getStyleRanges()[2].background).isNull(); assertThat(label.getStyleRanges()[2].foreground).isNull(); assertThat(label.getStyleRanges()[2].borderColor).isNull(); assertThat(label.getStyleRanges()[2].underline).isFalse(); assertThat(label.getStyleRanges()[2].underlineColor).isNull(); assertThat(label.getStyleRanges()[2].start).isEqualTo(3); assertThat(label.getStyleRanges()[2].length).isEqualTo(2); } @Test public void singleLinePainterProperlyMarksMatchesAndHyperlink() { final RedTableTextPainter painter = new RedTableTextPainter(false); final String orignalText = "label"; final StyledString label = new StyledString(orignalText); final TableCellStringData data = new TableCellStringData("label", new Point(0, 0), new Point(25, 15)); data.createHyperlinkAt(0, 2); painter.highlightMatches(label, orignalText, data, Stylers.Common.EMPTY_STYLER, () -> matches("label", "l")); final TextStyle hyperlinkStyle = new TextStyle(); Stylers.Common.HYPERLINK_STYLER.applyStyles(hyperlinkStyle); final TextStyle matchStyle = new TextStyle(); Stylers.Common.MATCH_STYLER.applyStyles(matchStyle); assertThat(label.getString()).isEqualTo("label"); assertThat(label.getStyleRanges()).hasSize(4); assertThat(label.getStyleRanges()[0].background.getRGB()).isEqualTo(matchStyle.background.getRGB()); assertThat(label.getStyleRanges()[0].foreground.getRGB()).isEqualTo(hyperlinkStyle.foreground.getRGB()); assertThat(label.getStyleRanges()[0].borderColor).isNull(); assertThat(label.getStyleRanges()[0].borderStyle).isEqualTo(matchStyle.borderStyle); assertThat(label.getStyleRanges()[0].underline).isTrue(); assertThat(label.getStyleRanges()[0].underlineColor.getRGB()).isEqualTo(hyperlinkStyle.underlineColor.getRGB()); assertThat(label.getStyleRanges()[0].start).isEqualTo(0); assertThat(label.getStyleRanges()[0].length).isEqualTo(1); assertThat(label.getStyleRanges()[1].background).isNull(); assertThat(label.getStyleRanges()[1].foreground.getRGB()).isEqualTo(hyperlinkStyle.foreground.getRGB()); assertThat(label.getStyleRanges()[1].borderColor).isNull(); assertThat(label.getStyleRanges()[1].borderStyle).isEqualTo(0); assertThat(label.getStyleRanges()[1].underline).isTrue(); assertThat(label.getStyleRanges()[1].underlineColor.getRGB()).isEqualTo(hyperlinkStyle.underlineColor.getRGB()); assertThat(label.getStyleRanges()[1].start).isEqualTo(1); assertThat(label.getStyleRanges()[1].length).isEqualTo(1); assertThat(label.getStyleRanges()[2].background).isNull(); assertThat(label.getStyleRanges()[2].foreground).isNull(); assertThat(label.getStyleRanges()[2].borderColor).isNull(); assertThat(label.getStyleRanges()[2].borderStyle).isEqualTo(0); assertThat(label.getStyleRanges()[2].underline).isFalse(); assertThat(label.getStyleRanges()[2].underlineColor).isNull(); assertThat(label.getStyleRanges()[2].start).isEqualTo(2); assertThat(label.getStyleRanges()[2].length).isEqualTo(2); assertThat(label.getStyleRanges()[3].background.getRGB()).isEqualTo(matchStyle.background.getRGB()); assertThat(label.getStyleRanges()[3].foreground).isNull(); assertThat(label.getStyleRanges()[3].borderColor).isNull(); assertThat(label.getStyleRanges()[3].borderStyle).isEqualTo(matchStyle.borderStyle); assertThat(label.getStyleRanges()[2].underline).isFalse(); assertThat(label.getStyleRanges()[2].underlineColor).isNull(); assertThat(label.getStyleRanges()[3].start).isEqualTo(4); assertThat(label.getStyleRanges()[3].length).isEqualTo(1); } @Test public void lineWrappingPainterProperlyMarksMatcheBetweenLines() { final RedTableTextPainter painter = new RedTableTextPainter(true); final String orignalText = "line line"; final StyledString label = new StyledString("line\nline"); final TableCellStringData data = new TableCellStringData("line\nline", new Point(0, 0), new Point(25, 15)); painter.highlightMatches(label, orignalText, data, Stylers.Common.EMPTY_STYLER, () -> matches("line line", "ne li")); final TextStyle matchStyle = new TextStyle(); Stylers.Common.MATCH_STYLER.applyStyles(matchStyle); assertThat(label.getString()).isEqualTo("line\nline"); assertThat(label.getStyleRanges()).hasSize(5); assertThat(label.getStyleRanges()[0].background).isNull(); assertThat(label.getStyleRanges()[0].foreground).isNull(); assertThat(label.getStyleRanges()[0].borderColor).isNull(); assertThat(label.getStyleRanges()[0].borderStyle).isEqualTo(0); assertThat(label.getStyleRanges()[0].start).isEqualTo(0); assertThat(label.getStyleRanges()[0].length).isEqualTo(2); assertThat(label.getStyleRanges()[1].background.getRGB()).isEqualTo(matchStyle.background.getRGB()); assertThat(label.getStyleRanges()[1].foreground).isNull(); assertThat(label.getStyleRanges()[1].borderColor).isNull(); assertThat(label.getStyleRanges()[1].borderStyle).isEqualTo(matchStyle.borderStyle); assertThat(label.getStyleRanges()[1].start).isEqualTo(2); assertThat(label.getStyleRanges()[1].length).isEqualTo(2); assertThat(label.getStyleRanges()[2].background).isNull(); assertThat(label.getStyleRanges()[2].foreground).isNull(); assertThat(label.getStyleRanges()[2].borderColor).isNull(); assertThat(label.getStyleRanges()[2].borderStyle).isEqualTo(0); assertThat(label.getStyleRanges()[2].start).isEqualTo(4); assertThat(label.getStyleRanges()[2].length).isEqualTo(1); assertThat(label.getStyleRanges()[3].background.getRGB()).isEqualTo(matchStyle.background.getRGB()); assertThat(label.getStyleRanges()[3].foreground).isNull(); assertThat(label.getStyleRanges()[3].borderColor).isNull(); assertThat(label.getStyleRanges()[3].borderStyle).isEqualTo(matchStyle.borderStyle); assertThat(label.getStyleRanges()[3].start).isEqualTo(5); assertThat(label.getStyleRanges()[3].length).isEqualTo(2); assertThat(label.getStyleRanges()[4].background).isNull(); assertThat(label.getStyleRanges()[4].foreground).isNull(); assertThat(label.getStyleRanges()[4].borderColor).isNull(); assertThat(label.getStyleRanges()[4].borderStyle).isEqualTo(0); assertThat(label.getStyleRanges()[4].start).isEqualTo(7); assertThat(label.getStyleRanges()[4].length).isEqualTo(2); } @Test public void lineWrappingPainterProperlyMarksHyperlinkBetweenLines() { final RedTableTextPainter painter = new RedTableTextPainter(true); final String orignalText = "line line"; final StyledString label = new StyledString("line\r\nline"); final TableCellStringData data = new TableCellStringData("line\r\nline", new Point(0, 0), new Point(25, 15)); data.createHyperlinkAt(2, 7); painter.highlightMatches(label, orignalText, data, Stylers.Common.EMPTY_STYLER, () -> emptyMatches()); final TextStyle hyperlinkStyle = new TextStyle(); Stylers.Common.HYPERLINK_STYLER.applyStyles(hyperlinkStyle); assertThat(label.getString()).isEqualTo("line\r\nline"); assertThat(label.getStyleRanges()).hasSize(5); assertThat(label.getStyleRanges()[0].background).isNull(); assertThat(label.getStyleRanges()[0].foreground).isNull(); assertThat(label.getStyleRanges()[0].borderColor).isNull(); assertThat(label.getStyleRanges()[0].underline).isFalse(); assertThat(label.getStyleRanges()[0].underlineColor).isNull(); assertThat(label.getStyleRanges()[0].start).isEqualTo(0); assertThat(label.getStyleRanges()[0].length).isEqualTo(2); assertThat(label.getStyleRanges()[1].background).isNull(); assertThat(label.getStyleRanges()[1].foreground.getRGB()).isEqualTo(hyperlinkStyle.foreground.getRGB()); assertThat(label.getStyleRanges()[1].borderColor).isNull(); assertThat(label.getStyleRanges()[1].underline).isTrue(); assertThat(label.getStyleRanges()[1].underlineColor.getRGB()).isEqualTo(hyperlinkStyle.underlineColor.getRGB()); assertThat(label.getStyleRanges()[1].start).isEqualTo(2); assertThat(label.getStyleRanges()[1].length).isEqualTo(2); assertThat(label.getStyleRanges()[2].background).isNull(); assertThat(label.getStyleRanges()[2].foreground).isNull(); assertThat(label.getStyleRanges()[2].borderColor).isNull(); assertThat(label.getStyleRanges()[2].underline).isFalse(); assertThat(label.getStyleRanges()[2].underlineColor).isNull(); assertThat(label.getStyleRanges()[2].start).isEqualTo(4); assertThat(label.getStyleRanges()[2].length).isEqualTo(2); assertThat(label.getStyleRanges()[3].background).isNull(); assertThat(label.getStyleRanges()[3].foreground.getRGB()).isEqualTo(hyperlinkStyle.foreground.getRGB()); assertThat(label.getStyleRanges()[3].borderColor).isNull(); assertThat(label.getStyleRanges()[3].underline).isTrue(); assertThat(label.getStyleRanges()[3].underlineColor.getRGB()).isEqualTo(hyperlinkStyle.underlineColor.getRGB()); assertThat(label.getStyleRanges()[3].start).isEqualTo(6); assertThat(label.getStyleRanges()[3].length).isEqualTo(2); assertThat(label.getStyleRanges()[4].background).isNull(); assertThat(label.getStyleRanges()[4].foreground).isNull(); assertThat(label.getStyleRanges()[4].borderColor).isNull(); assertThat(label.getStyleRanges()[4].underline).isFalse(); assertThat(label.getStyleRanges()[4].underlineColor).isNull(); assertThat(label.getStyleRanges()[4].start).isEqualTo(8); assertThat(label.getStyleRanges()[4].length).isEqualTo(2); } private HeaderFilterMatchesCollection matches(final String label, final String filter) { final Matches matches = new Matches(filter, label); matches.collect(); return matches; } private HeaderFilterMatchesCollection emptyMatches() { return new Matches("", ""); } private static final class Matches extends HeaderFilterMatchesCollection { private final String filter; private final String label; private Matches(final String filter, final String label) { this.filter = filter; this.label = label; } void collect() { collectMatches(filter, label); } } }