Revision: 6381
http://languagetool.svn.sourceforge.net/languagetool/?rev=6381&view=rev
Author: dominikoeo
Date: 2012-01-29 22:23:46 +0000 (Sun, 29 Jan 2012)
Log Message:
-----------
- added another sanity check on grammar rules in "ant test"
to find negate="yes" with empty strings.
Modified Paths:
--------------
trunk/JLanguageTool/src/test/org/languagetool/rules/patterns/PatternRuleTest.java
Modified:
trunk/JLanguageTool/src/test/org/languagetool/rules/patterns/PatternRuleTest.java
===================================================================
---
trunk/JLanguageTool/src/test/org/languagetool/rules/patterns/PatternRuleTest.java
2012-01-29 19:14:02 UTC (rev 6380)
+++
trunk/JLanguageTool/src/test/org/languagetool/rules/patterns/PatternRuleTest.java
2012-01-29 22:23:46 UTC (rev 6381)
@@ -120,6 +120,7 @@
element.getString(),
element.isRegularExpression(),
element.getCaseSensitive(),
+ element.getNegation(),
element.isInflected(),
lang, rule.getId() + ":" + rule.getSubId());
@@ -128,8 +129,9 @@
element.getPOStag() == null ? "" : element.getPOStag(),
element.isPOStagRegularExpression(),
element.getCaseSensitive(),
+ element.getPOSNegation(),
false,
- lang, rule.getId() + ":" + rule.getSubId() + " (exception in POS
tag) ");
+ lang, rule.getId() + ":" + rule.getSubId() + " (POS tag)");
List<Element> exceptionElements = new ArrayList<Element>();
if (element.getExceptionList() != null) {
@@ -138,6 +140,7 @@
if (exception.hasNextException() && element.getSkipNext() == 0) {
System.err.println("The " + lang.toString() + " rule: "
+ rule.getId() + ":" + rule.getSubId()
+ + " (exception in token [" + i + "])"
+ " in token [" + i + "]"
+ " has no skip=\"...\" and yet contains scope=\"next\""
+ " so the exception never applies. "
@@ -152,18 +155,20 @@
exception.getString(),
exception.isRegularExpression(),
exception.getCaseSensitive(),
+ exception.getNegation(),
exception.isInflected(),
lang,
- rule.getId() + ":" + rule.getSubId() + " (exception in token
[" + i + "]) ");
+ rule.getId() + ":" + rule.getSubId()+ " (exception in token ["
+ i + "])");
}
// Check postag="..." of exception is consistent with
postag_regexp="..."
warnIfElementNotKosher(
exception.getPOStag() == null ? "" : exception.getPOStag(),
exception.isPOStagRegularExpression(),
exception.getCaseSensitive(),
+ exception.getPOSNegation(),
false,
lang,
- rule.getId() + ":" + rule.getSubId() + " (exception in POS tag
of token [" + i + "]) ");
+ rule.getId() + ":" + rule.getSubId() + " (exception in POS tag
of token [" + i + "])");
// Search for duplicate exceptions (which are useless).
// Since there are 2 nested loops on the list of exceptions,
@@ -199,27 +204,27 @@
private static boolean equalException(final Element exception1,
final Element exception2)
{
- String string1 = exception1.getString();
- String string2 = exception2.getString();
+ String string1 = exception1.getString() == null ? "" :
exception1.getString();
+ String string2 = exception2.getString() == null ? "" :
exception2.getString();
if (!exception1.getCaseSensitive() || !exception2.getCaseSensitive()) {
// String comparison is done case insensitive if one or both strings
- // are case insensitive, because the case insensive one would imply
+ // are case insensitive, because the case insensitive one would imply
// the case sensitive one.
string1 = string1.toLowerCase();
string2 = string2.toLowerCase();
}
- final boolean equalStrings = (string1 == null || string2 == null)
- ? string1 == string2 : string1.equals(string2);
- if (!equalStrings) {
- return false;
+ if (!string1.isEmpty() || !string2.isEmpty()) {
+ if (!string1.equals(string2)) {
+ return false;
+ }
}
- final String posTag1 = exception1.getPOStag();
- final String posTag2 = exception2.getPOStag();
- final boolean equalPosTags = (posTag1 == null || posTag2 == null)
- ? posTag1 == posTag2 : posTag1.equals(posTag2);
- if (!equalPosTags) {
- return false;
+ final String posTag1 = exception1.getPOStag() == null ? "" :
exception1.getPOStag();
+ final String posTag2 = exception2.getPOStag() == null ? "" :
exception2.getPOStag();
+ if (!posTag1.isEmpty() || !posTag2.isEmpty()) {
+ if (!posTag1.equals(posTag2)) {
+ return false;
+ }
}
// We should not need to check for:
@@ -241,6 +246,7 @@
final String stringValue,
final boolean isRegularExpression,
final boolean isCaseSensitive,
+ final boolean isNegated,
final boolean isInflected,
final Language lang, final String ruleId) {
@@ -251,7 +257,7 @@
+ "\" that is not marked as regular expression but probably is
one.");
}
- if (isRegularExpression && "".equals(stringValue)) {
+ if (isRegularExpression && stringValue.isEmpty()) {
System.err.println("The " + lang.toString() + " rule: "
+ ruleId + " contains an empty string " + "\"" + stringValue
+ "\" that is marked as regular expression.");
@@ -263,8 +269,12 @@
+ "\" that is marked as regular expression but probably is not
one.");
}
- if (isInflected && "".equals(stringValue)) {
+ if (isNegated && stringValue.isEmpty()) {
System.err.println("The " + lang.toString() + " rule: "
+ + ruleId + " marked as negated but is empty so the negation is
useless. Did you mix up negated and pos_negated?");
+ }
+ if (isInflected && stringValue.isEmpty()) {
+ System.err.println("The " + lang.toString() + " rule: "
+ ruleId + " contains " + "\"" + stringValue
+ "\" that is marked as inflected but is empty, so the attribute is
redundant.");
}
@@ -275,6 +285,7 @@
+ "(use an empty string without regexp=\"yes\" such as <token/>)");
}
+
if (isRegularExpression && !isCaseSensitive) {
final Matcher matcher = CASE_PATTERN.matcher(stringValue);
if (matcher.find()) {
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
Try before you buy = See our experts in action!
The most comprehensive online learning library for Microsoft developers
is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3,
Metro Style Apps, more. Free future releases when you subscribe now!
http://p.sf.net/sfu/learndevnow-dev2
_______________________________________________
Languagetool-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/languagetool-cvs