/* Copyright (c) 2008 Arno Haase, Andr� Arnold. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html Contributors: Arno Haase - initial API and implementation Andr� Arnold */ package org.eclipse.xtend.middleend.xpand.test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; import org.eclipse.internal.xpand2.XpandTokens; import org.eclipse.xpand2.output.Outlet; import org.eclipse.xtend.backend.util.FileHelper; import org.eclipse.xtend.middleend.xpand.XpandBackendFacade; import org.eclipse.xtend.middleend.xpand.internal.xpandlib.pr.XpandProtectedRegionResolver; import org.eclipse.xtend.type.impl.java.JavaBeansMetaModel; import org.eclipse.xtend.typesystem.MetaModel; import org.junit.Test; /** * * @author Arno Haase (http://www.haase-consulting.com) * @author Andr� Arnold * */ @SuppressWarnings("restriction") public class XpandStatementTest { @Test public void testIf() throws Exception { final List<MetaModel> mms = new ArrayList<MetaModel> (); mms.add (new JavaBeansMetaModel ()); Outlet out = new Outlet("out"); Collection<Outlet> outlets = new ArrayList<Outlet>(); outlets.add(out); XpandBackendFacade bf = XpandBackendFacade.createForFile("org::eclipse::xtend::middleend::xpand::test::XpandStatements", "iso-8859-1", mms, outlets ); final Map<String, Object> variables = new HashMap<String, Object>(); variables.put("element", "one"); Object res1 = bf.executeStatement(XpandTokens.LT + "EXPAND org::eclipse::xtend::middleend::xpand::test::XpandStatements::testIf FOR element" + XpandTokens.RT, variables , null, null, false); assertEquals("\n\nfirst: one\n\n", res1.toString()); variables.put("element", "two"); Object res2 = bf.executeStatement(XpandTokens.LT + "EXPAND org::eclipse::xtend::middleend::xpand::test::XpandStatements::testIf FOR element" + XpandTokens.RT, variables , null, null, false); assertEquals("\n\ntwo\n\n", res2.toString()); variables.put("element", "three"); Object res3 = bf.executeStatement(XpandTokens.LT + "EXPAND org::eclipse::xtend::middleend::xpand::test::XpandStatements::testIf FOR element" + XpandTokens.RT, variables , null, null, false); assertEquals("\n\nlast: three\n\n", res3.toString()); } @Test public void testForeach() throws Exception { final List<MetaModel> mms = new ArrayList<MetaModel> (); mms.add (new JavaBeansMetaModel ()); Outlet out = new Outlet("out"); Collection<Outlet> outlets = new ArrayList<Outlet>(); outlets.add(out); XpandBackendFacade bf = XpandBackendFacade.createForFile("org::eclipse::xtend::middleend::xpand::test::XpandStatements", "iso-8859-1", mms, outlets ); final Map<String, Object> variables = new HashMap<String, Object>(); variables.put("elements", Arrays.asList("one", "two" , "three")); Object o = bf.executeStatement(XpandTokens.LT + "EXPAND org::eclipse::xtend::middleend::xpand::test::XpandStatements::testForeach FOR elements" + XpandTokens.RT, variables , null, null, false); assertEquals("\n\nelement: one\n\nelement: two\n\nelement: three\n\n", o.toString()); } @Test public void testForeachWithSeparator() throws Exception { final List<MetaModel> mms = new ArrayList<MetaModel> (); mms.add (new JavaBeansMetaModel ()); Outlet out = new Outlet("out"); Collection<Outlet> outlets = new ArrayList<Outlet>(); outlets.add(out); XpandBackendFacade bf = XpandBackendFacade.createForFile("org::eclipse::xtend::middleend::xpand::test::XpandStatements", "iso-8859-1", mms, outlets ); final Map<String, Object> variables = new HashMap<String, Object>(); variables.put("elements", Arrays.asList("one", "two" , "three")); Object o = bf.executeStatement(XpandTokens.LT + "EXPAND org::eclipse::xtend::middleend::xpand::test::XpandStatements::testForeachWithSeparator FOR elements" + XpandTokens.RT, variables , null, null, false); assertEquals("\n\nelement: one\n,\nelement: two\n,\nelement: three\n\n", o.toString()); } @Test public void testForeachWithSeparatorAndDelLine() throws Exception { final List<MetaModel> mms = new ArrayList<MetaModel> (); mms.add (new JavaBeansMetaModel ()); Outlet out = new Outlet("out"); Collection<Outlet> outlets = new ArrayList<Outlet>(); outlets.add(out); XpandBackendFacade bf = XpandBackendFacade.createForFile("org::eclipse::xtend::middleend::xpand::test::XpandStatements", "iso-8859-1", mms, outlets ); final Map<String, Object> variables = new HashMap<String, Object>(); variables.put("elements", Arrays.asList("one", "two" , "three")); bf.executeStatement(XpandTokens.LT + "EXPAND org::eclipse::xtend::middleend::xpand::test::XpandStatements::testForeachWithSeparatorAndDelLine FOR elements" + XpandTokens.RT, variables , null, null, false); File outFile = new File("out", "output.txt"); assertTrue(outFile.exists()); BufferedReader r = new BufferedReader(new FileReader(outFile)); String line = null; StringBuffer buf = new StringBuffer(); while ((line = r.readLine()) != null) { buf.append(line+"\n"); } assertEquals("element: one,element: two,element: three\n", buf.toString()); r.close(); outFile.delete(); } @Test public void testForeachWithIterator() throws Exception { final List<MetaModel> mms = new ArrayList<MetaModel> (); mms.add (new JavaBeansMetaModel ()); Outlet out = new Outlet("out"); Collection<Outlet> outlets = new ArrayList<Outlet>(); outlets.add(out); XpandBackendFacade bf = XpandBackendFacade.createForFile("org::eclipse::xtend::middleend::xpand::test::XpandStatements", "iso-8859-1", mms, outlets ); final Map<String, Object> variables = new HashMap<String, Object>(); variables.put("elements", Arrays.asList("one", "two" , "three" , "four")); Object o = bf.executeStatement(XpandTokens.LT + "EXPAND org::eclipse::xtend::middleend::xpand::test::XpandStatements::testForeachWithIterator FOR elements" + XpandTokens.RT, variables , null, null, false); assertEquals("\n\n\nfirst: one 4\n\n,\n\ntwo 1 2\n\n,\n\nthree 2 3\n\n,\n\nlast: four\n\n\n", o.toString()); } @Test public void testLet() throws Exception { final List<MetaModel> mms = new ArrayList<MetaModel> (); mms.add (new JavaBeansMetaModel ()); Outlet out = new Outlet("out"); Collection<Outlet> outlets = new ArrayList<Outlet>(); outlets.add(out); Person p = new Person(); p.setName("Tester"); p.setFirstName("Testerossa"); XpandBackendFacade bf = XpandBackendFacade.createForFile("org::eclipse::xtend::middleend::xpand::test::XpandStatements", "iso-8859-1", mms, outlets ); final Map<String, Object> variables = new HashMap<String, Object>(); variables.put("element", p); Object o = bf.executeStatement(XpandTokens.LT + "EXPAND org::eclipse::xtend::middleend::xpand::test::XpandStatements::testLet FOR element" + XpandTokens.RT, variables , null, null, false); assertEquals("\n\nTester\n\n", o.toString()); } @Test public void testRem() throws Exception { final List<MetaModel> mms = new ArrayList<MetaModel> (); mms.add (new JavaBeansMetaModel ()); Outlet out = new Outlet("out"); Collection<Outlet> outlets = new ArrayList<Outlet>(); outlets.add(out); XpandBackendFacade bf = XpandBackendFacade.createForFile("org::eclipse::xtend::middleend::xpand::test::XpandStatements", "iso-8859-1", mms, outlets ); final Map<String, Object> variables = new HashMap<String, Object>(); variables.put("element", "one"); Object o = bf.executeStatement(XpandTokens.LT + "EXPAND org::eclipse::xtend::middleend::xpand::test::XpandStatements::testRem FOR element" + XpandTokens.RT, variables , null, null, false); assertEquals("\n\none\n", o.toString()); } @Test public void testProtect() throws Exception { final List<MetaModel> mms = new ArrayList<MetaModel> (); mms.add (new JavaBeansMetaModel ()); Outlet out = new Outlet("out3"); List<Outlet> outlets = new ArrayList<Outlet>(); outlets.add(out); Person p = new Person(); p.setName("Tester"); p.setFirstName("Testerossa"); File generatedFile = new File (out.getPath() + "/Person.java"); if (generatedFile.exists ()) generatedFile.delete (); XpandBackendFacade bf = XpandBackendFacade.createForFile("org::eclipse::xtend::middleend::xpand::test::XpandStatements", "iso-8859-1", mms, outlets ); final Map<String, Object> variables = new HashMap<String, Object>(); variables.put("element", p); XpandProtectedRegionResolver resolver1 = new XpandProtectedRegionResolver(null, true, outlets, "ISO-8859-1", false); bf.executeStatement (XpandTokens.LT + "EXPAND org::eclipse::xtend::middleend::xpand::test::XpandProtectedRegions::testProtect FOR element" + XpandTokens.RT, variables , null, resolver1, false); final String initalExpected = "\npackage org.eclipse.xtend.middleend.xpand.test;\n\npublic class Person {\n\npublic void someOperation {\n/*PROTECTED REGION ID(Person_Tester_1) ENABLED START*/\n/* TODO Protected Region 1: Implement this method */\n/*PROTECTED REGION END*/\n}\n\n\npublic void someOtherFunction {\n/*PROTECTED REGION ID(Person_Tester_2) ENABLED START*/\n/* TODO Protected Region 2: Implement this method */\n/*PROTECTED REGION END*/\n}\n\n}\n\n"; final String modifiedExpected = "\npackage org.eclipse.xtend.middleend.xpand.test;\n\npublic class Person {\n\npublic void someOperation {\n/*PROTECTED REGION ID(Person_Tester_1) ENABLED START*/\n/* TODO Protected Region 1: Implement this method */\nString value1 = \"value1\"\n/*PROTECTED REGION END*/\n}\n\n\npublic void someOtherFunction {\n/*PROTECTED REGION ID(Person_Tester_2) ENABLED START*/\n/* TODO Protected Region 2: Implement this method */\nString value2 = \"value2\"\n/*PROTECTED REGION END*/\n}\n\n}\n\n"; String content = FileHelper.read (out.getPath() + "/Person.java"); assertEquals (initalExpected, content); FileHelper.write (out.getPath() + "/Person.java", modifiedExpected); assertEquals (modifiedExpected, FileHelper.read (out.getPath() + "/Person.java")); XpandProtectedRegionResolver resolver2 = new XpandProtectedRegionResolver(null, true, outlets, "ISO-8859-1", false); bf.executeStatement (XpandTokens.LT + "EXPAND org::eclipse::xtend::middleend::xpand::test::XpandProtectedRegions::testProtect FOR element" + XpandTokens.RT, variables , null, resolver2, false); String modifiedContent = FileHelper.read (out.getPath() + "/Person.java"); assertEquals(modifiedExpected, modifiedContent); } }