blob: 075a5350f3781daac1bbf99028b35d17e750adb9 [file] [log] [blame]
/*
* Copyright 2000-2013 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.jetbrains.python;
import com.intellij.psi.PsiElement;
import com.jetbrains.python.fixtures.LightMarkedTestCase;
import com.jetbrains.python.psi.*;
import junit.framework.Assert;
import java.util.Map;
/**
* Tests statement parts.
* User: dcheryasov
* Date: Mar 15, 2009 3:11:01 AM
*/
public class PyStatementPartsTest extends LightMarkedTestCase {
@Override
protected String getTestDataPath() {
return PythonTestUtil.getTestDataPath() + "/psi/parts/";
}
public void testIf() throws Exception {
Map<String, PsiElement> marks = loadTest();
Assert.assertEquals(2, marks.size());
PsiElement elt = marks.get("<the_if>").getParent().getParent(); // if_keyword -> if_part -> if_stmt
Assert.assertTrue(elt instanceof PyIfStatement);
PyIfStatement if_stmt = (PyIfStatement)elt;
PyIfPart if_part = if_stmt.getIfPart();
Assert.assertFalse(if_part.isElif());
PyExpression if_cond = if_part.getCondition();
Assert.assertEquals(marks.get("<the_cond>").getParent(), if_cond);
}
public void testIfElse() throws Exception {
Map<String, PsiElement> marks = loadTest();
Assert.assertEquals(4, marks.size());
PsiElement elt = marks.get("<the_if>").getParent().getParent(); // if_keyword -> if_part -> if_stmt
Assert.assertTrue(elt instanceof PyIfStatement);
PyIfStatement if_stmt = (PyIfStatement)elt;
PyIfPart if_part = if_stmt.getIfPart();
Assert.assertFalse(if_part.isElif());
PyExpression if_cond = if_part.getCondition();
Assert.assertEquals(marks.get("<the_cond>").getParent(), if_cond);
PyStatementList stmt_list = if_part.getStatementList();
Assert.assertNotNull(stmt_list);
Assert.assertEquals(marks.get("<then_stmt>").getParent().getParent(), stmt_list); // keyword -> stmt -> stmt_list
PyElsePart else_part = if_stmt.getElsePart();
Assert.assertNotNull(else_part);
stmt_list = else_part.getStatementList();
Assert.assertNotNull(stmt_list);
Assert.assertEquals(marks.get("<else_stmt>").getParent().getParent(), stmt_list); // keyword -> stmt -> stmt_list
}
public void testIfElifElse() throws Exception {
Map<String, PsiElement> marks = loadTest();
Assert.assertEquals(6, marks.size());
PsiElement elt = marks.get("<the_if>").getParent().getParent(); // if_keyword -> if_part -> if_stmt
Assert.assertTrue(elt instanceof PyIfStatement);
PyIfStatement if_stmt = (PyIfStatement)elt;
PyIfPart if_part = if_stmt.getIfPart();
Assert.assertFalse(if_part.isElif());
PyExpression if_cond = if_part.getCondition();
Assert.assertEquals(marks.get("<the_cond>").getParent(), if_cond);
PyStatementList stmt_list = if_part.getStatementList();
Assert.assertNotNull(stmt_list);
Assert.assertEquals(marks.get("<then_stmt>").getParent().getParent(), stmt_list); // keyword -> stmt -> stmt_list
PyElsePart else_part = if_stmt.getElsePart();
Assert.assertNotNull(else_part);
stmt_list = else_part.getStatementList();
Assert.assertNotNull(stmt_list);
Assert.assertEquals(marks.get("<else_stmt>").getParent().getParent(), stmt_list); // keyword -> stmt -> stmt_list
PyIfPart elif_part = if_stmt.getElifParts()[0];
Assert.assertTrue(elif_part.isElif());
if_cond = elif_part.getCondition();
Assert.assertEquals(marks.get("<elif_cond>").getParent(), if_cond);
stmt_list = elif_part.getStatementList();
Assert.assertNotNull(stmt_list);
Assert.assertEquals(marks.get("<elif_stmt>").getParent().getParent(), stmt_list); // keyword -> stmt -> stmt_list
}
public void testWhile() throws Exception {
Map<String, PsiElement> marks = loadTest();
Assert.assertEquals(3, marks.size());
PsiElement elt = marks.get("<stmt>").getParent().getParent(); // keyword -> part -> stmt
Assert.assertTrue(elt instanceof PyWhileStatement);
PyWhileStatement while_stmt = (PyWhileStatement)elt;
PyWhilePart while_part = while_stmt.getWhilePart();
PyExpression cond = while_part.getCondition();
Assert.assertEquals(marks.get("<cond>").getParent(), cond);
elt = marks.get("<else>").getParent(); // keyword -> part
Assert.assertTrue(elt instanceof PyElsePart);
Assert.assertEquals(while_stmt.getElsePart(), elt);
}
public void testFor() throws Exception {
Map<String, PsiElement> marks = loadTest();
Assert.assertEquals(4, marks.size());
PsiElement elt = marks.get("<stmt>").getParent().getParent(); // keyword -> part -> stmt
Assert.assertTrue(elt instanceof PyForStatement);
PyForStatement stmt = (PyForStatement)elt;
PyForPart for_part = stmt.getForPart();
PyExpression target = for_part.getTarget();
Assert.assertEquals(marks.get("<target>").getParent(), target); // ident -> expr
PyExpression source = for_part.getSource();
Assert.assertEquals(marks.get("<source>").getParent(), source); // ident -> expr
elt = marks.get("<else>").getParent(); // keyword -> part
Assert.assertTrue(elt instanceof PyElsePart);
Assert.assertEquals(stmt.getElsePart(), elt);
}
public void testTry() throws Exception {
Map<String, PsiElement> marks = loadTest();
Assert.assertEquals(6, marks.size());
PsiElement elt = marks.get("<stmt>").getParent().getParent(); // keyword -> part -> stmt
Assert.assertTrue(elt instanceof PyTryExceptStatement);
PyTryExceptStatement stmt = (PyTryExceptStatement)elt;
PyTryPart try_part = stmt.getTryPart();
PyStatementList stmt_list = try_part.getStatementList();
Assert.assertNotNull(stmt_list);
Assert.assertEquals(marks.get("<body>").getParent().getParent(), stmt_list); // keyword -> stmt -> stmt_list
PyExceptPart exc_part = stmt.getExceptParts()[0];
Assert.assertEquals("ArithmeticError", exc_part.getExceptClass().getText());
Assert.assertEquals(marks.get("<ex1>").getParent(), exc_part);
exc_part = (PyExceptPart)marks.get("<ex2>").getParent(); // keyword -> part
Assert.assertEquals(stmt.getExceptParts()[1], exc_part);
Assert.assertNull(exc_part.getExceptClass());
elt = marks.get("<else>").getParent(); // keyword -> part
Assert.assertTrue(elt instanceof PyElsePart);
Assert.assertEquals(stmt.getElsePart(), elt);
elt = marks.get("<finally>").getParent(); // keyword -> part
Assert.assertTrue(elt instanceof PyFinallyPart);
Assert.assertEquals(stmt.getFinallyPart(), elt);
}
}