File size: 2,807 Bytes
30c32c8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
const test = require('tap').test;
const Variable = require('../../src/engine/variable');
const htmlparser = require('htmlparser2');

test('spec', t => {
    t.type(typeof Variable.SCALAR_TYPE, typeof Variable.LIST_TYPE);
    t.type(typeof Variable.SCALAR_TYPE, typeof Variable.BROADCAST_MESSAGE_TYPE);

    const varId = 'varId';
    const varName = 'varName';
    const varIsCloud = false;
    let v = new Variable(
        varId,
        varName,
        Variable.SCALAR_TYPE,
        varIsCloud
    );

    t.type(Variable, 'function');
    t.type(v, 'object');
    t.ok(v instanceof Variable);

    t.equal(v.id, varId);
    t.equal(v.name, varName);
    t.equal(v.type, Variable.SCALAR_TYPE);
    t.type(v.value, 'number');
    t.equal(v.isCloud, varIsCloud);

    t.type(v.toXML, 'function');

    v = new Variable(
        varId,
        varName,
        Variable.LIST_TYPE,
        varIsCloud
    );
    t.ok(Array.isArray(v.value));

    v = new Variable(
        varId,
        varName,
        Variable.BROADCAST_MESSAGE_TYPE,
        varIsCloud
    );
    t.equal(v.value, 'varName');

    t.end();
});

test('toXML', t => {
    const varId = 'varId';
    const varName = 'varName';
    const varIsCloud = false;
    const varIsLocal = false;
    const v = new Variable(
        varId,
        varName,
        Variable.SCALAR_TYPE,
        varIsCloud
    );

    const parser = new htmlparser.Parser({
        onopentag: function (name, attribs){
            if (name === 'variable'){
                t.equal(attribs.type, Variable.SCALAR_TYPE);
                t.equal(attribs.id, varId);
                t.equal(attribs.iscloud, varIsCloud.toString());
                t.equal(attribs.islocal, varIsLocal.toString());
            }
        },
        ontext: function (text){
            t.equal(text, varName);
        }
    }, {decodeEntities: false});
    parser.write(v.toXML(false));
    parser.end();

    t.end();
});

test('escape variable name for XML', t => {
    const varId = 'varId';
    const varName = '<>&\'"';
    const varIsCloud = false;
    const varIsLocal = false;
    const v = new Variable(
        varId,
        varName,
        Variable.SCALAR_TYPE,
        varIsCloud
    );

    const parser = new htmlparser.Parser({
        onopentag: function (name, attribs){
            if (name === 'variable'){
                t.equal(attribs.type, Variable.SCALAR_TYPE);
                t.equal(attribs.id, varId);
                t.equal(attribs.iscloud, varIsCloud.toString());
                t.equal(attribs.islocal, varIsLocal.toString());
            }
        },
        ontext: function (text){
            t.equal(text, '&lt;&gt;&amp;&apos;&quot;');
        }
    }, {decodeEntities: false});
    parser.write(v.toXML(false));
    parser.end();

    t.end();
});