Index: tests/standalone/io/addlatexhash_test.dart |
diff --git a/tests/standalone/io/addlatexhash_test.dart b/tests/standalone/io/addlatexhash_test.dart |
old mode 100644 |
new mode 100755 |
index 98f1ba52be528e5aff4420054da4f03526ccfceb..dbefe39ff8a352f7a3b08c8b0342c5edd8b6f59f |
--- a/tests/standalone/io/addlatexhash_test.dart |
+++ b/tests/standalone/io/addlatexhash_test.dart |
@@ -1,3 +1,4 @@ |
+#!/usr/bin/env dart |
// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
// for details. All rights reserved. Use of this source code is governed by a |
// BSD-style license that can be found in the LICENSE file. |
@@ -54,11 +55,72 @@ testSisp() { |
oneTestSisp(sispIsDartEnd, "End", "whatever else ..", false); |
} |
+// Check that the hash values of paragraphs in the specially prepared |
+// LaTeX source 'addlatexhash_test_src.tex' are identical in groups |
+// of eight (so we get 8 identical hash values, then another hash |
+// value 8 times, etc.) |
+testSameHash() { |
+ // set up temporary directory to hold output |
+ final tmpDir = Directory.systemTemp.createTempSync("addlatexhash_test"); |
+ final tmpDirPath = tmpDir.path; |
+ |
+ // file names/paths for file containing groups of 8 variants of a paragraph |
+ const par8timesName = "addlatexhash_test_src"; |
+ const par8timesFileName = "$par8timesName.tex"; |
+ final par8timesDirPath = path.join(dartRootDir, "tests", "standalone", "io"); |
+ final par8timesPath = path.join(par8timesDirPath, par8timesFileName); |
+ final tmpPar8timesPath = path.join(tmpDirPath, par8timesFileName); |
+ |
+ // file names paths for output |
+ final hashName = par8timesName + "-hash"; |
+ final hashFileName = "$hashName.tex"; |
+ final hashPath = path.join(tmpDirPath, hashFileName); |
+ final listName = par8timesName + "-list"; |
+ final listFileName = "$listName.txt"; |
+ final listPath = path.join(tmpDirPath, listFileName); |
+ |
+ // dart executable |
+ final dartExecutable = Platform.executable; |
+ if (dartExecutable == "") throw "dart executable not available"; |
+ |
+ // actions to take |
+ runAddHash() => |
+ Process.runSync(dartExecutable, |
+ [path.join(dartRootPath, "tools", "addlatexhash.dart"), |
+ tmpPar8timesPath, |
+ hashPath, |
+ listPath]); |
+ |
+ // perform test |
+ new File(par8timesPath).copySync(tmpPar8timesPath); |
+ checkAction(runAddHash(), "addlatexhash.dart failed"); |
+ var listFile = new File(listPath); |
+ var listLines = listFile.readAsLinesSync(); |
+ var latestLine = null; |
+ var sameCount = 0; |
+ for (var line in listLines) { |
+ if (!line.startsWith(" ")) continue; // section marker |
+ if (line.startsWith(" %")) continue; // transformed text "comment" |
+ if (line != latestLine) { |
+ // new hash, check for number of equal hashes, then reset |
+ if (sameCount % 8 == 0) { |
+ // saw zero or more blocks of 8 identical hash values: OK |
+ latestLine = line; |
+ sameCount = 1; |
+ } else { |
+ throw "normalization failed to produce same result"; |
+ } |
+ } else { |
+ sameCount++; |
+ } |
+ } |
+} |
+ |
// Check that the LaTeX source transformation done by addlatexhash.dart |
// does not affect the generated output, as seen via dvi2tty and diff. |
// NB: Not part of normal testing (only local): latex and dvi2tty are |
// not installed in the standard test environment. |
-testNoChange() { |
+testSameDVI() { |
// set up /tmp directory to hold output |
final tmpDir = Directory.systemTemp.createTempSync("addlatexhash_test"); |
final tmpDirPath = tmpDir.path; |
@@ -83,15 +145,24 @@ testNoChange() { |
final hashPath = path.join(tmpDirPath, hashFileName); |
final hashDviPath = path.join(tmpDirPath, "$hashName.dvi"); |
- // actions to take |
+ final listName = "$specName-list"; |
+ final listFileName = "$listName.txt"; |
+ final listPath = path.join(tmpDirPath, listFileName); |
+ |
+ // dart executable |
+ final dartExecutable = Platform.executable; |
+ if (dartExecutable == "") throw "dart executable not available"; |
+ |
+ // actions to take; rely on having latex and dvi2tty in PATH |
runLatex(fileName,workingDirectory) => |
Process.runSync("latex", [fileName], workingDirectory: workingDirectory); |
runAddHash() => |
- Process.runSync("dart", |
+ Process.runSync(dartExecutable, |
[path.join(dartRootPath, "tools", "addlatexhash.dart"), |
tmpSpecPath, |
- hashPath]); |
+ hashPath, |
+ listPath]); |
runDvi2tty(dviFile) => |
Process.runSync("dvi2tty", [dviFile], workingDirectory: tmpDir.path); |
@@ -100,12 +171,16 @@ testNoChange() { |
checkAction(runDvi2tty(file), "dvitty on $subject failed"); |
// perform test |
- new File(styPath).copySync(tmpStyPath); |
+ var renewLMHashCmd = r"\renewcommand{\LMHash}[1]{\OriginalLMHash{xxxx}}"; |
+ new File(styPath) |
+ .copySync(tmpStyPath) |
+ .writeAsStringSync(renewLMHashCmd, mode: FileMode.APPEND); |
new File(specPath).copySync(tmpSpecPath); |
+ |
+ checkAction(runAddHash(),"addlatexhash.dart failed"); |
for (var i = 0; i < 5; i++) { |
checkAction(runLatex(specName, tmpDirPath), "LaTeX on spec failed"); |
} |
- checkAction(runAddHash(),"addlatexhash.dart failed"); |
for (var i = 0; i < 5; i++) { |
checkAction(runLatex(hashFileName, tmpDirPath), "LaTeX on output failed"); |
} |
@@ -117,6 +192,7 @@ testNoChange() { |
main([args]) { |
testCutMatch(); |
testSisp(); |
+ testSameHash(); |
// latex and dvi2tty are not installed in the standard test environment |
- if (args.length > 0 && args[0] == "local") testNoChange(); |
+ if (args.length > 0 && args[0] == "local") testSameDVI(); |
} |