<!DOCTYPE html>
<html>
<head>
<style>
.editing {
    border: 2px solid red;
    padding: 12px;
}
blockquote {
    border-left: 2px solid blue;
    padding: 1em;
    margin: 0;
}
</style>

</head>
<body>
<div contenteditable id="topDiv" class="editing">
<blockquote id="testBQ" style="color:blue;"><div id="testDiv">First Line</div><div>Second Line</div></blockquote>
</div>
<script src="../../resources/dump-as-markup.js"></script>
<script>
function pressKey(key)
{
    if (window.KeyEvent) {
        var kbEvent = document.createEvent("KeyboardEvent");
        kbEvent.initKeyEvent("keypress", true, true, window,  0,0,0,0, 0, key.charCodeAt(0));
        document.body.dispatchEvent(kbEvent);
    } else {
        var kbEvent = document.createEvent("TextEvent");
        kbEvent.initTextEvent('textInput', true, true, null, key.charAt(0));
        document.body.dispatchEvent(kbEvent);
    }
}

if (window.testRunner)
    testRunner.dumpAsText();

var topDiv = document.getElementById("topDiv");
var nodesOfTopDiv = topDiv.childNodes.length;
var blockquoteElement = document.getElementById("testBQ");
var nodesOfBlockquote = blockquoteElement.childNodes.length;
var insertionDiv = document.getElementById("testDiv").firstChild;
var selection = window.getSelection();
selection.collapse(insertionDiv, insertionDiv.textContent.length);

document.execCommand('InsertParagraph', false, null);

Markup.description('This test ensures the paragraph separator inserted between quoted lines inside the blockquote.\n'
+ 'You should see a <br> tag between \'First Line\' and \'Second Line\'.\n');
Markup.dump('testBQ');
</script>
</body>
</html>
