public FilterTokenParserTests(ITestOutputHelper outputHelper, CultureSwitcher cultureSwitcher) { _tokenizer = new FilterTokenizer(); _outputHelper = outputHelper; _cultureSwitcher = cultureSwitcher; _cultureSwitcher.DefaultCulture = CultureInfo.GetCultureInfo("fr-FR"); _outputHelper.WriteLine($"Current culture is '{_cultureSwitcher.CurrentCulture}'"); }
public void TestLexerAnyOfScenarios() { FilterTokenizer tokenizer = new FilterTokenizer(); var tokens = tokenizer.Tokenize("Ask if any of (AA000, AA001, AA002)=1"); foreach (DslToken t in tokens) { } }
public void TestLexer2Scenarios() { FilterTokenizer tokenizer = new FilterTokenizer(); var tokens = tokenizer.Tokenize("AA000=1, 2 or 3 or AA001=2"); foreach (DslToken t in tokens) { } }
private Asn1Tagged Parse(string expression) { var filterExpr = string.IsNullOrWhiteSpace(expression) ? "(objectclass=*)" : expression; int idx; if ((idx = filterExpr.IndexOf('\\')) != -1) { var sb = new StringBuilder(filterExpr); var i = idx; while (i < sb.Length - 1) { var c = sb[i++]; if (c != '\\') { continue; } // found '\' (backslash) // If V2 escape, turn to a V3 escape c = sb[i]; if (c != '*' && c != '(' && c != ')' && c != '\\') { continue; } // Ldap v2 filter, convert them into hex chars sb.Remove(i, i + 1 - i); sb.Insert(i, Convert.ToString(c, 16)); i += 2; } filterExpr = sb.ToString(); } // missing opening and closing parentheses, must be V2, add parentheses if (filterExpr[0] != '(' && filterExpr[filterExpr.Length - 1] != ')') { filterExpr = "(" + filterExpr + ")"; } var ch = filterExpr[0]; var len = filterExpr.Length; // missing opening parenthesis ? if (ch != '(') { throw new LdapException(LdapException.MissingLeftParen, LdapStatusCode.FilterError); } // missing closing parenthesis ? if (filterExpr[len - 1] != ')') { throw new LdapException(LdapException.MissingRightParen, LdapStatusCode.FilterError); } // unmatched parentheses ? var parenCount = 0; for (var i = 0; i < len; i++) { switch (filterExpr[i]) { case '(': parenCount++; break; case ')': parenCount--; break; } } if (parenCount > 0) { throw new LdapException(LdapException.MissingRightParen, LdapStatusCode.FilterError); } if (parenCount < 0) { throw new LdapException(LdapException.MissingLeftParen, LdapStatusCode.FilterError); } _ft = new FilterTokenizer(this, filterExpr); return(ParseFilter()); }
//************************************************************************* // Helper methods for RFC 2254 Search Filter parsing. //************************************************************************* /// <summary> Parses an RFC 2251 filter string into an ASN.1 Ldap Filter object.</summary> private Asn1Tagged parse(System.String filterExpr) { if ((System.Object) filterExpr == null || filterExpr.Equals("")) { filterExpr = new System.Text.StringBuilder("(objectclass=*)").ToString(); } int idx; if ((idx = filterExpr.IndexOf((System.Char) '\\')) != - 1) { System.Text.StringBuilder sb = new System.Text.StringBuilder(filterExpr); int i = idx; while (i < (sb.Length - 1)) { char c = sb[i++]; if (c == '\\') { // found '\' (backslash) // If V2 escape, turn to a V3 escape c = sb[i]; if (c == '*' || c == '(' || c == ')' || c == '\\') { // Ldap v2 filter, convert them into hex chars sb.Remove(i, i + 1 - i); sb.Insert(i, System.Convert.ToString((int) c, 16)); i += 2; } } } filterExpr = sb.ToString(); } // missing opening and closing parentheses, must be V2, add parentheses if ((filterExpr[0] != '(') && (filterExpr[filterExpr.Length - 1] != ')')) { filterExpr = "(" + filterExpr + ")"; } char ch = filterExpr[0]; int len = filterExpr.Length; // missing opening parenthesis ? if (ch != '(') { throw new LdapLocalException(ExceptionMessages.MISSING_LEFT_PAREN, LdapException.FILTER_ERROR); } // missing closing parenthesis ? if (filterExpr[len - 1] != ')') { throw new LdapLocalException(ExceptionMessages.MISSING_RIGHT_PAREN, LdapException.FILTER_ERROR); } // unmatched parentheses ? int parenCount = 0; for (int i = 0; i < len; i++) { if (filterExpr[i] == '(') { parenCount++; } if (filterExpr[i] == ')') { parenCount--; } } if (parenCount > 0) { throw new LdapLocalException(ExceptionMessages.MISSING_RIGHT_PAREN, LdapException.FILTER_ERROR); } if (parenCount < 0) { throw new LdapLocalException(ExceptionMessages.MISSING_LEFT_PAREN, LdapException.FILTER_ERROR); } ft = new FilterTokenizer(this, filterExpr); return parseFilter(); }
public FilterTokenizerTests(ITestOutputHelper outputHelper) { _sut = new FilterTokenizer(); _outputHelper = outputHelper; }
public void TestLexer2() { FilterTokenizer tokenizer = new FilterTokenizer(); var tokens = tokenizer.Tokenize("AA000=1, 2 or 3"); }