howl.explorers.DirectoryExplorer
local tmp_root, subdir1, subdir2
items = (explorer) ->
names = [row.path for row in *explorer\display_items!]
table.sort names, (a, b) -> a < b
names
before_each ->
tmp_root = File.tmpdir!
subdir1 = tmp_root .. 'subdir1/'
subdir1\mkdir!
subdir2 = tmp_root .. 'subdir2/'
subdir2\mkdir!
f1 = tmp_root .. 'file1'
f1\touch!
f2 = tmp_root .. 'file2'
f2\touch!
f3 = subdir1 .. 'file3'
f3\touch!
displays the file path
e = DirectoryExplorer tmp_root
assert.same tmp_root.path .. File.separator, e\display_path!.text
for_path returns a list of explorers from root to given path
deep_dir = tmp_root .. 'a/b/c'
deep_dir\mkdir_p!
es = DirectoryExplorer.for_path deep_dir.path, root: tmp_root
assert.same 4, #es
assert.same deep_dir\relative_to_parent(tmp_root) .. File.separator, es[4]\display_path!.text
(parse)
jumps to root for "/"
e = DirectoryExplorer (tmp_root .. 'sub/')
assert.same {File '/'}, [explorer.file for explorer in *e\parse('/').jump_to_absolute]
returns a new absolute list of explorers
e = DirectoryExplorer tmp_root, root: tmp_root
assert.same {tmp_root, subdir1}, [explorer.file for explorer in *e\parse('subdir1/').jump_to_absolute]
jumps to absolute path for "/path"
e = DirectoryExplorer subdir1
explorers = e\parse(subdir2.path .. '/').jump_to_absolute
assert.same subdir2.path, explorers[#explorers].file.path
(listing)
lists all files and directories including current directory
e = DirectoryExplorer tmp_root
assert.same {'./', 'file1', 'file2', 'subdir1/', 'subdir2/'}, items e
(.. files_only = true)
shows files and directories but not current directory
e = DirectoryExplorer tmp_root, files_only: true
assert.same {'file1', 'file2', 'subdir1/', 'subdir2/'}, items e
(.. directories_only = true)
shows directories including current directory
e = DirectoryExplorer tmp_root, directories_only: true
assert.same {'./', 'subdir1/', 'subdir2/'}, items e
(.. recursive listing)
shows contents of entire subtree
e = DirectoryExplorer tmp_root
e\actions!.toggle_subtree.handler e
contents = {
'./', 'file1', 'file2', 'subdir1/', 'subdir1/file3', 'subdir2/'
}
assert.same contents, items e
changing recursive mode updates all explorers in path
(subdir1 .. 'a/b')\mkdir_p!
explorers = DirectoryExplorer.for_path subdir1.path, root: tmp_root
inner = explorers[2]
outer = explorers[1]
inner\actions!.toggle_subtree.handler inner
assert.same 4, #items inner
assert.same 8, #items outer
inner\actions!.toggle_subtree.handler inner
assert.same 3, #items inner
assert.same 5, #items outer