@Test public void printerCanPrintInvocationWithoutException() throws Exception { String packageName = "spoon.test.subclass.prettyprinter"; String className = "DefaultPrettyPrinterExample"; String qualifiedName = packageName + "." + className; SpoonCompiler comp = new Launcher().createCompiler(); List<SpoonResource> fileToBeSpooned = SpoonResourceHelper.resources( "./src/test/resources/printer-test/" + qualifiedName.replace('.', '/') + ".java"); assertEquals(1, fileToBeSpooned.size()); comp.addInputSources(fileToBeSpooned); List<SpoonResource> classpath = SpoonResourceHelper.resources( "./src/test/resources/printer-test/DefaultPrettyPrinterDependency.jar"); assertEquals(1, classpath.size()); comp.setSourceClasspath(classpath.get(0).getPath()); comp.build(); Factory factory = comp.getFactory(); CtType<?> theClass = factory.Type().get(qualifiedName); List<CtInvocation<?>> elements = Query.getElements(theClass, new TypeFilter<CtInvocation<?>>(CtInvocation.class)); assertEquals(3, elements.size()); CtInvocation<?> mathAbsInvocation = elements.get(1); assertEquals("java.lang.Math.abs(message.length())", mathAbsInvocation.toString()); }
/** * Create the content of the condition * * @param ctInvocation * @return */ private CtBlock<Object> createThen(CtInvocation<?> ctInvocation) { CtBlock<Object> thenStatement = ctInvocation.getFactory().Core().createBlock(); thenStatement.addStatement( (getFactory().Code().createCodeSnippetStatement("System.out.println(\"Else...\")"))); thenStatement.addStatement( (getFactory() .Code() .createCodeSnippetStatement( "System.out.println(" + Debug.class.getCanonicalName() + ".getSolvedPC())"))); CtAssert<Object> ctAssert = ctInvocation.getFactory().Core().createAssert(); CtCodeSnippetExpression<Boolean> assertExpression = getFactory().Core().createCodeSnippetExpression(); assertExpression.setValue("false"); ctAssert.setAssertExpression(assertExpression); ctAssert.setExpression( getFactory() .Code() .createCodeSnippetExpression( String.format("\"%s\"", ctInvocation.toString().replaceAll("\"", "'")))); thenStatement.addStatement(ctAssert); return thenStatement; }