blob: fe2fd63e435877335edba79fba65048e9b08ed90 [file] [log] [blame]
<!DOCTYPE html> <!-- webkit-test-runner [ useFlexibleViewport=true ] -->
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
<script src="/js-test-resources/js-test.js"></script>
<script src="/js-test-resources/ui-helper.js"></script>
<style>
.wide-link {
width: 150px;
display: inline-block;
}
</style>
</head>
<body onload="runAllTests()">
<div id="description"></div>
<div id="output"></div><br>
<div id="console"></div>
<script>
description("Test for validity of ad click attribution attributes on anchor tags.");
jsTestIsAsync = true;
function createAdClickAttributionAnchorElement(elementID, adCampaignID, adDestination) {
let anchorElement = document.createElement("a");
anchorElement.id = elementID;
anchorElement.classList.add("wide-link");
anchorElement.adcampaignid = adCampaignID;
anchorElement.addestination = adDestination;
anchorElement.href = "#";
anchorElement.innerText = "Link" + currentTest;
return anchorElement;
}
function activateElement(elementID, callback) {
UIHelper.activateElement(document.getElementById(elementID)).then(
function () {
callback();
},
function () {
testFailed("Promise rejected.");
finishJSTest();
}
);
}
let currentTest = 0;
function runOneTest(adCampaignID, adDestination, callback) {
const currentElementID = "test" + currentTest++;
const anchorElement = createAdClickAttributionAnchorElement(currentElementID, adCampaignID, adDestination);
output.appendChild(anchorElement);
activateElement(currentElementID, callback);
}
const validAdCampaignID = "03";
const validAdDestination = "http://webkit.org";
const sameSite = document.location.origin;
const testCases = [
[ validAdCampaignID, validAdDestination ],
[ "100", validAdDestination ], // Too many characters.
[ "1", validAdDestination ], // Too few characters.
[ "98", validAdDestination ], // Too high value.
[ "-1", validAdDestination ], // Negative value.
[ "ab", validAdDestination ], // Non-digits.
[ "1", validAdDestination ], // Non-ASCII.
[ " 1", validAdDestination ], // Leading space.
[ "1 ", validAdDestination ], // Trailing space.
[ validAdCampaignID, "webkit.org" ], // Missing protocol.
[ validAdCampaignID, "://webkit.org" ], // Partially missing protocol.
[ validAdCampaignID, "" ], // Non-ASCII characters as destination.
[ "", validAdDestination ], // Empty campaign ID.
[ validAdCampaignID, "" ], // Empty destination.
[ validAdCampaignID, sameSite ] // Same-site destination.
];
function runAllTests() {
if (currentTest < testCases.length)
runOneTest(testCases[currentTest][0], testCases[currentTest][1], runAllTests);
else {
document.body.removeChild(output);
finishJSTest();
}
}
</script>
</body>
</html>