You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by fe...@apache.org on 2007/12/09 19:14:52 UTC
svn commit: r602713 - in /directory/sandbox/felixk:
studio-ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/filtereditor/
studio-ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/widgets/sear...
Author: felixk
Date: Sun Dec 9 10:14:34 2007
New Revision: 602713
URL: http://svn.apache.org/viewvc?rev=602713&view=rev
Log:
Update from trunk
Added:
directory/sandbox/felixk/studio-ldapbrowser-core/src/test/java/org/apache/directory/studio/ldapbrowser/core/model/LdapFilterParserErrorTolerantTest.java (with props)
Modified:
directory/sandbox/felixk/studio-ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/filtereditor/FilterAutoEditStrategy.java
directory/sandbox/felixk/studio-ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/filtereditor/FilterDamagerRepairer.java
directory/sandbox/felixk/studio-ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/widgets/search/FilterWidgetAutoEditStrategyAdapter.java
directory/sandbox/felixk/studio-ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/model/filter/LdapFilter.java
directory/sandbox/felixk/studio-ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/model/filter/LdapFilterItemComponent.java
directory/sandbox/felixk/studio-ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/model/filter/parser/LdapFilterParser.java
directory/sandbox/felixk/studio-ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/model/filter/parser/LdapFilterScanner.java
directory/sandbox/felixk/studio-ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/model/filter/parser/LdapFilterToken.java
directory/sandbox/felixk/studio-ldapbrowser-core/src/test/java/org/apache/directory/studio/ldapbrowser/core/model/LdapFilterParserTest.java
Modified: directory/sandbox/felixk/studio-ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/filtereditor/FilterAutoEditStrategy.java
URL: http://svn.apache.org/viewvc/directory/sandbox/felixk/studio-ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/filtereditor/FilterAutoEditStrategy.java?rev=602713&r1=602712&r2=602713&view=diff
==============================================================================
--- directory/sandbox/felixk/studio-ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/filtereditor/FilterAutoEditStrategy.java (original)
+++ directory/sandbox/felixk/studio-ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/filtereditor/FilterAutoEditStrategy.java Sun Dec 9 10:14:34 2007
@@ -105,19 +105,35 @@
if ( aep.length > 0 && ( aep.text == null || "".equals( aep.text ) ) )
{
// delete surrounding parenthesis after deleting the last character
- if ( filter.toString().length() - aep.length == 2 && filter.getStartToken() != null
+ if ( filter.toString().length() - aep.length == 2
+ && filter.getStartToken() != null
&& filter.getStopToken() != null
&& aep.offset >= filter.getStartToken().getOffset() + filter.getStartToken().getLength()
&& aep.offset + aep.length <= filter.getStopToken().getOffset() )
{
- aep.offset -= 1;
- aep.length += 2;
+ if ( filter.toString().length() - aep.length == 2 )
+ {
+ aep.offset -= 1;
+ aep.length += 2;
+ aep.caretOffset = aep.offset;
+ aep.shiftsCaret = false;
+ }
+ }
+
+ // delete closing parenthesis after deleting the opening parenthesis
+ if ( filter.toString().length() - aep.length == 1
+ && filter.getStartToken() != null
+ && filter.getStopToken() != null
+ && aep.offset == filter.getStartToken().getOffset() )
+ {
+ aep.length += 1;
aep.caretOffset = aep.offset;
aep.shiftsCaret = false;
}
+
}
- if ( aep.length == 0 && aep.text != null && !"".equals( aep.text ) )
+ if ( (aep.length == 0 || aep.length==currentFilter.length()) && aep.text != null && !"".equals( aep.text ) )
{
boolean isNewFilter = aep.text.equals( "(" );
boolean isNewNestedFilter = aep.text.equals( "&" ) || aep.text.equals( "|" ) || aep.text.equals( "!" );
@@ -125,11 +141,12 @@
boolean isSurroundNested = false;
boolean isSurroundBeforeOtherFilter = false;
boolean isSurroundAfterOtherFilter = false;
- if ( aep.text.matches( "[a-zA-Z0-9-\\.&|!:]+" ) && filter != null )
+ if( !Character.isWhitespace( aep.text.charAt( 0 ) ) && !aep.text.startsWith( "(" ) && !aep.text.endsWith( ")" ) )
{
- isSurroundNew = filter.getStartToken() == null && aep.offset == 0 && !aep.text.startsWith( "(" )
- && !aep.text.endsWith( ")" );
+ // isSurroundNew
+ isSurroundNew = aep.offset == 0;
+ // isSurroundNested
if ( filter.getStartToken() != null
&& filter.getFilterComponent() != null
&& ( filter.getFilterComponent() instanceof LdapAndFilterComponent
@@ -172,14 +189,18 @@
}
}
+ // isSurroundBeforeOtherFilter
isSurroundBeforeOtherFilter = filter.getStartToken() != null
&& aep.offset == filter.getStartToken().getOffset();
+ // isSurroundAfterOtherFilter
isSurroundAfterOtherFilter = filter.getStopToken() != null
&& aep.offset == filter.getStopToken().getOffset()
&& ( filter.getFilterComponent() instanceof LdapAndFilterComponent
|| filter.getFilterComponent() instanceof LdapOrFilterComponent || filter.getFilterComponent() instanceof LdapNotFilterComponent );
}
+
+ System.out.println("isSurroundNew="+isSurroundNew+", isSurroundNested="+isSurroundNested+", isSurroundAfterOtherFilter="+isSurroundAfterOtherFilter+", isSurroundBeforeOtherFilter="+isSurroundBeforeOtherFilter);
// add opening parenthesis '('
if ( isSurroundNew || isSurroundNested || isSurroundAfterOtherFilter || isSurroundBeforeOtherFilter )
@@ -211,13 +232,16 @@
}
}
}
-
+
// translate tab to IDENT_STRING
if ( aep.text.equals( "\t" ) )
{
aep.text = INDENT_STRING;
}
}
+
+ System.out.println( "aep='"+aep.text+"',"+aep.offset+","+aep.length+","+aep.caretOffset+","+aep.shiftsCaret+"; balanced="+balanced+"; filter='"+filter.toString()+"'" );
+
}
/**
Modified: directory/sandbox/felixk/studio-ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/filtereditor/FilterDamagerRepairer.java
URL: http://svn.apache.org/viewvc/directory/sandbox/felixk/studio-ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/filtereditor/FilterDamagerRepairer.java?rev=602713&r1=602712&r2=602713&view=diff
==============================================================================
--- directory/sandbox/felixk/studio-ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/filtereditor/FilterDamagerRepairer.java (original)
+++ directory/sandbox/felixk/studio-ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/filtereditor/FilterDamagerRepairer.java Sun Dec 9 10:14:34 2007
@@ -131,6 +131,7 @@
case LdapFilterToken.LESS:
case LdapFilterToken.APROX:
case LdapFilterToken.PRESENT:
+ case LdapFilterToken.SUBSTRING:
case LdapFilterToken.EXTENSIBLE_DNATTR_COLON:
case LdapFilterToken.EXTENSIBLE_MATCHINGRULEOID_COLON:
case LdapFilterToken.EXTENSIBLE_EQUALS_COLON:
Modified: directory/sandbox/felixk/studio-ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/widgets/search/FilterWidgetAutoEditStrategyAdapter.java
URL: http://svn.apache.org/viewvc/directory/sandbox/felixk/studio-ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/widgets/search/FilterWidgetAutoEditStrategyAdapter.java?rev=602713&r1=602712&r2=602713&view=diff
==============================================================================
--- directory/sandbox/felixk/studio-ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/widgets/search/FilterWidgetAutoEditStrategyAdapter.java (original)
+++ directory/sandbox/felixk/studio-ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/widgets/search/FilterWidgetAutoEditStrategyAdapter.java Sun Dec 9 10:14:34 2007
@@ -106,6 +106,11 @@
String oldText = combo.getText();
//parser.parse( oldText );
+ if( !oldTexts.isEmpty() )
+ {
+ oldTexts.clear();
+ verifyEvents.clear();
+ }
oldTexts.add( oldText );
verifyEvents.add( e );
}
Modified: directory/sandbox/felixk/studio-ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/model/filter/LdapFilter.java
URL: http://svn.apache.org/viewvc/directory/sandbox/felixk/studio-ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/model/filter/LdapFilter.java?rev=602713&r1=602712&r2=602713&view=diff
==============================================================================
--- directory/sandbox/felixk/studio-ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/model/filter/LdapFilter.java (original)
+++ directory/sandbox/felixk/studio-ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/model/filter/LdapFilter.java Sun Dec 9 10:14:34 2007
@@ -206,7 +206,7 @@
*/
public boolean isValid()
{
- return startToken != null && filterComponent != null && filterComponent.isValid() && stopToken != null;
+ return startToken != null && filterComponent != null && filterComponent.isValid() && stopToken != null && otherTokens.isEmpty();
}
@@ -299,7 +299,17 @@
*/
public String toString()
{
- return ( startToken != null ? "(" : "" ) + ( filterComponent != null ? filterComponent.toString() : "" ) + ( stopToken != null ? ")" : "" ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
+ StringBuffer sb = new StringBuffer();
+ LdapFilterToken[] tokens = getTokens();
+ for ( LdapFilterToken token : tokens )
+ {
+ sb.append( token.getValue() );
+ }
+ return sb.toString();
+// return ( startToken != null ? "(" : "" ) +
+// ( filterComponent != null ? filterComponent.toString() : "" ) +
+// ( stopToken != null ? ")" : "" );
+// //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
}
}
Modified: directory/sandbox/felixk/studio-ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/model/filter/LdapFilterItemComponent.java
URL: http://svn.apache.org/viewvc/directory/sandbox/felixk/studio-ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/model/filter/LdapFilterItemComponent.java?rev=602713&r1=602712&r2=602713&view=diff
==============================================================================
--- directory/sandbox/felixk/studio-ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/model/filter/LdapFilterItemComponent.java (original)
+++ directory/sandbox/felixk/studio-ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/model/filter/LdapFilterItemComponent.java Sun Dec 9 10:14:34 2007
@@ -113,7 +113,9 @@
&& ( filtertypeToken.getType() == LdapFilterToken.EQUAL
|| filtertypeToken.getType() == LdapFilterToken.GREATER
|| filtertypeToken.getType() == LdapFilterToken.LESS
- || filtertypeToken.getType() == LdapFilterToken.APROX || filtertypeToken.getType() == LdapFilterToken.PRESENT ) )
+ || filtertypeToken.getType() == LdapFilterToken.APROX
+ || filtertypeToken.getType() == LdapFilterToken.PRESENT
+ || filtertypeToken.getType() == LdapFilterToken.SUBSTRING ) )
{
this.filtertypeToken = filtertypeToken;
return true;
Modified: directory/sandbox/felixk/studio-ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/model/filter/parser/LdapFilterParser.java
URL: http://svn.apache.org/viewvc/directory/sandbox/felixk/studio-ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/model/filter/parser/LdapFilterParser.java?rev=602713&r1=602712&r2=602713&view=diff
==============================================================================
--- directory/sandbox/felixk/studio-ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/model/filter/parser/LdapFilterParser.java (original)
+++ directory/sandbox/felixk/studio-ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/model/filter/parser/LdapFilterParser.java Sun Dec 9 10:14:34 2007
@@ -195,6 +195,7 @@
case LdapFilterToken.LESS:
case LdapFilterToken.APROX:
case LdapFilterToken.PRESENT:
+ case LdapFilterToken.SUBSTRING:
{
LdapFilter currentFilter = filterStack.peek();
LdapFilterComponent filterComponent = currentFilter.getFilterComponent();
Modified: directory/sandbox/felixk/studio-ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/model/filter/parser/LdapFilterScanner.java
URL: http://svn.apache.org/viewvc/directory/sandbox/felixk/studio-ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/model/filter/parser/LdapFilterScanner.java?rev=602713&r1=602712&r2=602713&view=diff
==============================================================================
--- directory/sandbox/felixk/studio-ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/model/filter/parser/LdapFilterScanner.java (original)
+++ directory/sandbox/felixk/studio-ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/model/filter/parser/LdapFilterScanner.java Sun Dec 9 10:14:34 2007
@@ -224,8 +224,13 @@
this.lastTokenType = LdapFilterToken.LPAR;
return new LdapFilterToken( this.lastTokenType, "(", pos );
case ')':
- this.lastTokenType = LdapFilterToken.RPAR;
- return new LdapFilterToken( this.lastTokenType, ")", pos );
+ if ( lastTokenType != LdapFilterToken.EQUAL && lastTokenType != LdapFilterToken.GREATER
+ && lastTokenType != LdapFilterToken.LESS && lastTokenType != LdapFilterToken.APROX
+ && lastTokenType != LdapFilterToken.SUBSTRING )
+ {
+ this.lastTokenType = LdapFilterToken.RPAR;
+ return new LdapFilterToken( this.lastTokenType, ")", pos );
+ }
case '&':
if ( lastTokenType == LdapFilterToken.LPAR )
{
@@ -281,13 +286,41 @@
{
prevChar();
prevChar();
- this.lastTokenType = LdapFilterToken.EQUAL;
- return new LdapFilterToken( this.lastTokenType, "=", pos );
}
}
else
{
prevChar();
+ }
+
+ // substring or equal
+ // read till ) or eof, if we found an * we have an substring
+ boolean asteriskFound = false;
+ c = nextNonLinebreakChar();
+ int count = 1;
+ while ( c != ')' && c != '\u0000' )
+ {
+ if( c == '*' )
+ {
+ asteriskFound = true;
+ break;
+ }
+
+ c = nextNonLinebreakChar();
+ count++;
+ }
+ while( count > 0 )
+ {
+ prevNonLinebreakChar();
+ count--;
+ }
+ if( asteriskFound )
+ {
+ this.lastTokenType = LdapFilterToken.SUBSTRING;
+ return new LdapFilterToken( this.lastTokenType, "=", pos );
+ }
+ else
+ {
this.lastTokenType = LdapFilterToken.EQUAL;
return new LdapFilterToken( this.lastTokenType, "=", pos );
}
@@ -418,17 +451,67 @@
if ( lastTokenType == LdapFilterToken.EQUAL || lastTokenType == LdapFilterToken.GREATER
|| lastTokenType == LdapFilterToken.LESS || lastTokenType == LdapFilterToken.APROX )
{
+ boolean forbiddenCharFound = false;
+ StringBuffer sb = new StringBuffer();
+ c = nextNonLinebreakChar();
+ int count = 0;
+ while ( c != ')' && c != '\u0000' )
+ {
+ if ( c == '*' || c == '(' )
+ {
+ forbiddenCharFound = true;
+ break;
+ }
+
+ sb.append( c );
+ c = nextNonLinebreakChar();
+ count++;
+ }
+ prevNonLinebreakChar();
+ if ( forbiddenCharFound )
+ {
+ while ( count > 0 )
+ {
+ prevNonLinebreakChar();
+ count--;
+ }
+ }
+ else //if ( sb.length() > 0 )
+ {
+ this.lastTokenType = LdapFilterToken.VALUE;
+ return new LdapFilterToken( this.lastTokenType, sb.toString(), pos - sb.length() + 1 );
+ }
+ }
+ if ( lastTokenType == LdapFilterToken.SUBSTRING )
+ {
+ boolean forbiddenCharFound = false;
StringBuffer sb = new StringBuffer();
c = nextNonLinebreakChar();
- while ( c != '(' && c != ')' && c != '\u0000' )
+ int count = 0;
+ while ( c != ')' && c != '\u0000' )
{
+ if ( c == '(' )
+ {
+ forbiddenCharFound = true;
+ break;
+ }
+
sb.append( c );
c = nextNonLinebreakChar();
+ count++;
}
prevNonLinebreakChar();
- if ( sb.length() > 0 )
+ if ( forbiddenCharFound )
+ {
+ while ( count > 0 )
+ {
+ prevNonLinebreakChar();
+ count--;
+ }
+ }
+ else if ( sb.length() > 0 )
{
this.lastTokenType = LdapFilterToken.VALUE;
return new LdapFilterToken( this.lastTokenType, sb.toString(), pos - sb.length() + 1 );
Modified: directory/sandbox/felixk/studio-ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/model/filter/parser/LdapFilterToken.java
URL: http://svn.apache.org/viewvc/directory/sandbox/felixk/studio-ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/model/filter/parser/LdapFilterToken.java?rev=602713&r1=602712&r2=602713&view=diff
==============================================================================
--- directory/sandbox/felixk/studio-ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/model/filter/parser/LdapFilterToken.java (original)
+++ directory/sandbox/felixk/studio-ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/model/filter/parser/LdapFilterToken.java Sun Dec 9 10:14:34 2007
@@ -77,6 +77,9 @@
/** The token identifier for the present filter type =* */
public static final int PRESENT = 45;
+
+ /** The token identifier for the substring filter type =* */
+ public static final int SUBSTRING = 46;
/** The token identifier for a value. */
public static final int VALUE = 51;
Added: directory/sandbox/felixk/studio-ldapbrowser-core/src/test/java/org/apache/directory/studio/ldapbrowser/core/model/LdapFilterParserErrorTolerantTest.java
URL: http://svn.apache.org/viewvc/directory/sandbox/felixk/studio-ldapbrowser-core/src/test/java/org/apache/directory/studio/ldapbrowser/core/model/LdapFilterParserErrorTolerantTest.java?rev=602713&view=auto
==============================================================================
--- directory/sandbox/felixk/studio-ldapbrowser-core/src/test/java/org/apache/directory/studio/ldapbrowser/core/model/LdapFilterParserErrorTolerantTest.java (added)
+++ directory/sandbox/felixk/studio-ldapbrowser-core/src/test/java/org/apache/directory/studio/ldapbrowser/core/model/LdapFilterParserErrorTolerantTest.java Sun Dec 9 10:14:34 2007
@@ -0,0 +1,169 @@
+/*
+ * 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.LdapFilter;
+import org.apache.directory.studio.ldapbrowser.core.model.filter.LdapFilterComponent;
+import org.apache.directory.studio.ldapbrowser.core.model.filter.LdapFilterItemComponent;
+import org.apache.directory.studio.ldapbrowser.core.model.filter.parser.LdapFilterParser;
+import org.apache.directory.studio.ldapbrowser.core.model.filter.parser.LdapFilterToken;
+
+
+/**
+ * Tests the filter parser for error tolerance.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class LdapFilterParserErrorTolerantTest extends TestCase
+{
+ private LdapFilterParser parser = new LdapFilterParser();
+
+
+ public void testLpar()
+ {
+ parser.parse( "(" );
+
+ LdapFilter model = parser.getModel();
+
+ assertNotNull( model.getStartToken() );
+ assertEquals( 0, model.getStartToken().getOffset() );
+ assertEquals( 1, model.getStartToken().getLength() );
+ assertEquals( LdapFilterToken.LPAR, model.getStartToken().getType() );
+ assertEquals( "(", model.getStartToken().getValue() );
+
+ assertNull( model.getFilterComponent() );
+
+ assertNull( model.getStopToken() );
+
+ assertEquals( "(", model.toString() );
+ assertFalse( parser.getModel().isValid() );
+ }
+
+
+ public void testLparAttr()
+ {
+ parser.parse( "(objectClass" );
+
+ LdapFilter model = parser.getModel();
+
+ assertNotNull( model.getStartToken() );
+ assertEquals( 0, model.getStartToken().getOffset() );
+ assertEquals( 1, model.getStartToken().getLength() );
+ assertEquals( LdapFilterToken.LPAR, model.getStartToken().getType() );
+ assertEquals( "(", model.getStartToken().getValue() );
+
+ LdapFilterComponent filterComponent = model.getFilterComponent();
+ assertNotNull( filterComponent );
+ assertTrue( filterComponent instanceof LdapFilterItemComponent );
+ LdapFilterItemComponent filterItemComponent = ( LdapFilterItemComponent ) filterComponent;
+ assertNotNull( filterItemComponent.getAttributeToken() );
+ assertEquals( 1, filterItemComponent.getAttributeToken().getOffset() );
+ assertEquals( 11, filterItemComponent.getAttributeToken().getLength() );
+ assertEquals( LdapFilterToken.ATTRIBUTE, filterItemComponent.getAttributeToken().getType() );
+ assertEquals( "objectClass", filterItemComponent.getAttributeToken().getValue() );
+ assertNull( filterItemComponent.getFilterToken() );
+ assertNull( filterItemComponent.getValueToken() );
+
+ assertNull( model.getStopToken() );
+
+ assertEquals( "(objectClass", model.toString() );
+ assertFalse( parser.getModel().isValid() );
+ }
+
+
+ public void testLparAttrEquals()
+ {
+ parser.parse( "(objectClass=" );
+
+ LdapFilter model = parser.getModel();
+
+ assertNotNull( model.getStartToken() );
+ assertEquals( 0, model.getStartToken().getOffset() );
+ assertEquals( 1, model.getStartToken().getLength() );
+ assertEquals( LdapFilterToken.LPAR, model.getStartToken().getType() );
+ assertEquals( "(", model.getStartToken().getValue() );
+
+ LdapFilterComponent filterComponent = model.getFilterComponent();
+ assertNotNull( filterComponent );
+ assertTrue( filterComponent instanceof LdapFilterItemComponent );
+ LdapFilterItemComponent filterItemComponent = ( LdapFilterItemComponent ) filterComponent;
+ assertNotNull( filterItemComponent.getAttributeToken() );
+ assertEquals( 1, filterItemComponent.getAttributeToken().getOffset() );
+ assertEquals( 11, filterItemComponent.getAttributeToken().getLength() );
+ assertEquals( LdapFilterToken.ATTRIBUTE, filterItemComponent.getAttributeToken().getType() );
+ assertEquals( "objectClass", filterItemComponent.getAttributeToken().getValue() );
+
+ assertNotNull( filterItemComponent.getFilterToken() );
+ assertEquals( 12, filterItemComponent.getFilterToken().getOffset() );
+ assertEquals( 1, filterItemComponent.getFilterToken().getLength() );
+ assertEquals( LdapFilterToken.EQUAL, filterItemComponent.getFilterToken().getType() );
+ assertEquals( "=", filterItemComponent.getFilterToken().getValue() );
+
+ assertNull( filterItemComponent.getValueToken() );
+
+ assertNull( model.getStopToken() );
+
+ assertEquals( "(objectClass=", model.toString() );
+ assertFalse( parser.getModel().isValid() );
+ }
+
+
+ public void testLparAttrEqualsRpar()
+ {
+ parser.parse( "(objectClass=)" );
+
+ LdapFilter model = parser.getModel();
+
+ assertNotNull( model.getStartToken() );
+ assertEquals( 0, model.getStartToken().getOffset() );
+ assertEquals( 1, model.getStartToken().getLength() );
+ assertEquals( LdapFilterToken.LPAR, model.getStartToken().getType() );
+ assertEquals( "(", model.getStartToken().getValue() );
+
+ LdapFilterComponent filterComponent = model.getFilterComponent();
+ assertNotNull( filterComponent );
+ assertTrue( filterComponent instanceof LdapFilterItemComponent );
+ LdapFilterItemComponent filterItemComponent = ( LdapFilterItemComponent ) filterComponent;
+ assertNotNull( filterItemComponent.getAttributeToken() );
+ assertEquals( 1, filterItemComponent.getAttributeToken().getOffset() );
+ assertEquals( 11, filterItemComponent.getAttributeToken().getLength() );
+ assertEquals( LdapFilterToken.ATTRIBUTE, filterItemComponent.getAttributeToken().getType() );
+ assertEquals( "objectClass", filterItemComponent.getAttributeToken().getValue() );
+
+ assertNotNull( filterItemComponent.getFilterToken() );
+ assertEquals( 12, filterItemComponent.getFilterToken().getOffset() );
+ assertEquals( 1, filterItemComponent.getFilterToken().getLength() );
+ assertEquals( LdapFilterToken.EQUAL, filterItemComponent.getFilterToken().getType() );
+ assertEquals( "=", filterItemComponent.getFilterToken().getValue() );
+
+ assertNotNull( filterItemComponent.getValueToken() );
+
+ assertNotNull( model.getStopToken() );
+
+ assertEquals( "(objectClass=)", model.toString() );
+ assertTrue( parser.getModel().isValid() );
+ }
+
+}
Propchange: directory/sandbox/felixk/studio-ldapbrowser-core/src/test/java/org/apache/directory/studio/ldapbrowser/core/model/LdapFilterParserErrorTolerantTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: directory/sandbox/felixk/studio-ldapbrowser-core/src/test/java/org/apache/directory/studio/ldapbrowser/core/model/LdapFilterParserErrorTolerantTest.java
------------------------------------------------------------------------------
svn:executable = *
Modified: directory/sandbox/felixk/studio-ldapbrowser-core/src/test/java/org/apache/directory/studio/ldapbrowser/core/model/LdapFilterParserTest.java
URL: http://svn.apache.org/viewvc/directory/sandbox/felixk/studio-ldapbrowser-core/src/test/java/org/apache/directory/studio/ldapbrowser/core/model/LdapFilterParserTest.java?rev=602713&r1=602712&r2=602713&view=diff
==============================================================================
--- directory/sandbox/felixk/studio-ldapbrowser-core/src/test/java/org/apache/directory/studio/ldapbrowser/core/model/LdapFilterParserTest.java (original)
+++ directory/sandbox/felixk/studio-ldapbrowser-core/src/test/java/org/apache/directory/studio/ldapbrowser/core/model/LdapFilterParserTest.java Sun Dec 9 10:14:34 2007
@@ -20,12 +20,14 @@
package org.apache.directory.studio.ldapbrowser.core.model;
+
import junit.framework.TestCase;
import org.apache.directory.studio.ldapbrowser.core.model.filter.parser.LdapFilterParser;
+
/**
- * Test the filter parser
+ * Tests the filter parser.
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
* @version $Rev$, $Date$
@@ -33,29 +35,226 @@
public class LdapFilterParserTest extends TestCase
{
private LdapFilterParser parser = new LdapFilterParser();
-
+
+
/**
* Tests an equals filter
*/
public void testEqualsFilter()
{
parser.parse( "(cn=test)" );
- assertEquals( "(cn=test)", parser.getModel().toString());
+ assertEquals( "(cn=test)", parser.getModel().toString() );
+ assertTrue( parser.getModel().isValid() );
+ }
+
+
+ /**
+ * Tests an greater equals filter
+ */
+ public void testGreaterEqualsFilter()
+ {
+ parser.parse( "(cn>=test)" );
+ assertEquals( "(cn>=test)", parser.getModel().toString() );
+ assertTrue( parser.getModel().isValid() );
+ }
+
+
+ /**
+ * Tests an less equals filter
+ */
+ public void testLessEqualsFilter()
+ {
+ parser.parse( "(cn<=test)" );
+ assertEquals( "(cn<=test)", parser.getModel().toString() );
assertTrue( parser.getModel().isValid() );
}
+
+
+ /**
+ * Tests an aprox filter
+ */
+ public void testAproxFilter()
+ {
+ parser.parse( "(cn~=test)" );
+ assertEquals( "(cn~=test)", parser.getModel().toString() );
+ assertTrue( parser.getModel().isValid() );
+ }
+
/**
+ * Tests an substring filter
+ */
+ public void testSubstringFilter()
+ {
+ parser.parse( "(cn=te*st)" );
+ assertEquals( "(cn=te*st)", parser.getModel().toString() );
+ assertTrue( parser.getModel().isValid() );
+ }
+
+
+ /**
* Tests an present filter
*/
public void testPresentFilter()
{
parser.parse( "(cn=*)" );
- assertEquals( "(cn=*)", parser.getModel().toString());
+ assertEquals( "(cn=*)", parser.getModel().toString() );
assertTrue( parser.getModel().isValid() );
}
-
+
+
+ /**
+ * Tests an simple filter
+ */
+ public void testRFC4515_1()
+ {
+ parser.parse( "(cn=Babs Jensen)" );
+ assertEquals( "(cn=Babs Jensen)", parser.getModel().toString() );
+ assertTrue( parser.getModel().isValid() );
+ }
+
+
+ /**
+ * Tests an not filter
+ */
+ public void testRFC4515_2()
+ {
+ parser.parse( "(!(cn=Tim Howes))" );
+ assertEquals( "(!(cn=Tim Howes))", parser.getModel().toString() );
+ assertTrue( parser.getModel().isValid() );
+ }
+
+
+ /**
+ * Tests an and/or filter
+ */
+ public void testRFC4515_3()
+ {
+ parser.parse( "(&(objectClass=Person)(|(sn=Jensen)(cn=Babs J*)))" );
+ assertEquals( "(&(objectClass=Person)(|(sn=Jensen)(cn=Babs J*)))", parser.getModel().toString() );
+ assertTrue( parser.getModel().isValid() );
+ }
+
+
+ /**
+ * Tests an substring filter
+ */
+ public void testRFC4515_4()
+ {
+ parser.parse( "(o=univ*of*mich*)" );
+ assertEquals( "(o=univ*of*mich*)", parser.getModel().toString() );
+ assertTrue( parser.getModel().isValid() );
+ }
+
+
+ /**
+ * Tests an empty assertion value
+ */
+ public void testRFC4515_5()
+ {
+ parser.parse( "(seeAlso=)" );
+ assertEquals( "(seeAlso=)", parser.getModel().toString() );
+ 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)" );
+ assertEquals( "(o=Parens R Us \\28for all your parenthetical needs\\29)", parser.getModel().toString() );
+ 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*)" );
+ assertEquals( "(cn=*\\2A*)", parser.getModel().toString() );
+ 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)" );
+ assertEquals( "(filename=C:\\5cMyFile)", parser.getModel().toString() );
+ assertTrue( parser.getModel().isValid() );
+ }
+
+
/**
- * Tests an extensible filter
+ * 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)" );
+ assertEquals( "(bin=\\00\\00\\00\\04)", parser.getModel().toString() );
+ 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)" );
+ assertEquals( "(sn=Lu\\c4\\8di\\c4\\87)", parser.getModel().toString() );
+ 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)" );
+ assertEquals( "(1.3.6.1.4.1.1466.0=\\04\\02\\48\\69)", parser.getModel().toString() );
+ assertTrue( parser.getModel().isValid() );
+ }
+
+
+ /**
+ * Tests an extensible filter.
*
* From RFC4515:
* The first example shows use of the matching rule "caseExactMatch."
@@ -63,9 +262,11 @@
public void testExtensibleFilterRFC4515_1()
{
parser.parse( "(cn:caseExactMatch:=Fred Flintstone)" );
- assertEquals( "(cn:caseExactMatch:=Fred Flintstone)", parser.getModel().toString());
+ assertEquals( "(cn:caseExactMatch:=Fred Flintstone)", parser.getModel().toString() );
assertTrue( parser.getModel().isValid() );
}
+
+
/**
* Tests an extensible filter.
*
@@ -76,9 +277,11 @@
public void testExtensibleFilterRFC4515_2()
{
parser.parse( "(cn:=Betty Rubble)" );
- assertEquals( "(cn:=Betty Rubble)", parser.getModel().toString());
+ assertEquals( "(cn:=Betty Rubble)", parser.getModel().toString() );
assertTrue( parser.getModel().isValid() );
}
+
+
/**
* Tests an extensible filter.
*
@@ -92,9 +295,11 @@
public void testExtensibleFilterRFC4515_3()
{
parser.parse( "(sn:dn:2.4.6.8.10:=Barney Rubble)" );
- assertEquals( "(sn:dn:2.4.6.8.10:=Barney Rubble)", parser.getModel().toString());
+ assertEquals( "(sn:dn:2.4.6.8.10:=Barney Rubble)", parser.getModel().toString() );
assertTrue( parser.getModel().isValid() );
}
+
+
/**
* Tests an extensible filter.
*
@@ -106,9 +311,11 @@
public void testExtensibleFilterRFC4515_4()
{
parser.parse( "(o:dn:=Ace Industry)" );
- assertEquals( "(o:dn:=Ace Industry)", parser.getModel().toString());
+ assertEquals( "(o:dn:=Ace Industry)", parser.getModel().toString() );
assertTrue( parser.getModel().isValid() );
}
+
+
/**
* Tests an extensible filter.
*
@@ -120,9 +327,11 @@
public void testExtensibleFilterRFC4515_5()
{
parser.parse( "(:1.2.3:=Wilma Flintstone)" );
- assertEquals( "(:1.2.3:=Wilma Flintstone)", parser.getModel().toString());
+ assertEquals( "(:1.2.3:=Wilma Flintstone)", parser.getModel().toString() );
assertTrue( parser.getModel().isValid() );
}
+
+
/**
* Tests an extensible filter.
*
@@ -135,8 +344,17 @@
public void testExtensibleFilterRFC4515_6()
{
parser.parse( "(:DN:2.4.6.8.10:=Dino)" );
- assertEquals( "(:DN:2.4.6.8.10:=Dino)", parser.getModel().toString());
+ assertEquals( "(:DN:2.4.6.8.10:=Dino)", parser.getModel().toString() );
assertTrue( parser.getModel().isValid() );
}
+
+ /**
+ * Test for DIRSTUIO-210.
+ */
+ public void testDIRSTUDIO210()
+ {
+ parser.parse( "(objectClass>=z*) " );
+ assertFalse( parser.getModel().isValid() );
+ }
}