"use strict"; /* * This file tests the CS142 Project #2 JavaScript assignment problems. It prints what * it finds to the console log and updates the text being displayed in the window with a * summary of the results. */ // We assume these symbols will be globally defined by the user. These var statements // will assign undefined to the symbol if it isn't global already. // These global symbols are needed to test your file and you don't have to worry about them for Problem 3. // var cs142MakeMultiFilter; // var Cs142TemplateProcessor; var vars = { p1Message: "SUCCESS", p2Message: "SUCCESS", p3Message: "SUCCESS", varDeclared: ["vars.varDeclared", "vars.p1Message", "vars.p2Message", "vars.p3Message"] }; // ********************* Test cs142filter if (typeof cs142MakeMultiFilter !== "function") { console.error( "cs142MakeMultiFilter is not a function", typeof cs142MakeMultiFilter ); vars.p1Message = "FAILURE"; } else { var arraysAreTheSame = function arraysAreTheSame(a1, a2) { if (!Array.isArray(a1) || !Array.isArray(a2) || a1.length !== a2.length) { return false; } for (var i = 0; i < a1.length; i++) { if (a1[i] !== a2[i]) { return false; } } return true; }; var originalArray = [1, 2, 3]; var filterFunc = cs142MakeMultiFilter(originalArray); var secondArray = [1, 2, 3, 4]; var filterFuncTwo = cs142MakeMultiFilter(secondArray); if (typeof filterFunc !== "function") { console.error( "cs142MakeMultiFilter does not return a function", filterFunc ); vars.p1Message = "FAILURE"; } else { var result = filterFunc(); if (!arraysAreTheSame([1, 2, 3], result)) { console.error( "filter function with no args does not return the original array", result ); vars.p1Message = "FAILURE"; } var callbackPerformed = false; result = filterFunc( function(item) { return item !== 2; }, function(callbackResult) { callbackPerformed = true; if (!arraysAreTheSame([1, 3], callbackResult)) { console.error( "filter function callback does not filter 2 correctly", callbackResult ); vars.p1Message = "FAILURE"; } if (!arraysAreTheSame([1, 2, 3], this)) { console.error( "filter function callback does not pass original array as this", this ); vars.p1Message = "FAILURE"; } } ); if (!callbackPerformed) { console.error("filter function callback not performed"); vars.p1Message = "FAILURE"; } if (result !== filterFunc) { console.error("filter function does not return itself", result); vars.p1Message = "FAILURE"; } result = filterFunc(function(item) { return item !== 3; }); if (result !== filterFunc) { console.error("filter function does not return itself 2", result); vars.p1Message = "FAILURE"; } result = filterFunc(); if (!arraysAreTheSame([1], result)) { console.error( "filter function callback does not filter 3 correctly", result ); vars.p1Message = "FAILURE"; } result = filterFuncTwo( function(item) { return item !== 1; }, function(callbackResult) { if (!arraysAreTheSame([2, 3, 4], callbackResult)) { console.error( "second filter does not filter 1 (check for global variable usage)", callbackResult ); vars.p1Message = "FAILURE"; } if (!arraysAreTheSame([1, 2, 3, 4], this)) { console.error( "filter function callback does not pass original array as this", this ); vars.p1Message = "FAILURE"; } } ); } } console.log("Test cs142MakeMultiFilter:", vars.p1Message); // ********************* Test Cs142TemplateProcessor if (typeof Cs142TemplateProcessor !== "function") { console.error( "Cs142TemplateProcessor is not a function", Cs142TemplateProcessor ); vars.p2Message = "FAILURE"; } else { vars.template = "My favorite month is {{month}} but not the day {{day}} or the year {{year}}"; vars.dateTemplate = new Cs142TemplateProcessor(vars.template); vars.dictionary = { month: "July", day: "1", year: "2016" }; vars.str = vars.dateTemplate.fillIn(vars.dictionary); if (vars.str !== "My favorite month is July but not the day 1 or the year 2016") { console.error("Cs142TemplateProcessor didn't work"); vars.p2Message = "FAILURE"; } vars.varDeclared.push("template"); vars.varDeclared.push("dateTemplate"); vars.varDeclared.push("dictionary"); vars.varDeclared.push("str"); } console.log("Test Cs142TemplateProcessor:", vars.p2Message); // ********************* Test to see if the symbols we defined are in the global address space vars.varDeclared.forEach(function(sym) { if (window[sym] !== undefined) { console.error("Found my symbol", sym, "in DOM"); vars.p3Message = "FAILURE"; } }); console.log("Test Problem 3:", vars.p3Message); // Store the result back into the global space under the object name cs142Project2Results window.cs142Project2Results = vars; // Once the browser loads our companion HTML in cs142-test-project2.html we // update it with the results of our testing. This code will make more // sense after the next project. window.onload = function() { document.getElementById("cs142p1").innerHTML = vars.p1Message; document.getElementById("cs142p2").innerHTML = vars.p2Message; document.getElementById("cs142p3").innerHTML = vars.p3Message; };