blob: 2d1cff0ac614700c188cada732248eacfd4ef07a [file] [log] [blame]
library common_setrangetext;
import "dart:html";
import "../../../testcommon.dart";
runTestsShouldPass(tagName, [attributes=const {}]) {
InputElement element = document.createElement(tagName);
for (var key in attributes.keys)
element.setAttribute(key, attributes[key]);
document.body.append(element);
debug("<hr>");
debug("Running tests on $tagName with attributes: $attributes");
debug("setRangeText() with only one parameter.");
element.value = '0123456789';
element.setSelectionRange(2, 5);
element.setRangeText('ABC');
shouldBeEqualToString(element.value, "01ABC56789");
shouldBe(element.selectionStart, 2);
shouldBe(element.selectionEnd, 5);
element.setRangeText('ABCD');
shouldBeEqualToString(element.value, "01ABCD56789");
shouldBe(element.selectionStart, 2);
shouldBe(element.selectionEnd, 6);
element.setRangeText('AB');
shouldBeEqualToString(element.value, "01AB56789");
shouldBe(element.selectionStart, 2);
shouldBe(element.selectionEnd, 4);
element.setRangeText('');
shouldBeEqualToString(element.value, "0156789");
shouldBe(element.selectionStart, 2);
shouldBe(element.selectionEnd, 2);
debug("setRangeText() with 'select' as the selectMode.");
element.value = '0123456789';
element.setSelectionRange(0, 0);
element.setRangeText('ABC', start:2, end:5, selectionMode:'select');
shouldBeEqualToString(element.value, "01ABC56789");
shouldBe(element.selectionStart, 2);
shouldBe(element.selectionEnd, 5);
element.value = '0123456789';
element.setSelectionRange(0, 0);
element.setRangeText('ABC', start:5, end:10, selectionMode:'select');
shouldBeEqualToString(element.value, "01234ABC");
shouldBe(element.selectionStart, 5);
shouldBe(element.selectionEnd, 8);
element.value = '0123456789';
element.setSelectionRange(0, 0);
element.setRangeText('ABC', start:1, end:2, selectionMode:'select');
shouldBeEqualToString(element.value, "0ABC23456789");
shouldBe(element.selectionStart, 1);
shouldBe(element.selectionEnd, 4);
element.value = '0123456789';
element.setSelectionRange(0, 0);
element.setRangeText('', start:1, end:9, selectionMode:'select');
shouldBeEqualToString(element.value, "09");
shouldBe(element.selectionStart, 1);
shouldBe(element.selectionEnd, 1);
debug("setRangeText() with 'start' as the selectMode.");
element.value = '0123456789';
element.setSelectionRange(0, 0);
element.setRangeText('ABC', start:2, end:6, selectionMode:'start');
shouldBeEqualToString(element.value, "01ABC6789");
shouldBe(element.selectionStart, 2);
shouldBe(element.selectionEnd, 2);
debug("setRangeText() with 'end' as the selectMode.");
element.value = '0123456789';
element.setSelectionRange(0, 0);
element.setRangeText('ABC', start:10, end:10, selectionMode:'end');
shouldBeEqualToString(element.value, "0123456789ABC");
shouldBe(element.selectionStart, 13);
shouldBe(element.selectionEnd, 13);
debug("setRangeText() with 'preserve' as the selectMode.");
element.value = '0123456789';
element.setSelectionRange(6, 9);
element.setRangeText('A', start:1, end:2); // selectMode is optional and defaults to preserve.
shouldBeEqualToString(element.value, "0A23456789");
shouldBe(element.selectionStart, 6);
shouldBe(element.selectionEnd, 9);
element.value = '0123456789';
element.setSelectionRange(6, 9);
element.setRangeText('A', start:1, end:3, selectionMode:'preserve');
shouldBeEqualToString(element.value, "0A3456789");
shouldBe(element.selectionStart, 5);
shouldBe(element.selectionEnd, 8);
element.value = '0123456789';
element.setSelectionRange(2, 6);
element.setRangeText('A', start:1, end:4, selectionMode:'preserve');
shouldBeEqualToString(element.value, "0A456789");
shouldBe(element.selectionStart, 1);
shouldBe(element.selectionEnd, 4);
element.value = '0123456789';
element.setSelectionRange(2, 6);
element.setRangeText('A', start:4, end:6, selectionMode:'preserve');
shouldBeEqualToString(element.value, "0123A6789");
shouldBe(element.selectionStart, 2);
shouldBe(element.selectionEnd, 5);
element.value = '0123456789';
element.setSelectionRange(2, 6);
element.setRangeText('ABCDEF', start:4, end:7, selectionMode:'preserve');
shouldBeEqualToString(element.value, "0123ABCDEF789");
shouldBe(element.selectionStart, 2);
shouldBe(element.selectionEnd, 10);
debug("setRangeText() with various start/end values.");
element.value = '0123456789';
element.setSelectionRange(0, 0);
element.setRangeText('A', start:100, end:100, selectionMode:'select');
shouldBeEqualToString(element.value, "0123456789A");
shouldBe(element.selectionStart, 10);
shouldBe(element.selectionEnd, 11);
element.value = '0123456789';
element.setSelectionRange(0, 0);
element.setRangeText('A', start:8, end:100, selectionMode:'select');
shouldBeEqualToString(element.value, "01234567A");
shouldBe(element.selectionStart, 8);
shouldBe(element.selectionEnd, 9);
element.value = '0123456789';
shouldThrow(() => element.setRangeText('A', start:7, end:3));
}
runTestsShouldFail(tagName, [attributes=const {}]) {
var element = document.createElement(tagName);
for (var key in attributes.keys)
element.setAttribute(key, attributes[key]);
document.body.append(element);
debug("<hr>");
debug("Running tests on $tagName with attributes: $attributes");
if (element.getAttribute("type") == "file")
shouldThrow(() => element.value = '0123456789XYZ');
else
element.value = '0123456789XYZ';
var initialValue = element.value;
shouldThrow(() => element.setRangeText('ABC', start:0, end:0));
// setRangeText() shouldn't do anything on non-text form controls.
shouldBeEqualToString(element.value, initialValue);
}