UNPKG

@qooxdoo/framework

Version:

The JS Framework for Coders

135 lines (108 loc) 3.42 kB
/* ************************************************************************ qooxdoo - the new era of web development http://qooxdoo.org Copyright: 2007-2008 1&1 Internet AG, Germany, http://www.1und1.de License: MIT: https://opensource.org/licenses/MIT See the LICENSE file in the project's top-level directory for details. Authors: * Fabian Jakobs (fjakobs) ************************************************************************ */ qx.Class.define("qx.test.ui.layout.Util", { extend : qx.dev.unit.TestCase, members : { testFlex : function() { var numRuns = 500; for (var run=0; run<numRuns; run++) { var len = Math.round(Math.random() * 20) + 1; var sumMin = 0; var sumMax = 0; var sumValue = 0; var flexibles = {}; for (var j=0; j<len; j++) { var min = Math.round(Math.random() * 20); var max = min + Math.round(Math.random() * 50) + 1; var value = min + Math.round(Math.random() * (max - min)); sumMax += max; sumMin += min; sumValue += value; flexibles[j] = { min: min, value: value, max: max, flex : Math.ceil(Math.random() * 5) // flex range from 1 .. 5 }; } var availWidth = Math.round(Math.random() * 500); var result = qx.ui.layout.Util.computeFlexOffsets(flexibles, availWidth, sumValue); // check sum var sum = 0; for (var i in result) { var newSize = flexibles[i].value + result[i].offset; sum += newSize; this.assert(flexibles[i].min <= newSize); this.assert(flexibles[i].max >= newSize); } if (availWidth !== sum) { this.assert(sum == sumMin || sum == sumMax); } else { this.assertEquals(availWidth, sum); } } }, /** * Test whether flex distributes the value fair concerning the flex factors */ testFlexFairness : function() { var numRuns = 500; for (var run=0; run<numRuns; run++) { var len = Math.round(Math.random() * 20) + 1; var sumMin = 0; var sumMax = 0; var sumValue = 0; var sumWeights = 0; var flexibles = {}; for (var j=0; j<len; j++) { var min = 0; var max = 32000; var value = Math.round(Math.random() * 20); sumMax += max; sumMin += min; sumValue += value; flexibles[j] = { min: min, value: value, max: max, flex : 1 + Math.ceil(Math.random() * 5) // flex range from 1 .. 5 }; sumWeights += flexibles[j].flex; } var availWidth = sumValue + Math.round(Math.random() * 100); var result = qx.ui.layout.Util.computeFlexOffsets(flexibles, availWidth, sumValue); var offsets = 0; for (var i in result) { offsets += result[i].offset; } if (sumWeights > 0) { var unit = offsets / sumWeights; for (var j in result) { var error = result[j].offset - (unit * flexibles[j].flex); this.assertTrue(Math.abs(error) <= 1, "The error must be at most one pixel!"); } } } } } });