package org.jboss.windup.rules.apps.xml.condition;

import org.junit.Assert;
import org.junit.Test;

public class XmlFileXPathTransformerTest {

    @Test
    public void testXPathConversionSimple() {
        String result = XmlFileXPathTransformer.transformXPath("/foo[windup:matches(el, '{foo}')]");
        Assert.assertEquals("/foo[windup:startFrame(0) and windup:evaluate(0, windup:matches(0, el, '{foo}'))]/self::node()[windup:persist(0, .)]",
                result);
    }

    @Test
    public void testXPathConversionComplexMultipleConditions() {
        String result = XmlFileXPathTransformer.transformXPath("/foo[el1 = 1234 and windup:matches(el, '{foo}')]/baz/tomato[1 = 1]");
        Assert.assertEquals(
                "/foo[windup:startFrame(0) and windup:evaluate(0, el1 = 1234 and windup:matches(0, el, '{foo}'))]/baz/tomato[windup:startFrame(1) and windup:evaluate(1, 1 = 1)]/self::node()[windup:persist(1, .)]",
                result);
    }

    @Test
    public void testXPathWithOr() {
        String result = XmlFileXPathTransformer.transformXPath("/foo | /boo | /bar | /baz");
        Assert.assertEquals(
                "/foo/self::node()[windup:persist(-1, .)] | /boo/self::node()[windup:persist(-1, .)] | /bar/self::node()[windup:persist(-1, .)] | /baz/self::node()[windup:persist(-1, .)]",
                result);
    }

    @Test
    public void testXPathWithOrNoSpaces() {
        String result = XmlFileXPathTransformer.transformXPath("/foo|/boo|/bar|/baz");
        Assert.assertEquals(
                "/foo/self::node()[windup:persist(-1, .)]|/boo/self::node()[windup:persist(-1, .)]|/bar/self::node()[windup:persist(-1, .)]|/baz/self::node()[windup:persist(-1, .)]",
                result);
    }
}
