Browse Source

[ZF-7476]Line endings in Zend/Ldap

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@17440 44c647ce-9c0f-0410-b52a-842ac1e357ba
yoshida@zend.co.jp 16 years ago
parent
commit
19150f86bd
2 changed files with 279 additions and 279 deletions
  1. 64 64
      tests/Zend/Ldap/ConverterTest.php
  2. 215 215
      tests/Zend/Ldap/FilterTest.php

+ 64 - 64
tests/Zend/Ldap/ConverterTest.php

@@ -1,65 +1,65 @@
-<?php
-/**
- * Zend Framework
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.txt.
- * It is also available through the world-wide-web at this URL:
- * http://framework.zend.com/license/new-bsd
- * If you did not receive a copy of the license and are unable to
- * obtain it through the world-wide-web, please send an email
- * to license@zend.com so we can send you a copy immediately.
- *
- * @category   Zend
- * @package    Zend_Ldap
- * @subpackage UnitTests
- * @copyright  Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
- * @license    http://framework.zend.com/license/new-bsd     New BSD License
- */
-
-/**
- * Test helper
- */
-require_once dirname(dirname(dirname(__FILE__))) . DIRECTORY_SEPARATOR . 'TestHelper.php';
-/**
- * Zend_Ldap_Converter
- */
-require_once 'Zend/Ldap/Converter.php';
-
-/**
- * @category   Zend
- * @package    Zend_Ldap
- * @subpackage UnitTests
- * @copyright  Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
- * @license    http://framework.zend.com/license/new-bsd     New BSD License
- */
-
-class Zend_Ldap_ConverterTest extends PHPUnit_Framework_TestCase 
-{
-    public function testAsc2hex32() 
-    {
-        $expected='\00\01\02\03\04\05\06\07\08\09\0a\0b\0c\0d\0e\0f\10\11\12\13\14\15\16\17\18\19' . 
-            '\1a\1b\1c\1d\1e\1f !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`' . 
-            'abcdefghijklmnopqrstuvwxyz{|}~';
-        $str='';
-        for ($i=0; $i<127; $i++) {
-             $str.=chr($i);
-        }
-        $this->assertEquals($expected, Zend_Ldap_Converter::ascToHex32($str));
-    }
-
-    public function testHex2asc() 
-    {
-        $expected='';
-        for ($i=0; $i<127; $i++) {
-             $expected.=chr($i);
-        }
-
-        $str='\00\01\02\03\04\05\06\07\08\09\0a\0b\0c\0d\0e\0f\10\11\12\13\14\15\16\17\18\19\1a\1b' . 
-            '\1c\1d\1e\1f !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefg' . 
-            'hijklmnopqrstuvwxyz{|}~';
-        $this->assertEquals($expected, Zend_Ldap_Converter::hex32ToAsc($str));
-    }
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category   Zend
+ * @package    Zend_Ldap
+ * @subpackage UnitTests
+ * @copyright  Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license    http://framework.zend.com/license/new-bsd     New BSD License
+ */
+
+/**
+ * Test helper
+ */
+require_once dirname(dirname(dirname(__FILE__))) . DIRECTORY_SEPARATOR . 'TestHelper.php';
+/**
+ * Zend_Ldap_Converter
+ */
+require_once 'Zend/Ldap/Converter.php';
+
+/**
+ * @category   Zend
+ * @package    Zend_Ldap
+ * @subpackage UnitTests
+ * @copyright  Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license    http://framework.zend.com/license/new-bsd     New BSD License
+ */
+
+class Zend_Ldap_ConverterTest extends PHPUnit_Framework_TestCase
+{
+    public function testAsc2hex32()
+    {
+        $expected='\00\01\02\03\04\05\06\07\08\09\0a\0b\0c\0d\0e\0f\10\11\12\13\14\15\16\17\18\19' .
+            '\1a\1b\1c\1d\1e\1f !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`' .
+            'abcdefghijklmnopqrstuvwxyz{|}~';
+        $str='';
+        for ($i=0; $i<127; $i++) {
+             $str.=chr($i);
+        }
+        $this->assertEquals($expected, Zend_Ldap_Converter::ascToHex32($str));
+    }
+
+    public function testHex2asc()
+    {
+        $expected='';
+        for ($i=0; $i<127; $i++) {
+             $expected.=chr($i);
+        }
+
+        $str='\00\01\02\03\04\05\06\07\08\09\0a\0b\0c\0d\0e\0f\10\11\12\13\14\15\16\17\18\19\1a\1b' .
+            '\1c\1d\1e\1f !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefg' .
+            'hijklmnopqrstuvwxyz{|}~';
+        $this->assertEquals($expected, Zend_Ldap_Converter::hex32ToAsc($str));
+    }
 }

+ 215 - 215
tests/Zend/Ldap/FilterTest.php

@@ -1,216 +1,216 @@
-<?php
-/**
- * Zend Framework
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.txt.
- * It is also available through the world-wide-web at this URL:
- * http://framework.zend.com/license/new-bsd
- * If you did not receive a copy of the license and are unable to
- * obtain it through the world-wide-web, please send an email
- * to license@zend.com so we can send you a copy immediately.
- *
- * @category   Zend
- * @package    Zend_Ldap
- * @subpackage UnitTests
- * @copyright  Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
- * @license    http://framework.zend.com/license/new-bsd     New BSD License
- */
-
-/**
- * Test helper
- */
-require_once dirname(dirname(dirname(__FILE__))) . DIRECTORY_SEPARATOR . 'TestHelper.php';
-/**
- * Zend_Ldap_Filter
- */
-require_once 'Zend/Ldap/Filter.php';
-/**
- * Zend_Ldap_Filter_And
- */
-require_once 'Zend/Ldap/Filter/And.php';
-/**
- * Zend_Ldap_Filter_Or
- */
-require_once 'Zend/Ldap/Filter/Or.php';
-
-/**
- * @category   Zend
- * @package    Zend_Ldap
- * @subpackage UnitTests
- * @copyright  Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
- * @license    http://framework.zend.com/license/new-bsd     New BSD License
- */
-
-class Zend_Ldap_FilterTest extends PHPUnit_Framework_TestCase 
-{
-    public function testFilterEscapeBasicOperation()
-    {
-        $input = 'a*b(b)d\e/f';
-        $expected = 'a\2ab\28b\29d\5ce/f';
-        $this->assertEquals($expected, Zend_Ldap_Filter::escapeValue($input));
-    }
-    
-    public function testEscapeValues() 
-    {
-        $expected='t\28e,s\29t\2av\5cal\1eue';
-        $filterval='t(e,s)t*v\\al' . chr(30) . 'ue';
-        $this->assertEquals($expected, Zend_Ldap_Filter::escapeValue($filterval));
-        $this->assertEquals($expected, Zend_Ldap_Filter::escapeValue(array($filterval)));
-        $this->assertEquals(array($expected, $expected, $expected), 
-            Zend_Ldap_Filter::escapeValue(array($filterval, $filterval, $filterval)));
-    }
-
-    public function testUnescapeValues() 
-    {
-        $expected='t(e,s)t*v\\al' . chr(30) . 'ue';
-        $filterval='t\28e,s\29t\2av\5cal\1eue';
-        $this->assertEquals($expected, Zend_Ldap_Filter::unescapeValue($filterval));
-        $this->assertEquals($expected, Zend_Ldap_Filter::unescapeValue(array($filterval)));
-        $this->assertEquals(array($expected, $expected, $expected), 
-            Zend_Ldap_Filter::unescapeValue(array($filterval, $filterval, $filterval)));
-    }
-    
-    public function testFilterValueUtf8()
-    {
-        $filter='ÄÖÜäöü߀';
-        $escaped=Zend_Ldap_Filter::escapeValue($filter);
-        $unescaped=Zend_Ldap_Filter::unescapeValue($escaped);
-        $this->assertEquals($filter, $unescaped);
-    }
-    
-    public function testFilterCreation()
-    {
-        $f1=Zend_Ldap_Filter::equals('name', 'value');
-        $this->assertEquals('(name=value)', $f1->toString());
-        $f2=Zend_Ldap_Filter::begins('name', 'value');
-        $this->assertEquals('(name=value*)', $f2->toString());
-        $f3=Zend_Ldap_Filter::ends('name', 'value');
-        $this->assertEquals('(name=*value)', $f3->toString());
-        $f4=Zend_Ldap_Filter::contains('name', 'value');
-        $this->assertEquals('(name=*value*)', $f4->toString());
-        $f5=Zend_Ldap_Filter::greater('name', 'value');
-        $this->assertEquals('(name>value)', $f5->toString());
-        $f6=Zend_Ldap_Filter::greaterOrEqual('name', 'value');
-        $this->assertEquals('(name>=value)', $f6->toString());
-        $f7=Zend_Ldap_Filter::less('name', 'value');
-        $this->assertEquals('(name<value)', $f7->toString());
-        $f8=Zend_Ldap_Filter::lessOrEqual('name', 'value');
-        $this->assertEquals('(name<=value)', $f8->toString());
-        $f9=Zend_Ldap_Filter::approx('name', 'value');
-        $this->assertEquals('(name~=value)', $f9->toString());
-        $f10=Zend_Ldap_Filter::any('name');
-        $this->assertEquals('(name=*)', $f10->toString());
-        $f11=Zend_Ldap_Filter::string('name=*value*value*');
-        $this->assertEquals('(name=*value*value*)', $f11->toString());
-        $f12=Zend_Ldap_Filter::mask('(&(objectClass=account)(uid=%s))', 'a*b(b)d\e/f');
-        $this->assertEquals('(&(objectClass=account)(uid=a\2ab\28b\29d\5ce/f))', $f12->toString());
-    }
-    
-    public function testToStringImplementation()
-    {
-        $f1=Zend_Ldap_Filter::ends('name', 'value');
-        $this->assertEquals($f1->toString(), (string)$f1);
-    }
-    
-    public function testNegate()
-    {
-        $f1=Zend_Ldap_Filter::ends('name', 'value');
-        $this->assertEquals('(name=*value)', $f1->toString());
-        $f1=$f1->negate();
-        $this->assertEquals('(!(name=*value))', $f1->toString());
-        $f1=$f1->negate();
-        $this->assertEquals('(name=*value)', $f1->toString());
-    }
-    
-    /**
-     * @expectedException Zend_Ldap_Filter_Exception
-     */
-    public function testIllegalGroupingFilter()
-    {
-        $data=array('a', 'b', 5);
-        $f=new Zend_Ldap_Filter_And($data);
-    }
-    
-    public function testGroupingFilter()
-    {
-        $f1=Zend_Ldap_Filter::equals('name', 'value');
-        $f2=Zend_Ldap_Filter::begins('name', 'value');
-        $f3=Zend_Ldap_Filter::ends('name', 'value');
-        
-        $f4=Zend_Ldap_Filter::andFilter($f1, $f2, $f3);
-        $f5=Zend_Ldap_Filter::orFilter($f1, $f2, $f3);
-        
-        $this->assertEquals('(&(name=value)(name=value*)(name=*value))', $f4->toString());
-        $this->assertEquals('(|(name=value)(name=value*)(name=*value))', $f5->toString());
-        
-        $f4=$f4->addFilter($f1);
-        $this->assertEquals('(&(name=value)(name=value*)(name=*value)(name=value))', $f4->toString());
-    }
-    
-    public function testComplexFilter()
-    {
-        $f1=Zend_Ldap_Filter::equals('name1', 'value1');
-        $f2=Zend_Ldap_Filter::equals('name1', 'value2');
-        
-        $f3=Zend_Ldap_Filter::equals('name2', 'value1');
-        $f4=Zend_Ldap_Filter::equals('name2', 'value2');
-        
-        $f5=Zend_Ldap_Filter::orFilter($f1, $f2);
-        $f6=Zend_Ldap_Filter::orFilter($f3, $f4);
-        
-        $f7=Zend_Ldap_Filter::andFilter($f5, $f6);
-        
-        $this->assertEquals('(&(|(name1=value1)(name1=value2))(|(name2=value1)(name2=value2)))', 
-            $f7->toString());
-    }
-    
-    public function testChaining()
-    {
-        $f=Zend_Ldap_Filter::equals('a1', 'v1')
-            ->addAnd(Zend_Ldap_Filter::approx('a2', 'v2'));
-        $this->assertEquals('(&(a1=v1)(a2~=v2))', $f->toString());
-        $f=Zend_Ldap_Filter::equals('a1', 'v1')
-            ->addOr(Zend_Ldap_Filter::approx('a2', 'v2'));
-        $this->assertEquals('(|(a1=v1)(a2~=v2))', $f->toString());
-        $f=Zend_Ldap_Filter::equals('a1', 'v1')
-            ->negate()
-            ->addOr(Zend_Ldap_Filter::approx('a2', 'v2'));
-        $this->assertEquals('(|(!(a1=v1))(a2~=v2))', $f->toString());
-        $f=Zend_Ldap_Filter::equals('a1', 'v1')
-            ->addAnd(Zend_Ldap_Filter::approx('a2', 'v2')->negate());
-        $this->assertEquals('(&(a1=v1)(!(a2~=v2)))', $f->toString());
-        $f=Zend_Ldap_Filter::equals('a1', 'v1')
-            ->negate()
-            ->addAnd(Zend_Ldap_Filter::approx('a2', 'v2')->negate());
-        $this->assertEquals('(&(!(a1=v1))(!(a2~=v2)))', $f->toString());
-        $f=Zend_Ldap_Filter::equals('a1', 'v1')
-            ->negate()
-            ->addAnd(Zend_Ldap_Filter::approx('a2', 'v2')->negate());
-        $this->assertEquals('(&(!(a1=v1))(!(a2~=v2)))', $f->toString());
-        $f=Zend_Ldap_Filter::equals('a1', 'v1')
-            ->negate()
-            ->addAnd(Zend_Ldap_Filter::approx('a2', 'v2')->negate())
-            ->negate();
-        $this->assertEquals('(!(&(!(a1=v1))(!(a2~=v2))))', $f->toString());
-    }
-    
-    public function testRealFilterString()
-    {
-        $f1=Zend_Ldap_Filter::orFilter(
-            Zend_Ldap_Filter::equals('sn', 'Gehrig'), 
-            Zend_Ldap_Filter::equals('sn', 'Goerke')
-        );
-        $f2=Zend_Ldap_Filter::orFilter(
-            Zend_Ldap_Filter::equals('givenName', 'Stefan'), 
-            Zend_Ldap_Filter::equals('givenName', 'Ingo')
-        );
-        
-        $f=Zend_Ldap_Filter::andFilter($f1, $f2);
-        
-        $this->assertEquals('(&(|(sn=Gehrig)(sn=Goerke))(|(givenName=Stefan)(givenName=Ingo)))', 
-            $f->toString());   
-    }
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category   Zend
+ * @package    Zend_Ldap
+ * @subpackage UnitTests
+ * @copyright  Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license    http://framework.zend.com/license/new-bsd     New BSD License
+ */
+
+/**
+ * Test helper
+ */
+require_once dirname(dirname(dirname(__FILE__))) . DIRECTORY_SEPARATOR . 'TestHelper.php';
+/**
+ * Zend_Ldap_Filter
+ */
+require_once 'Zend/Ldap/Filter.php';
+/**
+ * Zend_Ldap_Filter_And
+ */
+require_once 'Zend/Ldap/Filter/And.php';
+/**
+ * Zend_Ldap_Filter_Or
+ */
+require_once 'Zend/Ldap/Filter/Or.php';
+
+/**
+ * @category   Zend
+ * @package    Zend_Ldap
+ * @subpackage UnitTests
+ * @copyright  Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license    http://framework.zend.com/license/new-bsd     New BSD License
+ */
+
+class Zend_Ldap_FilterTest extends PHPUnit_Framework_TestCase
+{
+    public function testFilterEscapeBasicOperation()
+    {
+        $input = 'a*b(b)d\e/f';
+        $expected = 'a\2ab\28b\29d\5ce/f';
+        $this->assertEquals($expected, Zend_Ldap_Filter::escapeValue($input));
+    }
+
+    public function testEscapeValues()
+    {
+        $expected='t\28e,s\29t\2av\5cal\1eue';
+        $filterval='t(e,s)t*v\\al' . chr(30) . 'ue';
+        $this->assertEquals($expected, Zend_Ldap_Filter::escapeValue($filterval));
+        $this->assertEquals($expected, Zend_Ldap_Filter::escapeValue(array($filterval)));
+        $this->assertEquals(array($expected, $expected, $expected),
+            Zend_Ldap_Filter::escapeValue(array($filterval, $filterval, $filterval)));
+    }
+
+    public function testUnescapeValues()
+    {
+        $expected='t(e,s)t*v\\al' . chr(30) . 'ue';
+        $filterval='t\28e,s\29t\2av\5cal\1eue';
+        $this->assertEquals($expected, Zend_Ldap_Filter::unescapeValue($filterval));
+        $this->assertEquals($expected, Zend_Ldap_Filter::unescapeValue(array($filterval)));
+        $this->assertEquals(array($expected, $expected, $expected),
+            Zend_Ldap_Filter::unescapeValue(array($filterval, $filterval, $filterval)));
+    }
+
+    public function testFilterValueUtf8()
+    {
+        $filter='ÄÖÜäöü߀';
+        $escaped=Zend_Ldap_Filter::escapeValue($filter);
+        $unescaped=Zend_Ldap_Filter::unescapeValue($escaped);
+        $this->assertEquals($filter, $unescaped);
+    }
+
+    public function testFilterCreation()
+    {
+        $f1=Zend_Ldap_Filter::equals('name', 'value');
+        $this->assertEquals('(name=value)', $f1->toString());
+        $f2=Zend_Ldap_Filter::begins('name', 'value');
+        $this->assertEquals('(name=value*)', $f2->toString());
+        $f3=Zend_Ldap_Filter::ends('name', 'value');
+        $this->assertEquals('(name=*value)', $f3->toString());
+        $f4=Zend_Ldap_Filter::contains('name', 'value');
+        $this->assertEquals('(name=*value*)', $f4->toString());
+        $f5=Zend_Ldap_Filter::greater('name', 'value');
+        $this->assertEquals('(name>value)', $f5->toString());
+        $f6=Zend_Ldap_Filter::greaterOrEqual('name', 'value');
+        $this->assertEquals('(name>=value)', $f6->toString());
+        $f7=Zend_Ldap_Filter::less('name', 'value');
+        $this->assertEquals('(name<value)', $f7->toString());
+        $f8=Zend_Ldap_Filter::lessOrEqual('name', 'value');
+        $this->assertEquals('(name<=value)', $f8->toString());
+        $f9=Zend_Ldap_Filter::approx('name', 'value');
+        $this->assertEquals('(name~=value)', $f9->toString());
+        $f10=Zend_Ldap_Filter::any('name');
+        $this->assertEquals('(name=*)', $f10->toString());
+        $f11=Zend_Ldap_Filter::string('name=*value*value*');
+        $this->assertEquals('(name=*value*value*)', $f11->toString());
+        $f12=Zend_Ldap_Filter::mask('(&(objectClass=account)(uid=%s))', 'a*b(b)d\e/f');
+        $this->assertEquals('(&(objectClass=account)(uid=a\2ab\28b\29d\5ce/f))', $f12->toString());
+    }
+
+    public function testToStringImplementation()
+    {
+        $f1=Zend_Ldap_Filter::ends('name', 'value');
+        $this->assertEquals($f1->toString(), (string)$f1);
+    }
+
+    public function testNegate()
+    {
+        $f1=Zend_Ldap_Filter::ends('name', 'value');
+        $this->assertEquals('(name=*value)', $f1->toString());
+        $f1=$f1->negate();
+        $this->assertEquals('(!(name=*value))', $f1->toString());
+        $f1=$f1->negate();
+        $this->assertEquals('(name=*value)', $f1->toString());
+    }
+
+    /**
+     * @expectedException Zend_Ldap_Filter_Exception
+     */
+    public function testIllegalGroupingFilter()
+    {
+        $data=array('a', 'b', 5);
+        $f=new Zend_Ldap_Filter_And($data);
+    }
+
+    public function testGroupingFilter()
+    {
+        $f1=Zend_Ldap_Filter::equals('name', 'value');
+        $f2=Zend_Ldap_Filter::begins('name', 'value');
+        $f3=Zend_Ldap_Filter::ends('name', 'value');
+
+        $f4=Zend_Ldap_Filter::andFilter($f1, $f2, $f3);
+        $f5=Zend_Ldap_Filter::orFilter($f1, $f2, $f3);
+
+        $this->assertEquals('(&(name=value)(name=value*)(name=*value))', $f4->toString());
+        $this->assertEquals('(|(name=value)(name=value*)(name=*value))', $f5->toString());
+
+        $f4=$f4->addFilter($f1);
+        $this->assertEquals('(&(name=value)(name=value*)(name=*value)(name=value))', $f4->toString());
+    }
+
+    public function testComplexFilter()
+    {
+        $f1=Zend_Ldap_Filter::equals('name1', 'value1');
+        $f2=Zend_Ldap_Filter::equals('name1', 'value2');
+
+        $f3=Zend_Ldap_Filter::equals('name2', 'value1');
+        $f4=Zend_Ldap_Filter::equals('name2', 'value2');
+
+        $f5=Zend_Ldap_Filter::orFilter($f1, $f2);
+        $f6=Zend_Ldap_Filter::orFilter($f3, $f4);
+
+        $f7=Zend_Ldap_Filter::andFilter($f5, $f6);
+
+        $this->assertEquals('(&(|(name1=value1)(name1=value2))(|(name2=value1)(name2=value2)))',
+            $f7->toString());
+    }
+
+    public function testChaining()
+    {
+        $f=Zend_Ldap_Filter::equals('a1', 'v1')
+            ->addAnd(Zend_Ldap_Filter::approx('a2', 'v2'));
+        $this->assertEquals('(&(a1=v1)(a2~=v2))', $f->toString());
+        $f=Zend_Ldap_Filter::equals('a1', 'v1')
+            ->addOr(Zend_Ldap_Filter::approx('a2', 'v2'));
+        $this->assertEquals('(|(a1=v1)(a2~=v2))', $f->toString());
+        $f=Zend_Ldap_Filter::equals('a1', 'v1')
+            ->negate()
+            ->addOr(Zend_Ldap_Filter::approx('a2', 'v2'));
+        $this->assertEquals('(|(!(a1=v1))(a2~=v2))', $f->toString());
+        $f=Zend_Ldap_Filter::equals('a1', 'v1')
+            ->addAnd(Zend_Ldap_Filter::approx('a2', 'v2')->negate());
+        $this->assertEquals('(&(a1=v1)(!(a2~=v2)))', $f->toString());
+        $f=Zend_Ldap_Filter::equals('a1', 'v1')
+            ->negate()
+            ->addAnd(Zend_Ldap_Filter::approx('a2', 'v2')->negate());
+        $this->assertEquals('(&(!(a1=v1))(!(a2~=v2)))', $f->toString());
+        $f=Zend_Ldap_Filter::equals('a1', 'v1')
+            ->negate()
+            ->addAnd(Zend_Ldap_Filter::approx('a2', 'v2')->negate());
+        $this->assertEquals('(&(!(a1=v1))(!(a2~=v2)))', $f->toString());
+        $f=Zend_Ldap_Filter::equals('a1', 'v1')
+            ->negate()
+            ->addAnd(Zend_Ldap_Filter::approx('a2', 'v2')->negate())
+            ->negate();
+        $this->assertEquals('(!(&(!(a1=v1))(!(a2~=v2))))', $f->toString());
+    }
+
+    public function testRealFilterString()
+    {
+        $f1=Zend_Ldap_Filter::orFilter(
+            Zend_Ldap_Filter::equals('sn', 'Gehrig'),
+            Zend_Ldap_Filter::equals('sn', 'Goerke')
+        );
+        $f2=Zend_Ldap_Filter::orFilter(
+            Zend_Ldap_Filter::equals('givenName', 'Stefan'),
+            Zend_Ldap_Filter::equals('givenName', 'Ingo')
+        );
+
+        $f=Zend_Ldap_Filter::andFilter($f1, $f2);
+
+        $this->assertEquals('(&(|(sn=Gehrig)(sn=Goerke))(|(givenName=Stefan)(givenName=Ingo)))',
+            $f->toString());
+    }
 }