/*******************************************************************************
* Copyright (c) 2014 itemis AG 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:
* Mark Broerkens (itemis AG) - initial API and implementation
*******************************************************************************/
package org.eclipse.rmf.tests.reqif10.serialization.uc001.tc1700;
import static org.junit.Assert.assertEquals;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import junit.framework.Assert;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature.Setting;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.rmf.reqif10.ReqIF;
import org.eclipse.rmf.tests.reqif10.serialization.util.AbstractTestCase;
import org.junit.BeforeClass;
import org.junit.Test;
@SuppressWarnings("nls")
public class TC1700SpecRelationMultifileTests extends AbstractTestCase {
static final String TEST_CASE_ID = "TC1700";
static final String REFERENCE_DATA_FILENAME1 = getWorkingFileName(getReferenceDataFileName(TEST_CASE_ID + "1", false));
static final String REFERENCE_DATA_FILENAME2 = getWorkingFileName(getReferenceDataFileName(TEST_CASE_ID + "2", false));
static final String REFERENCE_DATA_ARCHIVE_FILENAME = getWorkingFileName(getReferenceDataFileName(TEST_CASE_ID, true));
static final String EXPORT_DATA_FILENAME1 = getWorkingFileName(getFirstExportFileName(TEST_CASE_ID + "1", false));
static final String EXPORT_DATA_FILENAME2 = getWorkingFileName(getFirstExportFileName(TEST_CASE_ID + "2", false));
static final String EXPORT_DATA_ARCHIVE_FILENAME = getWorkingFileName(getFirstExportFileName(TEST_CASE_ID, true));
static ReqIF originalReqIF1 = null;
static ReqIF originalReqIF2 = null;
static List<ReqIF> originalReqIFs = null;
static ReqIF loadedReqIF1 = null;
static ReqIF loadedReqIF2 = null;
static List<ReqIF> loadedReqIFs = null;
@BeforeClass
public static void setupOnce() throws Exception {
AbstractTestCase.setupOnce();
// create the models
TC1700SpecRelationMultifile1ModelBuilder modelBuilder = new TC1700SpecRelationMultifile1ModelBuilder();
originalReqIF1 = modelBuilder.getReqIF();
originalReqIF2 = new TC1700SpecRelationMultifile2ModelBuilder(modelBuilder).getReqIF();
originalReqIFs = new ArrayList<ReqIF>();
originalReqIFs.add(originalReqIF1);
originalReqIFs.add(originalReqIF2);
// save as reqifz
saveReqIFsToZip(originalReqIFs, REFERENCE_DATA_ARCHIVE_FILENAME, getXMLPersistenceMappingResourceSet());
loadedReqIFs = loadReqIFFromZip(REFERENCE_DATA_ARCHIVE_FILENAME, getXMLPersistenceMappingResourceSet());
// save as separate reqif files
ResourceSet saveResourceSet = getXMLPersistenceMappingResourceSet();
saveReqIFFile(originalReqIF1, REFERENCE_DATA_FILENAME1, saveResourceSet);
saveReqIFFile(originalReqIF2, REFERENCE_DATA_FILENAME2, saveResourceSet);
ResourceSet loadResourceSet = getXMLPersistenceMappingResourceSet();
loadedReqIF1 = loadReqIFFile(REFERENCE_DATA_FILENAME1, loadResourceSet);
loadedReqIF2 = loadReqIFFile(REFERENCE_DATA_FILENAME1, loadResourceSet);
}
@Test
public void testSchemaCompliance1() throws Exception {
validateAgainstSchema(REFERENCE_DATA_FILENAME1);
}
@Test
public void testSchemaCompliance2() throws Exception {
validateAgainstSchema(REFERENCE_DATA_FILENAME2);
}
@Test
public void testNoProxies() throws IOException {
ResourceSet resourceSet = loadedReqIFs.get(0).eResource().getResourceSet();
EcoreUtil.resolveAll(resourceSet);
Map<EObject, Collection<Setting>> map = EcoreUtil.ProxyCrossReferencer.find(loadedReqIFs);
assertEquals(0, map.size());
}
@Test
public void testResave() throws IOException {
try {
List<ReqIF> clonedReqIFs = new ArrayList<ReqIF>();
for (ReqIF reqIF: loadedReqIFs) {
clonedReqIFs.add(EcoreUtil.copy(reqIF));
}
saveReqIFsToZip(clonedReqIFs, EXPORT_DATA_ARCHIVE_FILENAME, getXMLPersistenceMappingResourceSet());
} catch (IOException ioe) {
Assert.assertFalse("We shall be able to save without exception. However the following exception occurred: " + ioe.toString(), true);
}
}
}