[98742] Define JUnit testcases for new environment/operation API in wst.common.
diff --git a/tests/org.eclipse.wst.common.tests.ui/src/org/eclipse/wst/common/tests/ui/manager/TestGroupManager.java b/tests/org.eclipse.wst.common.tests.ui/src/org/eclipse/wst/common/tests/ui/manager/TestGroupManager.java
index 9556121..806cb6e 100644
--- a/tests/org.eclipse.wst.common.tests.ui/src/org/eclipse/wst/common/tests/ui/manager/TestGroupManager.java
+++ b/tests/org.eclipse.wst.common.tests.ui/src/org/eclipse/wst/common/tests/ui/manager/TestGroupManager.java
@@ -99,12 +99,12 @@
 		//  / \ / \
 		// A  C E  G
 		operationManager = new OperationManager(dataModelManager, opD, EnvironmentService.getEclipseConsoleEnvironment() );
-		operationManager.addPreOperation(opD.getID(), opB);
-		operationManager.addPostOperation(opD.getID(), opF);
-		operationManager.addPreOperation(opB.getID(), opA);
-		operationManager.addPostOperation(opB.getID(), opC);
-		operationManager.addPreOperation(opF.getID(), opE);
-		operationManager.addPostOperation(opF.getID(), opG);
+		operationManager.addExtendedPreOperation(opD.getID(), opB);
+		operationManager.addExtendedPostOperation(opD.getID(), opF);
+		operationManager.addExtendedPreOperation(opB.getID(), opA);
+		operationManager.addExtendedPostOperation(opB.getID(), opC);
+		operationManager.addExtendedPreOperation(opF.getID(), opE);
+		operationManager.addExtendedPostOperation(opF.getID(), opG);
 
 		// Page groups are organized as follows:
 		//
diff --git a/tests/org.eclipse.wst.common.tests/frameworktests/org/eclipse/wst/common/frameworks/operations/tests/manager/BaseOperation.java b/tests/org.eclipse.wst.common.tests/frameworktests/org/eclipse/wst/common/frameworks/operations/tests/manager/BaseOperation.java
index e55e7b7..aa9f8d7 100644
--- a/tests/org.eclipse.wst.common.tests/frameworktests/org/eclipse/wst/common/frameworks/operations/tests/manager/BaseOperation.java
+++ b/tests/org.eclipse.wst.common.tests/frameworktests/org/eclipse/wst/common/frameworks/operations/tests/manager/BaseOperation.java
@@ -10,7 +10,9 @@
  *******************************************************************************/
 package org.eclipse.wst.common.frameworks.operations.tests.manager;
 
+import java.util.ArrayList;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Set;
 import java.util.Vector;
 
@@ -22,13 +24,16 @@
 import org.eclipse.wst.common.environment.ILog;
 import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelOperation;
 import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
+import org.eclipse.wst.common.frameworks.datamodel.IDataModelOperation;
 
 public class BaseOperation extends AbstractDataModelOperation {
-	private Vector resultList;
-	private Vector undoList;
+	protected Vector resultList;
+	protected Vector undoList;
 	private IStatus status;
   private boolean checkModels;
   private boolean modelsOK = false;
+  private ArrayList preOps = new ArrayList();
+  private ArrayList postOps = new ArrayList();
 
 	public BaseOperation(String id, Vector resultList, Vector undoList) {
 		setID(id);
@@ -45,6 +50,8 @@
 	public IStatus execute(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
 		resultList.add(this);
     
+    getDataModel().setProperty( "executedOps", resultList );
+    getDataModel().setProperty( "executedUndoOps", undoList );
     if( checkModels ) modelsOK = checkModels();
     
     getEnvironment().getLog().log( ILog.OK, 1234, this, "BaseOperation", (Throwable)null );
@@ -62,6 +69,26 @@
 		return Status.OK_STATUS;
 	}
 
+  public void addPostOp( IDataModelOperation operation )
+  {
+    postOps.add( operation );  
+  }
+  
+  public void addPreOp( IDataModelOperation operation )
+  {
+    preOps.add( operation );  
+  }
+  
+  public List getPostOperations()
+  {
+    return postOps;
+  }
+
+  public List getPreOperations()
+  {
+    return preOps;
+  }
+
   public void setCheckModels( boolean checkModels )
   {
     this.checkModels = checkModels;  
@@ -78,6 +105,7 @@
     
     ids.add( "testprovider1" );
     ids.add( "testprovider2" );
+    ids.add( "testExtendedProvider" );
     
     return ids;
   }
diff --git a/tests/org.eclipse.wst.common.tests/frameworktests/org/eclipse/wst/common/frameworks/operations/tests/manager/TestExtendedOperation.java b/tests/org.eclipse.wst.common.tests/frameworktests/org/eclipse/wst/common/frameworks/operations/tests/manager/TestExtendedOperation.java
new file mode 100644
index 0000000..97bbbed
--- /dev/null
+++ b/tests/org.eclipse.wst.common.tests/frameworktests/org/eclipse/wst/common/frameworks/operations/tests/manager/TestExtendedOperation.java
@@ -0,0 +1,57 @@
+/***************************************************************************************************
+ * Copyright (c) 2003, 2005 IBM Corporation and others. 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: IBM Corporation - initial API and implementation
+ **************************************************************************************************/
+package org.eclipse.wst.common.frameworks.operations.tests.manager;
+
+import java.util.HashSet;
+import java.util.Set;
+import java.util.Vector;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
+
+public class TestExtendedOperation extends BaseOperation
+{
+
+  public TestExtendedOperation()
+  {
+    super( "TestExtendedOperation", null, null);
+  }
+  
+  public IStatus execute(IProgressMonitor monitor, IAdaptable info) throws ExecutionException 
+  {
+    IDataModel model = getDataModel();
+    Vector     resultList = (Vector)model.getProperty( "executedOps" );
+    resultList.add(this);
+        
+    return Status.OK_STATUS;
+  }
+  
+  public IStatus undo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
+    IDataModel model = getDataModel();
+    Vector     resultList = (Vector)model.getProperty( "executedOps" );
+    Vector     undoList = (Vector)model.getProperty( "executedUndoOps" );
+    
+    resultList.remove(resultList.size() - 1);
+    undoList.add(this);
+    return Status.OK_STATUS;
+  }
+  
+  public Set getDataModelIDs()
+  {
+    HashSet ids = new HashSet();
+    
+    ids.add( "testExtendedProvider" );
+    
+    return ids;
+  }
+  
+}
diff --git a/tests/org.eclipse.wst.common.tests/frameworktests/org/eclipse/wst/common/frameworks/operations/tests/manager/TestExtendedProvider.java b/tests/org.eclipse.wst.common.tests/frameworktests/org/eclipse/wst/common/frameworks/operations/tests/manager/TestExtendedProvider.java
new file mode 100644
index 0000000..da60289
--- /dev/null
+++ b/tests/org.eclipse.wst.common.tests/frameworktests/org/eclipse/wst/common/frameworks/operations/tests/manager/TestExtendedProvider.java
@@ -0,0 +1,34 @@
+/***************************************************************************************************
+ * Copyright (c) 2003, 2005 IBM Corporation and others. 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: IBM Corporation - initial API and implementation
+ **************************************************************************************************/
+package org.eclipse.wst.common.frameworks.operations.tests.manager;
+
+import java.util.Set;
+import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelProvider;
+
+public class TestExtendedProvider extends AbstractDataModelProvider
+{
+  public Set getPropertyNames(){
+    Set propertyNames = super.getPropertyNames();
+    propertyNames.add("executedOps");
+    propertyNames.add("executedUndoOps");
+    
+    return propertyNames;
+  }
+
+  public void init()
+  {
+  }
+
+  public String getID()
+  {
+    return "TestExtendedProvider";
+  }
+  
+
+}
diff --git a/tests/org.eclipse.wst.common.tests/frameworktests/org/eclipse/wst/common/frameworks/operations/tests/manager/TestOperationManager.java b/tests/org.eclipse.wst.common.tests/frameworktests/org/eclipse/wst/common/frameworks/operations/tests/manager/TestOperationManager.java
index ebe8b28..b076a96 100644
--- a/tests/org.eclipse.wst.common.tests/frameworktests/org/eclipse/wst/common/frameworks/operations/tests/manager/TestOperationManager.java
+++ b/tests/org.eclipse.wst.common.tests/frameworktests/org/eclipse/wst/common/frameworks/operations/tests/manager/TestOperationManager.java
@@ -71,12 +71,12 @@
 		//  / \ / \
 		// A  C E G
 		manager = new OperationManager(dataModelManager, opD, EnvironmentService.getEclipseConsoleEnvironment() );
-		manager.addPreOperation(opD.getID(), opB);
-		manager.addPostOperation(opD.getID(), opF);
-		manager.addPreOperation(opB.getID(), opA);
-		manager.addPostOperation(opB.getID(), opC);
-		manager.addPreOperation(opF.getID(), opE);
-		manager.addPostOperation(opF.getID(), opG);
+		manager.addExtendedPreOperation(opD.getID(), opB);
+		manager.addExtendedPostOperation(opD.getID(), opF);
+		manager.addExtendedPreOperation(opB.getID(), opA);
+		manager.addExtendedPostOperation(opB.getID(), opC);
+		manager.addExtendedPreOperation(opF.getID(), opE);
+		manager.addExtendedPostOperation(opF.getID(), opG);
 	}
 
 	public void testRunAll() throws Exception {
@@ -343,7 +343,71 @@
 		manager.undoLastRun();
 		checkResults();
 	}
+  
+  public void testRunWithChildOperations() throws Exception 
+  {
+    StopListener stopListener1 = new StopListener(new String[]{"B"});
+    StopListener stopListener2 = new StopListener( new String[]{ "APre1Pre1", "APost1", "B" } );
+    
+    BaseOperation opAPre1 = new BaseOperation("APre1", executedOps, executedUndoOps);
+    BaseOperation opAPre2 = new BaseOperation("APre2", executedOps, executedUndoOps);
+    BaseOperation opAPost1 = new BaseOperation("APost1", executedOps, executedUndoOps);
+    BaseOperation opAPre1Pre1 = new BaseOperation("APre1Pre1", executedOps, executedUndoOps);
+    BaseOperation opAPre2Post1 = new BaseOperation("APre2Post2", executedOps, executedUndoOps);
+    
+    opA.addPreOp( opAPre1 );
+    opA.addPreOp( opAPre2 );
+    opA.addPostOp( opAPost1 );
+    opAPre1.addPreOp( opAPre1Pre1 );
+    opAPre2.addPostOp( opAPre2Post1 );
+    
+    manager.setPostExecuteListener(stopListener1);
+    
+    expectedOps.add(opAPre1Pre1);
+    expectedOps.add(opAPre1);
+    expectedOps.add( new TestExtendedOperation() );
+    expectedOps.add(opAPre2);
+    expectedOps.add(opAPre2Post1);
+    expectedOps.add(opA);
+    expectedOps.add(opAPost1);
+    expectedOps.add(opB);
+    manager.runOperations();
+    checkResults();
 
+    expectedOps.removeAllElements();
+    expectedUndoOps.add(opB);
+    expectedUndoOps.add(opAPost1);
+    expectedUndoOps.add(opA);
+    expectedUndoOps.add(opAPre2Post1);
+    expectedUndoOps.add(opAPre2);
+    expectedUndoOps.add( new TestExtendedOperation() );
+    expectedUndoOps.add(opAPre1);
+    expectedUndoOps.add(opAPre1Pre1);
+    manager.undoLastRun();
+    checkResults();
+    
+    reset();
+    manager.setPostExecuteListener(stopListener2);
+    
+    expectedOps.add(opAPre1Pre1);
+    manager.runOperations();
+    checkResults();
+    
+    expectedOps.add(opAPre1);
+    expectedOps.add( new TestExtendedOperation() );
+    expectedOps.add(opAPre2);
+    expectedOps.add(opAPre2Post1);
+    expectedOps.add(opA);
+    expectedOps.add(opAPost1);
+    manager.runOperations();
+    checkResults();
+    
+    expectedOps.add(opB);
+    manager.runOperations();
+    checkResults();
+    
+  }
+  
 	private void reset() {
 		executedOps.removeAllElements();
 		expectedOps.removeAllElements();
diff --git a/tests/org.eclipse.wst.common.tests/plugin.xml b/tests/org.eclipse.wst.common.tests/plugin.xml
index 2f13f4a..0a77b07 100644
--- a/tests/org.eclipse.wst.common.tests/plugin.xml
+++ b/tests/org.eclipse.wst.common.tests/plugin.xml
@@ -47,6 +47,9 @@
             class="org.eclipse.wst.common.frameworks.operations.tests.manager.TestProvider2"
             id="testprovider2"/>
       <DataModelProvider
+            class="org.eclipse.wst.common.frameworks.operations.tests.manager.TestExtendedProvider"
+            id="testExtendedProvider"/>
+      <DataModelProvider
             class="bogusClass"
             id="bogus"/>
       <ProviderDefinesType
@@ -104,6 +107,9 @@
             id="org.eclipse.wst.common.frameworks.datamodel.tests.extended.H"
             preOperationClass="org.eclipse.wst.common.frameworks.datamodel.tests.extended.G"/>
       <operationExtension
+            id="APre2"
+            preOperationClass="org.eclipse.wst.common.frameworks.operations.tests.manager.TestExtendedOperation"/>
+      <operationExtension
             id="org.eclipse.wst.common.frameworks.datamodel.tests.extended.H"/>
    </extension>