blob: c4c6e1771e80df5d0235340cdc48f3444c756046 [file] [log] [blame]
/**
/**
* Copyright (c) 2010, 2012 Ericsson
*
* 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
*
* Description:
*
* Contributors:
* Alvaro Sanchez-Leon - Initial implementation
*
*/
package org.eclipse.mylyn.reviews.r4e.core.model.tests;
import java.io.File;
import java.io.IOException;
import junit.framework.TestCase;
import junit.textui.TestRunner;
import org.apache.commons.io.FileUtils;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.mylyn.reviews.r4e.core.TstGeneral;
import org.eclipse.mylyn.reviews.r4e.core.model.R4EParticipant;
import org.eclipse.mylyn.reviews.r4e.core.model.R4EReview;
import org.eclipse.mylyn.reviews.r4e.core.model.R4EReviewGroup;
import org.eclipse.mylyn.reviews.r4e.core.model.R4EUser;
import org.eclipse.mylyn.reviews.r4e.core.model.serial.IModelReader;
import org.eclipse.mylyn.reviews.r4e.core.model.serial.IModelWriter;
import org.eclipse.mylyn.reviews.r4e.core.model.serial.Persistence.RModelFactoryExt;
import org.eclipse.mylyn.reviews.r4e.core.model.serial.impl.CompatibilityException;
import org.eclipse.mylyn.reviews.r4e.core.model.serial.impl.ResourceHandlingException;
import org.eclipse.mylyn.reviews.r4e.core.model.serial.impl.SerializeFactory;
import org.junit.Test;
/**
* <!-- begin-user-doc --> A test case for the model object '<em><b>R4E Review Group</b></em>'. <!-- end-user-doc -->
*
* @generated
*/
public class R4EReviewGroupTest extends TestCase {
/**
* The fixture for this R4E Review Group test case. <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
protected R4EReviewGroup fixture = null;
private final IModelReader fReader = SerializeFactory.getReader();
private final IModelWriter fWriter = SerializeFactory.getWriter();
private final RModelFactoryExt fFactory = SerializeFactory.getModelExtension();
private static final String fGroupPathStr = "outGroupX";
private static URI fGroupPath = null;
private static final String GROUP_NAME = "Group One";
private static final String REVIEW_NAME1 = "Alpha 1";
private static final String fUser1 = "au 1";
private File fRootTestDir = null;
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
public static void main(String[] args) {
TestRunner.run(R4EReviewGroupTest.class);
}
/**
* Constructs a new R4E Review Group test case with the given name. <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
public R4EReviewGroupTest(String name) {
super(name);
}
/**
* Sets the fixture for this R4E Review Group test case. <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
protected void setFixture(R4EReviewGroup fixture) {
this.fixture = fixture;
}
/**
* Returns the fixture for this R4E Review Group test case. <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
protected R4EReviewGroup getFixture() {
return fixture;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @see junit.framework.TestCase#setUp()
*/
@Override
protected void setUp() throws Exception {
TstGeneral.activateTracer();
String baseDir = System.getProperty("java.io.tmpdir");
if (!baseDir.endsWith(File.separator)) {
baseDir = baseDir + File.separator;
}
fRootTestDir = new File(baseDir + fGroupPathStr + File.separator);
fGroupPath = URI.createFileURI(fRootTestDir.getAbsolutePath());
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @see junit.framework.TestCase#tearDown()
* @generated
*/
@Override
protected void tearDown() throws Exception {
setFixture(null);
// remove test directory
if (fRootTestDir != null && fRootTestDir.exists()) {
FileUtils.deleteDirectory(fRootTestDir);
}
}
/**
* Build elements one by one
*/
public void testGroupReviewCreate() {
R4EReviewGroup group = null;
// required folder path and group name to build the new group file
try {
group = fFactory.createR4EReviewGroup(fGroupPath, GROUP_NAME);
} catch (ResourceHandlingException e) {
e.printStackTrace();
}
assertNotNull(group);
URI uri = group.eResource().getURI();
String expectedURI = fGroupPath.appendSegment("Group_One_group_root.xrer").toString();
assertEquals(expectedURI, uri.toString());
// Deserialise and assert
group = null;
try {
group = fFactory.openR4EReviewGroup(uri);
} catch (ResourceHandlingException e) {
e.printStackTrace();
} catch (CompatibilityException e) {
e.printStackTrace();
}
// validate
assertNotNull(group);
assertEquals(GROUP_NAME, group.getName());
// crate a review
R4EReview review = null;
try {
review = fFactory.createR4EReview(group, REVIEW_NAME1, fUser1);
} catch (ResourceHandlingException e) {
e.printStackTrace();
fail("Exception");
}
assertEquals(REVIEW_NAME1, review.getName());
// re-open the group
group = null;
try {
group = fFactory.openR4EReviewGroup(uri);
} catch (ResourceHandlingException e) {
e.printStackTrace();
fail("Exception");
} catch (CompatibilityException e) {
e.printStackTrace();
fail("Exception");
}
uri = review.eResource().getURI();
// read the review
try {
review = fFactory.openR4EReview(group, review.getName());
} catch (ResourceHandlingException e) {
e.printStackTrace();
fail("Exception");
} catch (CompatibilityException e) {
e.printStackTrace();
fail("Exception");
}
assertEquals(REVIEW_NAME1, review.getName());
// read the participant
R4EUser participant = review.getUsersMap().values().iterator().next();
uri = participant.eResource().getURI();
try {
ResourceSet resSet = participant.eResource().getResourceSet();
participant = fReader.deserializeTopElement(uri, resSet, R4EParticipant.class);
} catch (ResourceHandlingException e) {
e.printStackTrace();
fail("Exception");
}
assertEquals(fUser1, participant.getId());
// Clean up
File folder = new File(URI.decode(fGroupPath.devicePath()));
try {
FileUtils.deleteDirectory(folder);
} catch (IOException e) {
e.printStackTrace();
fail("Exception");
}
}
// /**
// * Validate new serialization vs golden
// */
// public void testSerializeStub() {
// String groupPath = fGroupPath.devicePath();
// String groupName = "Golden Group";
//
// // Serialize
// R4EReviewGroup persistedGroup = SampleR4EModel.createAndSerialize(groupPath, groupName);
//
// // Read actual uri
// URI groupURI = persistedGroup.eResource().getURI();
//
// // Load Group
// R4EReviewGroup loadedGroup = null;
// try {
// loadedGroup = fFactory.openR4EReviewGroup(groupURI);
// } catch (ResourceHandlingException e) {
// e.printStackTrace();
// fail("Exception");
// }
//
// // Verify
// assertEquals(groupName, loadedGroup.getName());
// assertEquals(3, loadedGroup.getReviews().size());
// assertEquals(3, loadedGroup.getReviewsMap().size());
// assertEquals(3, loadedGroup.getUserReviews().size());
//
// //Select the golden file as per operating system
// URI goldenDir = TstGeneral.GOLDEN_GROUP_DIR;
// if (OSPLATFORM.TYPE.isWindowsOS()) {
// goldenDir = TstGeneral.GOLDEN_GROUP_DIRW;
// }
//
// // This check is done comparing the size only. to eliminate the changes from Id values e.g. equal size per id.
// // good enough for the time being.
// boolean same = TstGeneral.compareDirectories(new File(fGroupPath.devicePath()), new File(
// goldenDir.devicePath()));
//
// assertTrue("Contents differ from base directory", same);
//
// // Clean up
// File folder = new File(fWriter.getFolderPath(groupURI).devicePath());
// try {
// FileUtils.deleteDirectory(folder);
// } catch (IOException e) {
// e.printStackTrace();
// fail("Exception");
// }
// }
//
// /**
// * Validate non transients From instances -> disk-ver1 -> instances -> disk-ver2 <br>
// * then compare disk-ver1 equal disk-ver2
// */
// public void testVerifyLoading() {
// // From Objects to Disk
// URI groupFileUri = null;
// try {
// groupFileUri = GoldenStubHandler.serializeStub().eResource().getURI();
// } catch (ResourceHandlingException e) {
// e.printStackTrace();
// fail("Exception");
// }
//
// // deserializes/loads the stub
// // Reload from Disk
// R4EReviewGroup loadedGroup = null;
// ResourceSet resSet = null;
// try {
// loadedGroup = GoldenStubHandler.loadStub(groupFileUri);
// resSet = loadedGroup.eResource().getResourceSet();
// // load all reviews, to associate to the same resourceSet
// List<Review> reviews = loadedGroup.getReviews();
// for (Iterator<Review> iterator = reviews.iterator(); iterator.hasNext();) {
// Review review = iterator.next();
// fFactory.openR4EReview(loadedGroup, ((R4EReview) review).getName());
// }
//
// } catch (ResourceHandlingException e) {
// e.printStackTrace();
// fail("Exception");
// }
//
// // Move the original to different location to save the loaded one in its place
// URI srcDirUri = groupFileUri.trimSegments(1);
// File srcDir = new File(srcDirUri.devicePath());
// File destDir = toDestinationFolder(srcDirUri);
// try {
// FileUtils.moveDirectory(srcDir, destDir);
// } catch (IOException e1) {
// e1.printStackTrace();
// fail("Exception");
// }
//
// // Save it from loaded model
// R4EWriter updater = SerializeFactory.getWriter();
// try {
// updater.saveResources(resSet);
// } catch (ResourceHandlingException e) {
// e.printStackTrace();
// fail("Exception");
// }
//
// boolean result = TstGeneral.compareDirectories(srcDir, destDir);
// assertTrue("Serialized model does not match Loaded one", result);
//
// // CleanUp
// try {
// FileUtils.deleteDirectory(srcDir);
// FileUtils.deleteDirectory(destDir);
// } catch (IOException e) {
// e.printStackTrace();
// fail("Exception");
// }
// }
//
// /**
// * Load from disk and verify transient references
// */
// public void testLoadGoldenGroup() {
// // Read actual uri
// String groupName = "Golden Group";
// File groupfile = new File(TstGeneral.GOLDEN_GROUP_FILE_STR);
// URI groupFileURI = null;
// try {
// groupFileURI = URI.createFileURI(groupfile.getCanonicalPath().toString());
// } catch (IOException e1) {
// e1.printStackTrace();
// fail("Error creating group file uri");
// }
//
// // Load Group
// R4EReviewGroup loadedGroup = null;
// try {
// loadedGroup = fFactory.openR4EReviewGroup(groupFileURI);
// // load all reviews, to associate to the same resourceSet
// Map<String, R4EReview> reviews = loadedGroup.getReviewsMap();
// for (Iterator<String> iterator = reviews.keySet().iterator(); iterator.hasNext();) {
// String reviewName = iterator.next();
// fFactory.openR4EReview(loadedGroup, reviewName);
// }
// } catch (ResourceHandlingException e) {
// e.printStackTrace();
// fail("Exception");
// }
//
// // USER REVIEWS
// // Verify that the group is loaded with user reviews information
// R4EUserReviews tomReviews = loadedGroup.getUserReviews().get("Tom10");
// R4EUserReviews jerryReviews = loadedGroup.getUserReviews().get("Jerry20");
//
// assertNotNull(tomReviews);
// assertNotNull(jerryReviews);
//
// List<String> createdByTom = tomReviews.getCreatedReviews();
// List<String> createdByJerry = jerryReviews.getCreatedReviews();
//
// Set<String> tomInvitedTo = tomReviews.getInvitedToMap().keySet();
// Set<String> jerryInvitedTo = jerryReviews.getInvitedToMap().keySet();
//
// assertTrue(createdByTom.contains("ReviewSampl"));
// assertTrue(createdByTom.contains("ReviewTwo"));
// assertTrue(createdByTom.size() == 2);
// assertTrue(createdByJerry.size() == 0);
//
// assertTrue(tomInvitedTo.contains("ReviewSampl"));
// assertTrue(tomInvitedTo.contains("ReviewTwo"));
// assertTrue(tomInvitedTo.size() == 2);
//
// assertTrue(jerryInvitedTo.contains("ReviewSampl"));
// assertTrue(jerryInvitedTo.contains("ReviewTwo"));
// assertTrue(jerryInvitedTo.size() == 2);
//
// // The number of created resources shall match the number of physical files
// String folderPath = groupFileURI.trimSegments(1).devicePath();
// File goldenFolder = new File(folderPath);
// @SuppressWarnings("unchecked")
// Collection<File> files = FileUtils.listFiles(goldenFolder, TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE);
// List<Resource> resources = loadedGroup.eResource().getResourceSet().getResources();
// boolean goodNumResources = (files.size() == resources.size());
// if (!goodNumResources) {
// System.out.println("Unexpected number of resources found: ");
// for (Iterator<Resource> iterator = resources.iterator(); iterator.hasNext();) {
// Resource resource = iterator.next();
// System.out.println("\t" + resource.getURI());
// }
// }
//
// assertTrue(goodNumResources);
//
// // TODO: The following verifications are using hard coded values which requires more maintenance, it should be
// // possible to serialize a reference model where transient references are converted to non transient, then load
// // from TRANSIENTS model to serialize in non transient form to perform directory comparison of the two non
// // transient models on disk
//
// // Verify
// assertEquals(groupName, loadedGroup.getName());
// assertEquals(3, loadedGroup.getReviews().size());
// assertEquals(3, loadedGroup.getReviewsMap().size());
// assertEquals(3, loadedGroup.getUserReviews().size());
// assertNotNull(((R4EReview) loadedGroup.getReviews().get(0)).getName());
//
// // Verify Reviews Ids Map
// List<Review> reviews = loadedGroup.getReviews();
// R4EReview review = null;
// for (Iterator<Review> iterator = reviews.iterator(); iterator.hasNext();) {
// R4EReview tmpReview = (R4EReview) iterator.next();
// if (tmpReview.getName().equals("ReviewTwo")) {
// review = tmpReview;
// break;
// }
// }
//
// assertNotNull(review);
// assertEquals(30, review.getIdsMap().size()); // 30 expected ids
//
// // Verify Anomaly, at least one expected
// R4EAnomaly anomaly = (R4EAnomaly) review.getTopics().get(0);
// assertEquals(2, anomaly.getComments().size()); // 2 comments to the anomaly
//
// R4EUser user = review.getCreatedBy();
// // Verify Review.createdBy
// assertEquals("Tom10", user.getId());
//
// // verify user review instance matches
// assertEquals(user.getReviewInstance(), review);
//
// // verify group folder
// File storedFolder = new File(loadedGroup.getFolder());
// File groupResourceFolder = new File(loadedGroup.eResource().getURI().trimSegments(1).devicePath());
// assertEquals(storedFolder, groupResourceFolder);
// }
/**
* Make sure the invited to map is still usable after re-opening of a review.
*/
@Test
public void testReviewReopening() {
// From Objects to Disk
R4EReviewGroup loadedGroup = null;
try {
loadedGroup = GoldenStubHandler.serializeStub();
} catch (ResourceHandlingException e) {
e.printStackTrace();
fail("Exception");
} catch (CompatibilityException e) {
e.printStackTrace();
fail("Exception");
}
// initialise local refs
String dReviewName = "ReviewTwo";
String dUser = "Jerry20";
// Save a reference to the initial review
R4EReview oReview = loadedGroup.getUserReviews().get(dUser).getInvitedToMap().get(dReviewName);
R4EReview nReview = null;
// Action: Close the review
fFactory.closeR4EReview(oReview);
try {
nReview = fFactory.openR4EReview(loadedGroup, dReviewName);
} catch (ResourceHandlingException e) {
e.printStackTrace();
fail("Exception");
} catch (CompatibilityException e) {
e.printStackTrace();
fail("Exception");
}
assertNotNull("Opened Review is null", nReview);
// A new instance of the review should have been created
assertNotSame(oReview, nReview);
// Read the review reference available in the invitedto map
R4EReview wasInvitedTo = loadedGroup.getUserReviews().get(dUser).getInvitedToMap().get(dReviewName);
// The reference resolved from the invited to, shall be the same as the new one re-opened and without manually
// refreshing the reference to the new instance
assertSame(nReview, wasInvitedTo);
// The container group shall be re-initialised as part of the review opening sequence
EObject rContainer = nReview.eContainer();
assertNotNull(rContainer);
// Make sure that the reference to the parent group is updated to the original parent group
assertSame(loadedGroup, nReview.eContainer());
}
/**
* @param groupFileUri
* @return
*/
private File toDestinationFolder(URI groupFileUri) {
String toReplace = TstGeneral.GROUP_PATH_STR;
String forReplace = toReplace + "Y";
String path = URI.decode(groupFileUri.devicePath());
// modify to destination folder
path = path.replace(toReplace, forReplace);
File destFile = new File(path);
return destFile;
}
} // R4EReviewGroupTest