noelwelsh / flan

An animation library for the Javascript functional reactive library Flapjax

This URL has Read+Write access

flan / mew.js
100644 97 lines (81 sloc) 2.561 kb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
/// Make Everything Work (MEW)
/// A simple testing framework for Javascript
/// Copyright Noel Welsh 2009
 
/// Requires prototype
 
function insertTestFailure(name, e) {
  var results = $('testResults');
  if (results === undefined) {
    results = document.createElement('div');
    results.id = 'testResults';
    $$('body')[0].appendChild(results);
  }
 
  var p = document.createElement('div');
  p.className = 'testResult';
  p.innerHTML = "<p><strong>Test failure</strong>:" + name +"</p><p>" + e + "</p>";
 
  results.appendChild(p);
}
 
function insertTestSuccess(name) {
  var results = $('testResults');
  if (results === undefined) {
    results = document.createElement('div');
    results.id = 'testResults';
    $$('body')[0].appendChild(results);
  }
 
  var p = document.createElement('div');
  p.className = 'testResult';
  p.innerHTML = "<p><strong>Test success</strong> " + name + "</p>";
 
  results.appendChild(p);
}
 
function defaultCheckAround(thunk) {
  try {
    thunk();
    insertTestSuccess("check");
  } catch (e) {
    insertTestFailure("check", e);
  }
}
 
var currentCheckAround = defaultCheckAround;
 
function failBinaryCheck(name, actual, expected) {
  throw name + ": " + actual + " " + expected;
}
 
// checkEqual : 'a 'a -> ()
//
// Same type and same properties
function checkEqual(actual, expected) {
  if (Object.isArray(actual) && Object.isArray(expected)) {
    currentCheckAround(function() {
                         if (actual.length === expected.length) {
                           for(var i=0; i < actual.length; i++) {
                             if(actual[i] !== expected[i]) {
                               return false;
                             }
                           }
                           return true;
                         } else {
                           return false;
                         }
                       });
  } else {
    currentCheckAround(function() {
                         if (!(actual === expected)) {
                           failBinaryCheck("checkEqual", actual, expected); }
                       });
  }
}
 
 
function testCaseCheckAround(thunk) {
  // Throw any exceptions to the test case
  thunk();
}
 
function testCase(name, thunk) {
  return function() {
    var lastCheckAround = currentCheckAround;
    currentCheckAround = testCaseCheckAround;
 
    try {
      thunk();
      insertTestSuccess(name);
    } catch (e) {
      insertTestFailure(name, e);
    }
 
    currentCheckAround = lastCheckAround;
  };
}