@@ -62,6 +62,58 @@ public function testBom()
6262 $ this ->assertSame ($ expected , $ output );
6363 }
6464
65+ /**
66+ * Test BOM appears only in the first row.
67+ *
68+ * @return void
69+ */
70+ public function testBomMultipleContentRows ()
71+ {
72+ if (!extension_loaded ('mbstring ' )) {
73+ $ this ->markTestSkipped (
74+ 'The mbstring extension is not available. '
75+ );
76+ }
77+
78+ $ data = [
79+ ['test ' ],
80+ ['test2 ' ],
81+ ['test3 ' ],
82+ ];
83+ $ this ->view ->set (['data ' => $ data , '_serialize ' => 'data ' , '_bom ' => true , '_csvEncoding ' => 'UTF-8 ' ]);
84+ $ output = $ this ->view ->render (false );
85+
86+ $ bom = chr (0xEF ) . chr (0xBB ) . chr (0xBF );
87+ $ expected = $ bom . 'test ' . PHP_EOL . 'test2 ' . PHP_EOL . 'test3 ' . PHP_EOL ;
88+ $ this ->assertSame ($ expected , $ output );
89+ }
90+
91+ /**
92+ * Test BOM appears only in the first row even it has a header.
93+ *
94+ * @return void
95+ */
96+ public function testBomMultipleContentRowsWithHeader ()
97+ {
98+ if (!extension_loaded ('mbstring ' )) {
99+ $ this ->markTestSkipped (
100+ 'The mbstring extension is not available. '
101+ );
102+ }
103+
104+ $ header = ['column1 ' ];
105+ $ data = [
106+ ['test ' ],
107+ ['test2 ' ],
108+ ];
109+ $ this ->view ->set (['data ' => $ data , '_header ' => $ header , '_serialize ' => 'data ' , '_bom ' => true , '_csvEncoding ' => 'UTF-8 ' ]);
110+ $ output = $ this ->view ->render (false );
111+
112+ $ bom = chr (0xEF ) . chr (0xBB ) . chr (0xBF );
113+ $ expected = $ bom . 'column1 ' . PHP_EOL . 'test ' . PHP_EOL . 'test2 ' . PHP_EOL ;
114+ $ this ->assertSame ($ expected , $ output );
115+ }
116+
65117 /**
66118 * Test render with an array in _serialize
67119 *
0 commit comments