// Path: src/main/java/moulder/Moulder.java
// public interface Moulder {
//     /**
//      * This is where a moulder can process the input element to generate its
//      * result.
//      *
//      * @param element the element and its associated data to process
//      * @return the list of nodes and their associated data that were generated
//      *         after processing the input element.
//      */
//     List<Node> process(Element element);
// }
// 
// Path: src/main/java/moulder/values/SeqValue.java
// public class SeqValue<T> implements Value<T> {
//     private Iterator<T> values;
// 
//     public SeqValue(Iterator<T> values) {
//         super();
//         this.values = values;
//     }
// 
//     public SeqValue(Iterable<T> values) {
//         this.values = values.iterator();
//     }
// 
//     public SeqValue(T... values) {
//         this.values = Arrays.asList(values).iterator();
//     }
// 
//     public T get() {
//         return values.hasNext() ? values.next() : null;
//     }
// 
//     public SeqValue<T> cycle() {
//         return new SeqValue<T>(new CyclingIterator<T>(values));
//     }
// 
//     private static final class CyclingIterator<S> implements Iterator<S> {
//         private Iterator<S> it;
//         private final boolean itHasValues;
//         private final List<S> values = new ArrayList<S>();
//         private boolean cycled = false;
// 
//         public CyclingIterator(Iterator<S> it) {
//             this.it = it;
//             itHasValues = it.hasNext();
//         }
// 
//         public boolean hasNext() {
//             return itHasValues;
//         }
// 
//         public S next() {
//             if (!itHasValues) {
//                 throw new NoSuchElementException();
//             }
//             if (it.hasNext()) {
//                 S res = it.next();
//                 if (!cycled) {
//                     values.add(res);
//                 }
//                 return res;
//             } else {
//                 cycled = true;
//                 it = values.iterator();
//                 return next();
//             }
//         }
// 
//         public void remove() {
// 
//         }
// 
//     }
// 
//     public SeqValue<T> repeatLast() {
//         return new SeqValue<T>(new RepeatLastIterator<T>(values));
//     }
// 
//     private static final class RepeatLastIterator<S> implements Iterator<S> {
//         private Iterator<S> it;
//         private final boolean itHasValues;
//         private S last;
// 
//         public RepeatLastIterator(Iterator<S> it) {
//             this.it = it;
//             itHasValues = it.hasNext();
//         }
// 
//         public boolean hasNext() {
//             return itHasValues;
//         }
// 
//         public S next() {
//             if (!itHasValues) {
//                 throw new NoSuchElementException();
//             }
//             if (it.hasNext()) {
//                 last = it.next();
//             }
//             return last;
//         }
// 
//         public void remove() {
// 
//         }
// 
//     }
// }
// 
// Path: src/main/java/moulder/values/SimpleBox.java
// public class SimpleBox<T> implements Value<T> {
// 
//     private T value;
// 
//     public SimpleBox() {
//         this.value = null;
//     }
// 
//     public SimpleBox(T value) {
//         this.value = value;
//     }
// 
//     public void set(T value) {
//         this.value = value;
//     }
// 
//     public T get() {
//         return value;
//     }
// }


import moulder.Moulder;
import moulder.values.SeqValue;
import moulder.values.SimpleBox;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.nodes.Node;
import org.junit.Test;
import java.io.StringReader;
import java.util.Arrays;
import java.util.List;
import static org.custommonkey.xmlunit.XMLAssert.assertXMLEqual;
package moulder.moulds;




public class ForEachTest extends BaseMoulderTest {

    @Test
    public void test() throws Exception {
        List<Integer> list = Arrays.asList(4, 2);
        final SimpleBox<Integer> sb = new SimpleBox<Integer>();
        ForEach<Integer> f = new ForEach<Integer>(sb, new SeqValue<Integer>(list), new Moulder() {
            public List<Node> process(Element element) {
                return Arrays.asList(parseNode("<a>ohai n" + sb.get() + "</a>"));
            }
        });
// Path: src/main/java/moulder/Moulder.java
// public interface Moulder {
//     /**
//      * This is where a moulder can process the input element to generate its
//      * result.
//      *
//      * @param element the element and its associated data to process
//      * @return the list of nodes and their associated data that were generated
//      *         after processing the input element.
//      */
//     List<Node> process(Element element);
// }
// 
// Path: src/main/java/moulder/values/SeqValue.java
// public class SeqValue<T> implements Value<T> {
//     private Iterator<T> values;
// 
//     public SeqValue(Iterator<T> values) {
//         super();
//         this.values = values;
//     }
// 
//     public SeqValue(Iterable<T> values) {
//         this.values = values.iterator();
//     }
// 
//     public SeqValue(T... values) {
//         this.values = Arrays.asList(values).iterator();
//     }
// 
//     public T get() {
//         return values.hasNext() ? values.next() : null;
//     }
// 
//     public SeqValue<T> cycle() {
//         return new SeqValue<T>(new CyclingIterator<T>(values));
//     }
// 
//     private static final class CyclingIterator<S> implements Iterator<S> {
//         private Iterator<S> it;
//         private final boolean itHasValues;
//         private final List<S> values = new ArrayList<S>();
//         private boolean cycled = false;
// 
//         public CyclingIterator(Iterator<S> it) {
//             this.it = it;
//             itHasValues = it.hasNext();
//         }
// 
//         public boolean hasNext() {
//             return itHasValues;
//         }
// 
//         public S next() {
//             if (!itHasValues) {
//                 throw new NoSuchElementException();
//             }
//             if (it.hasNext()) {
//                 S res = it.next();
//                 if (!cycled) {
//                     values.add(res);
//                 }
//                 return res;
//             } else {
//                 cycled = true;
//                 it = values.iterator();
//                 return next();
//             }
//         }
// 
//         public void remove() {
// 
//         }
// 
//     }
// 
//     public SeqValue<T> repeatLast() {
//         return new SeqValue<T>(new RepeatLastIterator<T>(values));
//     }
// 
//     private static final class RepeatLastIterator<S> implements Iterator<S> {
//         private Iterator<S> it;
//         private final boolean itHasValues;
//         private S last;
// 
//         public RepeatLastIterator(Iterator<S> it) {
//             this.it = it;
//             itHasValues = it.hasNext();
//         }
// 
//         public boolean hasNext() {
//             return itHasValues;
//         }
// 
//         public S next() {
//             if (!itHasValues) {
//                 throw new NoSuchElementException();
//             }
//             if (it.hasNext()) {
//                 last = it.next();
//             }
//             return last;
//         }
// 
//         public void remove() {
// 
//         }
// 
//     }
// }
// 
// Path: src/main/java/moulder/values/SimpleBox.java
// public class SimpleBox<T> implements Value<T> {
// 
//     private T value;
// 
//     public SimpleBox() {
//         this.value = null;
//     }
// 
//     public SimpleBox(T value) {
//         this.value = value;
//     }
// 
//     public void set(T value) {
//         this.value = value;
//     }
// 
//     public T get() {
//         return value;
//     }
// }


// Path: src/test/java/moulder/moulds/ForEachTest.java
import moulder.Moulder;
import moulder.values.SeqValue;
import moulder.values.SimpleBox;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.nodes.Node;
import org.junit.Test;
import java.io.StringReader;
import java.util.Arrays;
import java.util.List;
import static org.custommonkey.xmlunit.XMLAssert.assertXMLEqual;

package moulder.moulds;




public class ForEachTest extends BaseMoulderTest {

    @Test
    public void test() throws Exception {
        List<Integer> list = Arrays.asList(4, 2);
        final SimpleBox<Integer> sb = new SimpleBox<Integer>();
        ForEach<Integer> f = new ForEach<Integer>(sb, new SeqValue<Integer>(list), new Moulder() {
            public List<Node> process(Element element) {
                return Arrays.asList(parseNode("<a>ohai n" + sb.get() + "</a>"));
            }
        });
        Document document = Jsoup