package com.google.jstestdriver.idea.assertFramework.jasmine;
import com.google.jstestdriver.idea.AbstractJsPsiTestCase;
import com.google.jstestdriver.idea.JsTestDriverTestUtils;
import com.intellij.lang.javascript.psi.JSFile;
import junit.framework.Assert;
import org.jetbrains.annotations.NotNull;
import org.junit.Test;
import java.util.Collection;
public class JasmineStructureTest extends AbstractJsPsiTestCase {
@Test
public void testEmailValidator() throws Exception {
validateJsFile();
}
@Test
public void testEmptySuite() throws Exception {
validateJsFile();
}
@Test
public void testNestedDescribers() throws Exception {
validateJsFile();
}
@Test
public void testPlayerSpec() throws Exception {
validateJsFile();
}
@Test
public void testSuiteSpec() throws Exception {
validateJsFile();
}
@Test
public void testSuiteSuiteSpec() throws Exception {
validateJsFile();
}
@Override
protected String getTestDataPath() {
return JsTestDriverTestUtils.getTestDataDir().getAbsolutePath() + "/assertFramework/jasmine/structure/";
}
protected void validateJsFile(JSFile jsFile, String fileText) throws Exception {
JasmineFileStructure jasmineFileStructure = buildJasmineFileStructureByJsFile(jsFile);
MarkedJasmineFileStructure markedJasmineFileStructure = MarkedJasmineFileStructureBuilder.buildMarkedJasmineFileStructure(
fileText, jsFile
);
matchJasmineFileStructures(jasmineFileStructure, markedJasmineFileStructure);
}
private static JasmineFileStructure buildJasmineFileStructureByJsFile(JSFile jsFile) {
JasmineFileStructureBuilder builder = JasmineFileStructureBuilder.getInstance();
return builder.buildTestFileStructure(jsFile);
}
private static void matchJasmineFileStructures(@NotNull JasmineFileStructure jasmineFileStructure,
@NotNull MarkedJasmineFileStructure markedJasmineFileStructure) {
Collection<MarkedJasmineSuiteStructure> markedJasmineSuiteStructures = markedJasmineFileStructure.getInnerSuiteStructures();
for (MarkedJasmineSuiteStructure markedJasmineSuiteStructure : markedJasmineSuiteStructures) {
JasmineSuiteStructure jasmineSuiteStructure = jasmineFileStructure.findTopLevelSuiteByName(markedJasmineSuiteStructure.getName());
if (jasmineSuiteStructure == null) {
Assert.fail("Can't find automatically collected Jasmine suite with name '" + markedJasmineSuiteStructure.getName() + "'!");
}
matchJasmineSuites(jasmineSuiteStructure, markedJasmineSuiteStructure);
}
if (jasmineFileStructure.getTopLevelSuiteCount() != markedJasmineSuiteStructures.size()) {
Assert.fail("Marked Jasmine suite count is " + markedJasmineSuiteStructures.size()
+ ", but automatically collected Jasmine suite count is " + jasmineFileStructure.getTopLevelSuiteCount());
}
}
private static void matchJasmineSuites(@NotNull JasmineSuiteStructure jasmineSuiteStructure,
@NotNull MarkedJasmineSuiteStructure markedJasmineSuiteStructure) {
Assert.assertEquals(jasmineSuiteStructure.getName(), markedJasmineSuiteStructure.getName());
Assert.assertEquals(jasmineSuiteStructure.getEnclosingCallExpression(), markedJasmineSuiteStructure.getPsiElement());
Collection<MarkedJasmineSuiteStructure> innerMarkedSuiteStructures = markedJasmineSuiteStructure.getInnerSuiteStructures();
for (MarkedJasmineSuiteStructure innerMarkedSuiteStructure : innerMarkedSuiteStructures) {
JasmineSuiteStructure innerSuiteStructure = jasmineSuiteStructure.getInnerSuiteByName(innerMarkedSuiteStructure.getName());
if (innerSuiteStructure == null) {
Assert.fail("Can't find automatically collected Jasmine suite with name '" + innerMarkedSuiteStructure.getName() + "'!");
}
matchJasmineSuites(innerSuiteStructure, innerMarkedSuiteStructure);
}
Assert.assertEquals(
"Checking inner suite count of '" + jasmineSuiteStructure.getName() + "' suite",
innerMarkedSuiteStructures.size(),
jasmineSuiteStructure.getSuiteChildrenCount()
);
Collection<MarkedJasmineSpecStructure> innerMarkedSpecStructures = markedJasmineSuiteStructure.getInnerSpecStructures();
for (MarkedJasmineSpecStructure innerMarkedSpecStructure : innerMarkedSpecStructures) {
JasmineSpecStructure innerSpecStructure = jasmineSuiteStructure.getInnerSpecByName(innerMarkedSpecStructure.getName());
if (innerSpecStructure == null) {
Assert.fail("Can't find automatically collected Jasmine spec with name '" + innerMarkedSpecStructure.getName() + "'!");
}
matchJasmineSpecs(innerSpecStructure, innerMarkedSpecStructure);
}
Assert.assertEquals(
"Checking inner spec count of '" + jasmineSuiteStructure.getName() + "' suite",
innerMarkedSpecStructures.size(),
jasmineSuiteStructure.getSpecChildrenCount()
);
}
private static void matchJasmineSpecs(@NotNull JasmineSpecStructure specStructure,
@NotNull MarkedJasmineSpecStructure markedSpecStructure) {
Assert.assertEquals(markedSpecStructure.getName(), specStructure.getName());
Assert.assertEquals(markedSpecStructure.getPsiElement(), specStructure.getEnclosingCallExpression());
}
}