From 6e86c83179327e20b828999823f303e14bfd3131 Mon Sep 17 00:00:00 2001
From: Demian Katz <demian.katz@villanova.edu>
Date: Fri, 7 Nov 2014 14:43:46 -0500
Subject: [PATCH] Adding test for language file consistency. - Resolves
 VUFIND-760.

---
 .../src/VuFind/I18n/ExtendedIniNormalizer.php | 14 +++-
 .../I18n/ExtendedIniNormalizerTest.php        | 67 +++++++++++++++++++
 2 files changed, 80 insertions(+), 1 deletion(-)
 create mode 100644 module/VuFind/tests/unit-tests/src/VuFindTest/I18n/ExtendedIniNormalizerTest.php

diff --git a/module/VuFind/src/VuFind/I18n/ExtendedIniNormalizer.php b/module/VuFind/src/VuFind/I18n/ExtendedIniNormalizer.php
index 50643faa9cd..fcde521fe2e 100644
--- a/module/VuFind/src/VuFind/I18n/ExtendedIniNormalizer.php
+++ b/module/VuFind/src/VuFind/I18n/ExtendedIniNormalizer.php
@@ -66,6 +66,18 @@ class ExtendedIniNormalizer
      * @return void
      */
     public function normalizeFile($file)
+    {
+        file_put_contents($file, $this->normalizeFileToString($file));
+    }
+
+    /**
+     * Normalize a file from disk and returns the result as a string.
+     *
+     * @param string $file Filename.
+     *
+     * @return string
+     */
+    public function normalizeFileToString($file)
     {
         $reader = new Translator\Loader\ExtendedIniReader();
 
@@ -79,7 +91,7 @@ class ExtendedIniNormalizer
 
         $comments = $this->extractComments($fileArray);
         $strings = $this->formatAsString($reader->getTextDomain($fileArray, false));
-        file_put_contents($file, $comments . $strings);
+        return $comments . $strings;
     }
 
     /**
diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/I18n/ExtendedIniNormalizerTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/I18n/ExtendedIniNormalizerTest.php
new file mode 100644
index 00000000000..858edb5e9a9
--- /dev/null
+++ b/module/VuFind/tests/unit-tests/src/VuFindTest/I18n/ExtendedIniNormalizerTest.php
@@ -0,0 +1,67 @@
+<?php
+/**
+ * ExtendedIniNormalizer Test Class
+ *
+ * PHP version 5
+ *
+ * Copyright (C) Villanova University 2010.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * @category VuFind2
+ * @package  Tests
+ * @author   Demian Katz <demian.katz@villanova.edu>
+ * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
+ * @link     http://vufind.org/wiki/vufind2:unit_tests Wiki
+ */
+namespace VuFindTest\I18n;
+use VuFind\I18n\ExtendedIniNormalizer;
+
+/**
+ * ExtendedIniNormalizer Test Class
+ *
+ * @category VuFind2
+ * @package  Tests
+ * @author   Demian Katz <demian.katz@villanova.edu>
+ * @author   Chris Hallberg <challber@villanova.edu>
+ * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
+ * @link     http://vufind.org/wiki/vufind2:unit_tests Wiki
+ */
+class ExtendedIniNormalizerTest extends \VuFindTest\Unit\TestCase
+{
+    /**
+     * Test consistent normalization of translation files on disk. This tests not
+     * only the functionality of ExtendedIniNormalizer but also the integrity of
+     * the language files themselves.
+     *
+     * @return void
+     */
+    public function testLanguageFileIntegrity()
+    {
+        $normalizer = new ExtendedIniNormalizer();
+        $langDir = realpath(__DIR__ . '/../../../../../../../languages');
+        $handle = opendir($langDir);
+        while ($file = readdir($handle)) {
+            if (substr($file, -4) == '.ini') {
+                $full = $langDir . '/' . $file;
+                $this->assertEquals(
+                    file_get_contents($full),
+                    $normalizer->normalizeFileToString($full),
+                    $file
+                );
+            }
+        }
+        closedir($handle);
+    }
+}
\ No newline at end of file
-- 
GitLab