1+ <?php
2+ /**
3+ * @author Aaron Francis <aaron@hammerstone.dev|https://twitter.com/aarondfrancis>
4+ */
5+
6+ namespace Torchlight \Tests ;
7+
8+ use Torchlight \Block ;
9+ use Torchlight \Contracts \PostProcessor ;
10+ use Torchlight \Exceptions \ConfigurationException ;
11+ use Torchlight \Exceptions \RequestException ;
12+ use Torchlight \Torchlight ;
13+
14+ class PostProcessorTest extends BaseTest
15+ {
16+ public function getEnvironmentSetUp ($ app )
17+ {
18+ config ()->set ('torchlight ' , [
19+ 'theme ' => 'material ' ,
20+ 'token ' => 'token ' ,
21+ ]);
22+ }
23+
24+ /** @test */
25+ public function it_runs_post_processors ()
26+ {
27+ $ this ->fakeSuccessfulResponse ('id ' );
28+
29+ Torchlight::addPostProcessors ([
30+ GoodbyePostProcessor::class
31+ ]);
32+
33+ $ blocks = Torchlight::highlight (
34+ Block::make ('id ' )->language ('php ' )->code ('echo "hello world"; ' )
35+ );
36+
37+ $ this ->assertEquals ($ blocks [0 ]->highlighted , '<div class= \'highlighted \'>echo "goodbye world";</div> ' );
38+ }
39+
40+ /** @test */
41+ public function null_processor_works ()
42+ {
43+ $ this ->fakeSuccessfulResponse ('id ' );
44+
45+ Torchlight::addPostProcessors ([
46+ NullPostProcessor::class
47+ ]);
48+
49+ $ blocks = Torchlight::highlight (
50+ Block::make ('id ' )->language ('php ' )->code ('echo "hello world"; ' )
51+ );
52+
53+ $ this ->assertEquals ($ blocks [0 ]->highlighted , '<div class= \'highlighted \'>echo "hello world";</div> ' );
54+ }
55+
56+ /** @test */
57+ public function they_run_in_order ()
58+ {
59+ $ this ->fakeSuccessfulResponse ('id ' );
60+
61+ Torchlight::addPostProcessors ([
62+ GoodbyePostProcessor::class,
63+ GoodbyeCruelPostProcessor::class
64+ ]);
65+
66+ $ blocks = Torchlight::highlight (
67+ Block::make ('id ' )->language ('php ' )->code ('echo "hello world"; ' )
68+ );
69+
70+ $ this ->assertEquals ($ blocks [0 ]->highlighted , '<div class= \'highlighted \'>echo "goodbye cruel world";</div> ' );
71+ }
72+
73+ /** @test */
74+ public function must_implement_interface ()
75+ {
76+ $ this ->expectException (ConfigurationException::class);
77+ $ this ->expectExceptionMessage ('Post-processor \'Torchlight\Block \' does not implement Torchlight\Contracts\PostProcessor ' );
78+
79+ Torchlight::addPostProcessors ([
80+ Block::class
81+ ]);
82+ }
83+
84+ }
85+
86+ class NullPostProcessor implements PostProcessor
87+ {
88+ public function process (Block $ block )
89+ {
90+
91+ }
92+ }
93+
94+ class GoodbyePostProcessor implements PostProcessor
95+ {
96+ public function process (Block $ block )
97+ {
98+ $ block ->highlighted = str_replace ('hello ' , 'goodbye ' , $ block ->highlighted );
99+ }
100+ }
101+
102+ class GoodbyeCruelPostProcessor implements PostProcessor
103+ {
104+ public function process (Block $ block )
105+ {
106+ $ block ->highlighted = str_replace ('goodbye ' , 'goodbye cruel ' , $ block ->highlighted );
107+ }
108+ }
0 commit comments