summaryrefslogtreecommitdiffstats
path: root/tests/codeigniter/helpers/file_helper_test.php
blob: 4b9c294853e4ed6cdf68ab0b9eea7712dd7d8fd7 (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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
<?php

class File_helper_Test extends CI_TestCase {

	public function set_up()
	{
		$this->helper('file');
		
		vfsStreamWrapper::register();
		vfsStreamWrapper::setRoot(new vfsStreamDirectory('testDir'));
		
		$this->_test_dir = vfsStreamWrapper::getRoot();
	}
	
	// --------------------------------------------------------------------
	
	public function test_read_file()
	{
		$this->assertFalse(read_file('does_not_exist'));
		
		$content = 'Jack and Jill went up the mountain to fight a billy goat.';
		
		$file = vfsStream::newFile('my_file.txt')->withContent($content)
												 ->at($this->_test_dir);
		
		$this->assertEquals($content, read_file(vfsStream::url('my_file.txt')));
	}

	// --------------------------------------------------------------------

	public function test_octal_permissions()
	{
		$content = 'Jack and Jill went up the mountain to fight a billy goat.';
		
		$file = vfsStream::newFile('my_file.txt', 0777)->withContent($content)
												 ->lastModified(time() - 86400)
												 ->at($this->_test_dir);
		
		$this->assertEquals('777', octal_permissions($file->getPermissions()));		
	}

	// --------------------------------------------------------------------	
	
	/**
	 * More tests should happen here, since I'm not hitting the whole function.
	 */
	public function test_symbolic_permissions()
	{
		$content = 'Jack and Jill went up the mountain to fight a billy goat.';
		
		$file = vfsStream::newFile('my_file.txt', 0777)->withContent($content)
												 ->lastModified(time() - 86400)
												 ->at($this->_test_dir);
												
		$this->assertEquals('urwxrwxrwx', symbolic_permissions($file->getPermissions()));		
	}

	// --------------------------------------------------------------------	
	
	public function test_get_mime_by_extension()
	{
		$content = 'Jack and Jill went up the mountain to fight a billy goat.';
		
		$file = vfsStream::newFile('my_file.txt', 0777)->withContent($content)
												 ->lastModified(time() - 86400)
												 ->at($this->_test_dir);
												
		$this->assertEquals('text/plain', 
						get_mime_by_extension(vfsStream::url('my_file.txt')));
						
		// Test a mime with an array, such as png		
		$file = vfsStream::newFile('foo.png')->at($this->_test_dir);
		
		$this->assertEquals('image/png', get_mime_by_extension(vfsStream::url('foo.png')));			
			
		// Test a file not in the mimes array
		$file = vfsStream::newFile('foo.blarfengar')->at($this->_test_dir);
		
		$this->assertFalse(get_mime_by_extension(vfsStream::url('foo.blarfengar')));
	}

	// --------------------------------------------------------------------	

	public function test_get_file_info()
	{
		// Test Bad File
		$this->assertFalse(get_file_info('i_am_bad_boo'));
		
		// Test the rest
		
		// First pass in an array
		$vals = array(
			'name', 'server_path', 'size', 'date',
			'readable', 'writable', 'executable',  'fileperms'
		);
		
		$this->_test_get_file_info($vals);

		// Test passing in vals as a string.
		$vals = 'name, server_path, size, date, readable, writable, executable, fileperms';
		$this->_test_get_file_info($vals);
	}
	
	private function _test_get_file_info($vals)
	{
		$content = 'Jack and Jill went up the mountain to fight a billy goat.';
		$last_modified = time() - 86400;
		
		$file = vfsStream::newFile('my_file.txt', 0777)->withContent($content)
												 ->lastModified($last_modified)
												 ->at($this->_test_dir);
		
		$ret_values = array(
			'name'			=> 'my_file.txt', 
			'server_path'	=> 'vfs://my_file.txt', 
			'size'			=> 57, 
			'date'			=> $last_modified, 
			'readable'		=> TRUE,
			'writable'		=> TRUE, 
			'executable'	=> TRUE, 
			'fileperms'		=> 33279
		);
		
		$info = get_file_info(vfsStream::url('my_file.txt'), $vals);
		
		foreach ($info as $k => $v)
		{
			$this->assertEquals($ret_values[$k], $v);
		}
	}
	
	// --------------------------------------------------------------------	

	// Skipping for now, as it's not implemented in vfsStreamWrapper
	// flock(): vfsStreamWrapper::stream_lock is not implemented!
	
	// public function test_write_file()
	// {
	// 	if ( ! defined('FOPEN_WRITE_CREATE_DESTRUCTIVE'))
	// 	{
	// 		define('FOPEN_WRITE_CREATE_DESTRUCTIVE', 'wb');
	// 	}
	// 	
	// 	$content = 'Jack and Jill went up the mountain to fight a billy goat.';
	// 	
	// 	$file = vfsStream::newFile('write.txt', 0777)->withContent('')
	// 											 	 ->lastModified(time() - 86400)
	// 											 	 ->at($this->_test_dir);
	// 	
	// 	$this->assertTrue(write_file(vfsStream::url('write.txt'), $content));
	// 		
	// }

	// --------------------------------------------------------------------		
	
}