| 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 | |
|---|
| 8 | filter_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 | |
|---|
| 16 | filter (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]); |
|---|
| 21 | filter (Binary, [Test | Tail], Acc) -> |
|---|
| 22 | filter (Binary, Tail, [Test | Acc]); |
|---|
| 23 | filter (_, [], Acc) -> |
|---|
| 24 | lists: flatten (Acc). |
|---|
| 25 | |
|---|
| 26 | testable_export ({module_info, _}, Fs) -> Fs; |
|---|
| 27 | testable_export ({F, 0}, Fs) -> [F | Fs]; |
|---|
| 28 | testable_export (_, Fs) -> Fs. |
|---|