Finished the final tests (except do_upload)
diff --git a/tests/codeigniter/libraries/Upload_test.php b/tests/codeigniter/libraries/Upload_test.php
index 021af28..d79a3ff 100644
--- a/tests/codeigniter/libraries/Upload_test.php
+++ b/tests/codeigniter/libraries/Upload_test.php
@@ -18,9 +18,9 @@
 		$this->_test_dir = vfsStreamWrapper::getRoot();
 	}
 
-	function test_do_upload()
+	function test_do_upload() 
 	{
-		$this->markTestIncomplete('TODO');
+		$this->markTestIncomplete('We can\'t really test this at the moment because of the call to `is_uploaded_file` in do_upload which isn\'t supported by vfsStream');
 	}
 
 	function test_data()
@@ -64,7 +64,11 @@
 
 	function test_set_filename()
 	{
-		$this->markTestIncomplete('TODO');
+		$file1 = vfsStream::newFile('hello-world.txt')->withContent('Hello world.')->at($this->_test_dir);
+		$this->upload->file_ext = '.txt';
+
+		$this->assertEquals('helloworld.txt', $this->upload->set_filename(vfsStream::url('testDir').'/', 'helloworld.txt'));
+		$this->assertEquals('hello-world1.txt', $this->upload->set_filename(vfsStream::url('testDir').'/', 'hello-world.txt'));
 	}
 
 	function test_set_max_filesize()
@@ -102,7 +106,22 @@
 
 	function test_set_image_properties()
 	{
-		$this->markTestIncomplete('TODO');
+		$this->upload->file_type = 'image/gif';
+		$this->upload->file_temp = 'tests/mocks/uploads/ci_logo.gif';
+
+		$props = array(
+			'image_width'	=>	170,
+			'image_height'	=>	73,
+			'image_type'	=>	'gif',
+			'image_size_str'	=>	'width="170" height="73"'
+		);
+
+		$this->upload->set_image_properties($this->upload->file_temp);
+
+		$this->assertEquals($props['image_width'], $this->upload->image_width);
+		$this->assertEquals($props['image_height'], $this->upload->image_height);
+		$this->assertEquals($props['image_type'], $this->upload->image_type);
+		$this->assertEquals($props['image_size_str'], $this->upload->image_size_str);
 	}
 
 	function test_set_xss_clean()
@@ -125,7 +144,7 @@
 
 	function test_is_allowed_filetype()
 	{
-		$this->upload->allowed_types = array('html');
+		$this->upload->allowed_types = array('html', 'gif');
 
 		$this->upload->file_ext = '.txt';
 		$this->upload->file_type = 'text/plain';
@@ -137,7 +156,10 @@
 		$this->assertTrue($this->upload->is_allowed_filetype(FALSE));
 		$this->assertTrue($this->upload->is_allowed_filetype(TRUE));
 
-		$this->markTestIncomplete('Image tests');
+		$this->upload->file_temp = 'tests/mocks/uploads/ci_logo.gif';
+		$this->upload->file_ext = '.gif';
+		$this->upload->file_type = 'image/gif';
+		$this->assertTrue($this->upload->is_allowed_filetype());
 	}
 
 	function test_is_allowed_filesize()
@@ -153,7 +175,21 @@
 
 	function test_is_allowed_dimensions()
 	{
-		$this->markTestIncomplete('TODO');
+		$this->upload->file_type = 'text/plain';
+		$this->assertTrue($this->upload->is_allowed_dimensions());
+
+		$this->upload->file_type = 'image/gif';
+		$this->upload->file_temp = 'tests/mocks/uploads/ci_logo.gif';
+
+		$this->upload->max_width = 10;		
+		$this->assertFalse($this->upload->is_allowed_dimensions());
+
+		$this->upload->max_width = 170;
+		$this->upload->max_height = 10;
+		$this->assertFalse($this->upload->is_allowed_dimensions());
+
+		$this->upload->max_height = 73;
+		$this->assertTrue($this->upload->is_allowed_dimensions());
 	}
 
 	function test_validate_upload_path()
@@ -198,6 +234,9 @@
 
 		$this->upload->file_temp = vfsStream::url('file3.txt');
 		$this->assertFalse($this->upload->do_xss_clean());
+
+		$this->upload->file_temp = 'tests/mocks/uploads/ci_logo.gif';
+		$this->assertTrue($this->upload->do_xss_clean());
 	}
 
 	function test_set_error()
diff --git a/tests/mocks/uploads/ci_logo.gif b/tests/mocks/uploads/ci_logo.gif
new file mode 100644
index 0000000..073ec14
--- /dev/null
+++ b/tests/mocks/uploads/ci_logo.gif
Binary files differ