You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by mf...@apache.org on 2010/05/19 01:18:10 UTC

svn commit: r945952 - in /myfaces/portlet-bridge/testsuite/trunk/src: main/java/org/apache/myfaces/portlet/faces/testsuite/common/util/ main/java/org/apache/myfaces/portlet/faces/testsuite/tests/chapter_3/ test/java/org/apache/myfaces/portlet/faces/tck...

Author: mfreedman
Date: Tue May 18 23:18:09 2010
New Revision: 945952

URL: http://svn.apache.org/viewvc?rev=945952&view=rev
Log:
Updated pregenerated template files to reflect inclusion of things that used to be excluded.
Added better error checking/output to the TckTestCase runner.
Changed DestroyTestPortlet so it now "fails" on second rendition but with an error message indicating it can only be run once -- while outputing the original result.

Modified:
    myfaces/portlet-bridge/testsuite/trunk/src/main/java/org/apache/myfaces/portlet/faces/testsuite/common/util/BridgeTCKResultWriter.java
    myfaces/portlet-bridge/testsuite/trunk/src/main/java/org/apache/myfaces/portlet/faces/testsuite/tests/chapter_3/BridgeDestroyTestPortlet.java
    myfaces/portlet-bridge/testsuite/trunk/src/test/java/org/apache/myfaces/portlet/faces/tckharness/TckTestCase.java
    myfaces/portlet-bridge/testsuite/trunk/src/test/resources/test-exclusions.xml
    myfaces/portlet-bridge/testsuite/trunk/src/test/resources/tomcat_pluto/test.xml

Modified: myfaces/portlet-bridge/testsuite/trunk/src/main/java/org/apache/myfaces/portlet/faces/testsuite/common/util/BridgeTCKResultWriter.java
URL: http://svn.apache.org/viewvc/myfaces/portlet-bridge/testsuite/trunk/src/main/java/org/apache/myfaces/portlet/faces/testsuite/common/util/BridgeTCKResultWriter.java?rev=945952&r1=945951&r2=945952&view=diff
==============================================================================
--- myfaces/portlet-bridge/testsuite/trunk/src/main/java/org/apache/myfaces/portlet/faces/testsuite/common/util/BridgeTCKResultWriter.java (original)
+++ myfaces/portlet-bridge/testsuite/trunk/src/main/java/org/apache/myfaces/portlet/faces/testsuite/common/util/BridgeTCKResultWriter.java Tue May 18 23:18:09 2010
@@ -58,6 +58,11 @@ public class BridgeTCKResultWriter {
         mDetailTag.appendTagContent(LINE_BREAK + detailLine );
     }
     
+  public String getDetail()
+  {
+    return mDetailTag.toString();
+  }
+    
   /**
    * Let's the tests add details about the test run.
    * 

Modified: myfaces/portlet-bridge/testsuite/trunk/src/main/java/org/apache/myfaces/portlet/faces/testsuite/tests/chapter_3/BridgeDestroyTestPortlet.java
URL: http://svn.apache.org/viewvc/myfaces/portlet-bridge/testsuite/trunk/src/main/java/org/apache/myfaces/portlet/faces/testsuite/tests/chapter_3/BridgeDestroyTestPortlet.java?rev=945952&r1=945951&r2=945952&view=diff
==============================================================================
--- myfaces/portlet-bridge/testsuite/trunk/src/main/java/org/apache/myfaces/portlet/faces/testsuite/tests/chapter_3/BridgeDestroyTestPortlet.java (original)
+++ myfaces/portlet-bridge/testsuite/trunk/src/main/java/org/apache/myfaces/portlet/faces/testsuite/tests/chapter_3/BridgeDestroyTestPortlet.java Tue May 18 23:18:09 2010
@@ -48,6 +48,7 @@ public class BridgeDestroyTestPortlet ex
   final static String NULLREQUEST_ACTION_TEST = "nullRequestActionTest";
   
   private String mActionResult = null;
+  private boolean mActionResultOutput = false;
   
   public void init(PortletConfig config)
     throws PortletException
@@ -86,6 +87,10 @@ public class BridgeDestroyTestPortlet ex
     else if (getTestName().equals(DESTROY_ACTION_TEST) && mActionResult != null)
     {
       outputActionResult(renderRequest, renderResponse);
+      // This test can't be rerun until the portlet is reloaded
+      // So set a new ActionResult that indicates this
+      encodeActionDestroyTestAlreadyRun();
+      
     }
     else if (getTestName().equals(NULLREQUEST_RENDER_TEST))
     {
@@ -100,6 +105,16 @@ public class BridgeDestroyTestPortlet ex
       super.doDispatch(renderRequest, renderResponse);
     }
   }
+  
+  private void encodeActionDestroyTestAlreadyRun()
+  {
+    BridgeTCKResultWriter resultWriter = new BridgeTCKResultWriter(DESTROY_ACTION_TEST);
+    
+    resultWriter.setStatus(BridgeTCKResultWriter.FAIL);
+    resultWriter.setDetail("Test result has already been rendered. This can can only be rendered once prior to portlet or app reload.  To rerun this test reload.  The result that has previously been rendered is: " + mActionResult);
+   
+    mActionResult = resultWriter.toString();
+  }
 
 
   private void runActionDestroyTest(ActionRequest request, ActionResponse response) throws PortletException, IOException
@@ -160,7 +175,6 @@ public class BridgeDestroyTestPortlet ex
     response.setContentType("text/html");
     PrintWriter out = response.getWriter();
     out.println(mActionResult);
-    mActionResult = null;
   }
   
   

Modified: myfaces/portlet-bridge/testsuite/trunk/src/test/java/org/apache/myfaces/portlet/faces/tckharness/TckTestCase.java
URL: http://svn.apache.org/viewvc/myfaces/portlet-bridge/testsuite/trunk/src/test/java/org/apache/myfaces/portlet/faces/tckharness/TckTestCase.java?rev=945952&r1=945951&r2=945952&view=diff
==============================================================================
--- myfaces/portlet-bridge/testsuite/trunk/src/test/java/org/apache/myfaces/portlet/faces/tckharness/TckTestCase.java (original)
+++ myfaces/portlet-bridge/testsuite/trunk/src/test/java/org/apache/myfaces/portlet/faces/tckharness/TckTestCase.java Tue May 18 23:18:09 2010
@@ -57,48 +57,52 @@ public class TckTestCase
   private static String MAX_WAIT = "10000";
 
   protected static Selenium sSelenium;
-  
+
   private String mPageName, mTestName;
 
-  private static final String TEST_RESULT_NAME_XPATH
-    = "//span[@id=\"{0}-test-name\"]";
-  private static final String TEST_RESULT_STATUS_XPATH
-    = "//span[@id=\"{0}-result-status\"]";
-  private static final String TEST_RESULT_DETAIL_XPATH
-    = "//span[@id=\"{0}-result-detail\"]";
-
-  private static final String[] ACTION_XPATHS
-    = {"//input[@type=\"submit\" and @value=\"Run Test\"]",
-       "//a[text()=\"Run Test\"]"};
-
-  private static final String TEST_PASSED_XPATH
-    = "//span[@id=\"{0}-result-status\" and text()=\"SUCCESS\"]";
-  private static final String TEST_FAILED_XPATH
-    = "//span[@id=\"{0}-result-status\" and text()=\"FAILED\"]";
+  private static final String TEST_RESULT_NAME_XPATH = 
+    "//span[@id=\"{0}-test-name\"]";
+  private static final String TEST_RESULT_STATUS_XPATH = 
+    "//span[@id=\"{0}-result-status\"]";
+  private static final String TEST_RESULT_DETAIL_XPATH = 
+    "//span[@id=\"{0}-result-detail\"]";
+
+  private static final String[] ACTION_XPATHS =
+  { "//input[@type=\"submit\" and @value=\"Run Test\"]", 
+    "//a[text()=\"Run Test\"]" };
+
+  private static final String TEST_PASSED_XPATH = 
+    "//span[@id=\"{0}-result-status\" and text()=\"SUCCESS\"]";
+  private static final String TEST_FAILED_XPATH = 
+    "//span[@id=\"{0}-result-status\" and text()=\"FAILED\"]";
 
   private static final String TCK_HOME = "BRIDGE_301_TCK_HOME";
   private static final String PROPS_FILE = "bridge.tck.properties";
   private static final String LOGIN_FILE = "bridge.tck.login.properties";
   private static final String LOGIN_FILE_KEY = "bridge.tck.login.file";
 
-  private static final String CLIENT_BASE_URL_KEY = "bridge.tck.test.base-url";
+  private static final String CLIENT_BASE_URL_KEY = 
+    "bridge.tck.test.base-url";
   private static final String TEST_FILE_KEY = "bridge.tck.test.file";
   private static final String TEST_FILTER_KEY = "bridge.tck.test.filter";
-  private static final String TEST_EXCLUSIONS_FILE_KEY = "bridge.tck.test.exclusions.file";
+  private static final String TEST_EXCLUSIONS_FILE_KEY = 
+    "bridge.tck.test.exclusions.file";
   private static final String SELENIUM_BROWSER_KEY = "bridge.tck.browser";
-  private static final String SELENIUM_HOST_KEY = "bridge.tck.selenium.host";
-  private static final String SELENIUM_PORT_KEY = "bridge.tck.selenium.port";
+  private static final String SELENIUM_HOST_KEY = 
+    "bridge.tck.selenium.host";
+  private static final String SELENIUM_PORT_KEY = 
+    "bridge.tck.selenium.port";
 
   private static final String DEFAULT_SELENIUM_BROWSER = "*firefox";
   private static final String DEFAULT_SELENIUM_HOST = "localhost";
   private static final String DEFAULT_SELENIUM_PORT = "4444";
-  
+
   private static String sClientBaseUrl;
   private static String sTestFile;
   private static String sTestExclusionsFile;
   private static String sTestFilter;
   private static String sSeleniumBrowser; // = DEFAULT_SELENIUM_BROWSER;
-  private static String sSeleniumHost;  // = DEFAULT_SELENIUM_HOST;
+  private static String sSeleniumHost; // = DEFAULT_SELENIUM_HOST;
   private static int sSeleniumPort; // = DEFAULT_SELENIUM_PORT;
 
   // Name value pairs for fields in login page
@@ -111,25 +115,23 @@ public class TckTestCase
   {
     Logger.getLogger("global").log(Level.INFO, msg);
   }
- 
+
   public static void errLog(String msg)
   {
     Logger.getLogger("global").log(Level.SEVERE, msg);
   }
 
-  private static String getProperty(Properties fileProperties,
-                                    String key,
-                                    String defaultValue,
-                                    boolean required)
+  private static String getProperty(Properties fileProperties, String key, 
+                                    String defaultValue, boolean required)
   {
     boolean checkFirst = (defaultValue != null);
     if (System.getProperty(key) != null)
     {
       return System.getProperty(key);
     }
-    if (fileProperties != null &&  (String)fileProperties.get(key) != null)
+    if (fileProperties != null && (String) fileProperties.get(key) != null)
     {
-      return (String)fileProperties.get(key);
+      return (String) fileProperties.get(key);
     }
     if (defaultValue != null)
     {
@@ -143,15 +145,14 @@ public class TckTestCase
     return defaultValue;
   }
 
-  static
-  {
+  static {
     log("static block");
     String tckHomeDir = System.getenv(TCK_HOME);
     if (tckHomeDir == null)
     {
       // Default value for the TCK home.
-      tckHomeDir = System.getProperty("user.home")
-                   + File.separator + "BridgeTckHome";
+      tckHomeDir = 
+          System.getProperty("user.home") + File.separator + "BridgeTckHome";
     }
 
     File propsFile = new File(tckHomeDir, PROPS_FILE);
@@ -160,7 +161,7 @@ public class TckTestCase
     {
       log("Home dir: " + tckHomeDir);
       FileInputStream fis = null;
-      
+
       fis = new FileInputStream(propsFile);
       fileProps = new Properties();
       fileProps.load(fis);
@@ -177,15 +178,23 @@ public class TckTestCase
       System.exit(1);
     }
 
-    sClientBaseUrl = getProperty(fileProps, CLIENT_BASE_URL_KEY, null, true);
+    sClientBaseUrl = 
+        getProperty(fileProps, CLIENT_BASE_URL_KEY, null, true);
     sTestFilter = getProperty(fileProps, TEST_FILTER_KEY, null, false);
     sTestFile = getProperty(fileProps, TEST_FILE_KEY, null, true);
-    sTestExclusionsFile = getProperty(fileProps, TEST_EXCLUSIONS_FILE_KEY, null, true);
-  
-    sSeleniumHost = getProperty(fileProps, SELENIUM_HOST_KEY, DEFAULT_SELENIUM_HOST, false);
-    sSeleniumPort = Integer.parseInt(getProperty(fileProps, SELENIUM_PORT_KEY, DEFAULT_SELENIUM_PORT, false));
-    
-    sSeleniumBrowser = getProperty(fileProps, SELENIUM_BROWSER_KEY, DEFAULT_SELENIUM_BROWSER, false);
+    sTestExclusionsFile = 
+        getProperty(fileProps, TEST_EXCLUSIONS_FILE_KEY, null, true);
+
+    sSeleniumHost = 
+        getProperty(fileProps, SELENIUM_HOST_KEY, DEFAULT_SELENIUM_HOST, 
+                    false);
+    sSeleniumPort = 
+        Integer.parseInt(getProperty(fileProps, SELENIUM_PORT_KEY, 
+                                     DEFAULT_SELENIUM_PORT, false));
+
+    sSeleniumBrowser = 
+        getProperty(fileProps, SELENIUM_BROWSER_KEY, DEFAULT_SELENIUM_BROWSER, 
+                    false);
 
     // Login properties file
     try
@@ -206,7 +215,7 @@ public class TckTestCase
       Enumeration propsNameList = props.propertyNames();
       while (propsNameList.hasMoreElements())
       {
-        String loginProp = (String)propsNameList.nextElement();
+        String loginProp = (String) propsNameList.nextElement();
         if (props.get(loginProp).equals(""))
         {
           // A button login property is defined as name only
@@ -218,7 +227,8 @@ public class TckTestCase
           {
             sLoginFields = new ArrayList<String[]>();
           }
-          sLoginFields.add(new String[]{loginProp, (String)props.get(loginProp)});
+          sLoginFields.add(new String[]
+              { loginProp, (String) props.get(loginProp) });
         }
       }
     }
@@ -228,7 +238,8 @@ public class TckTestCase
     }
     catch (IOException ioe)
     {
-      errLog("Error loading login properties file, " + propsFile.getName());
+      errLog("Error loading login properties file, " + 
+             propsFile.getName());
       System.exit(1);
     }
 
@@ -236,7 +247,7 @@ public class TckTestCase
     log("test filter: " + sTestFilter);
     log("End of static block");
   }
- 
+
   public TckTestCase(String pageName, String testName)
   {
     mPageName = pageName;
@@ -244,7 +255,8 @@ public class TckTestCase
   }
 
   @BeforeClass
-  public static void setUpSession() throws Exception
+  public static void setUpSession()
+    throws Exception
   {
     log("setUpSession");
     try
@@ -253,7 +265,9 @@ public class TckTestCase
       log("SeleniumPort: " + sSeleniumPort);
       log("SeleniumBrowser: " + sSeleniumBrowser);
       log("ClientBaseUrl: " + sClientBaseUrl);
-      sSelenium = new DefaultSelenium(sSeleniumHost, sSeleniumPort, sSeleniumBrowser, sClientBaseUrl);
+      sSelenium = 
+          new DefaultSelenium(sSeleniumHost, sSeleniumPort, sSeleniumBrowser, 
+                              sClientBaseUrl);
       sSelenium.start();
       sSelenium.setTimeout(MAX_WAIT);
     }
@@ -276,7 +290,8 @@ public class TckTestCase
   }
 
   @Before
-  public void runBeforeEachTest() throws Exception
+  public void runBeforeEachTest()
+    throws Exception
   {
     sSelenium.open(mPageName);
     sSelenium.waitForPageToLoad(MAX_WAIT);
@@ -284,7 +299,7 @@ public class TckTestCase
 
   @Test
   public void testPage()
-  { 
+  {
     login();
 
     performActions();
@@ -296,18 +311,24 @@ public class TckTestCase
     String bodyText = sSelenium.getBodyText();
     try
     {
-      testName = sSelenium.getText
-        (MessageFormat.format(TEST_RESULT_NAME_XPATH, new Object[]{mTestName}));
-      testStatus = sSelenium.getText
-        (MessageFormat.format(TEST_RESULT_STATUS_XPATH, new Object[]{mTestName}));
-      testDetails = sSelenium.getText
-        (MessageFormat.format(TEST_RESULT_DETAIL_XPATH, new Object[]{mTestName}));
+      testName = 
+          sSelenium.getText(MessageFormat.format(TEST_RESULT_NAME_XPATH, 
+                                                 new Object[]
+              { mTestName }));
+      testStatus = 
+          sSelenium.getText(MessageFormat.format(TEST_RESULT_STATUS_XPATH, 
+                                                 new Object[]
+              { mTestName }));
+      testDetails = 
+          sSelenium.getText(MessageFormat.format(TEST_RESULT_DETAIL_XPATH, 
+                                                 new Object[]
+              { mTestName }));
     }
     catch (SeleniumException se)
     {
       // If any of the tags are missing from the portlet content the full screen mark-up
       // will be returned.
-       failMsg = bodyText;
+      failMsg = bodyText;
     }
 
     if (failMsg == null)
@@ -315,13 +336,11 @@ public class TckTestCase
       if ("FAILED".equals(testStatus))
       {
         // The portlet content is valid but the test has failed so display details
-        failMsg = new StringBuilder()
-                    .append(testStatus)
-                    .append("\n")
-                    .append(testDetails).toString();
+        failMsg = 
+            new StringBuilder().append(testStatus).append("\n").append(testDetails).toString();
       }
     }
-    
+
     assertTrue(failMsg, "SUCCESS".equals(testStatus));
   }
 
@@ -342,27 +361,28 @@ public class TckTestCase
         }
       }
       actionsLeftToPerform = false;
-    }  
+    }
   }
 
   public void login()
   {
     if (sLoginFields != null)
     {
-       for (String[] field: sLoginFields)
-       {
-         if (!sSelenium.isElementPresent("//input[@name='" + field[0] + "']"))
-         {
-           // Not a login page
-           return;
-         }
-       }
-       for (String[] field: sLoginFields)
-       {
-         sSelenium.type(field[0], field[1]);
-       }
-       sSelenium.click(sLoginButton);
-       sSelenium.waitForPageToLoad(MAX_WAIT);
+      for (String[] field: sLoginFields)
+      {
+        if (!sSelenium.isElementPresent("//input[@name='" + field[0] + 
+                                        "']"))
+        {
+          // Not a login page
+          return;
+        }
+      }
+      for (String[] field: sLoginFields)
+      {
+        sSelenium.type(field[0], field[1]);
+      }
+      sSelenium.click(sLoginButton);
+      sSelenium.waitForPageToLoad(MAX_WAIT);
     }
   }
 
@@ -376,49 +396,83 @@ public class TckTestCase
   {
     log("testData()");
     List testList = new ArrayList<String[]>(200);
+    FileInputStream exIs = null;
+    FileInputStream tis = null;
+    Pattern filterPattern = null;
+
+    if ((sTestFilter != null) && (sTestFilter.length() > 0))
+    {
+      filterPattern = Pattern.compile(sTestFilter);
+    }
 
     try
     {
-      Pattern filterPattern = null;
-      {
-        if ((sTestFilter != null) && (sTestFilter.length() > 0))
-        {
-          filterPattern = Pattern.compile(sTestFilter);
-        }
-      }
-      FileInputStream exIs = new FileInputStream(sTestExclusionsFile);
-      Properties exProps = new Properties();
+      exIs = new FileInputStream(sTestExclusionsFile);
+    }
+    catch (Exception e)
+    {
+      errLog("Unable to acccess test exclusions file, " + 
+             sTestExclusionsFile + " Exception thrown: " + e.getMessage());
+      System.exit(1);
+    }
+    Properties exProps = new Properties();
+    try
+    {
       exProps.loadFromXML(exIs);
+    }
+    catch (Exception e)
+    {
+      errLog("Unable to parse test exclusions file, " + 
+             sTestExclusionsFile + " Exception thrown: " + e.getMessage());
+      System.exit(1);
+    }
+
+    try
+    {
+      tis = new FileInputStream(sTestFile);
+    }
+    catch (Exception e)
+    {
+      errLog("Unable to acccess test description file, " + sTestFile + 
+             " Exception thrown: " + e.getMessage());
+      System.exit(1);
+    }
+
 
-      FileInputStream tis = new FileInputStream(sTestFile);
-      Properties testProps = new Properties();
+    Properties testProps = new Properties();
+    try
+    {
       testProps.loadFromXML(tis);
-      Enumeration tests = testProps.propertyNames();
-      while (tests.hasMoreElements())
+    }
+    catch (Exception e)
+    {
+      errLog("Unable to parse test description file, " + sTestFile + 
+             " Exception thrown: " + e.getMessage());
+      System.exit(1);
+    }
+
+    Enumeration tests = testProps.propertyNames();
+    while (tests.hasMoreElements())
+    {
+      String page = (String) tests.nextElement();
+      String testName = testProps.getProperty(page);
+      boolean filterMatch = true;
+      if (filterPattern != null)
       {
-        String page = (String)tests.nextElement();
-        String testName = testProps.getProperty(page);
-        boolean filterMatch = true;
-        if (filterPattern != null)
-        {
-          Matcher m = filterPattern.matcher(testName);
-          filterMatch = m.matches();
-        }
+        Matcher m = filterPattern.matcher(testName);
+        filterMatch = m.matches();
+      }
 
-        if (filterMatch)
+      if (filterMatch)
+      {
+        if (exProps.getProperty(testName) == null)
         {
-          if (exProps.getProperty(testName) == null)
-          {
-            testList.add(new String[]{page, testName});
-          }
+          testList.add(new String[]
+              { page, testName });
         }
       }
     }
-    catch (IOException ioe)
-    {
-      errLog("Error while reading test definition file, " + sTestFile);
-      System.exit(1);
-    }
+
     return testList;
   }
 

Modified: myfaces/portlet-bridge/testsuite/trunk/src/test/resources/test-exclusions.xml
URL: http://svn.apache.org/viewvc/myfaces/portlet-bridge/testsuite/trunk/src/test/resources/test-exclusions.xml?rev=945952&r1=945951&r2=945952&view=diff
==============================================================================
--- myfaces/portlet-bridge/testsuite/trunk/src/test/resources/test-exclusions.xml (original)
+++ myfaces/portlet-bridge/testsuite/trunk/src/test/resources/test-exclusions.xml Tue May 18 23:18:09 2010
@@ -18,7 +18,7 @@
 <entry key="encodeActionURLWithSecurityRenderTest"/>
 <entry key="encodeActionURLWithInvalidSecurityRenderTest"/>
 
-<!-- The following tests are excluded because PreDestroy support/notification relies on servletContext listeners -- however when
+<!-- The following tests are excluded because PreDestroy support/notification relies on servletContext listeners - however when
      running in a local portal the portletContainer (is likely) executed using servlet cross-context support.  The servlet spec
      doesn't define if/how a cross-context app's servletContext listener is called when the primary app needs to make a notification.  
      Thus in a local portlet container these tests often don't work because the bridge isn't notified.  

Modified: myfaces/portlet-bridge/testsuite/trunk/src/test/resources/tomcat_pluto/test.xml
URL: http://svn.apache.org/viewvc/myfaces/portlet-bridge/testsuite/trunk/src/test/resources/tomcat_pluto/test.xml?rev=945952&r1=945951&r2=945952&view=diff
==============================================================================
--- myfaces/portlet-bridge/testsuite/trunk/src/test/resources/tomcat_pluto/test.xml (original)
+++ myfaces/portlet-bridge/testsuite/trunk/src/test/resources/tomcat_pluto/test.xml Tue May 18 23:18:09 2010
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
 <properties>
-<!--Main tests-->
+<!-- Main tests -->
 <entry key="pluto/portal/TestPage001">bridgeVersionTest</entry>
 <entry key="pluto/portal/TestPage002">renderPolicyTest</entry>
 <entry key="pluto/portal/TestPage003">lifecycleTest</entry>
@@ -148,6 +148,6 @@
 <entry key="pluto/portal/TestPage144">portletNamingContainerUIViewRootClientIdTest</entry>
 <entry key="pluto/portal/TestPage145">restoredViewStateParameterTest</entry>
 <entry key="pluto/portal/TestPage146">setsIsPostbackAttributeTest</entry>
-<!--Section3.2 Lifecycle set-->
+<!-- Section3.2 Lifecycle set -->
 <entry key="pluto/portal/TestPage147">lifecycleTest</entry>
 </properties>