FULL PRODUCT VERSION :
java version " 1.7.0_11 "
Java(TM) SE Runtime Environment (build 1.7.0_11-b21)
Java HotSpot(TM) 64-Bit Server VM (build 23.6-b04, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
Microsoft Windows [Version 6.1.7601]
A DESCRIPTION OF THE PROBLEM :
When using java.util.Scanner the method next is ignoring delimiter newline and method skip is not ignoring the delimiter.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Run the attached Unit test.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Both tests should pass.
ACTUAL -
Test 1 fails. And it is hard to find out why.
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
import java.io.StringReader;
import java.util.Scanner;
import junit.framework.Assert;
import org.junit.Test;
public class ScannerTest {
static private final String text = " FUNCTION_BLOCK Unnamed_project
\tVAR_INPUT
\t\tUnnamed_variable1 : REAL;
\tEND_VAR
END_FUNCTION_BLOCK " ;
@Test
public void scannerSkipTest() {
Scanner sc = new Scanner(new StringReader(text));
sc.skip( " (?i)FUNCTION_BLOCK " );
String blockName = sc.next();
sc.skip( " (?i)VAR_INPUT " );
String variableName = sc.next();
sc.skip( " : " );
String type = sc.next();
sc.skip( " (?i)END_VAR " );
sc.skip( " (?i)END_FUNCTION_BLOCK " );
assert " Unnamed_project " .equals(blockName);
assert " Unnamed_variable1 " .equals(variableName);
assert " REAL " .equals(type);
}
@Test
public void scannerWithoutSkipTest() {
Scanner sc = new Scanner(new StringReader(text));
String skipped = sc.next();
assert " FUNCTION_BLOCK " .equalsIgnoreCase(skipped);
String blockName = sc.next();
skipped = sc.next();
assert " VAR_INPUT " .equalsIgnoreCase(skipped);
String variableName = sc.next();
skipped = sc.next();
assert " : " .equalsIgnoreCase(skipped);
String type = sc.next();
skipped = sc.next();
assert " END_VAR " .equalsIgnoreCase(skipped);
skipped = sc.next();
assert " END_FUNCTION_BLOCK " .equalsIgnoreCase(skipped);
assert " Unnamed_project " .equals(blockName);
assert " Unnamed_variable1 " .equals(variableName);
assert " REAL " .equals(type);
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
manually checking the keywords as provided in the second test
java version " 1.7.0_11 "
Java(TM) SE Runtime Environment (build 1.7.0_11-b21)
Java HotSpot(TM) 64-Bit Server VM (build 23.6-b04, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
Microsoft Windows [Version 6.1.7601]
A DESCRIPTION OF THE PROBLEM :
When using java.util.Scanner the method next is ignoring delimiter newline and method skip is not ignoring the delimiter.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Run the attached Unit test.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Both tests should pass.
ACTUAL -
Test 1 fails. And it is hard to find out why.
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
import java.io.StringReader;
import java.util.Scanner;
import junit.framework.Assert;
import org.junit.Test;
public class ScannerTest {
static private final String text = " FUNCTION_BLOCK Unnamed_project
\tVAR_INPUT
\t\tUnnamed_variable1 : REAL;
\tEND_VAR
END_FUNCTION_BLOCK " ;
@Test
public void scannerSkipTest() {
Scanner sc = new Scanner(new StringReader(text));
sc.skip( " (?i)FUNCTION_BLOCK " );
String blockName = sc.next();
sc.skip( " (?i)VAR_INPUT " );
String variableName = sc.next();
sc.skip( " : " );
String type = sc.next();
sc.skip( " (?i)END_VAR " );
sc.skip( " (?i)END_FUNCTION_BLOCK " );
assert " Unnamed_project " .equals(blockName);
assert " Unnamed_variable1 " .equals(variableName);
assert " REAL " .equals(type);
}
@Test
public void scannerWithoutSkipTest() {
Scanner sc = new Scanner(new StringReader(text));
String skipped = sc.next();
assert " FUNCTION_BLOCK " .equalsIgnoreCase(skipped);
String blockName = sc.next();
skipped = sc.next();
assert " VAR_INPUT " .equalsIgnoreCase(skipped);
String variableName = sc.next();
skipped = sc.next();
assert " : " .equalsIgnoreCase(skipped);
String type = sc.next();
skipped = sc.next();
assert " END_VAR " .equalsIgnoreCase(skipped);
skipped = sc.next();
assert " END_FUNCTION_BLOCK " .equalsIgnoreCase(skipped);
assert " Unnamed_project " .equals(blockName);
assert " Unnamed_variable1 " .equals(variableName);
assert " REAL " .equals(type);
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
manually checking the keywords as provided in the second test