8 namespace Fossology\Lib\View;
15 require_once __DIR__.
'/../../common-string.php';
19 const START_OFFSET = 10;
20 const FRAGMENT_TEXT =
"foo bar baz quux";
23 private $textFragment;
25 private $textRenderer;
27 function setUp() :
void
29 $this->textFragment =
new TextFragment(self::START_OFFSET, self::FRAGMENT_TEXT);
31 $this->assertCountBefore = \Hamcrest\MatcherAssert::getCount();
34 function tearDown() :
void
36 $this->addToAssertionCount(\Hamcrest\MatcherAssert::getCount()-$this->assertCountBefore);
40 function testRenderHighlightedTextWithNoSplitPosition()
42 $renderedText = $this->textRenderer->renderText($this->textFragment);
43 assertThat($renderedText, is(self::FRAGMENT_TEXT));
46 function testRenderHighlightOutsideFragment()
48 $highlight1 =
new Highlight(0, 5, Highlight::MATCH, 0, 0,
'ref1');
50 $splitPositions = array(
51 0 => array(
new SplitPosition(1, SplitPosition::START, $highlight1)),
52 5 => array(
new SplitPosition(1, SplitPosition::END, $highlight1)));
53 $renderedText = $this->textRenderer->renderText($this->textFragment, $splitPositions);
55 assertThat($renderedText, is(
"foo bar baz quux"));
58 function testRenderHighlightAtStartOfFragment()
60 $highlight1 =
new Highlight(self::START_OFFSET, self::START_OFFSET + 5, Highlight::MATCH, 0, 0,
'ref1');
62 $splitPositions = array(
63 self::START_OFFSET => array(
new SplitPosition(1, SplitPosition::START, $highlight1)),
64 self::START_OFFSET + 5 => array(
new SplitPosition(1, SplitPosition::END, $highlight1)));
65 $renderedText = $this->textRenderer->renderText($this->textFragment, $splitPositions);
67 assertThat($renderedText, is(
"<a id=\"highlight\"></a><span class=\"hi-match\" title=\"ref1\">foo b</span>ar baz quux"));
70 function testRenderHighlightAtEndOfFragment()
72 $highlight_length = 5;
73 $end_offset = self::START_OFFSET + strlen(self::FRAGMENT_TEXT);
74 $start_offset = $end_offset - $highlight_length;
76 $highlight1 =
new Highlight($start_offset, $end_offset, Highlight::MATCH, 0, 0,
'ref1');
78 $splitPositions = array(
79 $start_offset => array(
new SplitPosition(1, SplitPosition::START, $highlight1)),
80 $end_offset => array(
new SplitPosition(1, SplitPosition::END, $highlight1)));
81 $renderedText = $this->textRenderer->renderText($this->textFragment, $splitPositions);
83 assertThat($renderedText, is(
"foo bar baz<a id=\"highlight\"></a><span class=\"hi-match\" title=\"ref1\"> quux</span>"));
86 function testRenderHighlightWithinFragment()
88 $highlight1 =
new Highlight(15, 18, Highlight::MATCH, 0, 0,
'ref1');
90 $splitPositions = array(
91 15 => array(
new SplitPosition(1, SplitPosition::START, $highlight1)),
92 18 => array(
new SplitPosition(1, SplitPosition::END, $highlight1)));
93 $renderedText = $this->textRenderer->renderText($this->textFragment, $splitPositions);
95 assertThat($renderedText, is(
"foo b<a id=\"highlight\"></a><span class=\"hi-match\" title=\"ref1\">ar </span>baz quux"));
98 function testRenderHexHighlightWithinFragment()
100 $highlight1 =
new Highlight(15, 18, Highlight::MATCH, 0, 0,
'ref1');
102 $splitPositions = array(
103 15 => array(
new SplitPosition(1, SplitPosition::START, $highlight1)),
104 18 => array(
new SplitPosition(1, SplitPosition::END, $highlight1)));
105 $renderedText = $this->textRenderer->renderHex($this->textFragment, $splitPositions);
107 assertThat($renderedText, is(
"0x0000000A |66 6f 6f 20 62 <a id=\"highlight\"></a><span class=\"hi-match\" title=\"ref1\">61 72 20 </span>62 61 7a 20 71 75 75 78| |foo b<a id=\"highlight\"></a><span class=\"hi-match\" title=\"ref1\">ar </span>baz quux|<br/>\n"));
110 function testRenderHighlightWithBacklinkWithinFragment()
112 $highlight1 =
new Highlight(15, 18, Highlight::MATCH, 0, 0,
'ref1');
114 $splitPositions = array(
115 15 => array(
new SplitPosition(1, SplitPosition::START, $highlight1)),
116 18 => array(
new SplitPosition(1, SplitPosition::END, $highlight1)));
117 $renderedText = $this->textRenderer->renderText($this->textFragment, $splitPositions,
true);
119 assertThat($renderedText, is(
"foo b<a id=\"highlight\" href=\"#top\"> ↑ </a><span class=\"hi-match\" title=\"ref1\">ar </span>baz quux"));
122 function testRenderHighlightedOverlapsStartOfFragment()
124 $highlight1 =
new Highlight(5, 18, Highlight::MATCH, 0, 0,
'ref1');
126 $splitPositions = array(
127 5 => array(
new SplitPosition(1, SplitPosition::START, $highlight1)),
128 18 => array(
new SplitPosition(1, SplitPosition::END, $highlight1)));
129 $renderedText = $this->textRenderer->renderText($this->textFragment, $splitPositions);
131 assertThat($renderedText, is(
"<span class=\"hi-match\" title=\"ref1\">foo bar </span>baz quux"));
134 function testRenderHighlightedOverlapsEndOfFragment()
136 $highlight1 =
new Highlight(15, 28, Highlight::MATCH, 0, 0,
'ref1');
138 $splitPositions = array(
139 15 => array(
new SplitPosition(1, SplitPosition::START, $highlight1)),
140 28 => array(
new SplitPosition(1, SplitPosition::END, $highlight1)));
141 $renderedText = $this->textRenderer->renderText($this->textFragment, $splitPositions);
143 assertThat($renderedText, is(
"foo b<a id=\"highlight\"></a><span class=\"hi-match\" title=\"ref1\">ar baz quux</span>"));
146 function testRenderFragmentFullInsideHighlight()
148 $highlight1 =
new Highlight(5, 50, Highlight::MATCH, 0, 0,
'ref1');
150 $splitPositions = array(
151 5 => array(
new SplitPosition(1, SplitPosition::START, $highlight1)),
152 50 => array(
new SplitPosition(1, SplitPosition::END, $highlight1)));
153 $renderedText = $this->textRenderer->renderText($this->textFragment, $splitPositions);
155 assertThat($renderedText, is(
"<span class=\"hi-match\" title=\"ref1\">foo bar baz quux</span>"));
158 function testRenderHighlightedTextWithFourSplitPositions()
160 $highlight1 =
new Highlight(12, 18, Highlight::URL,
'ref1', 0, 0);
161 $highlight2 =
new Highlight(14, 18, Highlight::MATCH,
'ref2', 0, 0);
163 $splitPositions = array(
164 12 => array(
new SplitPosition(1, SplitPosition::START, $highlight1)),
165 14 => array(
new SplitPosition(2, SplitPosition::START, $highlight2)),
166 18 => array(
new SplitPosition(2, SplitPosition::END, $highlight2)),
167 20 => array(
new SplitPosition(1, SplitPosition::END, $highlight1)));
168 $renderedText = $this->textRenderer->renderText($this->textFragment, $splitPositions);
170 assertThat($renderedText, is(
"fo<a id=\"highlight\"></a><span class=\"hi-url\" title=\"0\">o <span class=\"hi-match\" title=\"0\">bar </span>ba</span>z quux"));
173 function testRenderHighlightThatIsIgnorableByBulk()
175 $highlight1 =
new Highlight(14, 14, Highlight::DELETED, 0, 0,
'ref1');
177 $splitPositions = array(
178 14 => array(
new SplitPosition(1, SplitPosition::ATOM, $highlight1)));
179 $renderedText = $this->textRenderer->renderText($this->textFragment, $splitPositions);
180 $pastedText = strip_tags($renderedText);
181 $bulkText = preg_replace(
'/[!#]/',
' ',$pastedText);
182 $cleanText = preg_replace(
'/\s\s+/',
' ',$bulkText);
184 assertThat($cleanText, is(
"foo bar baz quux"));