Got FileSystem working with multi methods (pmichaud++)
[kakapo:kakapo.git] / t / FileSystem.nqp
1 #! /usr/bin/env parrot-nqp 
2 # Copyright (C) 2010, Austin Hastings. See accompanying LICENSE file, or 
3 # http://www.opensource.org/licenses/artistic-license-2.0.php for license.
4
5 INIT {
6         # Load the Kakapo library
7         my $env := pir::new__PS('Env');
8         my $root_dir := $env<HARNESS_ROOT_DIR> || '.';
9         pir::load_bytecode($root_dir ~ '/library/kakapo_full.pbc');
10 }
11
12 class Test::FileSystem
13         is UnitTest::Testcase ;
14
15 has     $!sut;
16
17 INIT {
18         use(    UnitTest::Testcase );   
19         use(    UnitTest::Assertions ); 
20 }
21
22 TEST_MAIN();
23
24 our method set_up() {
25         $!sut := FileSystem.instance;
26 }
27
28 our method test_cwd() {
29         my $cwd := $!sut.cwd;   
30         my @parts := $cwd.split( $!sut.directory_separator );
31
32         # NOTE: I don't have a better way to test this ATM. If you think of one, please implement it.
33         assert_equal( 'kakapo', @parts[-1],
34                 'cwd should end with "kakapo"' );
35 }
36
37 our method test_exists() {
38
39         assert_false( $!sut.exists('/tmp/this-PrOBAbly-doesnt-eXXXI$+'),
40                 "File really shouldn't exist." );
41                 
42         assert_true( $!sut.exists('.'),
43                 "Current directory had better exist.");
44 }
45         
46 our method test_instance() {
47         
48         assert_not_null( $!sut,
49                 'FileSystem.instance should never return null' );
50                 
51         assert_isa( $!sut, 'FileSystem',
52                 'FileSystem.instance should return an object of the right type' );
53 }
54
55 our method test_new() {
56         my $sut := FileSystem.new;
57         
58         assert_isa( $sut, FileSystem,
59                 '.new should return object of correct type');
60 }
61
62 # NB: Assumes this is run from $KAKAPO root dir.
63 our method test_get_contents_file() {
64         my $t1 := $!sut.get_contents( 't/test-data/text-file-1' );
65         
66         assert_not_equal( -1, $t1.index( 'text file 1.'),
67                 'Text file 1 should be read in.' );
68         assert_equal( 4, $t1.split("\n").elems,
69                 'File 1 should have 4 lines');
70         
71         my $t2 := $!sut.get_contents( 't/test-data/text-file-2' );
72         
73         assert_not_equal( -1, $t2.index( 'text file 2.' ),
74                 'Text file 2 should be read in.' );
75         assert_equal( 4, $t2.split("\n").elems,
76                 'File 2 should have 4 lines');
77 }
78
79 our method test_get_contents_dir() {
80         my @d1 := $!sut.get_contents( 't' );
81         
82         my %dir := Hash.new;
83         @d1.map: -> $key { %dir{$key} := 1; };
84         
85         assert_true( %dir.contains( <test-data> ),
86                 't/ directory should have a test-data child' );
87 }
88
89 our method test_is_file() {
90         assert_true( $!sut.is_file( 't/FileSystem.nqp' ),
91                 't/FileSystem.nqp should be a file' );
92         assert_false( $!sut.is_file( 't/bootstrap' ),
93                 't/bootstrap should not be a file' );
94 }