From 05f1af55e0303f33fa6f046eeaa221f1b2a32066 Mon Sep 17 00:00:00 2001
From: Andreas Gohr <andi@splitbrain.org>
Date: Fri, 24 Jan 2014 17:50:40 +0100
Subject: [PATCH] add unit test to check language files for validity

this should help with applying pull requests that do come not from the
translation interface as it makes sure the files will be at least
syntactically correct.
---
 _test/tests/general/general_languagelint.php | 47 ++++++++++++++++++++
 1 file changed, 47 insertions(+)
 create mode 100644 _test/tests/general/general_languagelint.php

diff --git a/_test/tests/general/general_languagelint.php b/_test/tests/general/general_languagelint.php
new file mode 100644
index 000000000..c11462640
--- /dev/null
+++ b/_test/tests/general/general_languagelint.php
@@ -0,0 +1,47 @@
+<?php
+
+class general_languagelint_test extends DokuWikiTest {
+
+
+    function test_core() {
+        $this->checkFiles(glob(DOKU_INC.'inc/lang/*/*.php'));
+    }
+
+    function test_plugins() {
+        $this->checkFiles(glob(DOKU_INC.'lib/plugins/*/lang/*/*.php'));
+    }
+
+    /**
+     * Run checks over the given PHP language files
+     *
+     * @param $files
+     */
+    private function checkFiles($files){
+        foreach($files as $file){
+            // try to load the file
+            include $file;
+            // check it defines an array
+            $this->assertTrue(is_array($lang), $file);
+            unset($lang);
+
+            $this->checkUgly($file);
+        }
+    }
+
+    /**
+     * Checks if the file contains any ugly things like leading whitespace, BOM or trailing
+     * PHP closing mark
+     *
+     * @param $file
+     * @throws Exception
+     */
+    private function checkUgly($file){
+        $content = rtrim(file_get_contents($file));
+        if(substr($content,0,5) != '<?php')
+            throw new Exception("$file does not start with '<?php' - check for BOM");
+
+        if(substr($content,-2) == '?>')
+            throw new Exception("$file ends with '?>' - remove it!");
+    }
+
+}
-- 
GitLab