001package com.ganteater.ae.processor;
002
003import static org.junit.Assert.*;
004
005import java.io.File;
006
007import org.junit.Test;
008
009public class TestIteratorTest {
010
011        private static class StubProcessor extends Processor {
012                private final java.util.Map<String, Object> vars = new java.util.HashMap<String, Object>();
013
014                @Override
015                public void setVariableValue(String name, Object value) {
016                        vars.put(name, value);
017                }
018
019                @Override
020                public Object getVariableValue(String name) {
021                        return vars.get(name);
022                }
023
024                @Override
025                public String replaceProperties(String value) {
026                        return value;
027                }
028
029                @Override
030                public File getBaseDir() {
031                        return new File(".");
032                }
033        }
034
035        @Test
036        public void count_shouldReturnCalculatedIterationCount_forSingleSection() throws Exception {
037                // Arrange
038                String rules = "#\n" + ParameterIterator.SINGLE + "\n" + "a $enum=1;2;3\n";
039                StubProcessor processor = new StubProcessor();
040
041                // Act
042                TestIterator iterator = new TestIterator(processor, rules);
043
044                // Assert
045                assertEquals(3, iterator.count());
046                assertArrayEquals(new String[] { "a" }, iterator.getPropertiesList());
047        }
048
049        @Test
050        public void nextIteration_shouldApplyValuesAcrossIterations() throws Exception {
051                // Arrange
052                String rules = "#\n" + ParameterIterator.SINGLE + "\n" + "a $enum=1;2\n";
053                StubProcessor processor = new StubProcessor();
054                TestIterator iterator = new TestIterator(processor, rules);
055
056                // Act
057                iterator.nextIteration(processor);
058                Object v1 = processor.getVariableValue("a");
059                iterator.nextIteration(processor);
060                Object v2 = processor.getVariableValue("a");
061
062                // Assert
063                assertEquals("1", v1);
064                assertEquals("2", v2);
065        }
066
067        @Test(expected = IllegalArgumentException.class)
068        public void constructor_shouldThrowForIncorrectLineWithoutRuleDelimiter() throws Exception {
069                // Arrange
070                String rules = "[single]\nthis line has no delimiter\n";
071                StubProcessor processor = new StubProcessor();
072
073                // Act
074                new TestIterator(processor, rules);
075        }
076}