// Path: cssdroid/src/main/java/com/manolovn/cssdroid/parser/domain/PropertyNode.java
// public class PropertyNode implements Node {
// 
//     private final String name;
//     private final Node value;
// 
//     public PropertyNode(String name, Node value) {
//         this.name = name;
//         this.value = value;
//     }
// 
//     @Override
//     public String getName() {
//         return name;
//     }
// 
//     @Override
//     public String getValue() {
//         return value.getValue();
//     }
// 
//     @Override
//     public void addChild(Node node) {
// 
//     }
// 
//     @Override
//     public List<Node> children() {
//         return Collections.singletonList(value);
//     }
// 
//     @Override
//     public void accept(NodeVisitor visitor) {
//         value.accept(visitor);
//     }
// 
//     @Override
//     public String toString() {
//         return "{ " + name + " : " + value + " }";
//     }
// }
// 
// Path: cssdroid/src/main/java/com/manolovn/cssdroid/parser/domain/SelectorNode.java
// public class SelectorNode implements Node {
// 
//     private final String name;
//     private final List<Node> properties;
// 
//     public SelectorNode(String name) {
//         this.name = name;
//         this.properties = new ArrayList<>();
//     }
// 
//     @Override
//     public String getName() {
//         return name;
//     }
// 
//     @Override
//     public String getValue() {
//         return properties.toString();
//     }
// 
//     @Override
//     public void addChild(Node node) {
//         if (node == null) {
//             return;
//         }
//         properties.add(node);
//     }
// 
//     @Override
//     public List<Node> children() {
//         return properties;
//     }
// 
//     @Override
//     public void accept(NodeVisitor visitor) {
//         for (Node node : children()) {
//             node.accept(visitor);
//         }
//     }
// 
//     @Override
//     public String toString() {
//         return "name: " + name + " children: " + properties;
//     }
// }
// 
// Path: cssdroid/src/main/java/com/manolovn/cssdroid/parser/domain/StyleSheet.java
// public class StyleSheet {
// 
//     private Set<Node> rules;
//     private Set<VariableNode> variables;
// 
//     public StyleSheet() {
//         rules = new LinkedHashSet<>();
//         variables = new LinkedHashSet<>();
//     }
// 
//     public Set<VariableNode> getVariables() {
//         return variables;
//     }
// 
//     public void addVariable(VariableNode node) {
//         if (node == null) {
//             return;
//         }
//         variables.add(node);
//     }
// 
//     public void addRule(Node rule) {
//         if (rule == null) {
//             return;
//         }
//         rules.add(rule);
//     }
// 
//     public Set<Node> getRules() {
//         return rules;
//     }
// }
// 
// Path: cssdroid/src/main/java/com/manolovn/cssdroid/parser/domain/ValueNode.java
// public class ValueNode implements Node {
// 
//     private String value;
// 
//     public ValueNode(String value) {
//         this.value = value;
//     }
// 
//     @Override
//     public String getName() {
//         return null;
//     }
// 
//     @Override
//     public String getValue() {
//         return value;
//     }
// 
//     @Override
//     public void addChild(Node node) {
// 
//     }
// 
//     @Override
//     public List<Node> children() {
//         return Collections.emptyList();
//     }
// 
//     @Override
//     public void accept(NodeVisitor visitor) {
//         visitor.visit(this);
//     }
// 
//     @Override
//     public String toString() {
//         return "val: " + value;
//     }
// 
//     public void setValue(String value) {
//         this.value = value;
//     }
// }


import com.manolovn.cssdroid.parser.domain.PropertyNode;
import com.manolovn.cssdroid.parser.domain.SelectorNode;
import com.manolovn.cssdroid.parser.domain.StyleSheet;
import com.manolovn.cssdroid.parser.domain.ValueNode;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
package com.manolovn.cssdroid.translator;




/**
 * Test for {@link StylesheetToXMLTranslator}
 */
public class StylesheetToXMLTranslatorTest {

    private StyleSheet styleSheet;
    private String styleGenerated;
    private StylesheetToXMLTranslator translator;

    @Test
    public void shouldGenerateCorrectXmlStyle() {
        givenATranslator();
        givenAnStylesheet();

        whenTranslateStylesheet();

        thenXmlIsGeneratedCorrectly();
    }

    private void givenATranslator() {
        translator = new StylesheetToXMLTranslator();
    }

    private void thenXmlIsGeneratedCorrectly() {
        String expectedStyle = "<resources>\n"
                + "\n"
                + "    <style name=\"Sample\">\n"
                + "        <item name=\"android:textSize\">12sp</item>\n"
                + "    </style>\n"
                + "\n"
                + "</resources>\n";
        assertEquals(expectedStyle.replace(" ", ""), styleGenerated.replace(" ", ""));
    }

    private void whenTranslateStylesheet() {
        styleGenerated = translator.translate(styleSheet);
    }

    private void givenAnStylesheet() {
// Path: cssdroid/src/main/java/com/manolovn/cssdroid/parser/domain/PropertyNode.java
// public class PropertyNode implements Node {
// 
//     private final String name;
//     private final Node value;
// 
//     public PropertyNode(String name, Node value) {
//         this.name = name;
//         this.value = value;
//     }
// 
//     @Override
//     public String getName() {
//         return name;
//     }
// 
//     @Override
//     public String getValue() {
//         return value.getValue();
//     }
// 
//     @Override
//     public void addChild(Node node) {
// 
//     }
// 
//     @Override
//     public List<Node> children() {
//         return Collections.singletonList(value);
//     }
// 
//     @Override
//     public void accept(NodeVisitor visitor) {
//         value.accept(visitor);
//     }
// 
//     @Override
//     public String toString() {
//         return "{ " + name + " : " + value + " }";
//     }
// }
// 
// Path: cssdroid/src/main/java/com/manolovn/cssdroid/parser/domain/SelectorNode.java
// public class SelectorNode implements Node {
// 
//     private final String name;
//     private final List<Node> properties;
// 
//     public SelectorNode(String name) {
//         this.name = name;
//         this.properties = new ArrayList<>();
//     }
// 
//     @Override
//     public String getName() {
//         return name;
//     }
// 
//     @Override
//     public String getValue() {
//         return properties.toString();
//     }
// 
//     @Override
//     public void addChild(Node node) {
//         if (node == null) {
//             return;
//         }
//         properties.add(node);
//     }
// 
//     @Override
//     public List<Node> children() {
//         return properties;
//     }
// 
//     @Override
//     public void accept(NodeVisitor visitor) {
//         for (Node node : children()) {
//             node.accept(visitor);
//         }
//     }
// 
//     @Override
//     public String toString() {
//         return "name: " + name + " children: " + properties;
//     }
// }
// 
// Path: cssdroid/src/main/java/com/manolovn/cssdroid/parser/domain/StyleSheet.java
// public class StyleSheet {
// 
//     private Set<Node> rules;
//     private Set<VariableNode> variables;
// 
//     public StyleSheet() {
//         rules = new LinkedHashSet<>();
//         variables = new LinkedHashSet<>();
//     }
// 
//     public Set<VariableNode> getVariables() {
//         return variables;
//     }
// 
//     public void addVariable(VariableNode node) {
//         if (node == null) {
//             return;
//         }
//         variables.add(node);
//     }
// 
//     public void addRule(Node rule) {
//         if (rule == null) {
//             return;
//         }
//         rules.add(rule);
//     }
// 
//     public Set<Node> getRules() {
//         return rules;
//     }
// }
// 
// Path: cssdroid/src/main/java/com/manolovn/cssdroid/parser/domain/ValueNode.java
// public class ValueNode implements Node {
// 
//     private String value;
// 
//     public ValueNode(String value) {
//         this.value = value;
//     }
// 
//     @Override
//     public String getName() {
//         return null;
//     }
// 
//     @Override
//     public String getValue() {
//         return value;
//     }
// 
//     @Override
//     public void addChild(Node node) {
// 
//     }
// 
//     @Override
//     public List<Node> children() {
//         return Collections.emptyList();
//     }
// 
//     @Override
//     public void accept(NodeVisitor visitor) {
//         visitor.visit(this);
//     }
// 
//     @Override
//     public String toString() {
//         return "val: " + value;
//     }
// 
//     public void setValue(String value) {
//         this.value = value;
//     }
// }


// Path: cssdroid/src/test/java/com/manolovn/cssdroid/translator/StylesheetToXMLTranslatorTest.java
import com.manolovn.cssdroid.parser.domain.PropertyNode;
import com.manolovn.cssdroid.parser.domain.SelectorNode;
import com.manolovn.cssdroid.parser.domain.StyleSheet;
import com.manolovn.cssdroid.parser.domain.ValueNode;
import org.junit.Test;
import static org.junit.Assert.assertEquals;

package com.manolovn.cssdroid.translator;




/**
 * Test for {@link StylesheetToXMLTranslator}
 */
public class StylesheetToXMLTranslatorTest {

    private StyleSheet styleSheet;
    private String styleGenerated;
    private StylesheetToXMLTranslator translator;

    @Test
    public void shouldGenerateCorrectXmlStyle() {
        givenATranslator();
        givenAnStylesheet();

        whenTranslateStylesheet();

        thenXmlIsGeneratedCorrectly();
    }

    private void givenATranslator() {
        translator = new StylesheetToXMLTranslator();
    }

    private void thenXmlIsGeneratedCorrectly() {
        String expectedStyle = "<resources>\n"
                + "\n"
                + "    <style name=\"Sample\">\n"
                + "        <item name=\"android:textSize\">12sp</item>\n"
                + "    </style>\n"
                + "\n"
                + "</resources>\n";
        assertEquals(expectedStyle.replace(" ", ""), styleGenerated.replace(" ", ""));
    }

    private void whenTranslateStylesheet() {
        styleGenerated = translator.translate(styleSheet);
    }

    private void givenAnStylesheet() {
        SelectorNode selectorNode = new SelectorNode(".sample");