public void TestExponentFail()
        {
            using (StringReader rdr = new StringReader("123E "))
                using (PushbackReader pbr = new PushbackReader(rdr, 1))
                {
                    try
                    {
                        JSONNumber number = new JSONNumber();
                        number.Read("$", pbr);

                        Assert.Fail("Exception expected");
                    }
                    catch (JSONException)
                    {
                    }
                }
            using (StringReader rdr = new StringReader("123E+ "))
                using (PushbackReader pbr = new PushbackReader(rdr, 1))
                {
                    try
                    {
                        JSONNumber number = new JSONNumber();
                        number.Read("$", pbr);

                        Assert.Fail("Exception expected");
                    }
                    catch (JSONException)
                    {
                    }
                }
        }
        public void TestDecimal()
        {
            using (StringReader rdr = new StringReader("-123.456 "))
                using (PushbackReader pbr = new PushbackReader(rdr, 1))
                {
                    JSONNumber number = new JSONNumber();
                    number.Read("$", pbr);

                    Assert.AreEqual("-123.456", number.Value.ToString());
                }
        }
        public void TestString()
        {
            using (StringReader rdr = new StringReader("\"ABC\\n\\\"DE\\u123DF\" "))
                using (PushbackReader pbr = new PushbackReader(rdr, 1))
                {
                    JSONString str = new JSONString();
                    str.Read("$", pbr);

                    Assert.AreEqual("ABC\n\"DE\u123DF", str.Value.ToString());
                }
        }
Beispiel #4
0
 /// <summary>Creates a new instance of CsvRecordInput</summary>
 public CsvRecordInput(InputStream @in)
 {
     try
     {
         stream = new PushbackReader(new InputStreamReader(@in, "UTF-8"));
     }
     catch (UnsupportedEncodingException ex)
     {
         throw new RuntimeException(ex);
     }
 }
        public void TestStringOutput()
        {
            using (StringReader rdr = new StringReader("\"ABC\\b\\n\\\"DE\\u123DF\\\\\" "))
                using (PushbackReader pbr = new PushbackReader(rdr, 1))
                    using (StringWriter wrt = new StringWriter())
                    {
                        JSONString str = new JSONString();
                        str.Read("$", pbr);

                        str.Write("", wrt, true);

                        String output = wrt.ToString();

                        Assert.AreEqual("\"ABC\\b\\n\\\"DE\\u123dF\\\\\"", output);
                    }
        }
        public void TestLinefeedOutput()
        {
            using (StringReader rdr = new StringReader("\"\\n\" "))
                using (PushbackReader pbr = new PushbackReader(rdr, 1))
                    using (StringWriter wrt = new StringWriter())
                    {
                        JSONString str = new JSONString();
                        str.Read("$", pbr);

                        str.Write("", wrt, true);

                        string output = wrt.ToString();

                        Assert.AreEqual("\"\\n\"", output);
                    }
        }
        public void TestExponent()
        {
            using (StringReader rdr = new StringReader("123.456E+2 "))
                using (PushbackReader pbr = new PushbackReader(rdr, 1))
                {
                    JSONNumber number = new JSONNumber();
                    number.Read("$", pbr);

                    Assert.AreEqual("12345.6", number.Value.ToString());
                }

            using (StringReader rdr = new StringReader("123.456E-2 "))
                using (PushbackReader pbr = new PushbackReader(rdr, 1))
                {
                    JSONNumber number = new JSONNumber();
                    number.Read("$", pbr);

                    Assert.AreEqual("1.23456", number.Value.ToString());
                }

            using (StringReader rdr = new StringReader("123.456E2 "))
                using (PushbackReader pbr = new PushbackReader(rdr, 1))
                {
                    JSONNumber number = new JSONNumber();
                    number.Read("$", pbr);

                    Assert.AreEqual("12345.6", number.Value.ToString());
                }

            using (StringReader rdr = new StringReader("123e2 "))
                using (PushbackReader pbr = new PushbackReader(rdr, 1))
                {
                    JSONNumber number = new JSONNumber();
                    number.Read("$", pbr);

                    Assert.AreEqual("12300", number.Value.ToString());
                }
        }
        public int nextToken()
        {
            if (pushedBack)
            {
                pushedBack = false;
                if (ttype != TT_NONE)
                {
                    return(ttype);
                }
            }

            _sval = null;
            int ch;

            // Skip whitespaced  Deal with EOL along the way.
            while (isWhitespace(ch = inRead.Read()))
            {
                if (ch == '\n' || ch == '\r')
                {
                    lineNumber++;

                    // Throw away \n if in combination with \r.
                    if (ch == '\r' && (ch = inRead.Read()) != '\n')
                    {
                        if (ch != TT_EOF)
                        {
                            inRead = inRead.Unread();
                        }
                    }
                    if (_eolSignificant)
                    {
                        return(ttype = TT_EOL);
                    }
                }
            }

            if (ch == '/')
            {
                if ((ch = inRead.Read()) == '/' && _slashSlash)
                {
                    while ((ch = inRead.Read()) != '\n' && ch != '\r' && ch != TT_EOF)
                    {
                        ;
                    }

                    if (ch != TT_EOF)
                    {
                        inRead = inRead.Unread();
                    }
                    return(nextToken()); // Recursive, but not too deep in normal cases
                }
                else if (ch == '*' && _slashStar)
                {
                    while (true)
                    {
                        ch = inRead.Read();
                        if (ch == '*')
                        {
                            if ((ch = inRead.Read()) == '/')
                            {
                                break;
                            }
                            else if (ch != TT_EOF)
                            {
                                inRead = inRead.Unread();
                            }
                        }
                        else if (ch == '\n' || ch == '\r')
                        {
                            lineNumber++;
                            if (ch == '\r' && (ch = inRead.Read()) != '\n')
                            {
                                if (ch != TT_EOF)
                                {
                                    inRead = inRead.Unread();
                                }
                            }
                        }
                        else if (ch == TT_EOF)
                        {
                            break;
                        }
                    }
                    return(nextToken()); // Recursive, but not too deep in normal cases
                }
                else
                {
                    if (ch != TT_EOF)
                    {
                        inRead = inRead.Unread();
                    }
                    ch = '/';
                }
            }

            if (ch == TT_EOF)
            {
                ttype = TT_EOF;
            }
            else if (isNumeric(ch))
            {
                Boolean isNegative = false;
                if (ch == '-')
                {
                    // Read ahead to see if this is an ordinary '-' rather than numeric.
                    ch = inRead.Read();
                    if (isNumeric(ch) && ch != '-')
                    {
                        isNegative = true;
                    }
                    else
                    {
                        if (ch != TT_EOF)
                        {
                            inRead = inRead.Unread();
                        }
                        return(ttype = '-');
                    }
                }

                StringBuilder tokbuf = new StringBuilder();
                tokbuf.Append((char)ch);

                int decCount = 0;
                while (isNumeric(ch = inRead.Read()) && ch != '-')
                {
                    if (ch == '.' && decCount++ > 0)
                    {
                        break;
                    }
                    else
                    {
                        tokbuf.Append((char)ch);
                    }
                }

                if (ch != TT_EOF)
                {
                    inRead = inRead.Unread();
                }
                ttype = TT_NUMBER;
                try
                {
                    _nval = Double.Parse(tokbuf.ToString());
                }
                catch (FormatException _)
                {
                    _nval = 0.0;
                }
                if (isNegative)
                {
                    _nval = -_nval;
                }
            }
            else if (isAlphabetic(ch))
            {
                StringBuilder tokbuf = new StringBuilder();
                tokbuf.Append((char)ch);
                while (isAlphabetic(ch = inRead.Read()) || isNumeric(ch))
                {
                    tokbuf.Append((char)ch);
                }
                if (ch != TT_EOF)
                {
                    inRead = inRead.Unread();
                }
                ttype = TT_WORD;
                _sval = tokbuf.ToString();
                if (_lowerCase)
                {
                    _sval = _sval.ToLower();
                }
            }
            else if (isComment(ch))
            {
                while ((ch = inRead.Read()) != '\n' && ch != '\r' && ch != TT_EOF)
                {
                    ;
                }

                if (ch != TT_EOF)
                {
                    inRead = inRead.Unread();
                }
                return(nextToken());    // Recursive, but not too deep in normal cases.
            }
            else if (isQuote(ch))
            {
                ttype = ch;
                StringBuilder tokbuf = new StringBuilder();
                while ((ch = inRead.Read()) != ttype && ch != '\n' && ch != '\r' &&
                       ch != TT_EOF)
                {
                    if (ch == '\\')
                    {
                        switch (ch = inRead.Read())
                        {
                        case 'a':
                            ch = 0x7;
                            break;

                        case 'b':
                            ch = '\b';
                            break;

                        case 'f':
                            ch = 0xC;
                            break;

                        case 'n':
                            ch = '\n';
                            break;

                        case 'r':
                            ch = '\r';
                            break;

                        case 't':
                            ch = '\t';
                            break;

                        case 'v':
                            ch = 0xB;
                            break;

                        case '\n':
                            ch = '\n';
                            break;

                        case '\r':
                            ch = '\r';
                            break;

                        case '\"':
                            break;

                        case '\'':
                            break;

                        case '\\':
                            break;

                        default:
                            int ch1, nextch;
                            if ((nextch = ch1 = ch) >= '0' && ch <= '7')
                            {
                                ch -= '0';
                                if ((nextch = inRead.Read()) >= '0' && nextch <= '7')
                                {
                                    ch = ch * 8 + nextch - '0';
                                    if ((nextch = inRead.Read()) >= '0' && nextch <= '7' &&
                                        ch1 >= '0' && ch1 <= '3')
                                    {
                                        ch     = ch * 8 + nextch - '0';
                                        nextch = inRead.Read();
                                    }
                                }
                            }

                            if (nextch != TT_EOF)
                            {
                                inRead = inRead.Unread();
                            }

                            break;
                        }
                    }

                    tokbuf.Append((char)ch);
                }

                // Throw away matching quote char.
                if (ch != ttype && ch != TT_EOF)
                {
                    inRead = inRead.Unread();
                }

                _sval = tokbuf.ToString();
            }
            else
            {
                ttype = ch;
            }

            return(ttype);
        }
Beispiel #9
0
 public void Read(string path, PushbackReader pbr)
 {
     throw new NotImplementedException();
 }