diff --git a/tests/SkSLNodeArrayWrapperTest.cpp b/tests/SkSLNodeArrayWrapperTest.cpp
new file mode 100644
index 0000000..8be280f
--- /dev/null
+++ b/tests/SkSLNodeArrayWrapperTest.cpp
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2020 Google LLC.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "src/sksl/ir/SkSLExpressionStatement.h"
+#include "src/sksl/ir/SkSLIRNode.h"
+#include "src/sksl/ir/SkSLIntLiteral.h"
+#include "src/sksl/ir/SkSLNodeArrayWrapper.h"
+
+#include "tests/Test.h"
+
+DEF_TEST(SkSLNodeArrayWrapper, r) {
+    SkSL::ExpressionArray base;
+    SkSL::NodeArrayWrapper<SkSL::IntLiteral, SkSL::Expression> wrapper(&base);
+    REPORTER_ASSERT(r, wrapper.empty());
+    base.emplace_back(new SkSL::IntLiteral(-1, 0));
+    REPORTER_ASSERT(r, !wrapper.empty());
+    base.emplace_back(new SkSL::IntLiteral(-1, 1));
+    base.emplace_back(new SkSL::IntLiteral(-1, 2));
+    REPORTER_ASSERT(r, wrapper.count() == 3);
+    REPORTER_ASSERT(r, wrapper[0].value() == 0);
+    REPORTER_ASSERT(r, wrapper[1].value() == 1);
+    REPORTER_ASSERT(r, wrapper[2].value() == 2);
+    wrapper.push_back(new SkSL::IntLiteral(-1, 3));
+    REPORTER_ASSERT(r, base.count() == 4);
+    REPORTER_ASSERT(r, wrapper.count() == 4);
+    REPORTER_ASSERT(r, wrapper[3].value() == 3);
+    auto iter = wrapper.begin();
+    int i = 0;
+    while (iter != wrapper.end()) {
+        REPORTER_ASSERT(r, wrapper[i].value() == iter->value());
+        ++i;
+        ++iter;
+    }
+
+    const SkSL::NodeArrayWrapper<SkSL::IntLiteral, SkSL::Expression> copy(wrapper);
+    SkSL::NodeArrayWrapper<SkSL::IntLiteral, SkSL::Expression>::const_iterator constIter =
+                                                                                       copy.begin();
+    i =  0;
+    while (constIter != copy.end()) {
+        REPORTER_ASSERT(r, copy[i].value() == constIter->value());
+        ++i;
+        ++constIter;
+    }
+
+    REPORTER_ASSERT(r, wrapper.front().value() == 0);
+    REPORTER_ASSERT(r, wrapper.back().value() == 3);
+    wrapper.pop_back();
+    REPORTER_ASSERT(r, wrapper.back().value() == 2);
+    wrapper.reset();
+    REPORTER_ASSERT(r, wrapper.empty());
+}
+
+DEF_TEST(SkSLConstNodeArrayWrapper, r) {
+    SkSL::ExpressionArray base;
+    SkSL::ConstNodeArrayWrapper<SkSL::IntLiteral, SkSL::Expression> wrapper(&base);
+    REPORTER_ASSERT(r, wrapper.empty());
+    base.emplace_back(new SkSL::IntLiteral(-1, 0));
+    REPORTER_ASSERT(r, !wrapper.empty());
+    base.emplace_back(new SkSL::IntLiteral(-1, 1));
+    base.emplace_back(new SkSL::IntLiteral(-1, 2));
+    REPORTER_ASSERT(r, wrapper.count() == 3);
+    REPORTER_ASSERT(r, wrapper[0].value() == 0);
+    REPORTER_ASSERT(r, wrapper[1].value() == 1);
+    REPORTER_ASSERT(r, wrapper[2].value() == 2);
+    auto iter = wrapper.begin();
+    int i = 0;
+    while (iter != wrapper.end()) {
+        REPORTER_ASSERT(r, wrapper[i].value() == iter->value());
+        ++i;
+        ++iter;
+    }
+    REPORTER_ASSERT(r, wrapper.front().value() == 0);
+    REPORTER_ASSERT(r, wrapper.back().value() == 2);
+}
