source: trunk/src/tests.erl @ 73

Revision 73, 1.0 KB checked in by dom, 3 years ago (diff)

Refactoring.

Line 
1%%% Copyright (c) Dominic Williams, Nicolas Charpentier
2%%% All rights reserved.
3%%% See file COPYING.
4
5-module (tests).
6-export ([filter_by_attribute/1]).
7
8filter_by_attribute (Binary) ->
9    {ok, Chunks} = beam_lib: chunks (Binary, [attributes, compile_info]),
10    {Module, [{attributes, Attributes}, {compile_info, Info}]} = Chunks,
11    {value, {source, Filename}} = lists: keysearch (source, 1, Info),
12    Declarations = lists: flatten ([T || {test, T} <- Attributes]),
13    Tests = filter (Binary, Declarations, []),
14    {Filename, Module, Tests}.
15
16filter (Binary, [exports | Tail], Acc) ->
17    {ok, Chunks} = beam_lib: chunks (Binary, [exports]),
18    {_, [{exports, Exports}]} = Chunks,
19    Tests = lists: foldl (fun testable_export/2, [], Exports),
20    filter (Binary, Tail, [Tests | Acc]);
21filter (Binary, [Test | Tail], Acc) ->
22    filter (Binary, Tail, [Test | Acc]);
23filter (_, [], Acc) ->
24    lists: flatten (Acc).
25
26testable_export ({module_info, _}, Fs) -> Fs;
27testable_export ({F, 0}, Fs) -> [F | Fs];
28testable_export (_, Fs) -> Fs.
Note: See TracBrowser for help on using the repository browser.