diff --git a/source/documents/_scripts.html.jade b/source/documents/_scripts.html.jade
index 9d3437e..e24a713 100644
--- a/source/documents/_scripts.html.jade
+++ b/source/documents/_scripts.html.jade
@@ -4,6 +4,7 @@ script(src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.1.5/angular.js")
script(src="//raw.github.com/chjj/marked/master/lib/marked.js")
script(src="scripts/app.js")
script(src="scripts/services.js")
+script(src="scripts/reader/_factory.js")
script(src="scripts/reader/markdown.js")
script(src="scripts/reader/json.js")
script(src="scripts/controllers.js")
diff --git a/source/documents/scripts/reader/_factory.js.coffee b/source/documents/scripts/reader/_factory.js.coffee
new file mode 100644
index 0000000..e4d4008
--- /dev/null
+++ b/source/documents/scripts/reader/_factory.js.coffee
@@ -0,0 +1,11 @@
+angular.module("sideBySide").factory("readerFactory", ($injector) ->
+ return (filename) ->
+ extension = filename.split(".").pop()
+ switch extension
+ when "json"
+ return $injector.get("jsonReader")
+ when "md", "markdown"
+ return $injector.get("markdownReader")
+ else
+ throw "Unknown extension '" + extension + "'."
+)
diff --git a/source/documents/scripts/tests/_setup.js.coffee b/source/documents/scripts/tests/_setup.js.coffee
new file mode 100644
index 0000000..42cf8c7
--- /dev/null
+++ b/source/documents/scripts/tests/_setup.js.coffee
@@ -0,0 +1,8 @@
+this.injector = angular.injector(['ng', 'sideBySide'])
+
+init = {
+ setup: () ->
+ this.$scope = injector.get('$rootScope').$new();
+}
+
+this.module('tests', init);
diff --git a/source/documents/scripts/tests/reader/_abstract.js.coffee b/source/documents/scripts/tests/reader/_abstract.js.coffee
index e4b8762..55dee12 100644
--- a/source/documents/scripts/tests/reader/_abstract.js.coffee
+++ b/source/documents/scripts/tests/reader/_abstract.js.coffee
@@ -1,5 +1,4 @@
this.testReader = (name, testCases) ->
- injector = angular.injector(["ng", "sideBySide"])
reader = injector.get(name)
for testCase in testCases
diff --git a/source/documents/scripts/tests/reader/_factory.js.coffee b/source/documents/scripts/tests/reader/_factory.js.coffee
new file mode 100644
index 0000000..364a0a6
--- /dev/null
+++ b/source/documents/scripts/tests/reader/_factory.js.coffee
@@ -0,0 +1,9 @@
+test("readerFactory", () ->
+ factory = injector.get("readerFactory")
+
+ ok(factory("somefile.md"))
+ ok(factory("otherfile.json"))
+ throws(() ->
+ factory("microsoft.doc")
+ , /unknown/i)
+)
diff --git a/source/documents/tests.html.jade b/source/documents/tests.html.jade
index f52b9b7..ef466d2 100644
--- a/source/documents/tests.html.jade
+++ b/source/documents/tests.html.jade
@@ -9,6 +9,8 @@ html
// test scripts
link(rel="stylesheet", type="text/css", href="//cdnjs.cloudflare.com/ajax/libs/qunit/1.11.0/qunit.css")
script(src="//cdnjs.cloudflare.com/ajax/libs/qunit/1.11.0/qunit.js")
+ script(src="scripts/tests/_setup.js")
+ script(src="scripts/tests/reader/_factory.js")
script(src="scripts/tests/reader/_abstract.js")
script(src="scripts/tests/reader/markdown.js")
script(src="scripts/tests/reader/json.js")