<!DOCTYPE html>
<html>
<head>
<script src="../../../../resources/js-test.js"></script>
<script src="../../../../resources/ui-helper.js"></script>
</head>
<body>
<input type="file" onchange="changed(event)" webkitdirectory></input>
<script>
description("Tests choosing a folder via the file picker when using webkitdirectory.");
jsTestIsAsync = true;

function runTest()
{
    testRunner.setOpenPanelFiles(['resources/testFiles']);

    inputElement = document.getElementsByTagName('input')[0];
    shouldBeTrue("inputElement.webkitdirectory");
    UIHelper.activateAt(inputElement.offsetLeft + inputElement.offsetWidth / 2,
        inputElement.offsetTop + inputElement.offsetHeight / 2);
}

function checkFileListIncludes(files, name, relativePath)
{
    for (let _file of files) {
        file = _file;
        if (file.name === name) {
            testPassed("fileList contains file " + name);
            shouldBeEqualToString("file.webkitRelativePath", "" + relativePath);
            return;
        }
    }
    testFailed("fileList does not contain file " + name);
}

function changed(event)
{
    fileList = event.target.files;
    shouldBe("fileList.length", "5");
    checkFileListIncludes(fileList, "file1.txt", "testFiles/file1.txt");
    checkFileListIncludes(fileList, "file2.txt", "testFiles/file2.txt");
    checkFileListIncludes(fileList, "file3.txt", "testFiles/subfolder1/file3.txt");
    checkFileListIncludes(fileList, "file4.txt", "testFiles/subfolder2/file4.txt");
    checkFileListIncludes(fileList, "file5.txt", "testFiles/subfolder2/subfolder2a/file5.txt");

    finishJSTest();
}

runTest();

</script>
</body>
</html>
