toolkit/javascript/d3/test/env-assert.js
changeset 47 c0b4a8b5a012
equal deleted inserted replaced
46:efd9c589177a 47:c0b4a8b5a012
       
     1 var assert = require("assert");
       
     2 
       
     3 assert.inDelta = function(actual, expected, delta, message) {
       
     4   if (!inDelta(actual, expected, delta)) {
       
     5     assert.fail(actual, expected, message || "expected {actual} to be in within *" + delta + "* of {expected}", null, assert.inDelta);
       
     6   }
       
     7 };
       
     8 
       
     9 assert.domNull = function(actual, message) {
       
    10   if (actual !== null) {
       
    11     assert.fail(actual+"", null, message || "expected null, got {actual}", "===", assert.domNull);
       
    12   }
       
    13 };
       
    14 
       
    15 assert.domEqual = function(actual, expected, message) {
       
    16   if (actual !== expected) {
       
    17     assert.fail(actual+"", expected+"", message || "expected {expected}, got {actual}", "===", assert.domEqual);
       
    18   }
       
    19 };
       
    20 
       
    21 assert.rgbEqual = function(actual, r, g, b, message) {
       
    22   if (actual.r !== r || actual.g !== g || actual.b !== b) {
       
    23     assert.fail("rgb(" + actual.r + "," + actual.g + "," + actual.b + ")", "rgb(" + r + ", " + g + ", " + b + ")", message || "expected {expected}, got {actual}", "===", assert.rgbEqual);
       
    24   }
       
    25 };
       
    26 
       
    27 assert.hslEqual = function(actual, h, s, l, message) {
       
    28   if (Math.abs(actual.h - h) > 1e-6 || Math.abs(actual.s - s) > 1e-6 || Math.abs(actual.l - l) > 1e-6) {
       
    29     assert.fail("hsl(" + actual.h + "," + (actual.s * 100) + "%," + (actual.l * 100) + "%)", "hsl(" + h + "," + (s * 100) + "%," + (l * 100) + "%)", message || "expected {expected}, got {actual}", null, assert.hslEqual);
       
    30   }
       
    31 };
       
    32 
       
    33 assert.pathEqual = function(actual, expected, message) {
       
    34   if (!pathEqual(actual, expected)) {
       
    35     assert.fail(formatPath(actual), formatPath(expected), message || "expected {expected}, got {actual}", null, assert.pathEqual);
       
    36   }
       
    37 };
       
    38 
       
    39 function inDelta(actual, expected, delta) {
       
    40   return (Array.isArray(expected) ? inDeltaArray : inDeltaNumber)(actual, expected, delta);
       
    41 }
       
    42 
       
    43 function inDeltaArray(actual, expected, delta) {
       
    44   var n = expected.length, i = -1;
       
    45   if (actual.length !== n) return false;
       
    46   while (++i < n) if (!inDelta(actual[i], expected[i], delta)) return false;
       
    47   return true;
       
    48 }
       
    49 
       
    50 function inDeltaNumber(actual, expected, delta) {
       
    51   return actual >= expected - delta && actual <= expected + delta;
       
    52 }
       
    53 
       
    54 function pathEqual(a, b) {
       
    55   a = parsePath(a);
       
    56   b = parsePath(b);
       
    57   var n = a.length, i = -1, x, y;
       
    58   if (n !== b.length) return false;
       
    59   while (++i < n) {
       
    60     x = a[i];
       
    61     y = b[i];
       
    62     if (typeof x === "string") {
       
    63       if (x !== y) return false;
       
    64     } else if (typeof y !== "number") {
       
    65       return false;
       
    66     } else if (Math.abs(x - y) > 1e-6) {
       
    67       return false;
       
    68     }
       
    69   }
       
    70   return true;
       
    71 }
       
    72 
       
    73 var reNumber = /[-+]?(?:\d+\.\d+|\d+\.|\.\d+|\d+)(?:[eE][-]?\d+)?/g;
       
    74 
       
    75 function parsePath(path) {
       
    76   var parts = [];
       
    77   reNumber.lastIndex = 0;
       
    78   for (var i = 0, s0 = 0, s1, m; m = reNumber.exec(path); ++i) {
       
    79     if (m.index) {
       
    80       var part = path.substring(s0, s1 = m.index);
       
    81       if (!/^[, ]$/.test(part)) parts.push(part);
       
    82     }
       
    83     parts.push(parseFloat(m[0]));
       
    84     s0 = reNumber.lastIndex;
       
    85   }
       
    86   if (s0 < path.length) parts.push(path.substring(s0));
       
    87   return parts;
       
    88 }
       
    89 
       
    90 function formatPath(path) {
       
    91   return path.replace(reNumber, formatNumber);
       
    92 }
       
    93 
       
    94 function formatNumber(s) {
       
    95   return Math.abs((s = +s) - Math.floor(s)) < 1e-6 ? Math.floor(s) : s.toFixed(6);
       
    96 }