/**
* Copyright (c) 2009-2015, Christer Sandberg
*/
package se.fishtank.css.selectors.parser;
import java.util.List;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.Test;
import se.fishtank.css.selectors.tokenizer.Tokenizer;
import se.fishtank.css.selectors.util.Pair;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
/**
* Tests the {@linkplain se.fishtank.css.selectors.parser.NthParser}
*
* @author Christer Sandberg
*/
public class NthParserTest {
@SuppressWarnings("unchecked")
@Test
public void testNthParserSpecCompliance() throws Exception {
ObjectMapper objectMapper = new ObjectMapper();
TypeReference<List<Object>> typeRef = new TypeReference<List<Object>>() {};
List<Object> list = objectMapper.readValue(getClass().getResource("/An+B.json"), typeRef);
String args = null;
Tokenizer tokenizer = null;
int n = 0;
for (Object obj : list) {
if (n % 2 == 0) {
args = (String) obj;
tokenizer = new Tokenizer(args + ")");
} else {
if (obj == null) {
try {
NthParser.parse(tokenizer);
fail("Expected error for nth argument " + args + " at index " + n);
} catch (ParserException e) {
// Expected
}
} else {
List<Integer> expected = (List<Integer>) obj;
Pair<Integer, Integer> nth = NthParser.parse(tokenizer);
assertEquals("Value mismatch for A: " + args, expected.get(0), nth.first);
assertEquals("Value mismatch for B: " + args, expected.get(1), nth.second);
}
}
++n;
}
}
}