require("should"); var fs = require("fs"); exec = require("child_process").exec; test_folder = process.cwd() + "/test/test-dir"; asyncCatch = function(done, test){ return function(err, value){ if(err){ done(err); } else{ try{ test(value); done(); } catch(err){ done(err); } } } } cleanUp = function(callback) { exec("rm -rf '" + test_folder + "'", function(err, stderr, stdout) { if (err || stderr) { callback(err || new Error(stderr)); } else { callback(null, stdout); } }); } setup = function(callback) { cleanUp(function(err) { if (err) { callback(err); } else { exec("mkdir '" + test_folder + "'", function(err, stdout, stderr) { if (err || stderr) { callback(err || new Error(stderr)); } else { callback(null, stdout); } }); } }); } newSGF = function() { delete require.cache[require.resolve('../')]; var sgf = require("../"); sgf.cwd = test_folder return sgf; } run = function(command, callback) { exec("cd '" + test_folder + "' && " + command, callback); } newGit = function(callback) { run("rm -rf .git && git init", callback); } randomFileName = function(lengths) { var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; var filename = randomString(possible, lengths[0]); for (var i = 1; i < lengths.length; i++) { filename += "." + randomString(possible, lengths[i]); } return filename; } var randomFileContent = function(length) { var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 \t\n,.;'[](){}\":?><"; return randomString(possible, length); } var randomString = function(possible, length) { var text = ""; while (length--) { text += possible.charAt(Math.floor(Math.random() * possible.length)); } return text; } moveFile = function(opts, callback) { var oldPath = test_folder + "/" + opts.oldFileName; var newPath = test_folder + "/" + opts.newFileName; fs.rename(oldPath, newPath, function(err) { if (err) { callback(err); } else { run("git add " + opts.oldFileName + " " + opts.newFileName, function(err, stdout, stderr) { if (err || stderr) { callback(err || new Error(stderr)); } else { callback(null, opts); } }); } }); } newFile = function(opts, callback) { if (typeof opts == "function") { callback = opts; opts = {}; } opts.filename = opts.filename || randomFileName([8, 3]); opts.content = opts.content || randomFileContent(10000); fs.writeFile(test_folder + "/" + opts.filename, opts.content, function(err) { if (err) { callback(err); } else { callback(null, opts); } }); } addFile = function(opts, callback) { if (typeof opts == "function") { callback = opts; opts = {}; } newFile(opts, function(err, opts) { if (err) { callback(err); } else { run("git add " + opts.filename, function(err, stdout, stderr) { if (err || stderr) { callback(err || new Error(stderr)); } else { callback(null, opts); } }); } }); } addFiles = function(number, callback){ var files = []; var runner = function(err, data){ if(err){ callback(err); } else{ files.push(data); if(files.length==number){ callback(null, files); } else{ addFile(runner); } } } addFile(runner); } addAndCommitFile = function(opts, callback) { if (typeof opts == "function") { callback = opts; opts = {}; } addFile(opts, function(err, opts) { if (err) { callback(err); } else { run("git commit -m 'adding " + opts.filename + "'", function(err, stdout, stderr) { if (err || stderr) { callback(err || new Error(stderr)); } else { callback(null, opts); } }); } }); }