package com.chrisfolger.needsmoredojo.testutil;
import com.intellij.lang.ASTNode;
import com.intellij.lang.javascript.psi.JSElement;
import com.intellij.lang.javascript.psi.impl.JSElementImpl;
import com.intellij.psi.PsiElement;
import static org.mockito.Mockito.mock;
public class MockJSElement extends JSElementImpl implements MockJSElementInterface
{
private String text;
private MockJSElementInterface nextSibling;
private MockJSElementInterface prevSibling;
private MockJSElementInterface parent;
private MockJSElementInterface lastChild;
public MockJSElement(String text) {
super(mock(ASTNode.class));
this.text = text;
}
@Override
public String getText()
{
return text;
}
@Override
public PsiElement getNextSibling()
{
return (PsiElement) nextSibling;
}
@Override
public void delete()
{
if(prevSibling != null && prevSibling instanceof MockJSElementInterface)
{
MockJSElementInterface sibling = (MockJSElementInterface) prevSibling;
sibling.setNextSibling(this.nextSibling);
}
if(nextSibling != null && nextSibling instanceof MockJSElementInterface)
{
MockJSElementInterface sibling = nextSibling;
sibling.setPrevSibling(this.prevSibling);
}
}
@Override
public PsiElement getPrevSibling()
{
return (PsiElement) prevSibling;
}
public JSElement isLastChildOf(MockJSElement element)
{
element.lastChild = this;
this.parent = element;
return this;
}
public MockJSElement isParentOf(MockJSElement element)
{
element.parent = this;
return this;
}
@Override
public JSElement getLastChild()
{
return (JSElement) this.lastChild;
}
@Override
public void setParent(MockJSElementInterface element) {
this.parent = element;
}
@Override
public JSElement getParent()
{
return (JSElement) this.parent;
}
public MockJSElementInterface comesBefore(MockJSElementInterface element)
{
element.setPrevSibling(this);
this.nextSibling = element;
return this;
}
@Override
public void setPrevSibling(MockJSElementInterface element) {
this.prevSibling = element;
}
@Override
public void setNextSibling(MockJSElementInterface element) {
this.nextSibling = element;
}
public MockJSElement comesAfter(MockJSElement element)
{
element.nextSibling = this;
this.prevSibling = element;
return this;
}
@Override
public String printTree() {
return MockJSElementInterfaceUtil.printTree(this);
}
}