• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

hazendaz / httpunit / 636

05 Dec 2025 03:27AM UTC coverage: 80.509%. Remained the same
636

push

github

hazendaz
Cleanup more old since tags

you guessed it, at this point going to jautodoc the rest so the warnings on builds go away ;)

3213 of 4105 branches covered (78.27%)

Branch coverage included in aggregate %.

8249 of 10132 relevant lines covered (81.42%)

0.81 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

93.85
/src/main/java/com/meterware/httpunit/dom/HTMLInputElementImpl.java
1
/*
2
 * MIT License
3
 *
4
 * Copyright 2011-2025 Russell Gold
5
 *
6
 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
7
 * documentation files (the "Software"), to deal in the Software without restriction, including without limitation
8
 * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and
9
 * to permit persons to whom the Software is furnished to do so, subject to the following conditions:
10
 *
11
 * The above copyright notice and this permission notice shall be included in all copies or substantial portions
12
 * of the Software.
13
 *
14
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
15
 * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
17
 * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
18
 * DEALINGS IN THE SOFTWARE.
19
 */
20
package com.meterware.httpunit.dom;
21

22
import com.meterware.httpunit.protocol.ParameterProcessor;
23

24
import java.io.IOException;
25

26
import org.w3c.dom.DOMException;
27
import org.w3c.dom.Node;
28
import org.w3c.dom.html.HTMLCollection;
29
import org.w3c.dom.html.HTMLInputElement;
30

31
public class HTMLInputElementImpl extends HTMLControl implements HTMLInputElement {
1✔
32

33
    private static final long serialVersionUID = 1L;
34
    private String _value;
35
    private Boolean _checked;
36
    private TypeSpecificBehavior _behavior;
37

38
    @Override
39
    ElementImpl create() {
40
        return new HTMLInputElementImpl();
1✔
41
    }
42

43
    /**
44
     * simulate blur
45
     */
46
    @Override
47
    public void blur() {
48
        handleEvent("onblur");
×
49
    }
×
50

51
    /**
52
     * simulate focus;
53
     */
54
    @Override
55
    public void focus() {
56
        handleEvent("onfocus");
×
57
    }
×
58

59
    @Override
60
    public void doClickAction() {
61
        getBehavior().click();
1✔
62
    }
1✔
63

64
    @Override
65
    public void select() {
66
    }
×
67

68
    @Override
69
    public String getAccept() {
70
        return getAttributeWithNoDefault("accept");
1✔
71
    }
72

73
    @Override
74
    public String getAccessKey() {
75
        return getAttributeWithNoDefault("accessKey");
1✔
76
    }
77

78
    @Override
79
    public String getAlign() {
80
        return getAttributeWithDefault("align", "bottom");
1✔
81
    }
82

83
    @Override
84
    public String getAlt() {
85
        return getAttributeWithNoDefault("alt");
1✔
86
    }
87

88
    @Override
89
    public boolean getChecked() {
90
        return getBehavior().getChecked();
1✔
91
    }
92

93
    @Override
94
    public boolean getDefaultChecked() {
95
        return getBooleanAttribute("checked");
1✔
96
    }
97

98
    @Override
99
    public String getDefaultValue() {
100
        return getAttributeWithNoDefault("value");
1✔
101
    }
102

103
    @Override
104
    public int getMaxLength() {
105
        return getIntegerAttribute("maxlength");
1✔
106
    }
107

108
    @Override
109
    public String getSize() {
110
        return getAttributeWithNoDefault("size");
1✔
111
    }
112

113
    @Override
114
    public String getSrc() {
115
        return getAttributeWithNoDefault("src");
1✔
116
    }
117

118
    @Override
119
    public String getUseMap() {
120
        return getAttributeWithNoDefault("useMap");
1✔
121
    }
122

123
    @Override
124
    public void setAccept(String accept) {
125
        setAttribute("accept", accept);
1✔
126
    }
1✔
127

128
    @Override
129
    public void setAccessKey(String accessKey) {
130
        setAttribute("accessKey", accessKey);
1✔
131
    }
1✔
132

133
    @Override
134
    public void setAlign(String align) {
135
        setAttribute("align", align);
1✔
136
    }
1✔
137

138
    @Override
139
    public void setAlt(String alt) {
140
        setAttribute("alt", alt);
1✔
141
    }
1✔
142

143
    @Override
144
    public void setChecked(boolean checked) {
145
        getBehavior().setChecked(checked);
1✔
146
    }
1✔
147

148
    @Override
149
    public void setDefaultChecked(boolean defaultChecked) {
150
        setAttribute("checked", defaultChecked);
1✔
151
    }
1✔
152

153
    @Override
154
    public void setDefaultValue(String defaultValue) {
155
        setAttribute("value", defaultValue);
1✔
156
    }
1✔
157

158
    @Override
159
    public void setMaxLength(int maxLength) {
160
        setAttribute("maxlength", maxLength);
1✔
161
    }
1✔
162

163
    @Override
164
    public void setSize(String size) {
165
        setAttribute("size", size);
1✔
166
    }
1✔
167

168
    @Override
169
    public void setSrc(String src) {
170
        setAttribute("src", src);
1✔
171
    }
1✔
172

173
    @Override
174
    public void setUseMap(String useMap) {
175
        setAttribute("useMap", useMap);
1✔
176
    }
1✔
177

178
    @Override
179
    public String getValue() {
180
        return getBehavior().getValue();
1✔
181
    }
182

183
    @Override
184
    public void setValue(String value) {
185
        getBehavior().setValue(value);
1✔
186
    }
1✔
187

188
    @Override
189
    public void reset() {
190
        getBehavior().reset();
1✔
191
    }
1✔
192

193
    @Override
194
    public void setAttribute(String name, String value) throws DOMException {
195
        super.setAttribute(name, value);
1✔
196
        if (name.equalsIgnoreCase("type")) {
1✔
197
            selectBehavior(getType().toLowerCase());
1✔
198
        }
199
    }
1✔
200

201
    @Override
202
    void addValues(ParameterProcessor processor, String characterSet) throws IOException {
203
        getBehavior().addValues(getName(), processor, characterSet);
1✔
204
    }
1✔
205

206
    @Override
207
    public void silenceSubmitButton() {
208
        getBehavior().silenceSubmitButton();
1✔
209
    }
1✔
210

211
    void setState(boolean checked) {
212
        _checked = checked ? Boolean.TRUE : Boolean.FALSE;
1✔
213
    }
1✔
214

215
    static boolean equals(String s1, String s2) {
216
        return s1 == null ? s2 == null : s1.equals(s2);
1!
217
    }
218

219
    private void selectBehavior(String type) {
220
        if (type == null || type.equals("text") || type.equals("password") || type.equals("hidden")) {
1!
221
            _behavior = new EditableTextBehavior(this);
1✔
222
        } else if (type.equals("checkbox")) {
1✔
223
            _behavior = new CheckboxBehavior(this);
1✔
224
        } else if (type.equals("radio")) {
1✔
225
            _behavior = new RadioButtonBehavior(this);
1✔
226
        } else if (type.equals("reset")) {
1✔
227
            _behavior = new ResetButtonBehavior(this);
1✔
228
        } else if (type.equals("submit")) {
1✔
229
            _behavior = new SubmitButtonBehavior(this);
1✔
230
        } else {
231
            _behavior = new DefaultBehavior(this);
1✔
232
        }
233
    }
1✔
234

235
    private TypeSpecificBehavior getBehavior() {
236
        if (_behavior == null) {
1✔
237
            selectBehavior(getType().toLowerCase());
1✔
238
        }
239
        return _behavior;
1✔
240
    }
241

242
    interface TypeSpecificBehavior {
243
        void setValue(String value);
244

245
        String getValue();
246

247
        void reset();
248

249
        void click();
250

251
        boolean getChecked();
252

253
        void setChecked(boolean checked);
254

255
        void addValues(String name, ParameterProcessor processor, String characterSet) throws IOException;
256

257
        void silenceSubmitButton();
258
    }
259

260
    class DefaultBehavior implements TypeSpecificBehavior {
261

262
        private HTMLElementImpl _element;
263

264
        public DefaultBehavior(HTMLElementImpl element) {
1✔
265
            _element = element;
1✔
266
        }
1✔
267

268
        @Override
269
        public String getValue() {
270
            return _value != null ? _value : getDefaultValue();
1✔
271
        }
272

273
        @Override
274
        public void setValue(String value) {
275
            if (HTMLInputElementImpl.equals(value, _value)) {
1✔
276
                return;
1✔
277
            }
278

279
            _value = value;
1✔
280
            reportPropertyChanged("value");
1✔
281
        }
1✔
282

283
        @Override
284
        public boolean getChecked() {
285
            return getDefaultChecked();
×
286
        }
287

288
        @Override
289
        public void setChecked(boolean checked) {
290
        }
×
291

292
        @Override
293
        public void reset() {
294
        }
1✔
295

296
        @Override
297
        public void click() {
298
        }
×
299

300
        protected void reportPropertyChanged(String propertyName) {
301
            _element.reportPropertyChanged(propertyName);
1✔
302
        }
1✔
303

304
        @Override
305
        public void addValues(String name, ParameterProcessor processor, String characterSet) throws IOException {
306
            processor.addParameter(name, getValue(), characterSet);
1✔
307
        }
1✔
308

309
        @Override
310
        public void silenceSubmitButton() {
311
        }
1✔
312
    }
313

314
    class EditableTextBehavior extends DefaultBehavior {
315

316
        public EditableTextBehavior(HTMLElementImpl element) {
1✔
317
            super(element);
1✔
318
        }
1✔
319

320
        @Override
321
        public void reset() {
322
            _value = null;
1✔
323
        }
1✔
324

325
    }
326

327
    class SubmitButtonBehavior extends DefaultBehavior {
328

329
        private boolean _sendWithSubmit;
330

331
        public SubmitButtonBehavior(HTMLElementImpl element) {
1✔
332
            super(element);
1✔
333
        }
1✔
334

335
        @Override
336
        public void click() {
337
            _sendWithSubmit = true;
1✔
338
            ((HTMLFormElementImpl) getForm()).doSubmitAction();
1✔
339
        }
1✔
340

341
        @Override
342
        public void addValues(String name, ParameterProcessor processor, String characterSet) throws IOException {
343
            if (!_sendWithSubmit) {
1✔
344
                return;
1✔
345
            }
346
            super.addValues(name, processor, characterSet);
1✔
347
        }
1✔
348

349
        @Override
350
        public void silenceSubmitButton() {
351
            _sendWithSubmit = false;
1✔
352
        }
1✔
353

354
    }
355

356
    class CheckboxBehavior extends DefaultBehavior {
357

358
        public CheckboxBehavior(HTMLElementImpl element) {
1✔
359
            super(element);
1✔
360
        }
1✔
361

362
        @Override
363
        public boolean getChecked() {
364
            return _checked != null ? _checked.booleanValue() : getDefaultChecked();
1✔
365
        }
366

367
        @Override
368
        public void setChecked(boolean checked) {
369
            setState(checked);
1✔
370
        }
1✔
371

372
        @Override
373
        public void reset() {
374
            _checked = null;
1✔
375
        }
1✔
376

377
        @Override
378
        public void click() {
379
            setChecked(!getChecked());
1✔
380
        }
1✔
381

382
        @Override
383
        public void addValues(String name, ParameterProcessor processor, String characterSet) throws IOException {
384
            if (!getDisabled() && getChecked()) {
1!
385
                processor.addParameter(name, getFormValue(), characterSet);
1✔
386
            }
387
        }
1✔
388

389
        private String getFormValue() {
390
            return _value == null ? "on" : _value;
1✔
391
        }
392
    }
393

394
    class RadioButtonBehavior extends CheckboxBehavior {
395

396
        public RadioButtonBehavior(HTMLElementImpl element) {
1✔
397
            super(element);
1✔
398
        }
1✔
399

400
        @Override
401
        public void setChecked(boolean checked) {
402
            if (checked) {
1✔
403
                HTMLCollection elements = getForm().getElements();
1✔
404
                for (int i = 0; i < elements.getLength(); i++) {
1✔
405
                    Node node = elements.item(i);
1✔
406
                    if (!(node instanceof HTMLInputElementImpl)) {
1✔
407
                        continue;
1✔
408
                    }
409
                    HTMLInputElementImpl input = (HTMLInputElementImpl) node;
1✔
410
                    if (getName().equals(input.getName()) && input.getType().equalsIgnoreCase("radio")) {
1!
411
                        input.setState(false);
1✔
412
                    }
413
                }
414
            }
415
            setState(checked);
1✔
416
        }
1✔
417

418
        @Override
419
        public void click() {
420
            setChecked(true);
1✔
421
        }
1✔
422
    }
423

424
    class ResetButtonBehavior extends DefaultBehavior {
425

426
        public ResetButtonBehavior(HTMLElementImpl element) {
1✔
427
            super(element);
1✔
428
        }
1✔
429

430
        @Override
431
        public void click() {
432
            getForm().reset();
1✔
433
        }
1✔
434

435
    }
436

437
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc