- Timestamp:
- 01/29/09 16:43:23 (3 years ago)
- Location:
- trunk/src
- Files:
-
- 3 edited
-
fixtures.erl (modified) (2 diffs)
-
fixtures_test.erl (modified) (4 diffs)
-
shells_tests.erl (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/fixtures.erl
r45 r46 8 8 -export ([make_tree/2, delete_tree/1]). 9 9 -export ([use_tree/3]). 10 -export ([use_tree/ 4]).11 -include_lib ("kernel/include/file.hrl").10 -export ([use_tree/2]). 11 -include_lib ("kernel/include/file.hrl"). 12 12 13 13 make_tree (Root, Tree) -> … … 68 68 lists: foreach (Delete, Filename_list). 69 69 70 use_tree (Tree, Fun) -> 71 use_tree (temporary_pathname (), Tree, Fun). 72 70 73 use_tree (Dir, Tree, Fun) -> 71 use_tree (Dir, Tree, Fun, fun (_, _) -> ok end). 74 try 75 make_tree (Dir, Tree), 76 safe_call (Dir, Tree, Fun) 77 after 78 delete_tree (Dir) 79 end. 72 80 73 use_tree (Dir, Tree, Use_fun, Cleanup_fun) -> 74 make_tree (Dir, Tree), 75 LastCall = case catch Use_fun (Dir, Tree) of 76 {'EXIT', Reason} -> 77 fun () -> exit (Reason) end; 78 Result -> 79 fun() -> Result end 80 end, 81 Cleanup_fun (Dir, Tree), 82 delete_tree (Dir), 83 LastCall (). 81 safe_call (Dir, Tree, Fun) -> 82 Self = self (), 83 Pid = spawn_link (fun() -> safe_call (Self, Dir, Tree, Fun) end), 84 receive 85 {Pid, {'EXIT', Error}} -> exit (Error); 86 {Pid, Result} -> Result 87 end. 88 89 safe_call (Parent, Dir, Tree, Fun) -> 90 process_flag (trap_exit, true), 91 Self = self (), 92 Pid = spawn_link (fun () -> Self ! {self (), Fun (Dir, Tree)} end), 93 receive 94 {Pid, Result} -> Parent ! {Self, Result}; 95 {'EXIT', Pid, Error} -> Parent ! {Self, {'EXIT', Error}} 96 end. -
trunk/src/fixtures_test.erl
r45 r46 9 9 -export ([use_tree_creates_the_tree_first_and_destroys_it_after/0]). 10 10 -export ([use_tree_passes_a_tree_to_a_fun/0]). 11 -export([use_tree_destroys_tree_even_if_fun_crashes/0]). 12 -export([use_tree_can_take_a_cleanup_fun/0]). 13 -include_lib ("kernel/include/file.hrl"). 11 -export ([use_tree_destroys_tree_even_if_fun_crashes/0]). 12 -export ([use_tree_destroys_tree_even_if_trapexit/0]). 14 13 15 14 temporary_pathname () -> … … 59 58 use_tree_creates_the_tree_first_and_destroys_it_after () -> 60 59 Tmp = fixtures: temporary_pathname (), 61 ["test", "test2", "testdir"] = fixtures: use_tree (Tmp, tree (), fun keep_real_files/2), 60 Result = fixtures: use_tree (Tmp, tree (), fun keep_real_files/2), 61 ["test", "test2", "testdir"] = Result, 62 62 {error,enoent} = file:read_file_info (Tmp), 63 63 pass. … … 69 69 Tmp = fixtures: temporary_pathname (), 70 70 Tree = tree (), 71 {'EXIT', {suicide, Tmp, Tree}} = (catch fixtures: use_tree (Tmp, Tree, fun suicide/2)), 71 ok = 72 try 73 fixtures: use_tree (Tmp, Tree, fun suicide/2), 74 no_crash 75 catch 76 _:{suicide, Tmp, Tree} -> ok; 77 C:E -> {unexpected, C, E} 78 end, 79 {error, enoent} = file:read_file_info (Tmp), 80 pass. 81 82 spawn_undef (_, _) -> 83 spawn_link (blabla, blabla, []), 84 receive M -> M end. 85 86 use_tree_destroys_tree_even_if_trapexit () -> 87 Tmp = fixtures: temporary_pathname (), 88 ok = 89 try 90 fixtures: use_tree (Tmp, [], fun spawn_undef/2), 91 no_crash 92 catch 93 _:{undef, _} -> ok; 94 C:E -> {unexpected, C, E} 95 end, 72 96 {error, enoent} = file:read_file_info (Tmp), 73 97 pass. … … 75 99 suicide (Dir, Tree) -> 76 100 exit ({suicide, Dir, Tree}). 77 78 use_tree_can_take_a_cleanup_fun () ->79 Tmp = fixtures: temporary_pathname (),80 Tree = tree (),81 put (cleanup_called, false),82 Cleanup = fun (D, T) -> put (cleanup_called, {true, D, T}) end,83 Result = (catch fixtures: use_tree (Tmp, Tree, fun suicide/2, Cleanup)),84 {'EXIT', {suicide, Tmp, Tree}} = Result,85 {true, Tmp, Tree} = get (cleanup_called),86 pass.87 101 -
trunk/src/shells_tests.erl
r45 r46 22 22 Binaries = [modules: to_binary (P) || P <- Paths], 23 23 Tester ! lists: zip (Paths, Binaries), 24 {Run, Passed } = final_test_result (),25 Run = Passed,24 {Run, Passed, Messages} = final_test_result ([]), 25 {passed, Run, Paths, Messages} = {passed, Passed, Paths, Messages}, 26 26 ok. 27 27 28 final_test_result ( ) ->28 final_test_result (Messages) -> 29 29 receive 30 {Run, Run, Passed} ->31 {Run, Passed };32 _->33 final_test_result ( )34 after 1000 -> timeout30 {Run, Run, Passed} = Message -> 31 {Run, Passed, lists: reverse ([Message | Messages])}; 32 Message -> 33 final_test_result ([Message | Messages]) 34 after 1000 -> {timeout, Messages} 35 35 end.
Note: See TracChangeset
for help on using the changeset viewer.
