FOSSology  4.4.0
Open Source License Compliance by Open Source Software
TextRendererTest.php
1 <?php
2 /*
3  SPDX-FileCopyrightText: © 2014-2015 Siemens AG
4  Author: Andreas Würl
5 
6  SPDX-License-Identifier: GPL-2.0-only
7 */
8 namespace Fossology\Lib\View;
9 
13 use Mockery as M;
14 
15 require_once __DIR__.'/../../common-string.php';
16 
17 class TextRendererTest extends \PHPUnit\Framework\TestCase
18 {
19  const START_OFFSET = 10;
20  const FRAGMENT_TEXT = "foo bar baz quux";
21 
23  private $textFragment;
25  private $textRenderer;
26 
27  function setUp() : void
28  {
29  $this->textFragment = new TextFragment(self::START_OFFSET, self::FRAGMENT_TEXT);
30  $this->textRenderer = new TextRenderer(new HighlightRenderer());
31  $this->assertCountBefore = \Hamcrest\MatcherAssert::getCount();
32  }
33 
34  function tearDown() : void
35  {
36  $this->addToAssertionCount(\Hamcrest\MatcherAssert::getCount()-$this->assertCountBefore);
37  M::close();
38  }
39 
40  function testRenderHighlightedTextWithNoSplitPosition()
41  {
42  $renderedText = $this->textRenderer->renderText($this->textFragment);
43  assertThat($renderedText, is(self::FRAGMENT_TEXT));
44  }
45 
46  function testRenderHighlightOutsideFragment()
47  {
48  $highlight1 = new Highlight(0, 5, Highlight::MATCH, 0, 0, 'ref1');
49 
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);
54 
55  assertThat($renderedText, is("foo bar baz quux"));
56  }
57 
58  function testRenderHighlightAtStartOfFragment()
59  {
60  $highlight1 = new Highlight(self::START_OFFSET, self::START_OFFSET + 5, Highlight::MATCH, 0, 0, 'ref1');
61 
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);
66 
67  assertThat($renderedText, is("<a id=\"highlight\"></a><span class=\"hi-match\" title=\"ref1\">foo b</span>ar baz quux"));
68  }
69 
70  function testRenderHighlightAtEndOfFragment()
71  {
72  $highlight_length = 5;
73  $end_offset = self::START_OFFSET + strlen(self::FRAGMENT_TEXT);
74  $start_offset = $end_offset - $highlight_length;
75 
76  $highlight1 = new Highlight($start_offset, $end_offset, Highlight::MATCH, 0, 0, 'ref1');
77 
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);
82 
83  assertThat($renderedText, is("foo bar baz<a id=\"highlight\"></a><span class=\"hi-match\" title=\"ref1\"> quux</span>"));
84  }
85 
86  function testRenderHighlightWithinFragment()
87  {
88  $highlight1 = new Highlight(15, 18, Highlight::MATCH, 0, 0, 'ref1');
89 
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);
94 
95  assertThat($renderedText, is("foo b<a id=\"highlight\"></a><span class=\"hi-match\" title=\"ref1\">ar </span>baz quux"));
96  }
97 
98  function testRenderHexHighlightWithinFragment()
99  {
100  $highlight1 = new Highlight(15, 18, Highlight::MATCH, 0, 0, 'ref1');
101 
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);
106 
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&nbsp;b<a id=\"highlight\"></a><span class=\"hi-match\" title=\"ref1\">ar&nbsp;</span>baz&nbsp;quux|<br/>\n"));
108  }
109 
110  function testRenderHighlightWithBacklinkWithinFragment()
111  {
112  $highlight1 = new Highlight(15, 18, Highlight::MATCH, 0, 0, 'ref1');
113 
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);
118 
119  assertThat($renderedText, is("foo b<a id=\"highlight\" href=\"#top\">&nbsp;&#8593;&nbsp;</a><span class=\"hi-match\" title=\"ref1\">ar </span>baz quux"));
120  }
121 
122  function testRenderHighlightedOverlapsStartOfFragment()
123  {
124  $highlight1 = new Highlight(5, 18, Highlight::MATCH, 0, 0, 'ref1');
125 
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);
130 
131  assertThat($renderedText, is("<span class=\"hi-match\" title=\"ref1\">foo bar </span>baz quux"));
132  }
133 
134  function testRenderHighlightedOverlapsEndOfFragment()
135  {
136  $highlight1 = new Highlight(15, 28, Highlight::MATCH, 0, 0, 'ref1');
137 
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);
142 
143  assertThat($renderedText, is("foo b<a id=\"highlight\"></a><span class=\"hi-match\" title=\"ref1\">ar baz quux</span>"));
144  }
145 
146  function testRenderFragmentFullInsideHighlight()
147  {
148  $highlight1 = new Highlight(5, 50, Highlight::MATCH, 0, 0, 'ref1');
149 
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);
154 
155  assertThat($renderedText, is("<span class=\"hi-match\" title=\"ref1\">foo bar baz quux</span>"));
156  }
157 
158  function testRenderHighlightedTextWithFourSplitPositions()
159  {
160  $highlight1 = new Highlight(12, 18, Highlight::URL, 'ref1', 0, 0);
161  $highlight2 = new Highlight(14, 18, Highlight::MATCH, 'ref2', 0, 0);
162 
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);
169 
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"));
171  }
172 
173  function testRenderHighlightThatIsIgnorableByBulk()
174  {
175  $highlight1 = new Highlight(14, 14, Highlight::DELETED, 0, 0, 'ref1');
176 
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);
183 
184  assertThat($cleanText, is("foo bar baz quux"));
185  }
186 }