forked from intercellular/cell
-
Notifications
You must be signed in to change notification settings - Fork 0
/
God.js
113 lines (113 loc) · 3.91 KB
/
God.js
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
const assert = require('assert')
const sinon = require('sinon')
const spy = require("./spy.js")
const stringify = require('json-stable-stringify')
const {God} = require("../cell")
const compare = function(actual, expected) {
assert.equal(stringify(actual), stringify(expected));
}
// Everything that interfaces with the outside world
describe("God", function() {
require('jsdom-global')()
God.plan(window);
describe("God.detect(): finding $cell", function() {
describe("looks for a variable with the key '$cell'", function() {
it("only cells", function() {
var mock = {
gene1: {
$type: "div",
$text: "node1",
$cell: true
},
gene2: {
$type: "span",
$text: "node2",
$cell: true
}
};
var genes = God.detect(mock);
compare(genes.length, 2)
compare(genes, [mock.gene1, mock.gene2]);
})
it("mix of cells and non-cells", function() {
var mock = {
gene: {
$type: "div",
$text: "node1",
$cell: true
},
obj: {
blah: "blah"
},
str: "str",
num: 1
};
var genes = God.detect(mock);
compare(genes.length, 1)
compare(genes[0], mock.gene);
})
})
})
describe("God.create()", function() {
it("inserts into existing body correctly", function() {
document.body.innerHTML = "";
window.gene = {
$type: "body",
$cell: true,
$components: [{
$text: "Hello",
class: "container"
}]
};
var $result = God.create(window);
compare($result.map(function($node) { return $node.outerHTML }), [ '<body><div class="container">Hello</div></body>' ]);
compare(document.querySelector("html").outerHTML, '<html><head><meta charset=\"utf-8\"></head><body><div class="container">Hello</div></body></html>');
})
it("attaches new node into body", function() {
document.body.innerHTML = "";
window.gene = {
$cell: true,
$text: "Hello",
class: "container"
};
var $result = God.create(window);
compare($result.map(function($node) { return $node.outerHTML }), [ '<div class="container">Hello</div>' ]);
compare(document.querySelector("html").outerHTML, '<html><head><meta charset=\"utf-8\"></head><body><div class="container">Hello</div></body></html>');
})
describe("injects node into the id slot", function() {
it("single id", function() {
document.body.innerHTML = "<div class='container'><div class='row'>This is a row</div><div class='sidebar' id='widget'></div>";
window.gene = {
id: "widget",
$cell: true,
$components: [{
$text: "Hello",
class: "ticker"
}]
};
var $result = God.create(window);
compare(document.body.innerHTML, "<div class=\"container\"><div class=\"row\">This is a row</div><div class=\"sidebar\" id=\"widget\"><div class=\"ticker\">Hello</div></div></div>");
})
it("multiple ids", function() {
document.body.innerHTML = "<div class='container'><div class='row' id='search'></div><div class='row'>This is a row</div><div class='sidebar' id='widget'></div>";
window.gene = {
class: "sidebar",
id: "widget",
$cell: true,
$components: [{
$text: "Hello",
class: "ticker"
}]
};
window.gene2 = {
id: "search",
$cell: true,
$type: "input",
type: "search"
};
var $result = God.create(window);
compare(document.body.innerHTML, "<div class=\"container\"><input id=\"search\" type=\"search\"><div class=\"row\">This is a row</div><div class=\"sidebar\" id=\"widget\"><div class=\"ticker\">Hello</div></div></div>");
})
})
})
})