Added FileSystem.nqp, Path.nqp. Completed use case #1 on ticket
[kakapo:rurbans-kakapo.git] / t / Path.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         pir::load_language('parrot');
8         my $env := pir::new__PS('Env');
9         my $root_dir := $env<HARNESS_ROOT_DIR> || '.';
10         pir::load_bytecode($root_dir ~ '/library/kakapo_full.pbc');
11 }
12
13 class Test::Path
14         is UnitTest::Testcase ;
15
16 INIT {
17         use(    'UnitTest::Testcase' ); 
18         use(    'UnitTest::Assertions' );       
19 }
20
21 # Run the MAIN for this class.
22 Opcode::get_root_global(pir::get_namespace__P().get_name).MAIN;
23
24 method test_composing() {
25         my $root := Path.new('/xxx');
26         my $sut := Path.new($root, 'yyy');
27         
28         assert_equal( ~$sut, '/xxx/yyy',
29                 'Composing two paths should catenate them');
30 }
31
32 method test_composing_rooted() {
33         my $root := Path.new('/xxx');
34         my $sut := Path.new($root, '/yyy');
35         
36         assert_equal( ~$sut, '/yyy',
37                 'Composing should be ignored if path is absolute');
38 }
39
40 method test_new() {
41         my $sut := Path.new;
42         
43         assert_instance_of( $sut, 'Path',
44                 '.new should return object of correct type');
45 }
46
47 method test_get_string() {
48         my $sut := Path.new('xxx', 'yyy', 'zzz');
49         
50         assert_equal( ~ $sut, 'xxx/yyy/zzz',
51                 'Get-string should return the full path');
52 }
53
54 method test_parsing_dir_file() {
55         my $sut := Path.new('/tmp/xxx');
56         
57         assert_equal( $sut.filename, 'xxx',
58                 'Path should treat final part as a filename');
59 }
60
61 method test_parsing_dir_nofile() {
62         my $sut := Path.new('/tmp/xxx', :nofile);
63         
64         assert_equal( $sut.filename, '',
65                 'Path should *not* treat final part as a filename if :nofile specified' );
66 }
67
68 method test_exists() {
69         my $sut := Path.new('.');
70
71         assert_true( $sut.exists,
72                 'CWD should exist');
73                 
74         $sut := Path.new('/tmp/no-such-file');
75         
76         assert_false( $sut.exists,
77                 'Bogus file should not exist');
78 }
79
80 method test_slurp() {
81         my $path := Path.new( 't/test-data/text-file-1' );
82         my $text := $path.slurp;
83         
84         assert_not_equal( -1, $text.index( 'text file 1.' ),
85                 'Text file 1 should be read in.' );
86         assert_equal( 4, $text.split("\n").elems,
87                 'File 1 should have 4 lines');
88 }
89         
90 method main() {
91         self.set_up;
92         self.test_slurp ;
93 }
94