001: /*
002: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
003: *
004: * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
005: *
006: * The contents of this file are subject to the terms of either the GNU
007: * General Public License Version 2 only ("GPL") or the Common
008: * Development and Distribution License("CDDL") (collectively, the
009: * "License"). You may not use this file except in compliance with the
010: * License. You can obtain a copy of the License at
011: * http://www.netbeans.org/cddl-gplv2.html
012: * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
013: * specific language governing permissions and limitations under the
014: * License. When distributing the software, include this License Header
015: * Notice in each file and include the License file at
016: * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this
017: * particular file as subject to the "Classpath" exception as provided
018: * by Sun in the GPL Version 2 section of the License file that
019: * accompanied this code. If applicable, add the following below the
020: * License Header, with the fields enclosed by brackets [] replaced by
021: * your own identifying information:
022: * "Portions Copyrighted [year] [name of copyright owner]"
023: *
024: * Contributor(s):
025: *
026: * The Original Software is NetBeans. The Initial Developer of the Original
027: * Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun
028: * Microsystems, Inc. All Rights Reserved.
029: *
030: * If you wish your version of this file to be governed by only the CDDL
031: * or only the GPL Version 2, indicate your decision by adding
032: * "[Contributor] elects to include this software in this distribution
033: * under the [CDDL or GPL Version 2] license." If you do not indicate a
034: * single choice of license, a recipient has the option to distribute
035: * your version of this file under either the CDDL, the GPL Version 2 or
036: * to extend the choice of license to its licensees as provided above.
037: * However, if you add GPL Version 2 code and therefore, elected the GPL
038: * Version 2 license, then the option applies only if the new code is
039: * made subject to such option by the copyright holder.
040: */
041:
042: package org.netbeans.modules.cnd.test;
043:
044: import java.io.File;
045: import java.io.IOException;
046: import org.netbeans.api.editor.mimelookup.MimePath;
047: import org.netbeans.api.editor.mimelookup.test.MockMimeLookup;
048: import org.netbeans.junit.Manager;
049: import org.netbeans.junit.MockServices;
050: import org.netbeans.junit.NbTestCase;
051: import org.netbeans.modules.cnd.editor.cplusplus.CCKit;
052: import org.netbeans.modules.cnd.editor.cplusplus.CKit;
053:
054: /**
055: * IMPORTANT NOTE:
056: * If This class is not compiled with the notification about not resolved
057: * NbTestCase class => NB JUnit module is absent in target platform
058: *
059: * To solve this problem NB JUnit must be installed
060: * For instance from Netbeans Update Center Beta:
061: * - start target(!) platform as IDE from command line (/opt/NBDEV/bin/netbeans)
062: * - in opened IDE go into Tools->Update Center
063: * - select "Netbeans Update Center Beta"
064: * -- if absent => configure it using the following url as example
065: * http://www.netbeans.org/updates/beta/55_{$netbeans.autoupdate.version}_{$netbeans.autoupdate.regnum}.xml?{$netbeans.hash.code}
066: * - press Next
067: * - in Libraries subfoler found NB JUnit module
068: * - Add it and install
069: * - close target IDE and reload development IDE to update the information of
070: * available modules in target's platform
071: *
072: * if NBDEV is NB-5.5 based => INSANE module must be installed the same way in target platform
073: *
074: * On Windows cnd must be in the path without spaces for correct resolving golden and data files by junit harness
075: */
076:
077: /**
078: * base class to isolate using of NbJUnit library
079: * ${xtest.data} vallue is usually ${module}/test/unit/data folder
080: * @author Vladimir Voskresensky
081: */
082: public abstract class BaseTestCase extends NbTestCase {
083:
084: /** Creates a new instance of BaseTestCase */
085: public BaseTestCase(String testName) {
086: super (testName);
087: }
088:
089: @Override
090: protected void tearDown() throws Exception {
091: super .tearDown();
092: }
093:
094: @Override
095: protected void setUp() throws Exception {
096: super .setUp();
097:
098: MockServices.setServices(MockMimeLookup.class);
099: MimePath mimePath = MimePath.parse("text/x-c++");
100: MockMimeLookup.setInstances(mimePath, new CCKit());
101: mimePath = MimePath.parse("text/x-c");
102: MockMimeLookup.setInstances(mimePath, new CKit());
103: }
104:
105: /**
106: * Get the test method specific data file;
107: * usually it is ${xtest.data}/${classname}/filename
108: * @see getTestCaseDataClass
109: * @see getTestCaseDataDir
110: */
111: protected File getDataFile(String filename) {
112: return new File(getTestCaseDataDir(), filename);
113: }
114:
115: /** Get the test method specific golden file as ${xtest.data}/goldenfiles/${classname}/filename
116: * @param filename filename to get from golden files directory
117: * @return golden file
118: * @see getTestCaseGoldenDataClass
119: */
120: @Override
121: public File getGoldenFile(String filename) {
122: String fullClassName = getTestCaseGoldenDataClass().getName();
123: String goldenFileName = fullClassName.replace('.',
124: File.separatorChar)
125: + File.separator + filename;
126: File goldenFile = new File(getDataDir() + "/goldenfiles/"
127: + goldenFileName);
128: return goldenFile;
129: }
130:
131: /**
132: * this method is responsible for construction of part
133: * ${classname}
134: * in path ${xtest.data}/goldenfiles/${classname}/filename
135: * @see getGoldenFile
136: */
137: protected Class getTestCaseGoldenDataClass() {
138: return getTestCaseDataClass();
139: }
140:
141: /**
142: * Get the test method specific data dir
143: * usually it is ${xtest.data}/${classname}
144: * @see getTestCaseDataClass
145: */
146: protected File getTestCaseDataDir() {
147: File dataDir = super .getDataDir();
148: String fullClassName = getTestCaseDataClass().getName();
149: String filePath = fullClassName
150: .replace('.', File.separatorChar);
151: return Manager.normalizeFile(new File(dataDir, filePath));
152: }
153:
154: /**
155: * this method is responsible for construction of part
156: * ${classname}
157: * in path ${xtest.data}/${classname}
158: * @see getGoldenFile
159: */
160: protected Class getTestCaseDataClass() {
161: return this .getClass();
162: }
163:
164: /** Compares golden file and reference log. If both files are the
165: * same, test passes. If files differ, test fails and diff file is
166: * created (diff is created only when using native diff, for details
167: * see JUnit module documentation)
168: * @param testFilename reference log file name
169: * @param goldenFilename golden file name
170: */
171: public void compareReferenceFiles(String testFilename,
172: String goldenFilename) {
173: try {
174: File goldenFile = getGoldenFile(goldenFilename);
175: File testFile = new File(getWorkDir(), testFilename);
176:
177: if (CndCoreTestUtils.diff(testFile, goldenFile, null)) {
178: // copy golden
179: File goldenDataFileCopy = new File(getWorkDir(),
180: goldenFilename + ".golden");
181: CndCoreTestUtils.copyToWorkDir(goldenFile,
182: goldenDataFileCopy); // NOI18N
183: fail("Files differ; check " + goldenDataFileCopy);
184: }
185: } catch (IOException ioe) {
186: fail("Could not obtain working direcory " + ioe);
187: }
188: }
189:
190: /** Compares default golden file and default reference log. If both files are the
191: * same, test passes. If files differ, test fails and default diff (${methodname}.diff)
192: * file is created (diff is created only when using native diff, for details
193: * see JUnit module documentation)
194: */
195: @Override
196: public void compareReferenceFiles() {
197: compareReferenceFiles(this .getName() + ".ref", this .getName()
198: + ".ref");
199: }
200: }
|