Changeset 47
- Timestamp:
- 02/02/09 19:41:02 (3 years ago)
- Location:
- trunk/src
- Files:
-
- 2 edited
-
fixtures.erl (modified) (2 diffs)
-
fixtures_test.erl (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/fixtures.erl
r46 r47 72 72 73 73 use_tree (Dir, Tree, Fun) -> 74 try75 make_tree (Dir, Tree),76 safe_call (Dir, Tree, Fun)77 after78 delete_tree (Dir)79 end.80 81 safe_call (Dir, Tree, Fun) ->82 74 Self = self (), 83 75 Pid = spawn_link (fun() -> safe_call (Self, Dir, Tree, Fun) end), … … 90 82 process_flag (trap_exit, true), 91 83 Self = self (), 84 make_tree (Dir, Tree), 92 85 Pid = spawn_link (fun () -> Self ! {self (), Fun (Dir, Tree)} end), 93 receive 86 receive M -> delete_tree (Dir) end, 87 case M of 94 88 {Pid, Result} -> Parent ! {Self, Result}; 95 {'EXIT', Pid, Error} -> Parent ! {Self, {'EXIT', Error}} 89 {'EXIT', Pid, Error} -> Parent ! {Self, {'EXIT', Error}}; 90 _ -> ignore 96 91 end. -
trunk/src/fixtures_test.erl
r46 r47 11 11 -export ([use_tree_destroys_tree_even_if_fun_crashes/0]). 12 12 -export ([use_tree_destroys_tree_even_if_trapexit/0]). 13 -export ([use_tree_destroys_tree_even_if_killed_by_parent_link/0]). 13 14 14 15 temporary_pathname () -> … … 28 29 {file, "test2", ["Goodbye", "world!"]}, 29 30 {directory, "testdir", 30 [{file, "toto", "Silly"}, {directory, "testdir2", [{file, "titi", "Very silly"}]}]}]. 31 [{file, "toto", "Silly"}, 32 {directory, "testdir2", [{file, "titi", "Very silly"}]}]}]. 33 34 test_tree (Dir) -> 35 fun ({Path, Expected}, Count) -> 36 Filename = filename: join ([Dir | Path]), 37 {ok, Content} = file: read_file (Filename), 38 {Count, Expected} = {Count, binary_to_list (Content)}, 39 Count + 1 40 end. 31 41 32 42 tree_handling () -> … … 34 44 Tree = tree (), 35 45 fixtures: make_tree (Tmp_dirname, Tree), 36 {ok, Content} = file: read_file (filename: join (Tmp_dirname, "test")), 37 "Hello world" = binary_to_list (Content), 38 {ok, Content2} = file: read_file (filename: join (Tmp_dirname, "test2")), 39 "Goodbye\nworld!" = binary_to_list (Content2), 40 {ok, Content3} = file: read_file (filename:join ([Tmp_dirname, "testdir", "toto"])), 41 "Silly" = binary_to_list (Content3), 42 File4 = filename: join ([Tmp_dirname, "testdir", "testdir2", "titi"]), 43 {ok, Content4} = file: read_file (File4), 44 "Very silly" = binary_to_list (Content4), 46 Test = test_tree (Tmp_dirname), 47 Table = 48 [{["test"], "Hello world"}, 49 {["test2"], "Goodbye\nworld!"}, 50 {["testdir", "toto"], "Silly"}, 51 {["testdir", "testdir2", "titi"], "Very silly"}], 52 lists: foldl (Test, 1, Table), 45 53 fixtures: delete_tree (Tmp_dirname), 46 54 {error, enoent} = file: read_file_info (Tmp_dirname), … … 60 68 Result = fixtures: use_tree (Tmp, tree (), fun keep_real_files/2), 61 69 ["test", "test2", "testdir"] = Result, 62 {error,enoent} = file: read_file_info (Tmp),70 {error,enoent} = file: read_file_info (Tmp), 63 71 pass. 64 72 … … 74 82 no_crash 75 83 catch 76 _: {suicide, Tmp, Tree} -> ok;77 C: E -> {unexpected, C, E}84 _: {suicide, Tmp, Tree} -> ok; 85 C: E -> {unexpected, C, E} 78 86 end, 79 {error, enoent} = file: read_file_info (Tmp),87 {error, enoent} = file: read_file_info (Tmp), 80 88 pass. 81 89 … … 91 99 no_crash 92 100 catch 93 _: {undef, _} -> ok;101 _: {undef, _} -> ok; 94 102 C:E -> {unexpected, C, E} 95 103 end, 96 {error, enoent} = file: read_file_info (Tmp),104 {error, enoent} = file: read_file_info (Tmp), 97 105 pass. 98 106 … … 100 108 exit ({suicide, Dir, Tree}). 101 109 110 use_tree_destroys_tree_even_if_killed_by_parent_link () -> 111 Tmp = fixtures: temporary_pathname (), 112 Self = self (), 113 ok = 114 try 115 Long = fun (_, _) -> Self ! tree_built, timer: sleep (5000) end, 116 Use_tree = fun () -> fixtures: use_tree (Tmp, [], Long) end, 117 Impatient = fun () -> spawn_link (Use_tree), 118 receive tree_built -> ok end, 119 throw (stop) end, 120 Pid = spawn (Impatient), 121 receive tree_built -> Pid ! tree_built end, 122 ok 123 catch 124 C: E -> {unexpected, C, E} 125 end, 126 timer: sleep (500), 127 {error, enoent} = file: read_file_info (Tmp), 128 pass.
Note: See TracChangeset
for help on using the changeset viewer.
