// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information. //----------------------------------------------------------------------------- // // Abstract: // // Instantiation test cases for the Rating JavaScript control. Note that a large // percent of the verifications in this file come as part of ratingUtils.instantiate // // Author: sehume // //----------------------------------------------------------------------------- // // /// /// module WinJSTests { "use strict"; var ratingUtils = RatingUtils; export class RatingInstantiationTests { setUp(complete) { ratingUtils.setUp().then(complete); } tearDown() { ratingUtils.cleanUp(); } //----------------------------------------------------------------------------------- testRating_Instantiation = function () { var rating = ratingUtils.instantiate("rating"); LiveUnit.Assert.areEqual(undefined, rating.options, "Verify rating.options() (deprecated in M3) is no longer defined on the control."); ratingUtils.verifyFunction(rating, "addEventListener"); ratingUtils.verifyFunction(rating, "removeEventListener"); }; //----------------------------------------------------------------------------------- testRating_Instantiation_FromNull = function () { var rating = ratingUtils.instantiate(null); ratingUtils.verifyFunction(rating, "addEventListener"); ratingUtils.verifyFunction(rating, "removeEventListener"); }; //----------------------------------------------------------------------------------- testRating_Instantiation_WithOptions = function () { ratingUtils.instantiate("rating", { maxRating: 10, userRating: 7, averageRating: 5, disabled: !Math.floor(Math.random() * 2) }); }; //----------------------------------------------------------------------------------- testRating_Instantiation_FromNull_WithOptions = function () { var rating = ratingUtils.instantiate(null, { maxRating: 10, userRating: 7, averageRating: 5, disabled: !Math.floor(Math.random() * 2) }); }; //----------------------------------------------------------------------------------- testRating_Instantiation_DynamicAdd = function () { // Create the control, and then add it to the pag var ratingElement = document.createElement("div"); ratingElement.id = "rating2"; ratingUtils.instantiate(ratingElement, { maxRating: 10, userRating: ratingUtils.randomInt(0, 10), averageRating: ratingUtils.random(0, 10) }); LiveUnit.LoggingCore.logComment("Adding element to page."); document.body.appendChild(ratingElement); // Make sure the control appears correctly ratingUtils.verifyLayout(ratingElement); // make sure rating still works by setting some options on it and running full validation code upon doing so ratingUtils.setOptionsAndVerify(ratingElement, { maxRating: 5, userRating: ratingUtils.randomInt(0, 5), averageRating: ratingUtils.random(0, 5) }); }; //----------------------------------------------------------------------------------- testRating_Instantiation_DynamicAdd_AverageRating1 = function () { // Create the control, and then add it to the page var ratingElement = document.createElement("div"); ratingElement.id = "rating2"; ratingUtils.instantiate(ratingElement, { maxRating: 10, userRating: 0, averageRating: 1 }); LiveUnit.LoggingCore.logComment("Adding element to page"); document.body.appendChild(ratingElement); // Make sure the control appears correctly ratingUtils.verifyLayout(ratingElement); // make sure rating still works by setting some options on it and running full validation code upon doing so ratingUtils.setOptionsAndVerify(ratingElement, { maxRating: 5, userRating: ratingUtils.randomInt(0, 5), averageRating: ratingUtils.random(0, 5) }); }; //----------------------------------------------------------------------------------- testRating_Instantiation_Span = function () { ratingUtils.addTag("span", "ratingSpan"); var rating = ratingUtils.instantiate("ratingSpan"); ratingUtils.removeElementById("ratingSpan"); }; //----------------------------------------------------------------------------------- testRating_dir_LTR = function () { var ratingElem = ratingUtils.addTag("div", "rating_dir", { dir: "ltr" }); var rating = ratingUtils.instantiate("rating_dir"); }; //----------------------------------------------------------------------------------- testRating_dir_RTL = function () { document.getElementById("rating").setAttribute("dir", "rtl"); var rating = ratingUtils.instantiate("rating"); }; //----------------------------------------------------------------------------------- testRating_dir_RTL_IncreasedMax = function () { document.getElementById("rating").setAttribute("dir", "rtl"); var rating = ratingUtils.instantiate("rating", { maxRating: 25, averageRating: 10.2 }); ratingUtils.setOptionsAndVerify("rating", { averageRating: 2.75 }); ratingUtils.setOptionsAndVerify("rating", { averageRating: 27 }); ratingUtils.setOptionsAndVerify("rating", { userRating: 15 }); ratingUtils.setOptionsAndVerify("rating", { userRating: 32 }); }; //----------------------------------------------------------------------------------- testRating_dir_RTL_Readonly = function () { document.getElementById("rating").setAttribute("dir", "rtl"); var rating = ratingUtils.instantiate("rating", { maxRating: 25, averageRating: 10.2, disabled: true }); ratingUtils.setOptionsAndVerify("rating", { averageRating: 2.75 }); ratingUtils.setOptionsAndVerify("rating", { averageRating: 27 }); ratingUtils.setOptionsAndVerify("rating", { userRating: 15 }); ratingUtils.setOptionsAndVerify("rating", { userRating: 32 }); }; //----------------------------------------------------------------------------------- testRating_dir_Swap = function () { var ratingElem = document.getElementById("rating"); var rating = ratingUtils.instantiate("rating", { maxRating: 25 }); // swap dir 10 times for (var i = 0; i < 10; ++i) { ratingElem.dir = (ratingElem.dir === "rtl") ? "ltr" : "rtl"; ratingUtils.verifyLayout("rating"); // Set averageRating and userRating to interesting rules to validate layout wasn't broken during the direction swap. ratingUtils.setOptionsAndVerify("rating", { averageRating: ratingUtils.random(1, rating.maxRating) }); ratingUtils.setOptionsAndVerify("rating", { averageRating: rating.maxRating + 1 }); ratingUtils.setOptionsAndVerify("rating", { userRating: ratingUtils.randomInt(1, rating.maxRating) }); ratingUtils.setOptionsAndVerify("rating", { userRating: rating.maxRating + 1 }); // Every so often, explicitly make sure the control is showing an averageRating when we swap direction if (Math.floor(Math.random() * 2)) { ratingUtils.setOptionsAndVerify("rating", { userRating: 0 }); } } }; //----------------------------------------------------------------------------------- // maxRating Tests //----------------------------------------------------------------------------------- testRating_Instantiation_MaxRating_Random = function () { for (var i = 1; i < 8; ++i) { var newMax = i + ratingUtils.randomNewMaxRating(Math.pow(2, i), ratingUtils.defaultMaxRating); ratingUtils.instantiate("rating", { maxRating: newMax }); ratingUtils.removeElementById("rating"); ratingUtils.addTag("div", "rating"); } }; //----------------------------------------------------------------------------------- testRating_Instantiation_MaxRating_Invalid_0 = function () { ratingUtils.instantiate("rating", { maxRating: 0 }); }; //----------------------------------------------------------------------------------- testRating_Instantiation_MaxRating_Invalid_Null = function () { ratingUtils.instantiate("rating", { maxRating: null }); }; //----------------------------------------------------------------------------------- testRating_Instantiation_MaxRating_Invalid_Undefined = function () { ratingUtils.instantiate("rating", { maxRating: undefined }); }; //----------------------------------------------------------------------------------- testRating_Instantiation_MaxRating_Invalid_Negatives = function () { for (var i = 0; i < 10; ++i) { ratingUtils.instantiate("rating", { maxRating: ratingUtils.randomInt(-50, -1) }); ratingUtils.removeElementById("rating"); ratingUtils.addTag("div", "rating"); } }; //----------------------------------------------------------------------------------- testRating_Instantiation_MaxRating_Invalid_NumbersAsStrings = function () { for (var i = 0; i < 10; ++i) { ratingUtils.instantiate("rating", { maxRating: Number(ratingUtils.randomInt(1, 50)).toString() }); ratingUtils.removeElementById("rating"); ratingUtils.addTag("div", "rating"); } }; //----------------------------------------------------------------------------------- testRating_Instantiation_MaxRating_Invalid_Nonsense = function () { for (var i = 0; i < 10; ++i) { ratingUtils.instantiate("rating", { maxRating: ratingUtils.randomString(35) }); ratingUtils.removeElementById("rating"); ratingUtils.addTag("div", "rating"); } }; //----------------------------------------------------------------------------------- // averageRating Tests //----------------------------------------------------------------------------------- testRating_Instantiation_AverageRating_Default = function () { ratingUtils.instantiate("rating", { averageRating: 3 }); }; //----------------------------------------------------------------------------------- testRating_Instantiation_AverageRating_CustomMax = function () { for (var i = 0; i < 10; ++i) { var newMax = ratingUtils.randomNewMaxRating(50, ratingUtils.defaultMaxRating); ratingUtils.instantiate("rating", { maxRating: newMax, averageRating: ratingUtils.random(1, newMax) }); ratingUtils.removeElementById("rating"); ratingUtils.addTag("div", "rating"); } }; //----------------------------------------------------------------------------------- testRating_Instantiation_AverageRating_Float_Default = function () { ratingUtils.instantiate("rating", { averageRating: ratingUtils.random(1, ratingUtils.defaultMaxRating) }); }; //----------------------------------------------------------------------------------- testRating_Instantiation_AverageRating_Floats_CustomMax = function () { for (var i = 0; i < 10; ++i) { var newMax = ratingUtils.randomNewMaxRating(25, ratingUtils.defaultMaxRating); ratingUtils.instantiate("rating", { maxRating: newMax, averageRating: ratingUtils.random(1, newMax) }); ratingUtils.removeElementById("rating"); ratingUtils.addTag("div", "rating"); } }; //----------------------------------------------------------------------------------- testRating_Instantiation_AverageRating_DefaultMax = function () { ratingUtils.instantiate("rating", { averageRating: ratingUtils.defaultMaxRating }); }; //----------------------------------------------------------------------------------- //----------------------------------------------------------------------------------- testRating_Instantiation_AverageRating_0 = function () { ratingUtils.instantiate("rating", { averageRating: 0 }); }; //----------------------------------------------------------------------------------- testRating_Instantiation_AverageRating_Invalid_Null = function () { ratingUtils.instantiate("rating", { averageRating: null }); }; //----------------------------------------------------------------------------------- testRating_Instantiation_AverageRating_Invalid_GreaterThanDefaultMax = function () { ratingUtils.instantiate("rating", { averageRating: ratingUtils.randomInt(ratingUtils.defaultMaxRating + 1, 50) }); }; //----------------------------------------------------------------------------------- testRating_Instantiation_AverageRating_Invalid_GreaterThanCustomMax = function () { var newMax = ratingUtils.randomNewMaxRating(25, ratingUtils.defaultMaxRating); ratingUtils.instantiate("rating", { maxRating: newMax, averageRating: ratingUtils.randomInt(newMax + 1, 50) }); }; //----------------------------------------------------------------------------------- testRating_Instantiation_AverageRating_Invalid_Undefined = function () { ratingUtils.instantiate("rating", { averageRating: undefined }); }; //----------------------------------------------------------------------------------- testRating_Instantiation_AverageRating_Invalid_Negatives = function () { for (var i = 0; i < 10; ++i) { ratingUtils.instantiate("rating", { averageRating: ratingUtils.random(-50, -0.01) }); ratingUtils.removeElementById("rating"); ratingUtils.addTag("div", "rating"); } }; //----------------------------------------------------------------------------------- testRating_Instantiation_AverageRating_Invalid_NumbersAsStrings = function () { for (var i = 0; i < 10; ++i) { ratingUtils.instantiate("rating", { averageRating: Number(ratingUtils.random(1, ratingUtils.defaultMaxRating)).toString() }); ratingUtils.removeElementById("rating"); ratingUtils.addTag("div", "rating"); } }; //----------------------------------------------------------------------------------- testRating_Instantiation_AverageRating_Invalid_Nonsense = function () { for (var i = 0; i < 10; ++i) { ratingUtils.instantiate("rating", { averageRating: ratingUtils.randomString(35) }); ratingUtils.removeElementById("rating"); ratingUtils.addTag("div", "rating"); } }; //----------------------------------------------------------------------------------- // userRating tests //----------------------------------------------------------------------------------- testRating_Instantiation_UserRating_Default = function () { ratingUtils.instantiate("rating", { userRating: 3 }); }; //----------------------------------------------------------------------------------- testRating_Instantiation_UserRating_CustomMax = function () { for (var i = 0; i < 10; ++i) { var newMax = ratingUtils.randomNewMaxRating(50, ratingUtils.defaultMaxRating); ratingUtils.instantiate("rating", { maxRating: newMax, userRating: ratingUtils.randomInt(1, newMax) }); ratingUtils.removeElementById("rating"); ratingUtils.addTag("div", "rating"); } }; //----------------------------------------------------------------------------------- testRating_Instantiation_UserRating_DefaultMax = function () { ratingUtils.instantiate("rating", { userRating: ratingUtils.defaultMaxRating }); }; //----------------------------------------------------------------------------------- testRating_Instantiation_UserRating_0 = function () { ratingUtils.instantiate("rating", { userRating: 0 }); }; //----------------------------------------------------------------------------------- testRating_Instantiation_UserRating_Invalid_Null = function () { ratingUtils.instantiate("rating", { userRating: null }); }; //----------------------------------------------------------------------------------- testRating_Instantiation_UserRating_Invalid_GreaterThanDefaultMax = function () { ratingUtils.instantiate("rating", { userRating: ratingUtils.randomInt(ratingUtils.defaultMaxRating + 1, ratingUtils.defaultMaxRating * 2) }); }; //----------------------------------------------------------------------------------- testRating_Instantiation_UserRating_Invalid_GreaterThanCustomMax = function () { var newMax = ratingUtils.randomNewMaxRating(50, ratingUtils.defaultMaxRating); ratingUtils.instantiate("rating", { maxRating: newMax, userRating: ratingUtils.randomInt(newMax + 1, newMax * 2) }); }; //----------------------------------------------------------------------------------- testRating_Instantiation_UserRating_Invalid_Float_Default = function () { ratingUtils.instantiate("rating", { userRating: 3.1 }); }; //----------------------------------------------------------------------------------- testRating_Instantiation_UserRating_Invalid_Floats_CustomMax = function () { for (var i = 0; i < 10; ++i) { var newMax = ratingUtils.randomNewMaxRating(50, ratingUtils.defaultMaxRating); ratingUtils.instantiate("rating", { maxRating: newMax, userRating: ratingUtils.randomInt(1, newMax) }); ratingUtils.removeElementById("rating"); ratingUtils.addTag("div", "rating"); } }; //----------------------------------------------------------------------------------- testRating_Instantiation_UserRating_Invalid_Undefined = function () { ratingUtils.instantiate("rating", { userRating: undefined }); }; //----------------------------------------------------------------------------------- testRating_Instantiation_UserRating_Invalid_Negatives = function () { for (var i = 0; i < 10; ++i) { ratingUtils.instantiate("rating", { userRating: ratingUtils.randomInt(-50, -1) }); ratingUtils.removeElementById("rating"); ratingUtils.addTag("div", "rating"); } }; //----------------------------------------------------------------------------------- testRating_Instantiation_UserRating_Invalid_NumbersAsStrings = function () { for (var i = 0; i < 10; ++i) { ratingUtils.instantiate("rating", { userRating: ratingUtils.randomInt(1, ratingUtils.defaultMaxRating).toString() }); ratingUtils.removeElementById("rating"); ratingUtils.addTag("div", "rating"); } }; //----------------------------------------------------------------------------------- testRating_Instantiation_UserRating_Invalid_Nonsense = function () { for (var i = 0; i < 10; ++i) { ratingUtils.instantiate("rating", { userRating: ratingUtils.randomString(35) }); ratingUtils.removeElementById("rating"); ratingUtils.addTag("div", "rating"); } }; //----------------------------------------------------------------------------------- // disabled tests //----------------------------------------------------------------------------------- testRating_Instantiation_disabled_true = function () { ratingUtils.instantiate("rating", { disabled: true }); }; //----------------------------------------------------------------------------------- testRating_Instantiation_disabled_false = function () { ratingUtils.instantiate("rating", { disabled: false }); }; //----------------------------------------------------------------------------------- testRating_Instantiation_disabled_Invalid_Numbers = function () { ratingUtils.instantiate("rating", { disabled: 1 }); ratingUtils.removeElementById("rating"); ratingUtils.addTag("div", "rating"); ratingUtils.instantiate("rating", { disabled: 0 }); }; //----------------------------------------------------------------------------------- testRating_Instantiation_disabled_Invalid_Strings = function () { ratingUtils.instantiate("rating", { disabled: "true" }); ratingUtils.removeElementById("rating"); ratingUtils.addTag("div", "rating"); ratingUtils.instantiate("rating", { disabled: "false" }); }; //----------------------------------------------------------------------------------- testRating_Instantiation_disabled_Invalid_Nonsense = function () { for (var i = 0; i < 10; ++i) { ratingUtils.instantiate("rating", { disabled: ratingUtils.randomString(35) }); ratingUtils.removeElementById("rating"); ratingUtils.addTag("div", "rating"); } }; //----------------------------------------------------------------------------------- // enableClear tests //----------------------------------------------------------------------------------- testRating_Instantiation_enableClear_true = function () { ratingUtils.instantiate("rating", { enableClear: true }); }; //----------------------------------------------------------------------------------- testRating_Instantiation_enableClear_false = function () { ratingUtils.instantiate("rating", { enableClear: false }); }; //----------------------------------------------------------------------------------- testRating_Instantiation_enableClear_Invalid_Numbers = function () { ratingUtils.instantiate("rating", { enableClear: 1 }); ratingUtils.removeElementById("rating"); ratingUtils.addTag("div", "rating"); ratingUtils.instantiate("rating", { enableClear: 0 }); }; //----------------------------------------------------------------------------------- testRating_Instantiation_enableClear_Invalid_Strings = function () { ratingUtils.instantiate("rating", { enableClear: "true" }); ratingUtils.removeElementById("rating"); ratingUtils.addTag("div", "rating"); ratingUtils.instantiate("rating", { enableClear: "false" }); }; //----------------------------------------------------------------------------------- testRating_Instantiation_enableClear_Invalid_Nonsense = function () { for (var i = 0; i < 10; ++i) { ratingUtils.instantiate("rating", { enableClear: ratingUtils.randomString(35) }); ratingUtils.removeElementById("rating"); ratingUtils.addTag("div", "rating"); } }; //----------------------------------------------------------------------------------- // tooltipStrings tests //----------------------------------------------------------------------------------- testRating_Instantiation_tooltipStrings_PlainText_DefaultMax = function () { var tooltipStrings = [ "I hated it!", "I didn't like it.", "It was Okay", "I liked it.", "I loved it!" ]; ratingUtils.instantiate("rating", { tooltipStrings: tooltipStrings }); }; //----------------------------------------------------------------------------------- testRating_Instantiation_tooltipStrings_PlainText_CustomMax = function () { for (var i = 0; i < 5; ++i) { var newMax = ratingUtils.randomNewMaxRating(25, ratingUtils.defaultMaxRating); var tooltipStrings = new Array(); for (var j = 0; j < newMax; ++j) { tooltipStrings[j] = ratingUtils.randomString(25); } ratingUtils.instantiate("rating", { maxRating: newMax, tooltipStrings: tooltipStrings }); ratingUtils.removeElementById("rating"); ratingUtils.addTag("div", "rating"); } }; //----------------------------------------------------------------------------------- testRating_Instantiation_tooltipStrings_HTML_DefaultMax = function () { var tooltipStrings = [ ratingUtils.randomHTML(ratingUtils.randomInt(1, 10), true), ratingUtils.randomHTML(ratingUtils.randomInt(1, 10), true), ratingUtils.randomHTML(ratingUtils.randomInt(1, 10), true), ratingUtils.randomHTML(ratingUtils.randomInt(1, 10), true), ratingUtils.randomHTML(ratingUtils.randomInt(1, 10), true) ]; ratingUtils.instantiate("rating", { tooltipStrings: tooltipStrings }); }; //----------------------------------------------------------------------------------- testRating_Instantiation_tooltipStrings_HTML_CustomMax = function () { for (var i = 0; i < 5; ++i) { var newMax = ratingUtils.randomNewMaxRating(25, ratingUtils.defaultMaxRating); var tooltipStrings = new Array(); for (var j = 0; j < newMax; ++j) { tooltipStrings[j] = ratingUtils.randomHTML(ratingUtils.randomInt(1, 10), true); } ratingUtils.instantiate("rating", { maxRating: newMax, tooltipStrings: tooltipStrings }); ratingUtils.removeElementById("rating"); ratingUtils.addTag("div", "rating"); } }; //----------------------------------------------------------------------------------- testRating_Instantiation_tooltipStrings_NULL_DefaultMax = function () { ratingUtils.instantiate("rating", { tooltipStrings: null }); }; //----------------------------------------------------------------------------------- testRating_Instantiation_tooltipStrings_NULL_CustomMax = function () { for (var i = 0; i < 5; ++i) { var newMax = ratingUtils.randomNewMaxRating(25, ratingUtils.defaultMaxRating); ratingUtils.instantiate("rating", { maxRating: newMax, tooltipStrings: null }); ratingUtils.removeElementById("rating"); ratingUtils.addTag("div", "rating"); } }; //----------------------------------------------------------------------------------- testRating_Instantiation_tooltipStrings_TooFew_DefaultMax = function () { ratingUtils.instantiate("rating", { tooltipStrings: ["tooltip1", "tooltip1", "tooltip3"] }); }; //----------------------------------------------------------------------------------- testRating_Instantiation_tooltipStrings_TooFew_CustomMax = function () { for (var i = 0; i < 5; ++i) { var newMax = ratingUtils.randomNewMaxRating(25, ratingUtils.defaultMaxRating); var tooltipStrings = new Array(); var tooltips = ratingUtils.randomInt(1, newMax - 1); for (var j = 0; j < tooltips; ++j) { tooltipStrings[j] = ratingUtils.randomHTML(ratingUtils.randomInt(1, 5), true); } ratingUtils.instantiate("rating", { maxRating: newMax, tooltipStrings: tooltipStrings }); ratingUtils.removeElementById("rating"); ratingUtils.addTag("div", "rating"); } }; //----------------------------------------------------------------------------------- testRating_Instantiation_tooltipStrings_TooManyDefaultMax = function () { ratingUtils.instantiate("rating", { tooltipStrings: ["tooltip1", "tooltip1", "tooltip3", "tooltip4", "tooltip5", "tooltip6"] }); }; //----------------------------------------------------------------------------------- testRating_Instantiation_tooltipStrings_TooMany_CustomMax = function () { for (var i = 0; i < 5; ++i) { var newMax = ratingUtils.randomNewMaxRating(20, ratingUtils.defaultMaxRating); var tooltipStrings = new Array(); var tooltips = ratingUtils.randomInt(newMax + 1, 2 * newMax); for (var j = 0; j < tooltips; ++j) { tooltipStrings[j] = ratingUtils.randomHTML(ratingUtils.randomInt(1, 5), true); } ratingUtils.instantiate("rating", { maxRating: newMax, tooltipStrings: tooltipStrings }); ratingUtils.removeElementById("rating"); ratingUtils.addTag("div", "rating"); } }; }; } // Register the object as a test class by passing in the name LiveUnit.registerTestClass("WinJSTests.RatingInstantiationTests");