diff options
author | Sam McCall <sam.mccall@gmail.com> | 2017-11-28 09:25:09 +0000 |
---|---|---|
committer | Sam McCall <sam.mccall@gmail.com> | 2017-11-28 09:25:09 +0000 |
commit | 2b0a5d888a3fa3c9c779463728a8d409785ea1d4 (patch) | |
tree | ffe7e087858df89943471c4ed75ccd73db5c9441 /unittests | |
parent | 91c4b98a4f30408b5577d8d8f21a42ccd2046d44 (diff) |
[clangd] Add missing (but documented!) JSONExpr typed accessors
Summary:
Noticed this when I tried to port the Protocol.h parsers.
And tests for the inspect API, which caught a small bug.
Reviewers: ioeric
Subscribers: ilya-biryukov
Differential Revision: https://reviews.llvm.org/D40399
git-svn-id: https://llvm.org/svn/llvm-project/clang-tools-extra/trunk@319157 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'unittests')
-rw-r--r-- | unittests/clangd/JSONExprTests.cpp | 44 |
1 files changed, 43 insertions, 1 deletions
diff --git a/unittests/clangd/JSONExprTests.cpp b/unittests/clangd/JSONExprTests.cpp index d1bcf7a2..4692aded 100644 --- a/unittests/clangd/JSONExprTests.cpp +++ b/unittests/clangd/JSONExprTests.cpp @@ -167,7 +167,6 @@ TEST(JSONTest, ParseErrors) { ExpectErr("Unexpected EOF", ""); ExpectErr("Unexpected EOF", "["); ExpectErr("Text after end of document", "[][]"); - ExpectErr("Text after end of document", "[][]"); ExpectErr("Invalid bareword", "fuzzy"); ExpectErr("Expected , or ]", "[2?]"); ExpectErr("Expected object key", "{a:2}"); @@ -185,6 +184,49 @@ TEST(JSONTest, ParseErrors) { })"); } +TEST(JSONTest, Inspection) { + llvm::Expected<Expr> Doc = parse(R"( + { + "null": null, + "boolean": false, + "number": 2.78, + "string": "json", + "array": [null, true, 3.14, "hello", [1,2,3], {"time": "arrow"}], + "object": {"fruit": "banana"} + } + )"); + EXPECT_TRUE(!!Doc); + + obj *O = Doc->asObject(); + ASSERT_TRUE(O); + + EXPECT_FALSE(O->getNull("missing")); + EXPECT_FALSE(O->getNull("boolean")); + EXPECT_TRUE(O->getNull("null")); + + EXPECT_EQ(O->getNumber("number"), llvm::Optional<double>(2.78)); + EXPECT_EQ(O->getString("string"), llvm::Optional<llvm::StringRef>("json")); + ASSERT_FALSE(O->getObject("missing")); + ASSERT_FALSE(O->getObject("array")); + ASSERT_TRUE(O->getObject("object")); + EXPECT_EQ(*O->getObject("object"), (obj{{"fruit", "banana"}})); + + ary *A = O->getArray("array"); + ASSERT_TRUE(A); + EXPECT_EQ(A->getBoolean(1), llvm::Optional<bool>(true)); + ASSERT_TRUE(A->getArray(4)); + EXPECT_EQ(*A->getArray(4), (ary{1, 2, 3})); + int I = 0; + for (Expr &E : *A) { + if (I++ == 5) { + ASSERT_TRUE(E.asObject()); + EXPECT_EQ(E.asObject()->getString("time"), + llvm::Optional<llvm::StringRef>("arrow")); + } else + EXPECT_FALSE(E.asObject()); + } +} + } // namespace } // namespace json } // namespace clangd |