Example #1
0
'use strict';
var exercise      = require('workshopper-exercise')(),
    filecheck     = require('workshopper-exercise/filecheck'),
    execute       = require('workshopper-exercise/execute'),
    comparestdout = require('workshopper-exercise/comparestdout');

// checks that the submission file actually exists
exercise = filecheck(exercise);

// execute the solution and submission in parallel with spawn()
exercise = execute(exercise);

// compare stdout of solution and submission
exercise = comparestdout(exercise);

module.exports = exercise;
Example #2
0
"use strict";

var exercise = require('workshopper-exercise')();
var filecheck = require('workshopper-exercise/filecheck');
var execute = require('workshopper-exercise/execute');
var comparestdout = require('workshopper-exercise/comparestdout');
var babelProcessor = require('../babel-processor');

module.exports = comparestdout(execute(babelProcessor(filecheck(exercise))));
var names = [
  "Hello", "Babel", "Arrow", "Function", "Sebastian", "Mckenzie", "Yosuke"
];

module.exports.addSetup(function(mode, cb) {
  // Fisher-Yates
  var i = names.length;
  while(i) {
    var j = Math.floor(Math.random() * i);
    var t = names[--i];
    names[i] = names[j];
    names[j] = t;
  }
  this.submissionArgs = this.solutionArgs = names;
  process.nextTick(cb);
});

Example #3
0
"use strict";

var exercise = require("workshopper-exercise")();
var filecheck = require("workshopper-exercise/filecheck");
var execute = require("workshopper-exercise/execute");
var comparestdout = require("workshopper-exercise/comparestdout");
var traceurProcessor = require("../../traceur-processor");

module.exports = comparestdout(execute(traceurProcessor(filecheck(exercise))));

var names = ["ES6", "CampJS", "JavaScript", "ECMAScript", "TC39"];

module.exports.addSetup(function (mode, callback) {
    var random = Math.floor(Math.random() * names.length);
    var name = names[random];

    this.submissionArgs = this.solutionArgs = [name];

    process.nextTick(callback);
});
function runner() {
  var exercise = execute(filecheck(exerciser()))
  var input = Array.prototype.slice.call(arguments)
  var submittedFx, __

  exercise.addProcessor(function(mode, callback) {
    __ = exercise.__.bind(exercise)
    var testFile = this.args[0]
    try {
        submittedFx = require(path.resolve(process.cwd(), testFile));
    } catch (e) {
        this.emit('fail', e.stack)
        return callback(e, false)
    }

    if (typeof submittedFx !== 'function') {
        var message =  __('fail.must_export_function')
        this.emit('fail', message)
        return callback(new Error(message), false)
    }

    callback(null, true)
  });

  if (wrapperModule && wrapperModule.path) {
    exercise.addSetup(function setupWrapperModule(mode, callback) {
      var modulePath = wrapperModule.path
      if (wrapperModule.options && wrapperModule.options.localized) {
        var localizedPath = modulePath.replace(/\.\w+$/, '_' + exercise.lang + '$&')
        if (fs.existsSync(path.resolve(process.cwd(), localizedPath))) {
          modulePath = localizedPath
        }
      }
      this.solutionCommand = [ modulePath, this.solution ].concat(this.solutionArgs)
      this.submissionCommand = [ modulePath, this.submission ].concat(this.submissionArgs)

      if (input.length > 0) {
        var file = path.join(os.tmpdir(), path.basename(this.solution)) + '.input.json'
        fs.writeFileSync(file, JSON.stringify(input), { encoding: 'utf-8' })
        exercise.addCleanup(function(mode, pass, callback) {
          fs.unlink(file, callback)
        })
        this.solutionCommand.splice(2, 0, file)
        this.submissionCommand.splice(2, 0, file)
      }
      process.nextTick(callback)
    })

    return compareStdOut(exercise)
  }

  exercise.addProcessor(function(mode, callback) {
    if (initFx) { initFx(); }
    var submittedResult = obtainResult(submittedFx, input)
    if (verbose) {
      if (showInput) {
        var displayInput = input.length === 1 ? input[0] :
          input.map(function(o) { return 'function' === typeof o ? o.toString() : o })
        console.log(__('input'), util.inspect(displayInput, { colors: true }).replace(/,\n\s*/g, ", "))
      }
      console.log(__('submission'), util.inspect(submittedResult, { colors: true }).replace(/,\n\s*/g, ", "))
    }

    if ('run' === mode) {
      return callback(null, true)
    }

    if (initFx) { initFx(); }
    var solutionFx = require(this.solution)
    var solutionResult = obtainResult(solutionFx, input)
    if (verbose) {
      console.log(__('solution'), util.inspect(solutionResult, { colors: true }).replace(/,\n\s*/g, ", "))
    }
    var resultsMatch = exercise.ignoreReturnValue ? true : deepEqual(submittedResult, solutionResult)
    callback(null, resultsMatch)
  })

  if (wrapUpFx) {
    exercise.addVerifyProcessor(wrapUpFx)
  }

  return exercise
}
Example #5
0
"use strict";

var exercise = require("workshopper-exercise")();
var filecheck = require("workshopper-exercise/filecheck");
var setupBasics = require("../../setup-basics");
var traceurProcessor = require("../../traceur-processor");
var singleFunctionProcessor = require("../../single-function-processor");

module.exports = singleFunctionProcessor(traceurProcessor(setupBasics(filecheck(exercise))));

module.exports.addTestCases(require("./test-cases"));
module.exports.solutionFunctionName = "midpoint";