/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*/
package org.apache.directory.studio.ldapbrowser.core.model;
import junit.framework.TestCase;
import org.apache.directory.studio.ldapbrowser.core.model.filter.parser.LdapFilterParser;
/**
* Tests the filter parser.
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
public class LdapFilterParserTest extends TestCase
{
private LdapFilterParser parser = new LdapFilterParser();
/**
* Tests an equals filter
*/
public void testEqualsFilter()
{
parser.parse( "(cn=test)" ); //$NON-NLS-1$
assertEquals( "(cn=test)", parser.getModel().toString() ); //$NON-NLS-1$
assertEquals( "(cn=test)", parser.getModel().toUserProvidedString() ); //$NON-NLS-1$
assertTrue( parser.getModel().isValid() );
}
/**
* Tests an greater equals filter
*/
public void testGreaterEqualsFilter()
{
parser.parse( "(cn>=test)" ); //$NON-NLS-1$
assertEquals( "(cn>=test)", parser.getModel().toString() ); //$NON-NLS-1$
assertEquals( "(cn>=test)", parser.getModel().toUserProvidedString() ); //$NON-NLS-1$
assertTrue( parser.getModel().isValid() );
}
/**
* Tests an less equals filter
*/
public void testLessEqualsFilter()
{
parser.parse( "(cn<=test)" ); //$NON-NLS-1$
assertEquals( "(cn<=test)", parser.getModel().toString() ); //$NON-NLS-1$
assertEquals( "(cn<=test)", parser.getModel().toUserProvidedString() ); //$NON-NLS-1$
assertTrue( parser.getModel().isValid() );
}
/**
* Tests an aprox filter
*/
public void testAproxFilter()
{
parser.parse( "(cn~=test)" ); //$NON-NLS-1$
assertEquals( "(cn~=test)", parser.getModel().toString() ); //$NON-NLS-1$
assertEquals( "(cn~=test)", parser.getModel().toUserProvidedString() ); //$NON-NLS-1$
assertTrue( parser.getModel().isValid() );
}
/**
* Tests an substring filter
*/
public void testSubstringFilter()
{
parser.parse( "(cn=te*st)" ); //$NON-NLS-1$
assertEquals( "(cn=te*st)", parser.getModel().toString() ); //$NON-NLS-1$
assertEquals( "(cn=te*st)", parser.getModel().toUserProvidedString() ); //$NON-NLS-1$
assertTrue( parser.getModel().isValid() );
}
/**
* Tests an present filter
*/
public void testPresentFilter()
{
parser.parse( "(cn=*)" ); //$NON-NLS-1$
assertEquals( "(cn=*)", parser.getModel().toString() ); //$NON-NLS-1$
assertEquals( "(cn=*)", parser.getModel().toUserProvidedString() ); //$NON-NLS-1$
assertTrue( parser.getModel().isValid() );
}
/**
* Tests an simple filter
*/
public void testRFC4515_1()
{
parser.parse( "(cn=Babs Jensen)" ); //$NON-NLS-1$
assertEquals( "(cn=Babs Jensen)", parser.getModel().toString() ); //$NON-NLS-1$
assertEquals( "(cn=Babs Jensen)", parser.getModel().toUserProvidedString() ); //$NON-NLS-1$
assertTrue( parser.getModel().isValid() );
}
/**
* Tests an not filter
*/
public void testRFC4515_2()
{
parser.parse( "(!(cn=Tim Howes))" ); //$NON-NLS-1$
assertEquals( "(!(cn=Tim Howes))", parser.getModel().toString() ); //$NON-NLS-1$
assertEquals( "(!(cn=Tim Howes))", parser.getModel().toUserProvidedString() ); //$NON-NLS-1$
assertTrue( parser.getModel().isValid() );
}
/**
* Tests an and/or filter
*/
public void testRFC4515_3()
{
parser.parse( "(&(objectClass=Person)(|(sn=Jensen)(cn=Babs J*)))" ); //$NON-NLS-1$
assertEquals( "(&(objectClass=Person)(|(sn=Jensen)(cn=Babs J*)))", parser.getModel().toString() ); //$NON-NLS-1$
assertEquals( "(&(objectClass=Person)(|(sn=Jensen)(cn=Babs J*)))", parser.getModel().toUserProvidedString() ); //$NON-NLS-1$
assertTrue( parser.getModel().isValid() );
}
/**
* Tests an substring filter
*/
public void testRFC4515_4()
{
parser.parse( "(o=univ*of*mich*)" ); //$NON-NLS-1$
assertEquals( "(o=univ*of*mich*)", parser.getModel().toString() ); //$NON-NLS-1$
assertEquals( "(o=univ*of*mich*)", parser.getModel().toUserProvidedString() ); //$NON-NLS-1$
assertTrue( parser.getModel().isValid() );
}
/**
* Tests an empty assertion value
*/
public void testRFC4515_5()
{
parser.parse( "(seeAlso=)" ); //$NON-NLS-1$
assertEquals( "(seeAlso=)", parser.getModel().toString() ); //$NON-NLS-1$
assertEquals( "(seeAlso=)", parser.getModel().toUserProvidedString() ); //$NON-NLS-1$
assertTrue( parser.getModel().isValid() );
}
/**
* Tests an filter with escaped assertion value.
*
* From RFC4515:
* The first example shows the use of the escaping mechanism to
* represent parenthesis characters.
*/
public void testEscapeRFC4515_1()
{
parser.parse( "(o=Parens R Us \\28for all your parenthetical needs\\29)" ); //$NON-NLS-1$
assertEquals( "(o=Parens R Us \\28for all your parenthetical needs\\29)", parser.getModel().toString() ); //$NON-NLS-1$
assertEquals( "(o=Parens R Us \\28for all your parenthetical needs\\29)", parser.getModel() //$NON-NLS-1$
.toUserProvidedString() );
assertTrue( parser.getModel().isValid() );
}
/**
* Tests an filter with escaped assertion value.
*
* From RFC4515:
* The second shows how to represent
* a "*" in an assertion value, preventing it from being interpreted as
* a substring indicator.
*/
public void testEscapeRFC4515_2()
{
parser.parse( "(cn=*\\2A*)" ); //$NON-NLS-1$
assertEquals( "(cn=*\\2A*)", parser.getModel().toString() ); //$NON-NLS-1$
assertEquals( "(cn=*\\2A*)", parser.getModel().toUserProvidedString() ); //$NON-NLS-1$
assertTrue( parser.getModel().isValid() );
}
/**
* Tests an filter with escaped assertion value.
*
* From RFC4515:
* The third illustrates the escaping of the backslash character.
*/
public void testEscapeRFC4515_3()
{
parser.parse( "(filename=C:\\5cMyFile)" ); //$NON-NLS-1$
assertEquals( "(filename=C:\\5cMyFile)", parser.getModel().toString() ); //$NON-NLS-1$
assertEquals( "(filename=C:\\5cMyFile)", parser.getModel().toUserProvidedString() ); //$NON-NLS-1$
assertTrue( parser.getModel().isValid() );
}
/**
* Tests an filter with escaped assertion value.
*
* From RFC4515:
* The fourth example shows a filter searching for the four-octet value
* 00 00 00 04 (hex), illustrating the use of the escaping mechanism to
* represent arbitrary data, including NUL characters.
*/
public void testEscapeRFC4515_4()
{
parser.parse( "(bin=\\00\\00\\00\\04)" ); //$NON-NLS-1$
assertEquals( "(bin=\\00\\00\\00\\04)", parser.getModel().toString() ); //$NON-NLS-1$
assertEquals( "(bin=\\00\\00\\00\\04)", parser.getModel().toUserProvidedString() ); //$NON-NLS-1$
assertTrue( parser.getModel().isValid() );
}
/**
* Tests an filter with escaped assertion value.
*
* From RFC4515:
* The fifth example illustrates the use of the escaping mechanism to
* represent various non-ASCII UTF-8 characters. Specifically, there
* are 5 characters in the <assertionvalue> portion of this example:
* LATIN CAPITAL LETTER L (U+004C), LATIN SMALL LETTER U (U+0075), LATIN
* SMALL LETTER C WITH CARON (U+010D), LATIN SMALL LETTER I (U+0069),
* and LATIN SMALL LETTER C WITH ACUTE (U+0107).
*/
public void testEscapeRFC4515_5()
{
parser.parse( "(sn=Lu\\c4\\8di\\c4\\87)" ); //$NON-NLS-1$
assertEquals( "(sn=Lu\\c4\\8di\\c4\\87)", parser.getModel().toString() ); //$NON-NLS-1$
assertEquals( "(sn=Lu\\c4\\8di\\c4\\87)", parser.getModel().toUserProvidedString() ); //$NON-NLS-1$
assertTrue( parser.getModel().isValid() );
}
/**
* Tests an filter with escaped assertion value.
*
* From RFC4515:
* The sixth and final example demonstrates assertion of a BER-encoded
* value.
*/
public void testEscapeRFC4515_6()
{
parser.parse( "(1.3.6.1.4.1.1466.0=\\04\\02\\48\\69)" ); //$NON-NLS-1$
assertEquals( "(1.3.6.1.4.1.1466.0=\\04\\02\\48\\69)", parser.getModel().toString() ); //$NON-NLS-1$
assertEquals( "(1.3.6.1.4.1.1466.0=\\04\\02\\48\\69)", parser.getModel().toUserProvidedString() ); //$NON-NLS-1$
assertTrue( parser.getModel().isValid() );
}
/**
* Tests an extensible filter.
*
* From RFC4515:
* The first example shows use of the matching rule "caseExactMatch."
*/
public void testExtensibleFilterRFC4515_1()
{
parser.parse( "(cn:caseExactMatch:=Fred Flintstone)" ); //$NON-NLS-1$
assertEquals( "(cn:caseExactMatch:=Fred Flintstone)", parser.getModel().toString() ); //$NON-NLS-1$
assertEquals( "(cn:caseExactMatch:=Fred Flintstone)", parser.getModel().toUserProvidedString() ); //$NON-NLS-1$
assertTrue( parser.getModel().isValid() );
}
/**
* Tests an extensible filter.
*
* From RFC4515:
* The second example demonstrates use of a MatchingRuleAssertion form
* without a matchingRule.
*/
public void testExtensibleFilterRFC4515_2()
{
parser.parse( "(cn:=Betty Rubble)" ); //$NON-NLS-1$
assertEquals( "(cn:=Betty Rubble)", parser.getModel().toString() ); //$NON-NLS-1$
assertEquals( "(cn:=Betty Rubble)", parser.getModel().toUserProvidedString() ); //$NON-NLS-1$
assertTrue( parser.getModel().isValid() );
}
/**
* Tests an extensible filter.
*
* From RFC4515:
* The third example illustrates the use of the ":oid" notation to
* indicate that the matching rule identified by the OID "2.4.6.8.10"
* should be used when making comparisons, and that the attributes of an
* entry's distinguished name should be considered part of the entry
* when evaluating the match (indicated by the use of ":dn").
*/
public void testExtensibleFilterRFC4515_3()
{
parser.parse( "(sn:dn:2.4.6.8.10:=Barney Rubble)" ); //$NON-NLS-1$
assertEquals( "(sn:dn:2.4.6.8.10:=Barney Rubble)", parser.getModel().toString() ); //$NON-NLS-1$
assertEquals( "(sn:dn:2.4.6.8.10:=Barney Rubble)", parser.getModel().toUserProvidedString() ); //$NON-NLS-1$
assertTrue( parser.getModel().isValid() );
}
/**
* Tests an extensible filter.
*
* From RFC4515:
* The fourth example denotes an equality match, except that Dn
* components should be considered part of the entry when doing the
* match.
*/
public void testExtensibleFilterRFC4515_4()
{
parser.parse( "(o:dn:=Ace Industry)" ); //$NON-NLS-1$
assertEquals( "(o:dn:=Ace Industry)", parser.getModel().toString() ); //$NON-NLS-1$
assertEquals( "(o:dn:=Ace Industry)", parser.getModel().toUserProvidedString() ); //$NON-NLS-1$
assertTrue( parser.getModel().isValid() );
}
/**
* Tests an extensible filter.
*
* From RFC4515:
* The fifth example is a filter that should be applied to any attribute
* supporting the matching rule given (since the <attr> has been
* omitted).
*/
public void testExtensibleFilterRFC4515_5()
{
parser.parse( "(:1.2.3:=Wilma Flintstone)" ); //$NON-NLS-1$
assertEquals( "(:1.2.3:=Wilma Flintstone)", parser.getModel().toString() ); //$NON-NLS-1$
assertEquals( "(:1.2.3:=Wilma Flintstone)", parser.getModel().toUserProvidedString() ); //$NON-NLS-1$
assertTrue( parser.getModel().isValid() );
}
/**
* Tests an extensible filter.
*
* From RFC4515:
* The sixth and final example is also a filter that should be applied
* to any attribute supporting the matching rule given. Attributes
* supporting the matching rule contained in the Dn should also be
* considered.
*/
public void testExtensibleFilterRFC4515_6()
{
parser.parse( "(:Dn:2.4.6.8.10:=Dino)" ); //$NON-NLS-1$
assertEquals( "(:Dn:2.4.6.8.10:=Dino)", parser.getModel().toString() ); //$NON-NLS-1$
assertEquals( "(:Dn:2.4.6.8.10:=Dino)", parser.getModel().toUserProvidedString() ); //$NON-NLS-1$
assertTrue( parser.getModel().isValid() );
}
/**
* Test for DIRSTUIO-210.
*/
public void testDIRSTUDIO210()
{
parser.parse( "(objectClass>=z*) " ); //$NON-NLS-1$
assertEquals( "(objectClass>=)", parser.getModel().toString() ); //$NON-NLS-1$
assertEquals( "(objectClass>=z*) ", parser.getModel().toUserProvidedString() ); //$NON-NLS-1$
assertFalse( parser.getModel().isValid() );
}
/**
* Test for DIRSTUIO-279.
*/
public void testDIRSTUDIO279()
{
parser.parse( " (&\n (objectClass=person)\n (cn=a*)\n) " ); //$NON-NLS-1$
assertEquals( "(&(objectClass=person)(cn=a*))", parser.getModel().toString() ); //$NON-NLS-1$
assertEquals( " (&\n (objectClass=person)\n (cn=a*)\n) ", parser.getModel().toUserProvidedString() ); //$NON-NLS-1$
assertFalse( parser.getModel().isValid() );
}
}