1 |
|
2 |
|
3 | 'use strict';
|
4 | var expect = require('expect.js'),
|
5 | React = require('react'),
|
6 | DocumentTitle = require('../');
|
7 |
|
8 | describe('DocumentTitle', function () {
|
9 | it('has a displayName', function () {
|
10 | var el = React.createElement(DocumentTitle);
|
11 | expect(el.type.displayName).to.be.a('string');
|
12 | expect(el.type.displayName).not.to.be.empty();
|
13 | });
|
14 | it('hides itself from the DOM', function () {
|
15 | var Component = React.createClass({
|
16 | render: function () {
|
17 | return React.createElement(DocumentTitle, {title: 'irrelevant'},
|
18 | React.createElement('div', null, 'hello')
|
19 | );
|
20 | }
|
21 | });
|
22 | var markup = React.renderToStaticMarkup(React.createElement(Component));
|
23 | expect(markup).to.equal('<div>hello</div>');
|
24 | });
|
25 | it('throws an error if it has multiple children', function (done) {
|
26 | var Component = React.createClass({
|
27 | render: function () {
|
28 | return React.createElement(DocumentTitle, {title: 'irrelevant'},
|
29 | React.createElement('div', null, 'hello'),
|
30 | React.createElement('div', null, 'world')
|
31 | );
|
32 | }
|
33 | });
|
34 | expect(function () {
|
35 | React.renderToStaticMarkup(React.createElement(Component));
|
36 | }).to.throwException(function (e) {
|
37 | expect(e.message).to.match(/^Invariant Violation:/);
|
38 | done();
|
39 | });
|
40 | });
|
41 | it('works with complex children', function () {
|
42 | var Component1 = React.createClass({
|
43 | render: function() {
|
44 | return React.createElement('p', null,
|
45 | React.createElement('span', null, 'c'),
|
46 | React.createElement('span', null, 'd')
|
47 | );
|
48 | }
|
49 | });
|
50 | var Component2 = React.createClass({
|
51 | render: function () {
|
52 | return React.createElement(DocumentTitle, {title: 'irrelevant'},
|
53 | React.createElement('div', null,
|
54 | React.createElement('div', null, 'a'),
|
55 | React.createElement('div', null, 'b'),
|
56 | React.createElement('div', null, React.createElement(Component1))
|
57 | )
|
58 | );
|
59 | }
|
60 | });
|
61 | var markup = React.renderToStaticMarkup(React.createElement(Component2));
|
62 | expect(markup).to.equal(
|
63 | '<div>' +
|
64 | '<div>a</div>' +
|
65 | '<div>b</div>' +
|
66 | '<div>' +
|
67 | '<p>' +
|
68 | '<span>c</span>' +
|
69 | '<span>d</span>' +
|
70 | '</p>' +
|
71 | '</div>' +
|
72 | '</div>'
|
73 | );
|
74 | });
|
75 | });
|
76 |
|
77 | describe('DocumentTitle.rewind', function () {
|
78 | it('clears the mounted instances', function () {
|
79 | React.renderToStaticMarkup(
|
80 | React.createElement(DocumentTitle, {title: 'a'},
|
81 | React.createElement(DocumentTitle, {title: 'b'}, React.createElement(DocumentTitle, {title: 'c'}))
|
82 | )
|
83 | );
|
84 | expect(DocumentTitle.peek()).to.equal('c');
|
85 | DocumentTitle.rewind();
|
86 | expect(DocumentTitle.peek()).to.equal(null);
|
87 | });
|
88 | it('returns the latest document title', function () {
|
89 | var title = 'cheese';
|
90 | React.renderToStaticMarkup(
|
91 | React.createElement(DocumentTitle, {title: 'a'},
|
92 | React.createElement(DocumentTitle, {title: 'b'}, React.createElement(DocumentTitle, {title: title}))
|
93 | )
|
94 | );
|
95 | expect(DocumentTitle.rewind()).to.equal(title);
|
96 | });
|
97 | it('returns nothing if no mounted instances exist', function () {
|
98 | React.renderToStaticMarkup(
|
99 | React.createElement(DocumentTitle, {title: 'a'},
|
100 | React.createElement(DocumentTitle, {title: 'b'}, React.createElement(DocumentTitle, {title: 'c'}))
|
101 | )
|
102 | );
|
103 | DocumentTitle.rewind();
|
104 | expect(DocumentTitle.peek()).to.equal(null);
|
105 | });
|
106 | });
|