--- /dev/null
+if (system.args.length !== 1) {
+ system.print('Usage:');
+ system.print(' hammerjs build-test.js');
+ system.exit(-1);
+}
+
+// Traverses the specified path and collects all *.js files.
+// Note: the traversal is recursive to all subdirectories.
+
+var scanDirectory = function (path) {
+ var entries = [],
+ subdirs;
+ if (fs.exists(path) && fs.isFile(path) && path.match('.js$')) {
+ entries.push(path);
+ } else if (fs.isDirectory(path)) {
+ fs.list(path).forEach(function (e) {
+ subdirs = scanDirectory(path + '/' + e);
+ subdirs.forEach(function (s) {
+ entries.push(s);
+ });
+ });
+ }
+ return entries;
+};
+
+var getFileContent = function(fname) {
+ var f = fs.open(fname, 'r'),
+ content = '',
+ line;
+ while (true) {
+ line = f.readLine();
+ if (line.length === 0) {
+ break;
+ }
+ content += line;
+ }
+ f.close();
+ return content;
+};
+
+var writeFile = function(fname, content) {
+ var f = fs.open(fname, 'w'),
+ lines = content.split('\n'),
+ length = lines.length,
+ i = 0;
+
+ for (; i < length; i++) {
+ f.writeLine(lines[i]);
+ }
+ f.close();
+};
+
+// Loads the content of a json file and return an object.
+var json2js = function (fname) {
+ var content = getFileContent(fname);
+ return eval('(' + content + ')');
+};
+
+var generateIndexFor = function(config) {
+ var packages = json2js(config.sources).packages,
+ tpl = getFileContent(config.tpl),
+ sources = '',
+ specs, slength, j, specPaths, source, name, package, files, file, i, length;
+
+ tpl = tpl.replace('_TITLE_', config.title);
+
+ for (name in packages) {
+ package = packages[name];
+ if (config.packages.indexOf(package.name) != -1) {
+ files = package.files;
+ length = files.length;
+
+ for (i = 0; i < length; i++) {
+ file = files[i];
+ source = file.path + file.name;
+ if (config.srcMustMatch) {
+ if (!source.match(config.srcMustMatch)) {
+ continue;
+ }
+ }
+ if (config.excludes.indexOf(source) === -1) {
+ sources += (config.prepare[source] || '') + '{ type: "js", src: "' + source.replace(config.srcReplace[0], config.srcReplace[1]) + '"},\n' + (config.overrides[source] || '');
+ }
+ }
+ }
+ }
+
+ specPaths = config.specPaths;
+ length = specPaths.length;
+ for (i = 0; i < length; i++) {
+ specs = scanDirectory(specPaths[i]);
+ slength = specs.length;
+ for (j = 0; j < slength; j++) {
+ source = specs[j];
+
+ if (config.excludes.indexOf(source) === -1) {
+ sources += '{ type: "js", src: "' + source.replace(config.srcReplace[0], config.srcReplace[1]) + '"}'+ (i === length - 1 && j === slength - 1 ? ']' : ',') + '\n';
+ }
+ }
+
+ }
+ tpl = tpl.replace('_INCLUDES_', sources);
+ writeFile(config.destination, tpl);
+};
+
+var indexes = json2js('tests/indexes.json'),
+ ilength = indexes.length,
+ x = 0;
+
+for (; x < ilength; x++) {
+ system.print('Generating test index for ' + indexes[x].title);
+ generateIndexFor(indexes[x]);
+}
+
+system.exit(0);