69 lines
2.0 KiB
Erlang
Executable File
69 lines
2.0 KiB
Erlang
Executable File
#!/usr/bin/env escript
|
|
%% -*- erlang -*-
|
|
%%! -nocookie
|
|
|
|
-mode(compile).
|
|
|
|
main([Left, Right]) ->
|
|
{ok, LeftMetadata} = file:consult(Left),
|
|
{ok, RightMetadata} = file:consult(Right),
|
|
compare(LeftMetadata, RightMetadata),
|
|
halt();
|
|
main(_) ->
|
|
halt(1).
|
|
|
|
compare(LeftMetadata, RightMetadata) ->
|
|
[{application, LeftApp, LeftProps}] = LeftMetadata,
|
|
[{application, RightApp, RightProps}] = RightMetadata,
|
|
|
|
assert_equal(LeftApp, RightApp, "application name"),
|
|
|
|
LeftId = proplists:get_value(id, LeftProps),
|
|
RightId = proplists:get_value(id, RightProps),
|
|
case LeftId of
|
|
RightId ->
|
|
ok;
|
|
_ ->
|
|
io:format(standard_error,
|
|
"Warning:\t 'id' does not match (~p != ~p)~n", [LeftId, RightId])
|
|
end,
|
|
|
|
LeftPropsMap = proplists:to_map(proplists:delete(id, LeftProps)),
|
|
RightPropsMap = proplists:to_map(proplists:delete(id, RightProps)),
|
|
assert_equal(
|
|
lists:sort(maps:keys(LeftPropsMap)),
|
|
lists:sort(maps:keys(RightPropsMap)),
|
|
"app property keys"
|
|
),
|
|
[case K of
|
|
K when K =:= applications orelse K =:= modules ->
|
|
assert_equal(
|
|
lists:sort(maps:get(K, LeftPropsMap)),
|
|
lists:sort(maps:get(K, RightPropsMap)),
|
|
K
|
|
);
|
|
env ->
|
|
assert_equal(
|
|
proplists:to_map(maps:get(K, LeftPropsMap)),
|
|
proplists:to_map(maps:get(K, RightPropsMap)),
|
|
K
|
|
);
|
|
_ ->
|
|
assert_equal(
|
|
maps:get(K, LeftPropsMap),
|
|
maps:get(K, RightPropsMap),
|
|
K
|
|
)
|
|
end || K <- lists:sort(maps:keys(LeftPropsMap))],
|
|
ok.
|
|
|
|
assert_equal(Expected, Actual, Context) ->
|
|
case Actual of
|
|
Expected ->
|
|
ok;
|
|
_ ->
|
|
io:format(standard_error,
|
|
"Expected:\t~p~n But got:\t~p~n For:\t~p~n", [Expected, Actual, Context]),
|
|
erlang:error(assertion_failed)
|
|
end.
|