From 18d80255e3b748f1bd62f64b0955bb5047e0b4f2 Mon Sep 17 00:00:00 2001
From: Sebastian Förster <foerster@forestsoft.de>
Date: Fri, 13 Sep 2013 16:33:18 -0400
Subject: [PATCH] check parsing of HTTP_USER_AGENT Variable with multiple Datasets

---
 tests/Framework/Browser.php |  203 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 203 insertions(+), 0 deletions(-)

diff --git a/tests/Framework/Browser.php b/tests/Framework/Browser.php
index c3860d8..832d4bf 100644
--- a/tests/Framework/Browser.php
+++ b/tests/Framework/Browser.php
@@ -17,4 +17,207 @@
 
         $this->assertInstanceOf('rcube_browser', $object, "Class constructor");
     }
+
+    /**
+     * @dataProvider browsers
+     */
+    function test_browser($useragent, $opera, $chrome, $ie, $ns, $ns4, $khtml, $safari, $mz)
+    {
+
+        $object = $this->getBrowser($useragent);
+
+        $this->assertEquals($opera, $object->opera, 'Check for Opera failed');
+        $this->assertEquals($chrome, $object->chrome, 'Check for Chrome failed');
+        $this->assertEquals($ie, $object->ie, 'Check for IE failed');
+        $this->assertEquals($ns, $object->ns, 'Check for NS failed');
+        $this->assertEquals($ns4, $object->ns4, 'Check for NS4 failed');
+        $this->assertEquals($khtml, $object->khtml, 'Check for khtml failed');
+        $this->assertEquals($safari, $object->safari, 'Check for Safari failed');
+        $this->assertEquals($mz, $object->mz, 'Check for MZ failed');
+    }
+
+    /**
+     * @dataProvider os
+     */
+    function test_os($useragent, $windows, $linux, $unix, $mac)
+    {
+        $object = $this->getBrowser($useragent);
+
+        $this->assertEquals($windows, $object->win, 'Check Result of Windows');
+        $this->assertEquals($linux, $object->linux, 'Check Result of Linux');
+        $this->assertEquals($mac, $object->mac, 'Check Result of Mac');
+        $this->assertEquals($unix, $object->unix, 'Check Result of Unix');
+
+    }
+
+    /**
+     * @dataProvider versions
+     */
+    function test_version($useragent, $version)
+    {
+        $object = $this->getBrowser($useragent);
+        $this->assertEquals($version, $object->ver);
+    }
+
+    /**
+     * @dataProvider dom
+     */
+    function test_dom($useragent, $dom)
+    {
+        $object = $this->getBrowser($useragent);
+        $this->assertEquals($dom, $object->dom);
+
+    }
+
+    /**
+     * @dataProvider pngalpha
+     */
+    function test_pngalpha($useragent, $pngalpha)
+    {
+        $object = $this->getBrowser($useragent);
+        $this->assertEquals($pngalpha, $object->pngalpha);
+    }
+
+    /**
+     * @dataProvider imgdata
+     */
+    function test_imgdata($useragent, $imgdata)
+    {
+        $object = $this->getBrowser($useragent);
+        $this->assertEquals($imgdata, $object->imgdata);
+    }
+
+    function versions()
+    {
+        return $this->extractDataSet(array('version'));
+    }
+
+    function pngalpha()
+    {
+        return $this->extractDataSet(array('canPNGALPHA'));
+    }
+
+    function imgdata()
+    {
+        return $this->extractDataSet(array('canIMGDATA'));
+    }
+
+    private function extractDataSet($keys)
+    {
+        $keys = array_merge(array('useragent'), $keys);
+
+        $browser = $this->useragents();
+
+        $extracted = array();
+
+        foreach ($browser as $label => $data) {
+            foreach($keys as $key) {
+                $extracted[$data['useragent']][] = $data[$key];
+            }
+
+        }
+
+        return $extracted;
+    }
+
+    function lang()
+    {
+        return $this->extractDataSet(array('lang'));
+    }
+
+    function dom()
+    {
+        return $this->extractDataSet(array('hasDOM'));
+    }
+
+    function browsers()
+    {
+        return $this->extractDataSet(array('isOpera','isChrome','isIE','isNS','isNS4','isKHTML','isSafari','isMZ'));
+    }
+
+    function useragents()
+    {
+        return array(
+             'WIN: Mozilla Firefox ' => array(
+                 'useragent'    => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.1) Gecko/20060111 Firefox/1.5.0.1',
+                 'version'      => '1.8',                                                                                      //Version
+                 'isWin'        => true,                                                                                           //isWindows
+                 'isLinux'      => false,
+                 'isMac'        => false,                                                                                           //isMac
+                 'isUnix'       => false,                                                                                           //isUnix
+                 'isOpera'      => false,                                                                                           //isOpera
+                 'isChrome'     => false,                                                                                           //isChrome
+                 'isIE'         => false,                                                                                           //isIE
+                 'isNS'         => false,                                                                                           //isNS
+                 'isNS4'        => false,                                                                                           //isNS4
+                 'isKHTML'      => false,                                                                                           //isKHTML
+                 'isSafari'     => false,                                                                                           //isSafari
+                 'isMZ'         => true,                                                                                           //isMZ
+                 'lang'         => 'en-US',                                                                               //lang
+                 'hasDOM'       => true,                                                                                            //hasDOM
+                 'canPNGALPHA'  => true,                                                                                            //canPNGALPHA
+                 'canIMGDATA'   => true,                                                                                            //canIMGDATA
+             ),
+            'LINUX: Bon Echo ' => array(
+                 'useragent'    => 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.1) Gecko/20070222 BonEcho/2.0.0.1',
+                 'version'      => '1.8',                                                                                      //Version
+                 'isWin'        => false,                                                                                           //isWindows
+                 'isLinux'      => true,
+                 'isMac'        => false,                                                                                           //isMac
+                 'isUnix'       => false,                                                                                           //isUnix
+                 'isOpera'      => false,                                                                                           //isOpera
+                 'isChrome'     => false,                                                                                           //isChrome
+                 'isIE'         => false,                                                                                           //isIE
+                 'isNS'         => false,                                                                                           //isNS
+                 'isNS4'        => false,                                                                                           //isNS4
+                 'isKHTML'      => false,                                                                                           //isKHTML
+                 'isSafari'     => false,                                                                                           //isSafari
+                 'isMZ'         => true,                                                                                           //isMZ
+                 'lang'         => 'en-US',                                                                               //lang
+                 'hasDOM'       => true,                                                                                            //hasDOM
+                 'canPNGALPHA'  => true,                                                                                            //canPNGALPHA
+                 'canIMGDATA'   => true,                                                                                            //canIMGDATA
+             ),
+
+            'Chrome Mac' => array(
+                 'useragent'    => 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.461.0 Safari/534.3',
+                 'version'      => '5',                                                                                      //Version
+                 'isWin'        => false,                                                                                           //isWindows
+                 'isLinux'      => false,
+                 'isMac'        => true,                                                                                           //isMac
+                 'isUnix'       => false,                                                                                           //isUnix
+                 'isOpera'      => false,                                                                                           //isOpera
+                 'isChrome'     => true,                                                                                           //isChrome
+                 'isIE'         => false,                                                                                           //isIE
+                 'isNS'         => false,                                                                                           //isNS
+                 'isNS4'        => false,                                                                                           //isNS4
+                 'isKHTML'      => true,                                                                                           //isKHTML
+                 'isSafari'     => false,                                                                                           //isSafari
+                 'isMZ'         => false,                                                                                           //isMZ
+                 'lang'         => 'en-US',                                                                               //lang
+                 'hasDOM'       => false,                                                                                            //hasDOM
+                 'canPNGALPHA'  => false,                                                                                            //canPNGALPHA
+                 'canIMGDATA'   => true,                                                                                            //canIMGDATA
+             ),
+        );
+    }
+
+    function os()
+    {
+        return $this->extractDataSet(array('isWin','isLinux','isUnix','isMac'));
+    }
+
+    /**
+     * @param string $useragent
+     * @return rcube_browser
+     */
+    private function getBrowser($useragent)
+    {
+        /** @var $object rcube_browser */
+        $_SERVER['HTTP_USER_AGENT'] = $useragent;
+
+        $object = new rcube_browser();
+
+        return $object;
+    }
 }

--
Gitblit v1.9.1