Parcourir la source

Hide some implementations detail regarding test cases and activity file parsing

Lucas de Souza il y a 5 ans
Parent
commit
8f6bc75c38
4 fichiers modifiés avec 82 ajouts et 38 suppressions
  1. 46 36
      js/iassign-integration-functions.js
  2. 4 1
      js/main.js
  3. 20 0
      js/util/iassignHelpers.js
  4. 12 1
      js/visualUI/functions.js

+ 46 - 36
js/iassign-integration-functions.js

@@ -114,7 +114,7 @@ function getEvaluation () {
 }
 
 
-var testCases = null;
+//var testCases = null;
 var settingsDataTypes = null;
 var settingsCommands = null;
 var settingsFunctions = null;
@@ -142,27 +142,33 @@ function getiLMContent () {
 }
 
 function prepareActivityToEdit (ilm_cont) {
-    var content = JSON.parse(ilm_cont.split('\n::algorithm::')[0]);
-    testCases = content.testcases;
-    settingsDataTypes = content.settings_data_types;
-    settingsCommands = content.settings_commands;
-    settingsFunctions = content.settings_functions;
+    //var content = JSON.parse(ilm_cont.split('\n::algorithm::')[0]);
+    // Ver arquivo js/util/iassignHelpers.js
+    var content = ivprogCore.prepareActivityToStudentHelper(ilm_cont);
+    var testCases = ivprogCore.getTestCases();
+    settingsDataTypes = content.settingsDataTypes;
+    settingsCommands = content.settingsCommands;
+    settingsFunctions = content.settingsFunctions;
 
     for (var i = 0; i < testCases.length; i++) {
         addTestCase(testCases[i]);
     }
 
-    if (ilm_cont.split('\n::algorithm::')[1]) {
-        algorithm_in_ilm = ilm_cont.split('\n::algorithm::')[1].split('\n::logs::')[0];
+    if (content.algorithmInIlm != null) {
+        algorithm_in_ilm = content.algorithmInIlm;
         $("input[name='include_algo']").prop('checked', true);
         includePreviousAlgorithm();
         renderAlgorithm();
     }
 }
 
-function includePreviousAlgorithm () {
+function parsePreviousAlgorithm () {
     window.program_obj.functions = JSON.parse(algorithm_in_ilm).functions;
     window.program_obj.globals = JSON.parse(algorithm_in_ilm).globals;
+}
+
+function includePreviousAlgorithm () {
+    parsePreviousAlgorithm();
 
     window.watchW.watch(window.program_obj.globals, function(){
       if (window.insertContext) {
@@ -207,14 +213,16 @@ function includePreviousAlgorithm () {
 }
 
 function prepareActivityToStudent (ilm_cont) {
-    var content = JSON.parse(ilm_cont.split('\n::algorithm::')[0]);
-    testCases = content.testcases;
-    settingsDataTypes = content.settings_data_types;
-    settingsCommands = content.settings_commands;
-    settingsFunctions = content.settings_functions;
-
-    if (ilm_cont.split('\n::algorithm::')[1]) {
-        algorithm_in_ilm = ilm_cont.split('\n::algorithm::')[1].split('\n::logs::')[0];
+    // Ver arquivo js/util/iassignHelpers.js
+    var content = ivprogCore.prepareActivityToStudentHelper(ilm_cont);
+    // Casos de testes agora são delegados ao tratamento apropriado pela função acima
+    // var testCases = content.testcases;
+    settingsDataTypes = content.settingsDataTypes;
+    settingsCommands = content.settingsCommands;
+    settingsFunctions = content.settingsFunctions;
+
+    if (content.algorithmInIlm != null) {
+        algorithm_in_ilm = content.algorithmInIlm;
         includePreviousAlgorithm();
     }
     $('.assessment_button').removeClass('disabled');
@@ -230,24 +238,25 @@ function prepareEnvironment () {
 
 $(document).ready(function() {
 
+    // Disable by default...
+    $('.assessment_button').addClass('disabled');
+
     // Se iLM_PARAM_SendAnswer for false, então trata-se de resolução de atividade,
     // portanto, a "DIV" de resolução é liberada
     if (iLMparameters.iLM_PARAM_SendAnswer == 'false') {
         //$('.resolucao').css("display","block");
         getiLMContent();
 
+        $('.div_to_body').mousemove(function(e) {
+            trackingMatrix.push(adCoords(e, 0));
+        });
 
-        $( document ).ready(function() {
-            $('.div_to_body').mousemove(function(e) {
-                trackingMatrix.push(adCoords(e, 0));
-            });
-
-            $('.div_to_body').click(function(e) {
-                trackingMatrix.push(adCoords(e, 1));                    
-            });
-
+        $('.div_to_body').click(function(e) {
+            trackingMatrix.push(adCoords(e, 1));                    
         });
 
+        
+
     } else {
         // Caso não esteja em modo de resolução de atividade, a visualização no momento
         // é para a elaboração de atividade:
@@ -259,10 +268,11 @@ $(document).ready(function() {
             getiLMContent();
         }
     }
-
-    if (!testCases) {
-        $('.assessment_button').addClass('disabled');
+    if (inIframe()) {
+        orderIcons();
+        orderWidth();
     }
+    // renderAlgorithm();
 
 });
 
@@ -445,14 +455,14 @@ function adCoords(e, code){
     }
 }
 
-$( document ).ready(function() {
+// $( document ).ready(function() {
 
-    if (inIframe()) {
-        orderIcons();
-        orderWidth();
-    }
-    renderAlgorithm();
-});
+//     if (inIframe()) {
+//         orderIcons();
+//         orderWidth();
+//     }
+//     renderAlgorithm();
+// });
 
 function orderWidth() {
     $('.ui.raised.container.segment.div_to_body').css('width', '100%');

+ 4 - 1
js/main.js

@@ -1,9 +1,10 @@
 import { runner } from './runner';
 import { initVisualUI, addFunctionChangeListener,
   addGlobalChangeListener, removeFunctionListener,
-  removeGlobalListener } from './visualUI/functions';
+  removeGlobalListener, getTestCases } from './visualUI/functions';
 import * as LocalizedStringsService from './services/localizedStringsService';
 import { i18nHelper } from "./services/i18nHelper";
+import { prepareActivityToStudentHelper } from "./util/iassignHelpers";
 
 const i18n = i18nHelper.i18n
 const LocalizedStrings = LocalizedStringsService.getInstance();
@@ -15,6 +16,8 @@ export {
   addGlobalChangeListener,
   removeFunctionListener,
   removeGlobalListener,
+  getTestCases,
+  prepareActivityToStudentHelper,
   LocalizedStrings,
   i18n
 }

+ 20 - 0
js/util/iassignHelpers.js

@@ -0,0 +1,20 @@
+import { setTestCases } from "../visualUI/functions";
+
+export function prepareActivityToStudentHelper (ilm_cont) {
+  const content = JSON.parse(ilm_cont.split('\n::algorithm::')[0]);
+  const testCases = content.testcases;
+  setTestCases(testCases);
+  const settingsDataTypes = content.settings_data_types;
+  const settingsCommands = content.settings_commands;
+  const settingsFunctions = content.settings_functions;
+  let algorithm_in_ilm = null;
+  if (ilm_cont.split('\n::algorithm::')[1]) {
+      algorithm_in_ilm = ilm_cont.split('\n::algorithm::')[1].split('\n::logs::')[0];
+  }
+  return {
+    settingsDataTypes: settingsDataTypes,
+    settingsCommands: settingsCommands,
+    settingsFunctions: settingsFunctions,
+    algorithmInIlm: algorithm_in_ilm
+  }
+}

+ 12 - 1
js/visualUI/functions.js

@@ -25,6 +25,7 @@ var ivprog_version = VersionInfo.version;
 const globalChangeListeners = [];
 const functionsChangeListeners = [];
 let domConsole = null;
+let _testCases = [];
 window.studentGrade = null;
 window.LocalizedStrings = LocalizedStrings;
 const program = new Models.Program();
@@ -723,6 +724,16 @@ export function initVisualUI () {
   $('.main_title h2').prop('title', LocalizedStrings.getUI('text_ivprog_description'));
 }
 
+export function setTestCases (testCases) {
+  _testCases = testCases;
+}
+
+export function getTestCases () {
+  // Deep clone of test cases to avoid unauthorized modification
+  // TODO: It may be not possible to use this once custom test are fully implemented 
+  return JSON.parse(JSON.stringify(_testCases));
+}
+
 var is_iassign = false;
 
 $( document ).ready(function() {
@@ -858,7 +869,7 @@ function runCodeAssessment () {
   if(domConsole == null)
     domConsole = new DOMConsole("#ivprog-term");
   $("#ivprog-term").slideDown(500);
-  const runner = new IVProgAssessment(strCode, testCases, domConsole);
+  const runner = new IVProgAssessment(strCode, _testCases, domConsole);
 
   runner.runTest().then(grade => {
     if (!is_iassign) {