summaryrefslogtreecommitdiff
path: root/www/wiki/extensions/SemanticMediaWiki/tests/phpunit/Unit/Iterators/CsvFileIteratorTest.php
blob: abe8299be267a163ceaa19c81a77deb68cc20631 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
<?php

namespace SMW\Tests\Iterators;

use SMW\Iterators\CsvFileIterator;
use SMW\Utils\TempFile;
use SMW\Tests\PHPUnitCompat;

/**
 * @covers \SMW\Iterators\CsvFileIterator
 * @group semantic-mediawiki
 *
 * @license GNU GPL v2+
 * @since 3.0
 *
 * @author mwjames
 */
class CsvFileIteratorTest extends \PHPUnit_Framework_TestCase {

	use PHPUnitCompat;

	private $file;
	private $tempFile;

	protected function setUp() {
		parent::setUp();

		$this->tempFile = new TempFile();
		$this->file = $this->tempFile->get( 'test.csv' );

		$this->tempFile->write( $this->file, 'Foo' );
	}

	protected function tearDown() {
		$this->tempFile->delete( $this->file );
		parent::tearDown();
	}

	public function testCanConstruct() {

		$this->assertInstanceOf(
			CsvFileIterator::class,
			new CsvFileIterator( $this->file )
		);
	}

	public function testInvalidFileThrowsException() {

		$this->setExpectedException( '\SMW\Exception\FileNotFoundException' );
		new CsvFileIterator( 'Foo' );
	}

	public function testForEachOnCsvFileWithNoHeader() {

		$sample = [
			'1,Foo,abc',
			'2,Bar,123'
		];

		$this->tempFile->write( $this->file, implode( "\n", $sample ) );

		$instance = new CsvFileIterator(
			$this->file,
			false,
			','
		);

		$res = [];

		foreach ( $instance as $row ) {
			$res[] = $row;
		}

		$this->assertEmpty(
			$instance->getHeader()
		);

		$this->assertEquals(
			$res,
			[
				[ '1', 'Foo', 'abc' ],
				[ '2', 'Bar', '123' ]
			]
		);
	}

	public function testForEachOnCsvFileWithHeader() {

		$sample = [
			'No,Text,Other',
			'1,Foo,abc',
			'2,Bar,123'
		];

		$this->tempFile->write( $this->file, implode( "\n", $sample ) );

		$instance = new CsvFileIterator(
			$this->file,
			true,
			','
		);

		$res = [];

		foreach ( $instance as $row ) {
			$res[] = $row;
		}

		$this->assertEquals(
			$instance->getHeader(),
			[
				'No',
				'Text',
				'Other'
			]
		);

		$this->assertEquals(
			$res,
			[
				[ '1', 'Foo', 'abc' ],
				[ '2', 'Bar', '123' ]
			]
		);
	}

}