TernaryExpr extends Expr { @Override public TernaryExpr clone() { return new TernaryExpr(test.clone(), thenExpr.clone(), elseExpr.clone()); } TernaryExpr(Expr test, Expr thenExpr, Expr elseExpr); Expr getTest(); Expr getThenExpr(); Expr getElseExpr(); @Override void accept(IAstVisitor visitor); @Override TernaryExpr clone(); @Override boolean hasChild(IAstNode candidateChild); @Override Expr getChild(int index); @Override void setChild(int index, Expr expr); @Override int getNumChildren();  }
@Test public void testClone() throws Exception { TernaryExpr te = makeTernary(); TernaryExpr te2 = te.clone(); assertNotSame(te, te2); assertNotSame(te.getTest(), te2.getTest()); assertNotSame(te.getThenExpr(), te2.getThenExpr()); assertNotSame(te.getElseExpr(), te2.getElseExpr()); assertEquals(((VariableIdentifierExpr) te.getTest()).getName(), ((VariableIdentifierExpr) te2.getTest()).getName()); assertEquals(((VariableIdentifierExpr) te.getThenExpr()).getName(), ((VariableIdentifierExpr) te2.getThenExpr()).getName()); assertEquals(((VariableIdentifierExpr) te.getElseExpr()).getName(), ((VariableIdentifierExpr) te2.getElseExpr()).getName()); }