
import org.apache.html.dom.HTMLDocumentImpl;
import org.w3c.dom.html.HTMLDocument;
import org.w3c.dom.html.HTMLSelectElement;
import org.w3c.dom.html.HTMLOptionElement;
import org.w3c.dom.html.HTMLCollection;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;

public class TestingSelectCloneNode {
    public static void main(String[] args) {
        HTMLDocument doc = new HTMLDocumentImpl();

        HTMLSelectElement origSelect = (HTMLSelectElement)doc.createElement("SELECT");

        System.out.println("origSelect created.");

        addSelectOptionWithValue(origSelect, "Item 1", "1");
        addSelectOptionWithValue(origSelect, "Item 2", "2");
        addSelectOptionWithValue(origSelect, "Item 3", "3");
        addSelectOptionWithValue(origSelect, "Item 4", "4");
        addSelectOptionWithValue(origSelect, "Item 5", "5");
        addSelectOptionWithValue(origSelect, "Item 6", "6");

        System.out.println("origSelect -- added six <option> elements.");

        HTMLCollection origOptions = origSelect.getOptions();
        System.out.println("origSelect, number of options: " + origOptions.getLength() + " (should be 6)");

        HTMLSelectElement clonedSelect = (HTMLSelectElement)origSelect.cloneNode(true);
        System.out.println("clonedSelect -- created by calling cloneNode(true) on origSelect.");

        HTMLCollection clonedOptions = origSelect.getOptions();
        System.out.println("clonedSelect, number of options: " + clonedOptions.getLength() + " (should be 6)");

        origSelect.removeChild(origSelect.getLastChild());
        origSelect.removeChild(origSelect.getLastChild());

        System.out.println("origSelect -- removed last two <option> elements.");

        System.out.println("origSelect, number of options: " + origOptions.getLength() + " (should be 4)");

        System.out.println("clonedSelect, number of options: " + clonedOptions.getLength() + " (should be 6)");

        System.out.println("origSelect.getOptions() == clonedSelect.getOptions(): " + (origOptions == clonedOptions) + " (should be false)");
    }

    public static void addSelectOptionWithValue(HTMLSelectElement select, String text, String value) {
        Document doc = select.getOwnerDocument();
        Element op = doc.createElement("option");
        op.setAttribute("value", value);
        op.appendChild(doc.createTextNode(text));
        select.appendChild(op);
    }
}
