from test/more import *;
requires_capability( "fs" );
from std/io import Path;
let dir := Path.tempdir();
let source := dir.child("phase1-source.txt");
let copy_to := dir.child("phase1-copy.txt");
let move_to := dir.child("phase1-move.txt");
source.spew_utf8("alpha\nbeta\n");
is( source.size(), 11, "size reports bytes", );
ok( source.size_human() ne "", "size_human returns text", );
let st := source.stat();
ok( st != null, "stat returns metadata", );
ok( st.get( "size", 0 ) >= 11, "stat includes size", );
ok( st.get( "mode", -1 ) ≠ -1, "stat includes mode field", );
ok( st.get( "uid", -1 ) ≠ -1, "stat includes uid field", );
let lst := source.lstat();
ok( lst != null, "lstat returns metadata", );
ok( lst.get( "mode", -1 ) ≠ -1, "lstat includes mode field", );
let chmod_out := source.chmod(420);
ok( chmod_out >= 0, "chmod returns numeric status", );
let copied := source.copy(copy_to);
ok( copied.exists(), "copy creates destination", );
is( copy_to.slurp_utf8(), "alpha\nbeta\n", "copy keeps payload", );
copy_to.move(move_to);
ok( move_to.exists(), "move creates new path", );
is( copy_to.exists(), 0, "move removes old path", );
let raw_lines := [];
source.each_line( function (line) {
raw_lines.push( typeof line );
}, true );
is( raw_lines[0], "BinaryString", "each_line raw mode yields binary", );
is( typeof source.next_line(true), "BinaryString", "next_line raw mode returns binary", );
is( typeof source.next_line(), "String", "next_line text mode returns string", );
ok( source.remove(), "remove deletes file", );
is( source.exists(), 0, "remove updates exists", );
ok( dir.remove_tree(), "remove_tree removes directory", );
done_testing();