package com.google.jstestdriver.idea.assertFramework.qunit; import com.google.jstestdriver.idea.AbstractJsPsiTestCase; import com.google.jstestdriver.idea.JsTestDriverTestUtils; import com.intellij.lang.javascript.psi.JSCallExpression; import com.intellij.lang.javascript.psi.JSFile; import junit.framework.Assert; import org.junit.Test; public class QUnitStructureTest extends AbstractJsPsiTestCase { @Test public void testBasicUsage() throws Exception { validateJsFile(); } @Test public void testEmptyModule() throws Exception { validateJsFile(); } @Test public void testMiscModules() throws Exception { validateJsFile(); } @Test public void testModuleWithLifecycle() throws Exception { validateJsFile(); } @Test public void testSingleTestOnDefaultModule() throws Exception { validateJsFile(); } @Override protected String getTestDataPath() { return JsTestDriverTestUtils.getTestDataDir().getAbsolutePath() + "/assertFramework/qunit/structure/"; } @Override protected void validateJsFile(JSFile jsFile, String fileText) throws Exception { QUnitFileStructure qUnitFileStructure = buildQUnitFileStructureByJsFile(jsFile); MarkedQUnitFileStructure markedQUnitFileStructure = MarkedQUnitStructureBuilder.buildMarkedQUnitFileStructureByFileText( fileText, jsFile ); validateQUnitFileStructure(markedQUnitFileStructure, qUnitFileStructure); } private static QUnitFileStructure buildQUnitFileStructureByJsFile(JSFile jsFile) { QUnitFileStructureBuilder builder = QUnitFileStructureBuilder.getInstance(); return builder.buildTestFileStructure(jsFile); } private static void validateQUnitFileStructure(MarkedQUnitFileStructure markedFileStructure, QUnitFileStructure fileStructure) { for (MarkedQUnitModuleStructure markedModuleStructure : markedFileStructure.getModules()) { AbstractQUnitModuleStructure moduleStructure = fileStructure.getQUnitModuleByName(markedModuleStructure.getName()); if (moduleStructure != null) { validateQUnitModule(markedModuleStructure, moduleStructure); } else { Assert.fail("Can't find automatically collected module with name '" + markedModuleStructure.getName() + "'"); } } if (fileStructure.getAllModuleCount() != markedFileStructure.getModules().size()) { Assert.fail("Found marked " + markedFileStructure.getModules().size() + " modules, but automatically found " + fileStructure.getNonDefaultModuleCount() + " modules"); } } private static void validateQUnitModule(MarkedQUnitModuleStructure markedQUnitModuleStructure, AbstractQUnitModuleStructure moduleStructure) { Assert.assertEquals(markedQUnitModuleStructure.getName(), moduleStructure.getName()); JSCallExpression autoCallExpr = moduleStructure.isDefault() ? null : ((QUnitModuleStructure) moduleStructure).getEnclosingCallExpression(); Assert.assertEquals(markedQUnitModuleStructure.getPsiElement(), autoCallExpr); for (MarkedQUnitTestMethodStructure markedQUnitTestStructure : markedQUnitModuleStructure.getTestStructures()) { QUnitTestMethodStructure qUnitTestMethodStructure = moduleStructure.getTestMethodStructureByName(markedQUnitTestStructure.getName()); if (qUnitTestMethodStructure == null) { Assert.fail("Can't find automatically collected test with name '" + markedQUnitTestStructure.getName() + "' inside module '" + moduleStructure.getName() + "'"); } validateQUnitTestStructure(markedQUnitTestStructure, qUnitTestMethodStructure); } } private static void validateQUnitTestStructure(MarkedQUnitTestMethodStructure markedQUnitTestStructure, QUnitTestMethodStructure qUnitTestMethodStructure) { Assert.assertEquals(markedQUnitTestStructure.getName(), qUnitTestMethodStructure.getName()); Assert.assertEquals(markedQUnitTestStructure.getCallExpression(), qUnitTestMethodStructure.getCallExpression()); } }