products/Sources/formale Sprachen/JAVA/openjdk-20-36_src/test/jdk/java/util/Scanner image not shown  

Quellcode-Bibliothek

© Kompilation durch diese Firma

[Weder Korrektheit noch Funktionsfähigkeit der Software werden zugesichert.]

Datei: dialog-macro-intro.html   Sprache: JAVA

/*
 * Copyright (c) 2003, 2022, Oracle and/or its affiliates. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 * or visit www.oracle.com if you need additional information or have any
 * questions.
 */


/**
 * @test
 * @bug 4313885 4926319 4927634 5032610 5032622 5049968 5059533 6223711 6277261 6269946 6288823
 *      8072722 8139414 8166261 8172695
 * @summary Basic tests of java.util.Scanner methods
 * @key randomness
 * @modules jdk.localedata
 * @run main/othervm ScanTest
 */


import java.io.*;
import java.math.*;
import java.nio.*;
import java.text.*;
import java.util.*;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
import java.util.regex.*;
import java.util.stream.*;

public class ScanTest {

    private static boolean failure = false;
    private static int failCount = 0;
    private static int NUM_SOURCE_TYPES = 2;
    private static File inputFile = new File(System.getProperty("test.src""."), "input.txt");

    public static void main(String[] args) throws Exception {
        Locale defaultLocale = Locale.getDefault();
        try {
            // Before we have resource to improve the test to be ready for
            // arbitrary locale, force the default locale to be ROOT for now.
            Locale.setDefault(Locale.US);

            skipTest();
            findInLineTest();
            findWithinHorizonTest();
            findInEmptyLineTest();
            removeTest();
            fromFileTest();
            ioExceptionTest();
            matchTest();
            delimiterTest();
            boundaryDelimTest();
            useLocaleTest();
            closeTest();
            cacheTest();
            cacheTest2();
            nonASCIITest();
            resetTest();
            streamCloseTest();
            streamComodTest();
            outOfRangeRadixTest();

            for (int j = 0; j < NUM_SOURCE_TYPES; j++) {
                hasNextTest(j);
                nextTest(j);
                hasNextPatternTest(j);
                nextPatternTest(j);
                booleanTest(j);
                byteTest(j);
                shortTest(j);
                intTest(j);
                longTest(j);
                floatTest(j);
                doubleTest(j);
                integerPatternTest(j);
                floatPatternTest(j);
                bigIntegerPatternTest(j);
                bigDecimalPatternTest(j);
                hasNextLineTest(j);
                nextLineTest(j);
                singleDelimTest(j);
            }

            // Examples
            //example1();
            //example2();
            //example3();

            // Usage cases
            useCase1();
            useCase2();
            useCase3();
            useCase4();
            useCase5();

            if (failure)
                throw new RuntimeException("Failure in the scanning tests.");
            else
                System.err.println("OKAY: All tests passed.");
        } finally {
            // restore the default locale
            Locale.setDefault(defaultLocale);
        }
    }

    public static void useCase1() throws Exception {
        try (Scanner sc = new Scanner(inputFile)) {
            sc.findWithinHorizon("usage case 1", 0);
            String[] names = new String[4];
            for (int i=0; i<4; i++) {
                while (sc.hasNextFloat())
                    sc.nextFloat();
                names[i] = sc.next();
                sc.nextLine();
            }
            if (!names[0].equals("Frank"))
                failCount++;
            if (!names[1].equals("Joe"))
                failCount++;
            if (!names[2].equals("Mary"))
                failCount++;
            if (!names[3].equals("Michelle"))
                failCount++;
        }
        report("Use case 1");
    }

    public static void useCase2() throws Exception {
        try (Scanner sc = new Scanner(inputFile).useDelimiter("-")) {
            String testDataTag = sc.findWithinHorizon("usage case 2\n", 0);
            if (!testDataTag.equals("usage case 2\n"))
                failCount++;
            if (!sc.next().equals("cat"))
                failCount++;
            if (sc.nextInt() != 9)
                failCount++;
            if (!sc.next().equals("dog"))
                failCount++;
            if (sc.nextInt() != 6)
                failCount++;
            if (!sc.next().equals("pig"))
                failCount++;
            if (sc.nextInt() != 2)
                failCount++;
            if (!sc.next().equals(""))
                failCount++;
            if (sc.nextInt() != 5)
                failCount++;
        }
        report("Use case 2");
    }

    public static void useCase3() throws Exception {
        try (Scanner sc = new Scanner(inputFile)) {
            String testDataTag = sc.findWithinHorizon("usage case 3\n", 0);
            if (!testDataTag.equals("usage case 3\n"))
                failCount++;
            Pattern tagPattern = Pattern.compile("@[a-z]+");
            Pattern endPattern = Pattern.compile("\\*\\/");
            String tag;
            String end = sc.findInLine(endPattern);

            while (end == null) {
                if ((tag = sc.findInLine(tagPattern)) != null) {
                    String text = sc.nextLine();
                    text = text.substring(0, text.length() - 1);
                    //System.out.println(text);
                } else {
                    sc.nextLine();
                }
                end = sc.findInLine(endPattern);
            }
        }
        report("Use case 3");
    }

    public static void useCase4() throws Exception {
        try (Scanner sc = new Scanner(inputFile)) {
            String testDataTag = sc.findWithinHorizon("usage case 4\n", 0);
            if (!testDataTag.equals("usage case 4\n"))
                failCount++;

            // Read some text parts of four hrefs
            String[] expected = { "Diffs""Sdiffs""Old""New" };
            for (int i=0; i<4; i++) {
                sc.findWithinHorizon(", 1000);
                sc.useDelimiter("[<>\n]+");
                sc.next();
                String textOfRef = sc.next();
                if (!textOfRef.equals(expected[i]))
                    failCount++;
            }
            // Read some html tags using < and > as delimiters
            if (!sc.next().equals("/a"))
                failCount++;
            if (!sc.next().equals("b"))
                failCount++;

            // Scan some html tags using skip and next
            Pattern nonTagStart = Pattern.compile("[^<]+");
            Pattern tag = Pattern.compile("<[^>]+?>");
            Pattern spotAfterTag = Pattern.compile("(?<=>)");
            String[] expected2 = { """

", "

    ", "
  • " };
                sc.useDelimiter(spotAfterTag);
                int tagsFound = 0;
                while (tagsFound < 4) {
                    if (!sc.hasNext(tag)) {
                        // skip text between tags
                        sc.skip(nonTagStart);
                    }
                    String tagContents = sc.next(tag);
                    if (!tagContents.equals(expected2[tagsFound]))
                        failCount++;
                    tagsFound++;
                }
            }

            report("Use case 4");
        }

        public static void useCase5() throws Exception {
            try (Scanner sc = new Scanner(inputFile)) {
                String testDataTag = sc.findWithinHorizon("usage case 5\n", 0);
                if (!testDataTag.equals("usage case 5\n"))
                    failCount++;

                sc.findWithinHorizon("Share Definitions", 0);
                sc.nextLine();
                sc.next("\\[([a-z]+)\\]");
                String shareName = sc.match().group(1);
                if (!shareName.equals("homes"))
                    failCount++;

                String[] keys = { "comment""browseable""writable""valid users" };
                String[] vals = { "Home Directories""no""yes""%S" };
                for (int i=0; i<4; i++) {
                    sc.useDelimiter("=");
                    String key = sc.next().trim();
                    if (!key.equals(keys[i]))
                        failCount++;
                    sc.skip("[ =]+");
                    sc.useDelimiter("\n");
                    String value = sc.next();
                    if (!value.equals(vals[i]))
                        failCount++;
                    sc.nextLine();
                }
            }

            report("Use case 5");
        }

        public static void nonASCIITest() throws Exception {
            String yourBasicTibetanNumberZero = "\u0f20";
            String yourBasicTibetanFloatingNumber = "\u0f23.\u0f27";
            String weirdMixtureOfTibetanAndASCII = "\u0f23.7";
            String weirdMixtureOfASCIIAndTibetan = "3.\u0f27";
            Scanner sc = new Scanner(yourBasicTibetanNumberZero);
            int i = sc.nextInt();
            if (i != 0)
                failCount++;
            sc = new Scanner(yourBasicTibetanFloatingNumber);
            float f = sc.nextFloat();
            if (f != Float.parseFloat("3.7"))
                failCount++;
            sc = new Scanner(weirdMixtureOfTibetanAndASCII);
            f = sc.nextFloat();
            if (f != Float.parseFloat("3.7"))
                failCount++;
            sc = new Scanner(weirdMixtureOfASCIIAndTibetan);
            f = sc.nextFloat();
            if (f != Float.parseFloat("3.7"))
                failCount++;
            report("Scanning non ASCII digits");
        }

        public static void findWithinHorizonTest() throws Exception {
            // Test with a string source
            Scanner sc = new Scanner("dog cat cat dog cat");
            try {
                sc.findWithinHorizon("dog", -1);
                failCount++;
            } catch (IllegalArgumentException iae) {
                // Correct result
            }
            if (sc.findWithinHorizon("dog", 2) != null)
                failCount++;
            if (!sc.findWithinHorizon("dog", 3).equals("dog"))
                failCount++;
            if (sc.findWithinHorizon("cat", 4) != null)
                failCount++;
            if (!sc.findWithinHorizon("cat", 5).equals("cat"))
                failCount++;
             if (sc.findWithinHorizon("cat", 7) != null)
                failCount++;
            if (sc.findWithinHorizon("dog", 7) != null)
                failCount++;
            if (!sc.findWithinHorizon("cat", 0).equals("cat"))
                failCount++;
            if (!sc.findWithinHorizon("dog", 0).equals("dog"))
                failCount++;
            if (!sc.findWithinHorizon("cat", 0).equals("cat"))
                failCount++;

            // Test with a stream source
            StutteringInputStream stutter = new StutteringInputStream();
            for (int index=0; index<stutter.length(); index++) {
                //System.out.println("index is now "+index);
                sc = new Scanner(stutter);
                String word = stutter.wordInIndex(index);
                if (word != null) {
                    String result = sc.findWithinHorizon(word, index);
                    if ((result == null) || (!result.equals(word)))
                        failCount++;
                }
                stutter.reset();
                word = stutter.wordBeyondIndex(index);
                sc = new Scanner(stutter);
                String result = sc.findWithinHorizon(word, index);
                if ((result != null) && (index > 0))
                    failCount++;
                stutter.reset();
            }

            // We must loop to let StutteringInputStream do its magic
            for (int j=0; j<10; j++) {
                // An anchor at the end of stream should work
                stutter.reset();
                sc = new Scanner(stutter);
                String result = sc.findWithinHorizon("phant$", 0);
                if (!result.equals("phant"))
                    failCount++;
                stutter.reset();
                sc = new Scanner(stutter);
                result = sc.findWithinHorizon("phant$", 54);
                if (!result.equals("phant"))
                    failCount++;
                // An anchor at the end of horizon should not
                stutter.reset();
                sc = new Scanner(stutter);
                result = sc.findWithinHorizon("brummer$", 7);
                if (result != null)
                    failCount++;
                // An anchor at start should work
                stutter.reset();
                sc = new Scanner(stutter);
                result = sc.findWithinHorizon("^brummer", 0);
                if (!result.equals("brummer"))
                    failCount++;
            }

            report("Find to horizon test");
        }

        // StutteringInputStream returns 1 to 3 characters at a time
        static class StutteringInputStream implements Readable {
            StutteringInputStream() {
                text = "brummer hisser tort zardzard rantrant caimagator phant";
                datalen = 54;
            }
            StutteringInputStream(String text) {
                this.text = text;
                datalen = text.length();
            }
            Random generator = new Random();
            String text;
            int datalen;
            int index = 0;
            public int length() {
                return datalen;
            }
            public void reset() {
                index = 0;
            }
            public String wordInIndex(int index) {
                if (index < 7)  return null;
                if (index < 14) return "brummer";
                if (index < 19) return "hisser";
                if (index < 28) return "tort";
                if (index < 37) return "zardzard";
                if (index < 48) return "rantrant";
                return "caimagator";
            }
            public String wordBeyondIndex(int index) {
                if (index < 7)  return "brummer";
                if (index < 14) return "hisser";
                if (index < 19) return "tort";
                if (index < 28) return "zardzard";
                if (index < 37) return "rantrant";
                if (index < 48) return "caimagator";
                return "phantphant";
            }
            public int read(java.nio.CharBuffer target) throws IOException {
                if (index > datalen-1)
                    return -1; // EOS
                int len = target.remaining();
                if (len > 4) // return 1 to 3 characters
                    len = generator.nextInt(3) + 1;
                while ((index + len) > datalen)
                    len--;
                for (int i=0; i<len; i++)
                    target.put(text.charAt(index++));
                return len;
            }
        }

        public static void hasNextLineTest(int sourceType) throws Exception {
            Scanner sc = scannerFor("1\n2\n3 3\r\n4 4 4\r5", sourceType);
            if (!sc.hasNextLine()) failCount++;
            if (!sc.nextLine().equals("1")) failCount++;
            if (!sc.hasNextLine()) failCount++;
            if (sc.nextInt() != 2) failCount++;
            if (!sc.hasNextLine()) failCount++;
            if (!sc.nextLine().equals("")) failCount++;
            if (!sc.hasNextLine()) failCount++;
            if (sc.nextInt() != 3) failCount++;
            if (!sc.hasNextLine()) failCount++;
            if (!sc.nextLine().equals(" 3")) failCount++;
            if (!sc.hasNextLine()) failCount++;
            if (sc.nextInt() != 4) failCount++;
            if (!sc.hasNextLine()) failCount++;
            if (sc.nextInt() != 4) failCount++;
            if (!sc.hasNextLine()) failCount++;
            if (!sc.nextLine().equals(" 4")) failCount++;
            if (!sc.hasNextLine()) failCount++;
            if (!sc.nextLine().equals("5")) failCount++;
            if (sc.hasNextLine()) failCount++;
            sc = new Scanner("blah blah blah blah blah blah");
            if (!sc.hasNextLine()) failCount++;
            if (!sc.nextLine().equals("blah blah blah blah blah blah"))
               failCount++;
            if (sc.hasNextLine()) failCount++;

            // Go through all the lines in a file
            try (Scanner sc2 = new Scanner(inputFile)) {
                String lastLine = "blah";
                while (sc2.hasNextLine())
                    lastLine = sc2.nextLine();
                if (!lastLine.equals("# Data for usage case 6")) failCount++;
            }

            report("Has next line test");
        }

        public static void nextLineTest(int sourceType) throws Exception {
            Scanner sc = scannerFor("1\n2\n3 3\r\n4 4 4\r5", sourceType);
            if (!sc.nextLine().equals("1"))
                failCount++;
            if (sc.nextInt() != 2)
                failCount++;
            if (!sc.nextLine().equals(""))
               failCount++;
            if (sc.nextInt() != 3)
                failCount++;
            if (!sc.nextLine().equals(" 3"))
               failCount++;
            if (sc.nextInt() != 4)
                failCount++;
            if (sc.nextInt() != 4)
                failCount++;
            if (!sc.nextLine().equals(" 4"))
               failCount++;
            if (!sc.nextLine().equals("5"))
               failCount++;
            sc = new Scanner("blah blah blah blah blah blah");
            if (!sc.nextLine().equals("blah blah blah blah blah blah"))
               failCount++;
            report("Next line test");
        }

        public static void singleDelimTest(int sourceType) throws Exception {
            Scanner sc = scannerFor("12 13 14 15 16 17 ",
                                    sourceType);
            sc.useDelimiter(" ");
            for (int i=0; i<6; i++) {
                int j = sc.nextInt();
                if (j != 12 + i)
                    failCount++;
                for (int k=0; k<i; k++) {
                    String empty = sc.next();
                    if (!empty.equals(""))
                        failCount++;
                }
            }
            report("Single delim test");
        }

        private static void append(StringBuilder sb, char c, int n) {
            for (int i = 0; i < n; i++) {
                sb.append(c);
            }
        }

        public static void boundaryDelimTest() throws Exception {
            // 8139414
            int i = 1019;
            StringBuilder sb = new StringBuilder();
            sb.append("--;");
            for (int j = 0; j < 1019; ++j) {
                sb.append(j%10);
            }
            sb.append("-;-");
            String text = sb.toString();
            try (Scanner scanner = new Scanner(text)) {
                scanner.useDelimiter("-;(-)?");
                while (scanner.hasNext()) {
                    scanner.next();
                }
            } catch (NoSuchElementException e) {
                System.out.println("Caught NoSuchElementException " + e);
                e.printStackTrace();
                failCount++;
            }

            report("delim at boundary test");
        }

        /*
         * The hasNextPattern caches a match of a pattern called the regular cache
         * The hasNextType caches a match of that type called the type cache
         * Any next must clear the caches whether it uses them or not, because
         * it advances past a token thus invalidating any cached token; any
         * hasNext must set a cache to what it finds.
         */

        public static void cacheTest() throws Exception {
            // Test clearing of the type cache
            Scanner scanner = new Scanner("777 dog");
            scanner.hasNextInt();
            scanner.findInLine("777");
            try {
                scanner.nextInt();
                System.out.println("type cache not cleared by find");
                failCount++;
            } catch (InputMismatchException ime) {
                // Correct
            }

            scanner = new Scanner("777 dog");
            scanner.hasNextInt();
            scanner.skip("777");
            try {
                scanner.nextInt();
                System.out.println("type cache not cleared by skip");
                failCount++;
            } catch (InputMismatchException ime) {
                // Correct
            }

            // Test clearing of the regular cache
            scanner = new Scanner("777 dog");
            scanner.hasNext("777");
            scanner.findInLine("777");
            try {
                scanner.next("777");
                System.out.println("regular cache not cleared by find");
                failCount++;
            } catch (InputMismatchException ime) {
                // Correct
            }

            // Test two primitive next clearing of type cache
            scanner = new Scanner("777 dog");
            scanner.hasNextInt();
            scanner.nextLong();
            try {
                scanner.nextInt();
                System.out.println("type cache not cleared by primitive next");
                failCount++;
            } catch (InputMismatchException ime) {
                // Correct
            }

            // Test using both of them, type first
            scanner = new Scanner("777 dog");
            scanner.hasNext("777");
            scanner.nextInt();
            try {
                scanner.next("777");
                System.out.println("regular cache not cleared by primitive next");
                failCount++;
            } catch (InputMismatchException ime) {
                // Correct
            }

            // Test using both of them, regular first
            scanner = new Scanner("777 dog");
            scanner.hasNext("777");
            scanner.hasNextInt();
            scanner.next("777");
            try {
                scanner.nextInt();
                System.out.println("type cache not cleared by regular next");
                failCount++;
            } catch (InputMismatchException ime) {
                // Correct
            }
            report("Cache test");
        }

        /*
         * The hasNext<IntegerType>(radix) method caches a matched integer type
         * with specified radix for the next next<IntegerType>(radix) invoke.
         * The cache value should not be used if the next<IntegerType>(radix)
         * has different radix value with the last hasNext<IntegerType>(radix).
         */

        public static void cacheTest2() throws Exception {
            // Test clearing of the type cache
            Scanner scanner = new Scanner("10");
            scanner.hasNextByte(16);
            if (scanner.nextByte(10) != 10) {
                System.out.println("wrong radix cache is used");
                failCount++;
            }
            scanner = new Scanner("10");
            scanner.hasNextShort(16);
            if (scanner.nextShort(10) != 10) {
                System.out.println("wrong radix cache is used");
                failCount++;
            }
            scanner = new Scanner("10");
            scanner.hasNextInt(16);
            if (scanner.nextInt(10) != 10) {
                System.out.println("wrong radix cache is used");
                failCount++;
            }
            scanner = new Scanner("10");
            scanner.hasNextLong(16);
            if (scanner.nextLong(10) != 10) {
                System.out.println("wrong radix cache is used");
                failCount++;
            }
            scanner = new Scanner("10");
            scanner.hasNextBigInteger(16);
            if (scanner.nextBigInteger(10).intValue() != 10) {
                System.out.println("wrong radix cache is used");
                failCount++;
            }
            report("Cache test2");
        }


        public static void closeTest() throws Exception {
            Scanner sc = new Scanner("testing");
            sc.close();
            sc.ioException();
            sc.delimiter();
            sc.useDelimiter("blah");
            sc.useDelimiter(Pattern.compile("blah"));

            for (Consumer<Scanner> method : methodList) {
                try {
                    method.accept(sc);
                    failCount++;
                } catch (IllegalStateException ise) {
                    // Correct
                }
            }

            report("Close test");
        }

        static List<Consumer<Scanner>> methodList = Arrays.asList(
            Scanner::hasNext,
            Scanner::next,
            sc -> sc.hasNext(Pattern.compile("blah")),
            sc -> sc.next(Pattern.compile("blah")),
            Scanner::hasNextBoolean,
            Scanner::nextBoolean,
            Scanner::hasNextByte,
            Scanner::nextByte,
            Scanner::hasNextShort,
            Scanner::nextShort,
            Scanner::hasNextInt,
            Scanner::nextInt,
            Scanner::hasNextLong,
            Scanner::nextLong,
            Scanner::hasNextFloat,
            Scanner::nextFloat,
            Scanner::hasNextDouble,
            Scanner::nextDouble,
            Scanner::hasNextBigInteger,
            Scanner::nextBigInteger,
            Scanner::hasNextBigDecimal,
            Scanner::nextBigDecimal,
            Scanner::hasNextLine,
            Scanner::tokens,
            sc -> sc.findAll(Pattern.compile("blah")),
            sc -> sc.findAll("blah")
        );

        public static void removeTest() throws Exception {
            Scanner sc = new Scanner("testing");
            try {
                sc.remove();
                failCount++;
            } catch (UnsupportedOperationException uoe) {
                // Correct result
            }
            report("Remove test");
        }

        public static void delimiterTest() throws Exception {
            Scanner sc = new Scanner("blah");
            Pattern test = sc.delimiter();
            if (!test.toString().equals("\\p{javaWhitespace}+"))
                failCount++;
            sc.useDelimiter("a");
            test = sc.delimiter();
            if (!test.toString().equals("a"))
                failCount++;
            sc.useDelimiter(Pattern.compile("b"));
            test = sc.delimiter();
            if (!test.toString().equals("b"))
                failCount++;
            report("Delimiter test");
        }

        public static void ioExceptionTest() throws Exception {
            Readable thrower = new ThrowingReadable();
            Scanner sc = new Scanner(thrower);
            try {
                sc.nextInt();
                failCount++;
            } catch (NoSuchElementException nsee) {
                // Correct result
            }
            Exception thrown = sc.ioException();
            String detail = thrown.getMessage();
            if (!detail.equals("ThrowingReadable always throws"))
                failCount++;

            report("IOException test");
        }

        public static void bigIntegerPatternTest(int sourceType) throws Exception {
            Scanner sc = scannerFor("23 9223372036854775817", sourceType);
            if (!sc.nextBigInteger().equals(BigInteger.valueOf(23)))
                failCount++;
            if (!sc.nextBigInteger().equals(new BigInteger(
                "9223372036854775817", 10)))
                failCount++;

            // Test another radix
            sc = new Scanner("4a4 4A4").useRadix(16);
            if (!sc.nextBigInteger().equals(new BigInteger("4a4", 16)))
                failCount++;
            if (!sc.nextBigInteger().equals(new BigInteger("4A4", 16)))
                failCount++;

            // Test alternating radices
            sc = new Scanner("12 4a4 14 4f4");
            if (!sc.nextBigInteger(10).equals(new BigInteger("12", 10)))
                failCount++;
            if (!sc.nextBigInteger(16).equals(new BigInteger("4a4", 16)))
                failCount++;
            if (!sc.nextBigInteger(10).equals(new BigInteger("14", 10)))
                failCount++;
            if (!sc.nextBigInteger(16).equals(new BigInteger("4f4", 16)))
                failCount++;

            // Test use of a lot of radices
            for (int i=2; i<17; i++) {
                sc = new Scanner("1111");
                if (!sc.nextBigInteger(i).equals(new BigInteger("1111", i)))
                    failCount++;
            }

            report("BigInteger pattern");
        }

        public static void bigDecimalPatternTest(int sourceType) throws Exception {
            Scanner sc = scannerFor("23 45.99 -45,067.444 3.4e10", sourceType);
            if (!sc.nextBigDecimal().equals(BigDecimal.valueOf(23)))
                failCount++;
            if (!sc.nextBigDecimal().equals(new BigDecimal("45.99")))
                failCount++;
            if (!sc.nextBigDecimal().equals(new BigDecimal("-45067.444")))
                failCount++;
            if (!sc.nextBigDecimal().equals(new BigDecimal("3.4e10")))
                failCount++;
            report("BigDecimal pattern");
        }

        public static void integerPatternTest(int sourceType) throws Exception {
            String input =
                "1 22 f FF Z -3 -44 123 1,200 -123 -3,400,000 5,40 ,500 ";
            Scanner sc = scannerFor(input, sourceType);
            integerPatternBody(sc);
            CharBuffer cb = CharBuffer.wrap(input);
            sc = new Scanner(cb);
            integerPatternBody(sc);
            report("Integer pattern");
        }

        public static void integerPatternBody(Scanner sc) throws Exception {
            if (sc.nextInt() != 1)        failCount++;
            if (sc.nextShort() != 22)     failCount++;
            if (sc.nextShort(16) != 15)   failCount++;
            if (sc.nextShort(16) != 255)  failCount++;
            if (sc.nextShort(36) != 35)   failCount++;
            if (!sc.hasNextInt())         failCount++;
            if (sc.nextInt() != -3)       failCount++;
            if (sc.nextInt() != -44)      failCount++;
            if (sc.nextLong() != 123)     failCount++;
            if (!sc.hasNextInt())         failCount++;
            if (sc.nextInt() != 1200)     failCount++;
            if (sc.nextInt() != -123)     failCount++;
            if (sc.nextInt() != -3400000) failCount++;
            try {
                sc.nextInt();
                failCount++;
            } catch (InputMismatchException ime) {
                // Correct result
            }
            sc.next();
            try {
                sc.nextLong();
                failCount++;
            } catch (InputMismatchException ime) {
                // Correct result
            }
            sc.next();
            try {
                sc.next();
                failCount++;
            } catch (InputMismatchException ime) {
                failCount++;
            } catch (NoSuchElementException nse) {
                // Correct result
            }
        }

        public static void floatPatternTest(int sourceType) throws Exception {
            String input =
                "090.090 1 22.0 -3 -44.05 +.123 -.1234 -3400000 56,566.6 " +
                "Infinity +Infinity -Infinity NaN -NaN +NaN 5.4.0 5-.00 ++6.07";
            Scanner sc = scannerFor(input, sourceType);
            floatPatternBody(sc);
            CharBuffer cb = CharBuffer.wrap(input);
            sc = new Scanner(cb);
            floatPatternBody(sc);
            report("Float pattern");
        }

        public static void floatPatternBody(Scanner sc) throws Exception {
            if (sc.nextFloat() != 090.090f)                   failCount++;
            if (sc.nextFloat() != 1f)                         failCount++;
            if (sc.nextFloat() != 22.0f)                      failCount++;
            if (sc.nextDouble() != -3d)                       failCount++;
            if (sc.nextDouble() != -44.05d)                   failCount++;
            if (sc.nextFloat() != .123f)                      failCount++;
            if (sc.nextFloat() != -.1234f)                    failCount++;
            if (sc.nextDouble() != -3400000d)                 failCount++;
            if (sc.nextDouble() != 56566.6d)                  failCount++;
            if (sc.nextDouble() != Double.POSITIVE_INFINITY)  failCount++;
            if (sc.nextDouble() != Double.POSITIVE_INFINITY)  failCount++;
            if (sc.nextDouble() != Double.NEGATIVE_INFINITY)  failCount++;
            if (!Double.valueOf(sc.nextDouble()).isNaN())     failCount++;
            if (!Double.valueOf(sc.nextDouble()).isNaN())     failCount++;
            if (!Double.valueOf(sc.nextDouble()).isNaN())     failCount++;
            try {
                sc.nextFloat();
                failCount++;
            } catch (NoSuchElementException nse) {
                // Correct result
            }
            try {
                sc.nextDouble();
                failCount++;
            } catch (NoSuchElementException nse) {
                // Correct result
            }
            try {
                sc.nextDouble();
                failCount++;
            } catch (NoSuchElementException nse) {
                // Correct result
            }
        }

        public static void fromFileTest() throws Exception {
            File f = new File(System.getProperty("test.src""."), "input.txt");
            try (Scanner sc = new Scanner(f)) {
                sc.useDelimiter("\n+");
                String testDataTag = sc.findWithinHorizon("fromFileTest", 0);
                if (!testDataTag.equals("fromFileTest"))
                    failCount++;

                int count = 0;
                while (sc.hasNextLong()) {
                    long blah = sc.nextLong();
                    count++;
                }
                if (count != 7)
                    failCount++;
            }
            report("From file");
        }

        private static void example1() throws Exception {
            Scanner s = new Scanner("1 fish 2 fish red fish blue fish");
            s.useDelimiter("\\s*fish\\s*");
            List <String> results = new ArrayList<String>();
            while (s.hasNext())
                results.add(s.next());
            System.out.println(results);
        }

        private static void example2() throws Exception {
            Scanner s = new Scanner("1 fish 2 fish red fish blue fish");
            s.useDelimiter("\\s*fish\\s*");
            System.out.println(s.nextInt());
            System.out.println(s.nextInt());
            System.out.println(s.next());
            System.out.println(s.next());
        }

        private static void example3() throws Exception {
            Scanner s = new Scanner("1 fish 2 fish red fish blue fish");
            s.findInLine("(\\d+) fish (\\d+) fish (\\w+) fish (\\w+)");
            for (int i=1; i<=s.match().groupCount(); i++)
                System.out.println(s.match().group(i));
        }

        private static void findInLineTest() throws Exception {
            Scanner s = new Scanner("abc def ghi jkl mno");
            Pattern letters = Pattern.compile("[a-z]+");
            Pattern frogs = Pattern.compile("frogs");
            String str = s.findInLine(letters);
            if (!str.equals("abc"))
                failCount++;
            if (!s.hasNext(letters))
                failCount++;
            try {
                str = s.findInLine(frogs);
            } catch (NoSuchElementException nsee) {
                // Correct
            }
            if (!s.hasNext())
                failCount++;
            if (!s.hasNext(letters))
                failCount++;
            str = s.findInLine(letters);
            if (!str.equals("def"))
                failCount++;

            report("Find patterns");
        }

        private static void findInEmptyLineTest() throws Exception {
            String eol = System.getProperty("line.separator");
            Scanner s = new Scanner("line 1" + eol + "" + eol + "line 3" + eol);
            int lineNo = 0;
            while (s.hasNextLine()) {
                lineNo++;
                s.findInLine("3");
                s.nextLine();
            }
            if (lineNo != 3)
                failCount++;
            report("findInEmptyLine test");
        }

        private static void matchTest() throws Exception {
            Scanner s = new Scanner("1 fish 2 fish red fish blue fish");
            s.findInLine("(\\d+) fish (\\d+) fish (\\w+) fish (\\w+)");

            MatchResult result = s.match();
            if (!result.group(1).equals("1"))
                failCount++;
            if (!result.group(2).equals("2"))
                failCount++;
            if (!result.group(3).equals("red"))
                failCount++;
            if (!result.group(4).equals("blue"))
                failCount++;

            report("Match patterns");
        }

        private static void skipTest() throws Exception {
            Scanner s = new Scanner("abc def ghi jkl mno");
            Pattern letters = Pattern.compile("[a-z]+");
            Pattern spaceLetters = Pattern.compile(" [a-z]+");
            Pattern frogs = Pattern.compile("frogs");
            try {
                s.skip(letters);
            } catch (NoSuchElementException ime) {
                failCount++;
            }
            String token = s.next(letters);
            if (!token.equals("def")) {
                System.out.println("expected def");
                System.out.println("I found "+token);
                failCount++;
            }
            try {
                s.skip(letters);
                failCount++;
            } catch (NoSuchElementException ime) {
                // Correct result
            }
            token = s.next(letters);
            if (!token.equals("ghi")) {
                System.out.println("expected ghi");
                System.out.println("I found "+token);
                failCount++;
            }
            try {
                s.skip(letters);
                failCount++;
            } catch (NoSuchElementException ime) {
                // Correct result because skip ignores delims
            }
            try {
                s.skip(spaceLetters);
            } catch (NoSuchElementException ime) {
                failCount++;
            }
            token = s.next(letters);
            if (!token.equals("mno")) {
                System.out.println("expected mno");
                System.out.println("I found "+token);
                failCount++;
            }
            try {
                s.skip(letters);
                failCount++;
            } catch (NoSuchElementException ime) {
                // Correct result
            }
            report("Skip patterns");
        }

        private static void byteTest(int sourceType) throws Exception {
            String input = " 3 0 00 b -B 012 44 -55 12 127 129 -131 dog 0x12";
            Scanner s = scannerFor(input, sourceType);
            if (!s.hasNextByte())          failCount++;
            if (s.nextByte() != (byte)3)   failCount++;
            if (!s.hasNextByte())          failCount++;
            if (s.nextByte() != (byte)0)   failCount++;
            if (!s.hasNextByte())          failCount++;
            if (s.nextByte() != (byte)0)   failCount++;
            if (!s.hasNextByte(16))        failCount++;
            if (s.nextByte(16) != (byte)11)failCount++;
            if (!s.hasNextByte(16))        failCount++;
            if (s.nextByte(16) != (byte)-11) failCount++;
            if (!s.hasNextByte())          failCount++;
            if (s.nextByte() != (byte)12)  failCount++;
            if (!s.hasNextByte())          failCount++;
            if (s.nextByte() != (byte)44)  failCount++;
            if (!s.hasNextByte())          failCount++;
            if (s.nextByte() != (byte)-55) failCount++;
            if (!s.hasNextByte())          failCount++;
            if (s.nextByte() != (byte)12)  failCount++;
            if (!s.hasNextByte())          failCount++;
            if (s.nextByte() != (byte)127) failCount++;
            if (s.hasNextByte())           failCount++;

            try {
                s.nextByte();
                failCount++;
            } catch (InputMismatchException ime) {
                // Correct result
            }
            if (s.hasNextByte())           failCount++;
            if (s.nextInt() != 129)        failCount++;
            if (s.hasNextByte())           failCount++;
            try {
                s.nextByte();
                failCount++;
            } catch (InputMismatchException ime) {
                // Correct result
            }
            if (s.nextInt() != -131)       failCount++;
            if (s.hasNextByte())           failCount++;
            try {
                s.nextByte();
                failCount++;
            } catch (InputMismatchException ime) {
                // Correct result
            }
            s.next(Pattern.compile("\\w+"));
            if (s.hasNextByte())
                failCount++;
            try {
                s.nextByte();
                failCount++;
            } catch (NoSuchElementException nsee) {
                // Correct result
            }
            s.next();
            if (s.hasNextByte())
                failCount++;
            try {
                byte bb = s.nextByte();
                failCount++;
            } catch (NoSuchElementException nsee) {
                // Correct result
            }
            report("Scan bytes");
        }

        private static void shortTest(int sourceType) throws Exception {
            String input = " 017 22 00E -34 44,333 -53999 0x19 dog";
            Scanner s = scannerFor(input, sourceType);
            if (!s.hasNextShort())             failCount++;
            if (s.nextShort() != (short)17)   failCount++;
            if (!s.hasNextShort())            failCount++;
            if (s.nextShort() != (short)22)   failCount++;
            if (!s.hasNextShort(16))          failCount++;
            if (s.nextShort(16) != (short)14) failCount++;
            if (!s.hasNextShort())            failCount++;
            if (s.nextShort() != (short)-34)  failCount++;
            for (int i=0; i<4; i++) {
                if (s.hasNextShort())
                    failCount++;
                try {
                    s.nextShort();
                    failCount++;
                } catch (InputMismatchException ime) {
                    // Correct result
                }
                s.next();
            }
            try {
                s.next();
                failCount++;
            } catch (InputMismatchException ime) {
                failCount++;
            } catch (NoSuchElementException nse) {
                // Correct result
            }
            report("Scan shorts");
        }

        private static void intTest(int sourceType) throws Exception {
            Scanner s = scannerFor(
                "22 022 C -34 0x80000000 -2147483649 dog ", sourceType);
            if (!s.hasNextInt())      failCount++;
            if (s.nextInt() != 22)    failCount++;
            if (!s.hasNextInt())      failCount++;
            if (s.nextInt() != 22)    failCount++;
            if (!s.hasNextInt(16))    failCount++;
            if (s.nextInt(16) != 12)  failCount++;
            if (!s.hasNextInt())      failCount++;
            if (s.nextInt() != -34)   failCount++;
            for (int i=0; i<3; i++) {
                if (s.hasNextInt())
                    failCount++;
                try {
                    s.nextInt();
                    failCount++;
                } catch (InputMismatchException ime) {
                    // Correct result
                }
                s.next();
            }
            try {
                s.next();
                failCount++;
            } catch (InputMismatchException ime) {
                failCount++;
            } catch (NoSuchElementException nse) {
                // Correct result
            }
            report("Scan ints");
        }

        private static void longTest(int sourceType) throws Exception {
            Scanner s = scannerFor(
            "022 9223372036854775807 0x8000000000000000 9223372036854775808 dog ",
                  sourceType);
            if (!s.hasNextLong())                        failCount++;
            if (s.nextLong() != (long)22)                failCount++;
            if (!s.hasNextLong())                        failCount++;
            if (s.nextLong() != 9223372036854775807L)    failCount++;
            for (int i=0; i<3; i++) {
                if (s.hasNextLong())
                    failCount++;
                try {
                    s.nextLong();
                    failCount++;
                } catch (InputMismatchException ime) {
                    // Correct result
                }
                s.next();
            }
            try {
                s.next();
                failCount++;
            } catch (InputMismatchException ime) {
                failCount++;
            } catch (NoSuchElementException nse) {
                // Correct result
            }
            report("Scan longs");
        }

        private static void floatTest(int sourceType) throws Exception {
            Scanner s = scannerFor(
                "0 0. 0.0 2 2. 2.0 2.3 -2 -2.0 -2.3 -. 2-. 2..3", sourceType);
            if (!s.hasNextFloat())      failCount++;
            if (s.nextFloat() != 0f)    failCount++;
            if (!s.hasNextFloat())      failCount++;
            if (s.nextFloat() != 0f)    failCount++;
            if (!s.hasNextFloat())      failCount++;
            if (s.nextFloat() != 0f)    failCount++;
            if (!s.hasNextFloat())      failCount++;
            if (s.nextFloat() != 2f)    failCount++;
            if (!s.hasNextFloat())      failCount++;
            if (s.nextFloat() != 2f)    failCount++;
            if (!s.hasNextFloat())      failCount++;
            if (s.nextFloat() != 2f)    failCount++;
            if (!s.hasNextFloat())      failCount++;
            if (s.nextFloat() != 2.3f)  failCount++;
            if (!s.hasNextFloat())      failCount++;
            if (s.nextFloat() != -2f)   failCount++;
            if (!s.hasNextFloat())      failCount++;
            if (s.nextFloat() != -2f)   failCount++;
            if (!s.hasNextFloat())      failCount++;
            if (s.nextFloat() != -2.3f) failCount++;
            for (int i=0; i<3; i++) {
                if (s.hasNextLong())
                    failCount++;
                try {
                    s.nextFloat();
                    failCount++;
                } catch (InputMismatchException ime) {
                    // Correct result
                }
                s.next();
            }
            try {
                s.next();
                failCount++;
            } catch (InputMismatchException ime) {
                failCount++;
            } catch (NoSuchElementException nse) {
                // Correct result
            }
            report("Scan floats");
        }

        private static void doubleTest(int sourceType) throws Exception {
            Scanner s = scannerFor(
                "0 0. 0.0 2 2. 2.0 2.3 -2 -2.0 -2.3 -. 2-. 2..3", sourceType);
            if (!s.hasNextDouble())             failCount++;
            if (s.nextDouble() != 0d)           failCount++;
            if (!s.hasNextDouble())             failCount++;
            if (s.nextDouble() != 0d)           failCount++;
            if (!s.hasNextDouble())             failCount++;
            if (s.nextDouble() != 0d)           failCount++;
            if (!s.hasNextDouble())             failCount++;
            if (s.nextDouble() != 2d)           failCount++;
            if (!s.hasNextDouble())             failCount++;
            if (s.nextDouble() != 2d)           failCount++;
            if (!s.hasNextDouble())             failCount++;
            if (s.nextDouble() != 2d)           failCount++;
            if (!s.hasNextDouble())             failCount++;
            if (s.nextDouble() != 2.3d)         failCount++;
            if (!s.hasNextDouble())             failCount++;
            if (s.nextDouble() != -2d)          failCount++;
            if (!s.hasNextDouble())             failCount++;
            if (s.nextDouble() != -2d)          failCount++;
            if (!s.hasNextDouble())             failCount++;
            if (s.nextDouble() != -2.3d)        failCount++;
            for (int i=0; i<3; i++) {
                if (s.hasNextLong())
                    failCount++;
                try {
                    s.nextDouble();
                    failCount++;
                } catch (InputMismatchException ime) {
                    // Correct result
                }
                s.next();
            }
            try {
                s.next();
                failCount++;
            } catch (InputMismatchException ime) {
                failCount++;
            } catch (NoSuchElementException nse) {
                // Correct result
            }
            report("Scan doubles");
        }

        private static void booleanTest(int sourceType) throws Exception {
            Scanner s = scannerFor(
                " true false\t \r\n true FaLse \n True Tru", sourceType);
            if (!s.nextBoolean())     failCount++;
            if (!s.hasNextBoolean())  failCount++;
            if (s.nextBoolean())      failCount++;
            if (!s.nextBoolean())     failCount++;
            if (s.nextBoolean())      failCount++;
            if (!s.nextBoolean())     failCount++;
            if (s.hasNextBoolean())   failCount++;
            try {
                s.nextBoolean();
                failCount++;
            } catch (NoSuchElementException nsee) {
                // Expected result
            }
            report("Scan booleans");
        }

        private static void hasNextTest(int sourceType) throws Exception {
            Scanner s = scannerFor(
                " blah blech\t blather alongblatherindeed", sourceType);
            if (!s.hasNext())            failCount++;
            if (!s.hasNext())            failCount++;
            String result = s.next();
            if (!result.equals("blah"))  failCount++;
            if (!s.hasNext())            failCount++;
            if (!s.hasNext())            failCount++;
            result = s.next();
            if (!result.equals("blech")) failCount++;
            if (!s.hasNext())            failCount++;
            result = s.next();
            if (!result.equals("blather")) failCount++;
            if (!s.hasNext())              failCount++;
            if (!s.hasNext())              failCount++;
            result = s.next();
            if (!result.equals("alongblatherindeed")) failCount++;
            if (s.hasNext())                          failCount++;
            try {
                result = s.next();
                failCount++;
            } catch (NoSuchElementException nsee) {
                // Correct result
            }
            report("Has next test");
        }

        private static void nextTest(int sourceType) throws Exception {
            Scanner s = scannerFor(
                " blah blech\t blather alongblatherindeed", sourceType);
            String result = (String)s.next();
            if (!result.equals("blah"))    failCount++;
            result = (String)s.next();
            if (!result.equals("blech"))   failCount++;
            result = (String)s.next();
            if (!result.equals("blather")) failCount++;
            result = (String)s.next();
            if (!result.equals("alongblatherindeed"))
                failCount++;
            try {
                result = (String)s.next();
                failCount++;
            } catch (NoSuchElementException nsee) {
                // Correct result
            }
            report("Next test");
        }

        private static void hasNextPatternTest(int sourceType) throws Exception {
            Scanner s = scannerFor(
                " blah blech\t blather alongblatherindeed", sourceType);
            Pattern p1 = Pattern.compile("\\w+");
            Pattern p2 = Pattern.compile("blech");
            if (!s.hasNext(p1))    failCount++;
            if (!s.hasNext(p1))    failCount++;
            if (s.hasNext(p2))     failCount++;
            String result = (String)s.next();
            if (!result.equals("blah"))  failCount++;
            if (!s.hasNext(p1))          failCount++;
            if (!s.hasNext(p2))          failCount++;
            result = (String)s.next();
            if (!result.equals("blech")) failCount++;
            if (!s.hasNext(p1))          failCount++;
            if (s.hasNext(p2))           failCount++;
            result = (String)s.next();
            if (!result.equals("blather")) failCount++;
            if (!s.hasNext(p1))            failCount++;
            if (s.hasNext(p2))             failCount++;
            result = (String)s.next();
            if (!result.equals("alongblatherindeed")) failCount++;
            if (s.hasNext(p1))  failCount++;
            if (s.hasNext(p2))  failCount++;
            report("Has Next Pattern test");
        }

        private static void nextPatternTest(int sourceType) throws Exception {
            Scanner s = scannerFor(
                " blah blech\t blather alongblatherindeed", sourceType);
            Pattern p1 = Pattern.compile("blah");
            Pattern p2 = Pattern.compile("blech");
            Pattern p3 = Pattern.compile("blather");
            Pattern p4 = Pattern.compile("alongblatherindeed");
            String result = null;
            try {
                result = (String)s.next(p2);
                failCount++;
            } catch (NoSuchElementException nsee) {
                // Correct result
            }
            result = (String)s.next(p1);
            if (!result.equals("blah"))
                failCount++;
            try {
                result = (String)s.next(p1);
                failCount++;
            } catch (NoSuchElementException nsee) {
                // Correct result
            }
            result = (String)s.next(p2);
            if (!result.equals("blech"))
                failCount++;
            try {
                result = (String)s.next(p4);
                failCount++;
            } catch (NoSuchElementException nsee) {
                // Correct result
            }
            result = (String)s.next(p3);
            if (!result.equals("blather"))
                failCount++;
            try {
                result = (String)s.next(p3);
                failCount++;
            } catch (NoSuchElementException nsee) {
                // Correct result
            }
            result = (String)s.next(p4);
            if (!result.equals("alongblatherindeed"))
                failCount++;
            try {
                result = (String)s.next();
                failCount++;
            } catch (NoSuchElementException nsee) {
                // Correct result
            }
            report("Next pattern test");
        }

        private static void useLocaleTest() throws Exception {
            Scanner s = new Scanner("334.65").useLocale(Locale.ENGLISH);
            if (!s.hasNextFloat())           failCount++;
            if (s.nextFloat() != 334.65f)    failCount++;

            s = new Scanner("334,65").useLocale(Locale.FRENCH);
            if (!s.hasNextFloat())           failCount++;
            if (s.nextFloat() != 334.65f)    failCount++;

            s = new Scanner("4.334,65").useLocale(Locale.GERMAN);
            if (!s.hasNextFloat())           failCount++;
            if (s.nextFloat() != 4334.65f)    failCount++;

            // Test case reported from India
            try {
                String Message = "123978.90 $";
                Locale locale = Locale.of("hi","IN");
                NumberFormat form = NumberFormat.getInstance(locale);
                double myNumber = 1902.09;
                Scanner scanner = new Scanner(form.format(myNumber).toString());
                scanner.useLocale(locale);
                double d = scanner.nextDouble();
            } catch (InputMismatchException ime) {
                failCount++;
            }
            report("Use locale test");
        }

        public static void resetTest() throws Exception {
            Scanner sc = new Scanner("");
            int radix = sc.radix();
            Locale locale = sc.locale();
            Pattern delimiter = sc.delimiter();
            Pattern a = Pattern.compile("A");
            sc.useDelimiter(a);
            Locale dummy = Locale.of("en""US""dummy");
            sc.useLocale(dummy);
            sc.useRadix(16);
            if (sc.radix() != 16 ||
                !sc.locale().equals(dummy) ||
                !sc.delimiter().pattern().equals(a.pattern())) {
                failCount++;
            } else {
                sc.reset();
                if (sc.radix() != radix ||
                    !sc.locale().equals(locale) ||
                    !sc.delimiter().pattern().equals(delimiter.pattern())) {
                    failCount++;
                }
            }
            sc.close();
            report("Reset test");
        }

        static List<BiConsumer <Scanner, Integer>> methodWRList = Arrays.asList(
            (s, r) -> s.hasNextByte(r),
            (s, r) -> s.nextByte(r),
            (s, r) -> s.hasNextShort(r),
            (s, r) -> s.nextShort(r),
            (s, r) -> s.hasNextInt(r),
            (s, r) -> s.nextInt(r),
            (s, r) -> s.hasNextLong(r),
            (s, r) -> s.nextLong(r),
            (s, r) -> s.hasNextBigInteger(r),
            (s, r) -> s.nextBigInteger(r)
        );

        /*
         * Test that setting the radix to an out of range value triggers
         * an IllegalArgumentException
         */

        public static void outOfRangeRadixTest() throws Exception {
            int[] bad = new int[] { -1, 0,  1, 37, 38 };
            int[] good = IntStream.rangeClosed(Character.MIN_RADIX, Character.MAX_RADIX)
                                  .toArray();

            methodWRList.stream().forEach( m -> {
                for (int r : bad) {
                    try (Scanner sc = new Scanner("10 10 10 10")) {
                        m.accept(sc, r);
                        failCount++;
                    } catch (IllegalArgumentException ise) {}
                }
            });
            methodWRList.stream().forEach( m -> {
                for (int r : good) {
                    try (Scanner sc = new Scanner("10 10 10 10")) {
                        m.accept(sc, r);
                    } catch (Exception x) {
                        failCount++;
                    }
                }
            });
            report("Radix out of range test");
        }

        /*
         * Test that closing the stream also closes the underlying Scanner.
         * The cases of attempting to open streams on a closed Scanner are
         * covered by closeTest().
         */

        public static void streamCloseTest() throws Exception {
            Scanner sc;

            Scanner sc1 = new Scanner("xyzzy");
            sc1.tokens().close();
            try {
                sc1.hasNext();
                failCount++;
            } catch (IllegalStateException ise) {
                // Correct result
            }

            Scanner sc2 = new Scanner("a b c d e f");
            try {
                sc2.tokens()
                   .peek(s -> sc2.close())
                   .count();
            } catch (IllegalStateException ise) {
                // Correct result
            }

            Scanner sc3 = new Scanner("xyzzy");
            sc3.findAll("q").close();
            try {
                sc3.hasNext();
                failCount++;
            } catch (IllegalStateException ise) {
                // Correct result
            }

            try (Scanner sc4 = new Scanner(inputFile)) {
                sc4.findAll("[0-9]+")
                   .peek(s -> sc4.close())
                   .count();
                failCount++;
            } catch (IllegalStateException ise) {
                // Correct result
            }

            report("Streams Close test");
        }

        /*
         * Test ConcurrentModificationException
         */

        public static void streamComodTest() {
            try {
                Scanner sc = new Scanner("a b c d e f");
                sc.tokens()
                  .peek(s -> sc.hasNext())
                  .count();
                failCount++;
            } catch (ConcurrentModificationException cme) {
                // Correct result
            }

            try {
                Scanner sc = new Scanner("a b c d e f");
                Iterator<String> it = sc.tokens().iterator();
                it.next();
                sc.next();
                it.next();
                failCount++;
            } catch (ConcurrentModificationException cme) {
                // Correct result
            }

            try {
                String input = IntStream.range(0, 100)
                                        .mapToObj(String::valueOf)
                                        .collect(Collectors.joining(" "));
                Scanner sc = new Scanner(input);
                sc.findAll("[0-9]+")
                  .peek(s -> sc.hasNext())
                  .count();
                failCount++;
            } catch (ConcurrentModificationException cme) {
                // Correct result
            }

            try {
                String input = IntStream.range(0, 100)
                                        .mapToObj(String::valueOf)
                                        .collect(Collectors.joining(" "));
                Scanner sc = new Scanner(input);
                Iterator<MatchResult> it = sc.findAll("[0-9]+").iterator();
                it.next();
                sc.next();
                it.next();
                failCount++;
            } catch (ConcurrentModificationException cme) {
                // Correct result
            }

            report("Streams Comod test");
        }

        private static void report(String testName) {
            System.err.printf("%-30s: %s%n", testName,
                              (failCount == 0) ? "Passed" : String.format("Failed(%d)", failCount));

            if (failCount > 0)
                failure = true;
            failCount = 0;
        }

        static Scanner scannerFor(String input, int sourceType) {
            if (sourceType == 1)
                return new Scanner(input);
            else
                return new Scanner(new StutteringInputStream(input));
        }

        static class ThrowingReadable implements Readable {
            ThrowingReadable() {
            }
            public int read(java.nio.CharBuffer cb) throws IOException {
                throw new IOException("ThrowingReadable always throws");
            }
        }
    }

    ¤ Diese beiden folgenden Angebotsgruppen bietet das Unternehmen0.147Angebot  Wie Sie bei der Firma Beratungs- und Dienstleistungen beauftragen können  ¤





Kontakt
Drucken
Kontakt
Hier finden Sie eine Liste der Produkte des Unternehmens

Eigene Datei ansehen




schauen Sie vor die Tür

Fenster


Die Firma ist wie angegeben erreichbar.

Entwicklung einer Software für die statische Quellcodeanalyse


Bot Zugriff