Add base for exercise for others languages

This commit is contained in:
Samy Pessé
2014-04-05 13:53:22 -07:00
parent d5bd08dcd2
commit 694afeccc5
4 changed files with 27 additions and 13 deletions
+1 -1
View File
@@ -20,7 +20,7 @@ define([
analytic.track("exercise.submit");
execute(editor.getValue(), codeValidation, function(err, result) {
execute("javascript", editor.getValue(), codeValidation, function(err, result) {
$exercise.toggleClass("return-error", err != null);
$exercise.toggleClass("return-success", err == null);
if (err) $exercise.find(".alert-danger").text(err.message || err);
+7
View File
@@ -0,0 +1,7 @@
define(function() {
return {
id: "javascript",
assertCode: "function assert(condition, message) { \nif (!condition) { \n throw message || \"Assertion failed\"; \n } \n }\n",
REPL: JSREPL
};
});
+18 -11
View File
@@ -1,5 +1,12 @@
define(function(){
var evalJS = function(code, callback) {
define([
"execute/javascript"
], function(javascript) {
var LANGUAGES = {
"javascript": javascript
};
var evalJS = function(lang, code, callback) {
var ready = false;
var finished = false;
@@ -11,7 +18,7 @@ define(function(){
return callback.apply(null, arguments);
};
var jsrepl;
var repl;
// Handles all our events
var eventHandler = function(data, eventType) {
@@ -42,14 +49,14 @@ define(function(){
// We're good to get results and stuff back now
ready = true;
// Eval our code now that the runtime is ready
jsrepl.eval(code);
repl.eval(code);
break;
default:
console.log('Unhandled event =', eventType, 'data =', data);
}
};
jsrepl = new JSREPL({
repl = new lang.REPL({
input: eventHandler,
output: eventHandler,
result: eventHandler,
@@ -61,16 +68,16 @@ define(function(){
}
});
jsrepl.loadLanguage('javascript', eventHandler);
repl.loadLanguage(lang.id, eventHandler);
};
var execute = function(lang, solution, validation, callback) {
// Check language is supported
if (!LANGUAGES[lang]) return callback(new Error("Language '"+lang+"' not available for execution"));
var ass = "function assert(condition, message) { \nif (!condition) { \n throw message || \"Assertion failed\"; \n } \n }\n";
var execute = function(solution, validation, callback) {
// Validate with validation code
var code = [solution, ass, validation].join(";\n");
evalJS(code, function(err, res) {
var code = [solution, LANGUAGES[lang].assertCode, validation].join(";\n");
evalJS(LANGUAGES[lang], code, function(err, res) {
if(err) return callback(err);
if (res.type == "error") callback(new Error(res.value));