/** * This tests the basic combination of filters. */ public function testCombine() { // Setup. $filter0 = Horde_Ldap_Filter::create('foo', 'equals', 'bar'); $this->assertInstanceOf('Horde_Ldap_Filter', $filter0); $filter1 = Horde_Ldap_Filter::create('bar', 'equals', 'foo'); $this->assertInstanceOf('Horde_Ldap_Filter', $filter1); $filter2 = Horde_Ldap_Filter::create('you', 'equals', 'me'); $this->assertInstanceOf('Horde_Ldap_Filter', $filter2); $filter3 = Horde_Ldap_Filter::parse('(perlinterface=used)'); $this->assertInstanceOf('Horde_Ldap_Filter', $filter3); // Negation test. $filter_not1 = Horde_Ldap_Filter::combine('not', $filter0); $this->assertInstanceOf('Horde_Ldap_Filter', $filter_not1, 'Negation failed for literal NOT'); $this->assertEquals('(!(foo=bar))', (string) $filter_not1); $filter_not2 = Horde_Ldap_Filter::combine('!', $filter0); $this->assertInstanceOf('Horde_Ldap_Filter', $filter_not2, 'Negation failed for logical NOT'); $this->assertEquals('(!(foo=bar))', (string) $filter_not2); $filter_not3 = Horde_Ldap_Filter::combine('!', (string) $filter0); $this->assertInstanceOf('Horde_Ldap_Filter', $filter_not3, 'Negation failed for logical NOT'); $this->assertEquals('(!' . $filter0 . ')', (string) $filter_not3); // Combination test: OR $filter_comb_or1 = Horde_Ldap_Filter::combine('or', array($filter1, $filter2)); $this->assertInstanceOf('Horde_Ldap_Filter', $filter_comb_or1, 'Combination failed for literal OR'); $this->assertEquals('(|(bar=foo)(you=me))', (string) $filter_comb_or1); $filter_comb_or2 = Horde_Ldap_Filter::combine('|', array($filter1, $filter2)); $this->assertInstanceOf('Horde_Ldap_Filter', $filter_comb_or2, 'combination failed for logical OR'); $this->assertEquals('(|(bar=foo)(you=me))', (string) $filter_comb_or2); // Combination test: AND $filter_comb_and1 = Horde_Ldap_Filter::combine('and', array($filter1, $filter2)); $this->assertInstanceOf('Horde_Ldap_Filter', $filter_comb_and1, 'Combination failed for literal AND'); $this->assertEquals('(&(bar=foo)(you=me))', (string) $filter_comb_and1); $filter_comb_and2 = Horde_Ldap_Filter::combine('&', array($filter1, $filter2)); $this->assertInstanceOf('Horde_Ldap_Filter', $filter_comb_and2, 'combination failed for logical AND'); $this->assertEquals('(&(bar=foo)(you=me))', (string) $filter_comb_and2); // Combination test: using filter created with perl interface. $filter_comb_perl1 = Horde_Ldap_Filter::combine('and', array($filter1, $filter3)); $this->assertInstanceOf('Horde_Ldap_Filter', $filter_comb_perl1, 'Combination failed for literal AND'); $this->assertEquals('(&(bar=foo)(perlinterface=used))', (string) $filter_comb_perl1); $filter_comb_perl2 = Horde_Ldap_Filter::combine('&', array($filter1, $filter3)); $this->assertInstanceOf('Horde_Ldap_Filter', $filter_comb_perl2, 'combination failed for logical AND'); $this->assertEquals('(&(bar=foo)(perlinterface=used))', (string) $filter_comb_perl2); // Combination test: using filter_str instead of object $filter_comb_fstr1 = Horde_Ldap_Filter::combine('and', array($filter1, '(filter_str=foo)')); $this->assertInstanceOf('Horde_Ldap_Filter', $filter_comb_fstr1, 'Combination failed for literal AND using filter_str'); $this->assertEquals('(&(bar=foo)(filter_str=foo))', (string) $filter_comb_fstr1); // Combination test: deep combination $filter_comp_deep = Horde_Ldap_Filter::combine('and', array($filter2, $filter_not1, $filter_comb_or1, $filter_comb_perl1)); $this->assertInstanceOf('Horde_Ldap_Filter', $filter_comp_deep, 'Deep combination failed!'); $this->assertEquals('(&(you=me)(!(foo=bar))(|(bar=foo)(you=me))(&(bar=foo)(perlinterface=used)))', (string) $filter_comp_deep); // Test failure in combination try { Horde_Ldap_Filter::create('foo', 'test_undefined_matchingrule', 'bar'); $this->fail('Horde_Ldap_Exception expected.'); } catch (Horde_Ldap_Exception $e) { } try { Horde_Ldap_Filter::combine('not', 'damaged_filter_str'); $this->fail('Horde_Ldap_Exception expected.'); } catch (Horde_Ldap_Exception $e) { } try { Horde_Ldap_Filter::combine('not', array($filter0, $filter1)); $this->fail('Horde_Ldap_Exception expected.'); } catch (Horde_Ldap_Exception $e) { } try { Horde_Ldap_Filter::combine('not', null); $this->fail('Horde_Ldap_Exception expected.'); } catch (Horde_Ldap_Exception $e) { } try { Horde_Ldap_Filter::combine('and', $filter_not1); $this->fail('Horde_Ldap_Exception expected.'); } catch (Horde_Ldap_Exception $e) { } try { Horde_Ldap_Filter::combine('and', array($filter_not1)); $this->fail('Horde_Ldap_Exception expected.'); } catch (Horde_Ldap_Exception $e) { } try { Horde_Ldap_Filter::combine('and', $filter_not1); $this->fail('Horde_Ldap_Exception expected.'); } catch (Horde_Ldap_Exception $e) { } try { Horde_Ldap_Filter::combine('or', array($filter_not1)); $this->fail('Horde_Ldap_Exception expected.'); } catch (Horde_Ldap_Exception $e) { } try { Horde_Ldap_Filter::combine('some_unknown_method', array($filter_not1)); $this->fail('Horde_Ldap_Exception expected.'); } catch (Horde_Ldap_Exception $e) { } try { Horde_Ldap_Filter::combine('and', array($filter_not1, 'some_invalid_filterstring')); $this->fail('Horde_Ldap_Exception expected.'); } catch (Horde_Ldap_Exception $e) { } try { Horde_Ldap_Filter::combine('and', array($filter_not1, null)); $this->fail('Horde_Ldap_Exception expected.'); } catch (Horde_Ldap_Exception $e) { } }