summaryrefslogtreecommitdiffstats
path: root/third_party/WebKit/LayoutTests/fast/forms/select/select-add.html
blob: 15ff4b00d36e6dd785bafae590dd58b7d15a616f (plain)
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
114
115
116
117
118
119
120
121
122
123
124
<!DOCTYPE html>
<html>
<head>
<script src="../../../resources/js-test.js"></script>
</head>
<body>
<script>
description('Test select.add() method');

debug('Test select');
test(false);

debug('Test select multiple');
test(true);

var select;

function resetSelect(multiple) {
    select = document.createElement('select');
    select.multiple = multiple;
    select.appendChild(new Option("0", "0", false, false));
    select.appendChild(new Option("1", "1", false, false));
    select.appendChild(new Option("2", "2", false, false));
}

function addOption(index) {
    select.add(new Option('X', 'X', false, false), index);
    return getSelectOptions();
}

function getSelectOptions() {
    var values = [];
    for (var i = 0; i < select.options.length; ++i) {
        values.push(select.options[i].value);
    }
    return values.join(",");
}

function test(multiple) {
    resetSelect(multiple);
    shouldBeEqualToString('addOption(0)', 'X,0,1,2');

    resetSelect(multiple);
    shouldBeEqualToString('addOption(1)', '0,X,1,2');

    resetSelect(multiple);
    shouldBeEqualToString('addOption(2)', '0,1,X,2');

    resetSelect(multiple);
    shouldBeEqualToString('addOption(3)', '0,1,2,X');

    resetSelect(multiple);
    shouldBeEqualToString('addOption(100)', '0,1,2,X');

    resetSelect(multiple);
    shouldBeEqualToString('addOption(-100)', '0,1,2,X');

    resetSelect(multiple);
    select.add(new Option('X', 'X', false, false));
    shouldBeEqualToString('getSelectOptions()', '0,1,2,X');

    resetSelect(multiple);
    shouldBeEqualToString('addOption(undefined)', '0,1,2,X');

    resetSelect(multiple);
    shouldBeEqualToString('addOption(null)', '0,1,2,X');

    resetSelect(multiple);
    shouldBeEqualToString('addOption(NaN)', 'X,0,1,2');

    resetSelect(multiple);
    shouldBeEqualToString('addOption(Infinity)', 'X,0,1,2');

    resetSelect(multiple);
    shouldBeEqualToString('addOption(-Infinity)', 'X,0,1,2');

    resetSelect(multiple);
    shouldBeEqualToString('addOption("foo")', 'X,0,1,2');

    resetSelect(multiple);
    shouldBeEqualToString('addOption("0")', 'X,0,1,2');

    resetSelect(multiple);
    shouldBeEqualToString('addOption("1")', '0,X,1,2');

    resetSelect(multiple);
    shouldBeEqualToString('addOption(false)', 'X,0,1,2');

    resetSelect(multiple);
    shouldBeEqualToString('addOption(true)', '0,X,1,2');

    resetSelect(multiple);
    shouldBeEqualToString('addOption(2147483647)', '0,1,2,X');

    resetSelect(multiple);
    shouldBeEqualToString('addOption(-2147483647)', '0,1,2,X');

    resetSelect(multiple);
    shouldBeEqualToString('addOption(2147483648)', '0,1,2,X');

    resetSelect(multiple);
    shouldBeEqualToString('addOption(-2147483648)', '0,1,2,X');

    resetSelect(multiple);
    shouldThrow('select.add()');
    shouldThrow('select.add("foo")');
    shouldThrow('select.add("foo", 0)');
    shouldThrow('select.add(undefined)');
    shouldThrow('select.add(undefined, 0)');
    shouldThrow('select.add(null)');
    shouldThrow('select.add(null, 0)');
    shouldBeUndefined('select.add(new Option("X", "X", false, false), 0, 1)');
    shouldBeUndefined('select.add(new Option("X", "X", false, false), select.options[0], 2)');

    resetSelect(multiple);
    var group = document.createElement('optgroup');
    group.appendChild(new Option('X', 'X', false, false));
    group.appendChild(new Option('Y', 'Y', false, false));
    select.add(group, 1);
    shouldBeEqualToString('getSelectOptions()', '0,X,Y,1,2');
}
</script>
</body>
</html>