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

hazendaz / httpunit / 755

14 Feb 2026 07:14PM UTC coverage: 80.526%. Remained the same
755

push

github

hazendaz
[ci] Fix badge

3213 of 4105 branches covered (78.27%)

Branch coverage included in aggregate %.

8245 of 10124 relevant lines covered (81.44%)

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
 * SPDX-License-Identifier: MIT
3
 * See LICENSE file for details.
4
 *
5
 * Copyright 2000-2026 Russell Gold
6
 * Copyright 2021-2000 hazendaz
7
 */
8
package com.meterware.httpunit.dom;
9

10
import com.meterware.httpunit.protocol.ParameterProcessor;
11

12
import java.io.IOException;
13
import java.util.Locale;
14

15
import org.w3c.dom.DOMException;
16
import org.w3c.dom.Node;
17
import org.w3c.dom.html.HTMLCollection;
18
import org.w3c.dom.html.HTMLInputElement;
19

20
/**
21
 * The Class HTMLInputElementImpl.
22
 */
23
public class HTMLInputElementImpl extends HTMLControl implements HTMLInputElement {
1✔
24

25
    /** The Constant serialVersionUID. */
26
    private static final long serialVersionUID = 1L;
27

28
    /** The value. */
29
    private String _value;
30

31
    /** The checked. */
32
    private Boolean _checked;
33

34
    /** The behavior. */
35
    private TypeSpecificBehavior _behavior;
36

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

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

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

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

63
    /**
64
     * Select.
65
     */
66
    @Override
67
    public void select() {
68
    }
×
69

70
    /**
71
     * Gets the accept.
72
     *
73
     * @return the accept
74
     */
75
    @Override
76
    public String getAccept() {
77
        return getAttributeWithNoDefault("accept");
1✔
78
    }
79

80
    /**
81
     * Gets the access key.
82
     *
83
     * @return the access key
84
     */
85
    @Override
86
    public String getAccessKey() {
87
        return getAttributeWithNoDefault("accessKey");
1✔
88
    }
89

90
    /**
91
     * Gets the align.
92
     *
93
     * @return the align
94
     */
95
    @Override
96
    public String getAlign() {
97
        return getAttributeWithDefault("align", "bottom");
1✔
98
    }
99

100
    /**
101
     * Gets the alt.
102
     *
103
     * @return the alt
104
     */
105
    @Override
106
    public String getAlt() {
107
        return getAttributeWithNoDefault("alt");
1✔
108
    }
109

110
    /**
111
     * Gets the checked.
112
     *
113
     * @return the checked
114
     */
115
    @Override
116
    public boolean getChecked() {
117
        return getBehavior().getChecked();
1✔
118
    }
119

120
    /**
121
     * Gets the default checked.
122
     *
123
     * @return the default checked
124
     */
125
    @Override
126
    public boolean getDefaultChecked() {
127
        return getBooleanAttribute("checked");
1✔
128
    }
129

130
    /**
131
     * Gets the default value.
132
     *
133
     * @return the default value
134
     */
135
    @Override
136
    public String getDefaultValue() {
137
        return getAttributeWithNoDefault("value");
1✔
138
    }
139

140
    /**
141
     * Gets the max length.
142
     *
143
     * @return the max length
144
     */
145
    @Override
146
    public int getMaxLength() {
147
        return getIntegerAttribute("maxlength");
1✔
148
    }
149

150
    /**
151
     * Gets the size.
152
     *
153
     * @return the size
154
     */
155
    @Override
156
    public String getSize() {
157
        return getAttributeWithNoDefault("size");
1✔
158
    }
159

160
    /**
161
     * Gets the src.
162
     *
163
     * @return the src
164
     */
165
    @Override
166
    public String getSrc() {
167
        return getAttributeWithNoDefault("src");
1✔
168
    }
169

170
    /**
171
     * Gets the use map.
172
     *
173
     * @return the use map
174
     */
175
    @Override
176
    public String getUseMap() {
177
        return getAttributeWithNoDefault("useMap");
1✔
178
    }
179

180
    /**
181
     * Sets the accept.
182
     *
183
     * @param accept
184
     *            the new accept
185
     */
186
    @Override
187
    public void setAccept(String accept) {
188
        setAttribute("accept", accept);
1✔
189
    }
1✔
190

191
    /**
192
     * Sets the access key.
193
     *
194
     * @param accessKey
195
     *            the new access key
196
     */
197
    @Override
198
    public void setAccessKey(String accessKey) {
199
        setAttribute("accessKey", accessKey);
1✔
200
    }
1✔
201

202
    /**
203
     * Sets the align.
204
     *
205
     * @param align
206
     *            the new align
207
     */
208
    @Override
209
    public void setAlign(String align) {
210
        setAttribute("align", align);
1✔
211
    }
1✔
212

213
    /**
214
     * Sets the alt.
215
     *
216
     * @param alt
217
     *            the new alt
218
     */
219
    @Override
220
    public void setAlt(String alt) {
221
        setAttribute("alt", alt);
1✔
222
    }
1✔
223

224
    /**
225
     * Sets the checked.
226
     *
227
     * @param checked
228
     *            the new checked
229
     */
230
    @Override
231
    public void setChecked(boolean checked) {
232
        getBehavior().setChecked(checked);
1✔
233
    }
1✔
234

235
    /**
236
     * Sets the default checked.
237
     *
238
     * @param defaultChecked
239
     *            the new default checked
240
     */
241
    @Override
242
    public void setDefaultChecked(boolean defaultChecked) {
243
        setAttribute("checked", defaultChecked);
1✔
244
    }
1✔
245

246
    /**
247
     * Sets the default value.
248
     *
249
     * @param defaultValue
250
     *            the new default value
251
     */
252
    @Override
253
    public void setDefaultValue(String defaultValue) {
254
        setAttribute("value", defaultValue);
1✔
255
    }
1✔
256

257
    /**
258
     * Sets the max length.
259
     *
260
     * @param maxLength
261
     *            the new max length
262
     */
263
    @Override
264
    public void setMaxLength(int maxLength) {
265
        setAttribute("maxlength", maxLength);
1✔
266
    }
1✔
267

268
    /**
269
     * Sets the size.
270
     *
271
     * @param size
272
     *            the new size
273
     */
274
    @Override
275
    public void setSize(String size) {
276
        setAttribute("size", size);
1✔
277
    }
1✔
278

279
    /**
280
     * Sets the src.
281
     *
282
     * @param src
283
     *            the new src
284
     */
285
    @Override
286
    public void setSrc(String src) {
287
        setAttribute("src", src);
1✔
288
    }
1✔
289

290
    /**
291
     * Sets the use map.
292
     *
293
     * @param useMap
294
     *            the new use map
295
     */
296
    @Override
297
    public void setUseMap(String useMap) {
298
        setAttribute("useMap", useMap);
1✔
299
    }
1✔
300

301
    /**
302
     * Gets the value.
303
     *
304
     * @return the value
305
     */
306
    @Override
307
    public String getValue() {
308
        return getBehavior().getValue();
1✔
309
    }
310

311
    /**
312
     * Sets the value.
313
     *
314
     * @param value
315
     *            the new value
316
     */
317
    @Override
318
    public void setValue(String value) {
319
        getBehavior().setValue(value);
1✔
320
    }
1✔
321

322
    @Override
323
    public void reset() {
324
        getBehavior().reset();
1✔
325
    }
1✔
326

327
    @Override
328
    public void setAttribute(String name, String value) throws DOMException {
329
        super.setAttribute(name, value);
1✔
330
        if (name.equalsIgnoreCase("type")) {
1✔
331
            selectBehavior(getType().toLowerCase(Locale.ENGLISH));
1✔
332
        }
333
    }
1✔
334

335
    @Override
336
    void addValues(ParameterProcessor processor, String characterSet) throws IOException {
337
        getBehavior().addValues(getName(), processor, characterSet);
1✔
338
    }
1✔
339

340
    @Override
341
    public void silenceSubmitButton() {
342
        getBehavior().silenceSubmitButton();
1✔
343
    }
1✔
344

345
    /**
346
     * Sets the state.
347
     *
348
     * @param checked
349
     *            the new state
350
     */
351
    void setState(boolean checked) {
352
        _checked = checked ? Boolean.TRUE : Boolean.FALSE;
1✔
353
    }
1✔
354

355
    /**
356
     * Equals.
357
     *
358
     * @param s1
359
     *            the s 1
360
     * @param s2
361
     *            the s 2
362
     *
363
     * @return true, if successful
364
     */
365
    static boolean equals(String s1, String s2) {
366
        return s1 == null ? s2 == null : s1.equals(s2);
1!
367
    }
368

369
    /**
370
     * Select behavior.
371
     *
372
     * @param type
373
     *            the type
374
     */
375
    private void selectBehavior(String type) {
376
        if (type == null || type.equals("text") || type.equals("password") || type.equals("hidden")) {
1!
377
            _behavior = new EditableTextBehavior(this);
1✔
378
        } else if (type.equals("checkbox")) {
1✔
379
            _behavior = new CheckboxBehavior(this);
1✔
380
        } else if (type.equals("radio")) {
1✔
381
            _behavior = new RadioButtonBehavior(this);
1✔
382
        } else if (type.equals("reset")) {
1✔
383
            _behavior = new ResetButtonBehavior(this);
1✔
384
        } else if (type.equals("submit")) {
1✔
385
            _behavior = new SubmitButtonBehavior(this);
1✔
386
        } else {
387
            _behavior = new DefaultBehavior(this);
1✔
388
        }
389
    }
1✔
390

391
    /**
392
     * Gets the behavior.
393
     *
394
     * @return the behavior
395
     */
396
    private TypeSpecificBehavior getBehavior() {
397
        if (_behavior == null) {
1✔
398
            selectBehavior(getType().toLowerCase(Locale.ENGLISH));
1✔
399
        }
400
        return _behavior;
1✔
401
    }
402

403
    /**
404
     * The Interface TypeSpecificBehavior.
405
     */
406
    interface TypeSpecificBehavior {
407

408
        /**
409
         * Sets the value.
410
         *
411
         * @param value
412
         *            the new value
413
         */
414
        void setValue(String value);
415

416
        /**
417
         * Gets the value.
418
         *
419
         * @return the value
420
         */
421
        String getValue();
422

423
        /**
424
         * Reset.
425
         */
426
        void reset();
427

428
        /**
429
         * Click.
430
         */
431
        void click();
432

433
        /**
434
         * Gets the checked.
435
         *
436
         * @return the checked
437
         */
438
        boolean getChecked();
439

440
        /**
441
         * Sets the checked.
442
         *
443
         * @param checked
444
         *            the new checked
445
         */
446
        void setChecked(boolean checked);
447

448
        /**
449
         * Adds the values.
450
         *
451
         * @param name
452
         *            the name
453
         * @param processor
454
         *            the processor
455
         * @param characterSet
456
         *            the character set
457
         *
458
         * @throws IOException
459
         *             Signals that an I/O exception has occurred.
460
         */
461
        void addValues(String name, ParameterProcessor processor, String characterSet) throws IOException;
462

463
        /**
464
         * Silence submit button.
465
         */
466
        void silenceSubmitButton();
467
    }
468

469
    /**
470
     * The Class DefaultBehavior.
471
     */
472
    class DefaultBehavior implements TypeSpecificBehavior {
473

474
        /** The element. */
475
        private HTMLElementImpl _element;
476

477
        /**
478
         * Instantiates a new default behavior.
479
         *
480
         * @param element
481
         *            the element
482
         */
483
        public DefaultBehavior(HTMLElementImpl element) {
1✔
484
            _element = element;
1✔
485
        }
1✔
486

487
        @Override
488
        public String getValue() {
489
            return _value != null ? _value : getDefaultValue();
1✔
490
        }
491

492
        @Override
493
        public void setValue(String value) {
494
            if (HTMLInputElementImpl.equals(value, _value)) {
1✔
495
                return;
1✔
496
            }
497

498
            _value = value;
1✔
499
            reportPropertyChanged("value");
1✔
500
        }
1✔
501

502
        @Override
503
        public boolean getChecked() {
504
            return getDefaultChecked();
×
505
        }
506

507
        @Override
508
        public void setChecked(boolean checked) {
509
        }
×
510

511
        @Override
512
        public void reset() {
513
        }
1✔
514

515
        @Override
516
        public void click() {
517
        }
×
518

519
        /**
520
         * Report property changed.
521
         *
522
         * @param propertyName
523
         *            the property name
524
         */
525
        protected void reportPropertyChanged(String propertyName) {
526
            _element.reportPropertyChanged(propertyName);
1✔
527
        }
1✔
528

529
        @Override
530
        public void addValues(String name, ParameterProcessor processor, String characterSet) throws IOException {
531
            processor.addParameter(name, getValue(), characterSet);
1✔
532
        }
1✔
533

534
        @Override
535
        public void silenceSubmitButton() {
536
        }
1✔
537
    }
538

539
    /**
540
     * The Class EditableTextBehavior.
541
     */
542
    class EditableTextBehavior extends DefaultBehavior {
543

544
        /**
545
         * Instantiates a new editable text behavior.
546
         *
547
         * @param element
548
         *            the element
549
         */
550
        public EditableTextBehavior(HTMLElementImpl element) {
1✔
551
            super(element);
1✔
552
        }
1✔
553

554
        @Override
555
        public void reset() {
556
            _value = null;
1✔
557
        }
1✔
558

559
    }
560

561
    /**
562
     * The Class SubmitButtonBehavior.
563
     */
564
    class SubmitButtonBehavior extends DefaultBehavior {
565

566
        /** The send with submit. */
567
        private boolean _sendWithSubmit;
568

569
        /**
570
         * Instantiates a new submit button behavior.
571
         *
572
         * @param element
573
         *            the element
574
         */
575
        public SubmitButtonBehavior(HTMLElementImpl element) {
1✔
576
            super(element);
1✔
577
        }
1✔
578

579
        @Override
580
        public void click() {
581
            _sendWithSubmit = true;
1✔
582
            ((HTMLFormElementImpl) getForm()).doSubmitAction();
1✔
583
        }
1✔
584

585
        @Override
586
        public void addValues(String name, ParameterProcessor processor, String characterSet) throws IOException {
587
            if (!_sendWithSubmit) {
1✔
588
                return;
1✔
589
            }
590
            super.addValues(name, processor, characterSet);
1✔
591
        }
1✔
592

593
        @Override
594
        public void silenceSubmitButton() {
595
            _sendWithSubmit = false;
1✔
596
        }
1✔
597

598
    }
599

600
    /**
601
     * The Class CheckboxBehavior.
602
     */
603
    class CheckboxBehavior extends DefaultBehavior {
604

605
        /**
606
         * Instantiates a new checkbox behavior.
607
         *
608
         * @param element
609
         *            the element
610
         */
611
        public CheckboxBehavior(HTMLElementImpl element) {
1✔
612
            super(element);
1✔
613
        }
1✔
614

615
        @Override
616
        public boolean getChecked() {
617
            return _checked != null ? _checked.booleanValue() : getDefaultChecked();
1✔
618
        }
619

620
        @Override
621
        public void setChecked(boolean checked) {
622
            setState(checked);
1✔
623
        }
1✔
624

625
        @Override
626
        public void reset() {
627
            _checked = null;
1✔
628
        }
1✔
629

630
        @Override
631
        public void click() {
632
            setChecked(!getChecked());
1✔
633
        }
1✔
634

635
        @Override
636
        public void addValues(String name, ParameterProcessor processor, String characterSet) throws IOException {
637
            if (!getDisabled() && getChecked()) {
1!
638
                processor.addParameter(name, getFormValue(), characterSet);
1✔
639
            }
640
        }
1✔
641

642
        /**
643
         * Gets the form value.
644
         *
645
         * @return the form value
646
         */
647
        private String getFormValue() {
648
            return _value == null ? "on" : _value;
1✔
649
        }
650
    }
651

652
    /**
653
     * The Class RadioButtonBehavior.
654
     */
655
    class RadioButtonBehavior extends CheckboxBehavior {
656

657
        /**
658
         * Instantiates a new radio button behavior.
659
         *
660
         * @param element
661
         *            the element
662
         */
663
        public RadioButtonBehavior(HTMLElementImpl element) {
1✔
664
            super(element);
1✔
665
        }
1✔
666

667
        @Override
668
        public void setChecked(boolean checked) {
669
            if (checked) {
1✔
670
                HTMLCollection elements = getForm().getElements();
1✔
671
                for (int i = 0; i < elements.getLength(); i++) {
1✔
672
                    Node node = elements.item(i);
1✔
673
                    if (!(node instanceof HTMLInputElementImpl)) {
1✔
674
                        continue;
1✔
675
                    }
676
                    HTMLInputElementImpl input = (HTMLInputElementImpl) node;
1✔
677
                    if (getName().equals(input.getName()) && input.getType().equalsIgnoreCase("radio")) {
1!
678
                        input.setState(false);
1✔
679
                    }
680
                }
681
            }
682
            setState(checked);
1✔
683
        }
1✔
684

685
        @Override
686
        public void click() {
687
            setChecked(true);
1✔
688
        }
1✔
689
    }
690

691
    /**
692
     * The Class ResetButtonBehavior.
693
     */
694
    class ResetButtonBehavior extends DefaultBehavior {
695

696
        /**
697
         * Instantiates a new reset button behavior.
698
         *
699
         * @param element
700
         *            the element
701
         */
702
        public ResetButtonBehavior(HTMLElementImpl element) {
1✔
703
            super(element);
1✔
704
        }
1✔
705

706
        @Override
707
        public void click() {
708
            getForm().reset();
1✔
709
        }
1✔
710

711
    }
712

713
}
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