Skip to content

Commit

Permalink
Remove duplicate code in unit tests
Browse files Browse the repository at this point in the history
  • Loading branch information
schlagert committed Aug 6, 2015
1 parent 06f5b53 commit b24a8f3
Show file tree
Hide file tree
Showing 4 changed files with 52 additions and 84 deletions.
28 changes: 0 additions & 28 deletions test/erlsom_all_tests.erl

This file was deleted.

28 changes: 0 additions & 28 deletions test/erlsom_extension_tests.erl

This file was deleted.

35 changes: 10 additions & 25 deletions test/erlsom_gexf_tests.erl
Expand Up @@ -8,27 +8,21 @@
-include_lib("erlsom/src/erlsom.hrl").
-include_lib("erlsom/src/erlsom_parse.hrl").

compile_gexf_xsd() ->
XsdDir = filename:join(code:priv_dir(erlsom), "gexf/schema/"),
XsdFilePath = filename:join(XsdDir, "gexf.xsd"),
erlsom:compile_xsd_file(XsdFilePath, [{include_dirs, [XsdDir]}]).

parse_gexf_file(DataFileName, XsdModel) ->
DataPath = code:priv_dir(erlsom) ++ "/gexf/data/" ++ DataFileName,
erlsom:parse_file(DataPath, XsdModel).
-define(XSD_FILE, ["gexf", "schema", "gexf.xsd"]).
-define(INCLUDE_PATHS, [["gexf", "schema"]]).

compile_schema_test() ->
{ok, _Model} = compile_gexf_xsd().
{ok, _Model} = erlsom_tests:compile_xsd(?XSD_FILE, ?INCLUDE_PATHS).

unique_namespaces_test() ->
{ok, Model} = compile_gexf_xsd(),
{ok, Model} = erlsom_tests:compile_xsd(?XSD_FILE, ?INCLUDE_PATHS),
Namespaces = Model#model.nss,
?assertEqual(lists:usort(Namespaces), Namespaces),
ok.

parse_file_test() ->
{ok, Model} = compile_gexf_xsd(),
{ok, _Tree} = parse_gexf_file("test.gexf", Model),
{ok, Model} = erlsom_tests:compile_xsd(?XSD_FILE, ?INCLUDE_PATHS),
{ok, _Tree} = erlsom_tests:parse_file(["gexf", "data", "test.gexf"], Model),
ok.


Expand All @@ -43,16 +37,7 @@ leading_ns_delimeter_test_() ->


stability_test_() ->
[ stability_case("test.gexf")
, stability_case("basic.gexf")
, stability_case("data.gexf")
, stability_case("dynamics.gexf")
].


stability_case(FileName) ->
{ok, Model} = compile_gexf_xsd(),
{ok, Tree1} = parse_gexf_file(FileName, Model),
{ok, XML} = erlsom:write(Tree1, Model),
{ok, Tree2} = erlsom:parse(XML, Model),
{FileName, ?_assertEqual(Tree1, Tree2)}.
[{T,
erlsom_tests:verify_stability_(
?XSD_FILE, ["gexf", "data", T], ?INCLUDE_PATHS)}
|| T <- ["test.gexf", "basic.gexf", "data.gexf", "dynamics.gexf"]].
45 changes: 42 additions & 3 deletions test/erlsom_tests.erl
Expand Up @@ -6,11 +6,50 @@

-include_lib("eunit/include/eunit.hrl").

-compile([export_all]).

gexf_test_() ->
{module, erlsom_gexf_tests}.
{"Test XML/XSD in GEXF format.", {module, erlsom_gexf_tests}}.

all_test_() ->
{"Test XSD with the xs:all tag.", {module, erlsom_all_tests}}.
{"Test XSD with the xs:all tag.",
verify_stability_(["all", "all.xsd"],
["all", "all.xml"],
[])}.

extension_test_() ->
{"Test XSD type extensions.", {module, erlsom_extension_tests}}.
{"Test XSD type extensions.",
verify_stability_(["extension", "extension.xsd"],
["extension", "extension.xml"],
[])}.

%% @doc
%% compile the XSD schema file with the given relative path, example:
%% compile_xsd(["all", "all.xsd"], [])
compile_xsd(Path, IncludePaths) ->
IncludeDirs = [priv_path(I) || I <- IncludePaths],
erlsom:compile_xsd_file(priv_path(Path), [{include_dirs, IncludeDirs}]).

%% @doc
%% parse an xml document with a compiled XSD model, example:
%% parse_file(["all", "all.xml"], Model)
parse_file(Path, Model) ->
erlsom:parse_file(priv_path(Path), Model).

%% @doc
%% verify the parser/generator stability, example:
%% verify_stability(["all", "all.xsd"], ["all", "all.xml"], [])
verify_stability(XsdPath, XmlPath, IncludeDirs) ->
{ok, Model} = compile_xsd(XsdPath, IncludeDirs),
{ok, Tree1} = parse_file(XmlPath, Model),
{ok, XML} = erlsom:write(Tree1, Model),
{ok, Tree2} = erlsom:parse(XML, Model),
{lists:last(XmlPath), ?_assertEqual(Tree1, Tree2)}.

%% @doc
%% test generator function for verify_stability tests
verify_stability_(XsdPath, XmlPath, IncludeDirs) ->
fun() -> verify_stability(XsdPath, XmlPath, IncludeDirs) end.

priv_path(Path) ->
filename:join([code:priv_dir(erlsom) | Path]).

0 comments on commit b24a8f3

Please sign in to comment.