//------------------------------------------------------------------------------ // Copyright (c) 2005, 2006 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 implementation //------------------------------------------------------------------------------ package org.eclipse.epf.library.tester.impl.testcommands; import java.io.File; import org.eclipse.epf.common.utils.XMLUtil; import org.eclipse.epf.library.tester.OutputDiffAnalyzor; import org.eclipse.epf.library.tester.iface.TCExeReply; import org.eclipse.epf.library.tester.impl.TestCommandImpl; import org.eclipse.epf.library.tester.impl.TestCommandMgr; import org.w3c.dom.Document; import org.w3c.dom.Element; /** * A test command class * * @author Weiping Lu * @since 1.0 * */ public class TCCompareToGoldenFile extends TestCommandImpl { public void parse(Element element) { super.parse(element); setAttribute(AT_GoldenFileName, element.getAttribute(AT_GoldenFileName)); setAttribute(AT_DiffCount, element.getAttribute(AT_DiffCount)); setAttribute(AT_ElementCount, element.getAttribute(AT_ElementCount)); } public TCExeReply execute() { String goldenFileName = getAttribute(AT_GoldenFileName); int diffCount = parseInteger(getAttribute(AT_DiffCount), 0); int elementCount = parseInteger(getAttribute(AT_ElementCount), 0); TestCommandMgr owner = getOwner(); Document outputDocument = owner.getOutputDocument(); if (outputDocument == null) { return null; } String outputPath = owner.getOutputPath(); try { XMLUtil.saveDocument(outputDocument, outputPath); } catch (Exception e){ e.printStackTrace(); } String path = owner.getTestFile().getAbsolutePath(); int ix = path.lastIndexOf("."); path = path.substring(0, ix) + ".xml"; File goldenOutput = new File(path); if (goldenOutput.exists()) { OutputDiffAnalyzor analysor = new OutputDiffAnalyzor(owner, null, outputDocument, goldenOutput, new File(outputPath)); analysor.compare(); if (analysor.getDiffCount() != diffCount || elementCount != 0 && analysor.getElemComparedCount() != elementCount) { String msg = "Ouptut and golden file comparison fails! "; owner.trace(msg); return new TCExeReplyImpl(msg, false); } } return null; } }