diff --git a/progtest/.gitignore b/progtest/.gitignore
index 4d64059f..f2fd83b0 100644
--- a/progtest/.gitignore
+++ b/progtest/.gitignore
@@ -1,2 +1,3 @@
/node_modules
+index.js
diff --git a/progtest/Makefile b/progtest/Makefile
index 8c92c08e..e4808aed 100644
--- a/progtest/Makefile
+++ b/progtest/Makefile
@@ -17,9 +17,17 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
-.PHONY: check test
+.PHONY: check test modindex FORCE
+
+namespaces=$(shell find src/ -type d)
+nsindex=$(addsuffix /index.js, $(namespaces))
test: check
check:
PATH="$(PATH):$(CURDIR)/node_modules/mocha/bin" \
mocha --harmony_destructuring --recursive test/
+
+modindex: $(nsindex)
+%/index.js: FORCE
+ $(CURDIR)/build-aux/gen-index "$*" > "$@"
+
diff --git a/progtest/bin/runner.js b/progtest/bin/runner.js
index 98a134e9..65a499aa 100644
--- a/progtest/bin/runner.js
+++ b/progtest/bin/runner.js
@@ -27,12 +27,20 @@ const filename = process.argv[ 3 ];
const fs = require( 'fs' );
const yaml_reader = require( 'js-yaml' );
-const TestCase = require( '../src/TestCase' );
-const YamlTestReader = require( '../src/reader/YamlTestReader' );
-const ConstResolver = require( '../src/reader/ConstResolver' );
-const DateResolver = require( '../src/reader/DateResolver' );
-const TestRunner = require( '../src/TestRunner' );
-const ConsoleTestReporter = require( '../src/reporter/ConsoleTestReporter' );
+const {
+ TestCase,
+ TestRunner,
+
+ reader: {
+ ConstResolver,
+ DateResolver,
+ YamlTestReader
+ },
+
+ reporter: {
+ ConsoleTestReporter
+ },
+} = require( '../src' );
const runner = TestRunner(
ConsoleTestReporter( process.stdout ),
diff --git a/progtest/build-aux/gen-index b/progtest/build-aux/gen-index
new file mode 100755
index 00000000..5cdb350c
--- /dev/null
+++ b/progtest/build-aux/gen-index
@@ -0,0 +1,58 @@
+#!/bin/bash
+# Generates index.js from sources in destination directory
+#
+# Copyright (C) 2014 R-T Specialty, LLC.
+#
+# This file is part of liza.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+##
+
+shopt -s extglob nullglob
+
+destpath="${1?Destination path required}"
+
+cat <