From 4a9d6b92c12ded3bf13f0039e947910bc7f45f88 Mon Sep 17 00:00:00 2001 From: Peter Rotich <peter@enhancesoft.com> Date: Sat, 24 Mar 2018 07:47:21 +0000 Subject: [PATCH] Lint Test: Add var_dump checks This commit adds var_dump test along with a few enhancements on the test script. --- include/class.export.php | 2 +- include/class.pdf.php | 4 ++ include/class.task.php | 2 +- include/class.ticket.php | 2 +- setup/test/run-tests.php | 2 +- setup/test/tests/class.test.php | 27 +++++++------ setup/test/tests/stubs.php | 45 ++++++++++++++++++++++ setup/test/tests/test.extra-whitespace.php | 7 ++-- setup/test/tests/test.jslint.php | 3 +- setup/test/tests/test.shortopentags.php | 5 ++- setup/test/tests/test.signals.php | 15 ++------ setup/test/tests/test.syntax.php | 6 ++- setup/test/tests/test.undefinedmethods.php | 8 +++- setup/test/tests/test.var-dump.php | 27 +++++++++++++ 14 files changed, 118 insertions(+), 37 deletions(-) create mode 100644 setup/test/tests/test.var-dump.php diff --git a/include/class.export.php b/include/class.export.php index 6a25afc4f..3a47bcc94 100644 --- a/include/class.export.php +++ b/include/class.export.php @@ -390,7 +390,7 @@ class ResultSetExporter { function dump() { # Useful for debug output while ($row=$this->nextArray()) { - var_dump($row); + var_dump($row); //nolint } } } diff --git a/include/class.pdf.php b/include/class.pdf.php index c12d071e8..cc395f388 100644 --- a/include/class.pdf.php +++ b/include/class.pdf.php @@ -45,6 +45,10 @@ class mPDFWithLocalImages extends mPDF { ); return call_user_func_array(array('parent', 'WriteHtml'), $args); } + + function output($name, $dest) { + return parent::Output($name, $dest); + } } class Ticket2PDF extends mPDFWithLocalImages diff --git a/include/class.task.php b/include/class.task.php index 145627245..367fa6062 100644 --- a/include/class.task.php +++ b/include/class.task.php @@ -995,7 +995,7 @@ class Task extends TaskModel implements RestrictedAccess, Threadable { $pdf = new Task2PDF($this, $options); $name = 'Task-'.$this->getNumber().'.pdf'; - Http::download($name, 'application/pdf', $pdf->Output($name, 'S')); + Http::download($name, 'application/pdf', $pdf->output($name, 'S')); //Remember what the user selected - for autoselect on the next print. $_SESSION['PAPER_SIZE'] = $options['psize']; exit; diff --git a/include/class.ticket.php b/include/class.ticket.php index cbfa76580..3d7e148ca 100644 --- a/include/class.ticket.php +++ b/include/class.ticket.php @@ -3089,7 +3089,7 @@ implements RestrictedAccess, Threadable, Searchable { $pdf = new Ticket2PDF($this, $psize, $notes); $name = 'Ticket-'.$this->getNumber().'.pdf'; - Http::download($name, 'application/pdf', $pdf->Output($name, 'S')); + Http::download($name, 'application/pdf', $pdf->output($name, 'S')); //Remember what the user selected - for autoselect on the next print. $_SESSION['PAPER_SIZE'] = $psize; exit; diff --git a/setup/test/run-tests.php b/setup/test/run-tests.php index fe55e681e..9834aa90a 100644 --- a/setup/test/run-tests.php +++ b/setup/test/run-tests.php @@ -43,7 +43,7 @@ if (function_exists('pcntl_signal')) { foreach (glob_recursive(dirname(__file__)."/tests/test.*.php") as $t) { if (strpos($t,"class.") !== false) continue; - $class = (include $t); + $class = @(include $t); if (!is_string($class)) continue; if($selected_test && ($class != $selected_test)) diff --git a/setup/test/tests/class.test.php b/setup/test/tests/class.test.php index 5dd6097dc..db05c2c16 100644 --- a/setup/test/tests/class.test.php +++ b/setup/test/tests/class.test.php @@ -31,10 +31,15 @@ class Test { function teardown() { } - static function getAllScripts($excludes=true, $root=false) { + function ignore3rdparty() { + return true; + } + + function getAllScripts($pattern='*.php', $root=false, $excludes=true) { $root = $root ?: get_osticket_root_path(); + $excludes = $excludes ?: $this->ignore3rdparty(); $scripts = array(); - foreach (glob_recursive("$root/*.php") as $s) { + foreach (glob_recursive("$root/$pattern") as $s) { $found = false; if ($excludes) { foreach (self::$third_party_paths as $p) { @@ -88,20 +93,20 @@ class Test { foreach ($rc->getMethods() as $m) { if (stripos($m->name, 'test') === 0) { $this->setup(); - call_user_func(array($this, $m->name)); + @call_user_func(array($this, $m->name)); $this->teardown(); } } } - function line_number_for_offset($filename, $offset) { - $lines = file($filename); - $bytes = $line = 0; - while ($bytes < $offset) { - $bytes += strlen(array_shift($lines)); - $line += 1; - } - return $line; + function line_number_for_offset($file, $offset) { + + if (is_file($file)) + $content = file_get_contents($file, false, null, 0, $offset); + else + $content = @substr($file, 0, $offset); + + return count(explode("\n", $content)); } } diff --git a/setup/test/tests/stubs.php b/setup/test/tests/stubs.php index 0ad233926..6a7b0d285 100644 --- a/setup/test/tests/stubs.php +++ b/setup/test/tests/stubs.php @@ -104,6 +104,7 @@ class Phar { function startBuffering() {} function stopBuffering() {} function setSignatureAlgorithm() {} + function compress() {} } class ZipArchive { @@ -114,6 +115,10 @@ class ZipArchive { function setExternalAttributesName() {} } +class Spyc { + function YAMLLoad() {} +} + class finfo { function file() {} function buffer() {} @@ -176,6 +181,7 @@ class NumberFormatter { class Collator { function setStrength() {} + function compare() {} } class Aws_Route53_Client { @@ -189,4 +195,43 @@ class Memcache { function set() {} function get() {} } + +class Crypt_Hash { + function setKey() {} + function setIV() {} +} + +class Crypt_AES { + function setKey() {} + function setIV() {} + function enableContinuousBuffer() {} +} + +class PEAR { + function isError() {} + function mail() {} +} + +class mail { + function factory() {} + function connect() {} + function disconnect() {} +} + +class Mail_mime { + function headers() {} + function setTXTBody() {} + function setHTMLBody() {} + function addCc() {} +} + +class mPDF { + function Output() {} +} + +class HashPassword { + function CheckPassword() {} + function HashPassword() {} +} + ?> diff --git a/setup/test/tests/test.extra-whitespace.php b/setup/test/tests/test.extra-whitespace.php index 96d31ac84..ff3fc7be0 100644 --- a/setup/test/tests/test.extra-whitespace.php +++ b/setup/test/tests/test.extra-whitespace.php @@ -3,16 +3,17 @@ require_once "class.test.php"; class ExtraWhitespace extends Test { var $name = "PHP Leading and Trailing Whitespace"; - + function testFindWhitespace() { foreach ($this->getAllScripts() as $s) { $matches = array(); + $content = file_get_contents($s); if (preg_match_all('/^\s+<\?php|\?>\n\s+$/s', - file_get_contents($s), $matches, + $content, $matches, PREG_OFFSET_CAPTURE) > 0) { foreach ($matches[0] as $match) $this->fail( - $s, $this->line_number_for_offset($s, $match[1]), + $s, $this->line_number_for_offset($content, $match[1]), (strpos('?>', $match[0]) !== false) ? 'Leading whitespace' : 'Trailing whitespace'); diff --git a/setup/test/tests/test.jslint.php b/setup/test/tests/test.jslint.php index 5f8fcfca9..e916715c6 100644 --- a/setup/test/tests/test.jslint.php +++ b/setup/test/tests/test.jslint.php @@ -6,8 +6,7 @@ class JsSyntaxTest extends Test { function testLintErrors() { $exit = 0; - $root = get_osticket_root_path(); - foreach (glob_recursive("$root/*.js") as $s) { + foreach ($this->getAllScripts('*.js') as $s) { ob_start(); system("jsl -process $s", $exit); $line = ob_get_contents(); diff --git a/setup/test/tests/test.shortopentags.php b/setup/test/tests/test.shortopentags.php index 571fc08e1..ec5b8669e 100644 --- a/setup/test/tests/test.shortopentags.php +++ b/setup/test/tests/test.shortopentags.php @@ -7,13 +7,14 @@ class ShortOpenTag extends Test { function testFindShortOpens() { foreach ($this->getAllScripts() as $s) { $matches = array(); + $content = file_get_contents($s); if (preg_match_all('/<\?\s*(?!php|xml).*$/m', - file_get_contents($s), $matches, + $content, $matches, PREG_OFFSET_CAPTURE) > 0) { foreach ($matches[0] as $match) $this->fail( $s, - $this->line_number_for_offset($s, $match[1]), + $this->line_number_for_offset($content, $match[1]), $match[0]); } else $this->pass(); diff --git a/setup/test/tests/test.signals.php b/setup/test/tests/test.signals.php index 7ce888383..0f6287a0a 100644 --- a/setup/test/tests/test.signals.php +++ b/setup/test/tests/test.signals.php @@ -16,14 +16,15 @@ class SignalsTest extends Test { foreach ($matches as $match) $published_signals[] = $match[1]; foreach ($scripts as $s) { + $content = file_get_contents($s); if (preg_match_all("/^ *Signal::connect\('([^']+)'/m", - file_get_contents($s), $matches, + $content, $matches, PREG_OFFSET_CAPTURE|PREG_SET_ORDER) > 0) { foreach ($matches as $match) { $match = $match[1]; if (!in_array($match[0], $published_signals)) $this->fail( - $s, self::line_number_for_offset($s, $match[1]), + $s, $this->line_number_for_offset($content, $match[1]), "Signal '{$match[0]}' is never sent"); else $this->pass(); @@ -31,16 +32,6 @@ class SignalsTest extends Test { } } } - - function line_number_for_offset($filename, $offset) { - $lines = file($filename); - $bytes = $line = 0; - while ($bytes < $offset) { - $bytes += strlen(array_shift($lines)); - $line += 1; - } - return $line; - } } return 'SignalsTest'; diff --git a/setup/test/tests/test.syntax.php b/setup/test/tests/test.syntax.php index 0adf1465a..cc528f52f 100644 --- a/setup/test/tests/test.syntax.php +++ b/setup/test/tests/test.syntax.php @@ -4,9 +4,13 @@ require_once "class.test.php"; class SyntaxTest extends Test { var $name = "PHP Syntax Checks"; + function ignore3rdparty() { + return false; + } + function testCompileErrors() { $exit = 0; - foreach ($this->getAllScripts(false) as $s) { + foreach ($this->getAllScripts() as $s) { ob_start(); system("php -l $s", $exit); $line = ob_get_contents(); diff --git a/setup/test/tests/test.undefinedmethods.php b/setup/test/tests/test.undefinedmethods.php index 83a227eee..16f4e76e1 100644 --- a/setup/test/tests/test.undefinedmethods.php +++ b/setup/test/tests/test.undefinedmethods.php @@ -4,8 +4,12 @@ require_once "class.test.php"; class UndefinedMethods extends Test { var $name = "Access to undefined object methods"; - function testFindShortOpen() { - $scripts = $this->getAllScripts(false); + function ignore3rdparty() { + return false; + } + + function testUndefinedMethods() { + $scripts = $this->getAllScripts(); $function_defs = array(); foreach ($scripts as $s) { $matches = array(); diff --git a/setup/test/tests/test.var-dump.php b/setup/test/tests/test.var-dump.php new file mode 100644 index 000000000..1244ec7b5 --- /dev/null +++ b/setup/test/tests/test.var-dump.php @@ -0,0 +1,27 @@ +<?php +require_once "class.test.php"; + +class VarDump extends Test { + var $name = "var_dump Checks"; + + function testFindShortOpens() { + $re = '/^(([\t ]*?)var_dump\(.*[\)|,|;])((?!nolint).)*$/m'; + foreach ($this->getAllScripts() as $s) { + $matches = array(); + $content = file_get_contents($s); + if (preg_match_all($re, + $content, $matches, + PREG_OFFSET_CAPTURE) > 0) { + foreach ($matches[0] as $match) { + $this->fail( + $s, + $this->line_number_for_offset($content, $match[1]), + trim($match[0])); + } + } + else $this->pass(); + } + } +} +return 'VarDump'; +?> -- GitLab