import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import java.io.StringWriter;

public class EmojiVariationSelectorBug {
    public static void main(String[] args) throws Exception {
        String input = "<div><![CDATA[🐧]]></div>";
        
        System.out.println("Input XML:");
        System.out.println(input);
        System.out.println();
        
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
        
        Document document = dBuilder.parse(new java.io.ByteArrayInputStream(input.getBytes("UTF-8")));
        
        DOMSource domSource = new DOMSource(document);
        StringWriter writer = new StringWriter();
        StreamResult result = new StreamResult(writer);
        
        TransformerFactory tf = TransformerFactory.newInstance();
        Transformer transformer = tf.newTransformer();
        transformer.transform(domSource, result);
        
        String output = writer.toString();
        
        System.out.println("Output XML:");
        System.out.println(output);
        System.out.println();
        
        String expected = "<div><![CDATA[🐧]]></div>";
        boolean isCorrect = output.contains("<![CDATA[🐧]]>");
        
        if (isCorrect) {
            System.out.println("✓ TEST PASSED");
        } else {
            System.out.println("✗ TEST FAILED: Emoji with variation selector is split across CDATA sections");
            System.out.println();
            System.out.println("The transformer incorrectly splits the emoji from its variation selector,");
            System.out.println("violating Unicode in XML spec (W3C TR #20, Section 4.3).");
            
            System.exit(1);
        }
    }
}