This is a test of execCommand("Unlink"). It tests:

Completely unlinking a link.
Unlinking a single word inside of a link.
Unlinking a selection containing linked and unlinked text.
Unlinking a selection that partially selects a linked table.
The editable regions below describe what their content should be after the test.

This paragraph should should end up unlinked.
The second word in this paragraph should end up being unlinked, everything else should be a link.
This paragraph starts with a link in the middle. Only the 'a' in the previous sentence should be linked after the test.
This editable region contains lists, tables, styled text, and images. Everything in this region that is not selected should be a link, nothing that is selected should be a link.

Item 1
Item 2
1	2	3

This line contains  an image.
The innerHTML of editable regions after the test:

This paragraph should should end up unlinked.
<a href="http://www.apple.com/">The </a>second <a href="http://www.apple.com/">word in this paragraph should end up being unlinked, everything else should be a link.</a>
This paragraph starts with <a href="http://www.google.com"><i>a</i></a><span id="test3start"> link</span> in the middle. Only the 'a' in the previous sentence should be linked after the test.
<p>This <i>editable region</i> contains lists, tables, styled text, and images. Everything in this region that is not selected should be a link, nothing that is selected should be a link.</p> <ul> <li>Item 1</li> <li>Item 2</li> </ul> <table border="1"><tbody><tr><td>1</td><td>2</td><td><span id="test4end"><a href="http://www.google.com/">3</a></span></td></tr></tbody></table> <a href="http://www.google.com/"><br> This <b>line</b> contains <img src="../resources/abe.png"> an image. </a>
