diff options
author | Ryan Dahl <ry@tinyclouds.org> | 2018-06-13 15:01:21 +0200 |
---|---|---|
committer | Ryan Dahl <ry@tinyclouds.org> | 2018-06-13 15:01:21 +0200 |
commit | 5c7ba22f2242930ad09f011eaea12a59153e294f (patch) | |
tree | 6edb4e52147fe81b76e340028fa9cc67e4f058e7 /deno2/mock_runtime_test.cc | |
parent | 69868c2b0e4372e6d7e49821caca41d372686eea (diff) | |
parent | bb6222c91872695cbe98aa2a75166265f52cec2e (diff) |
Merge branch 'deno2'
Diffstat (limited to 'deno2/mock_runtime_test.cc')
-rw-r--r-- | deno2/mock_runtime_test.cc | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/deno2/mock_runtime_test.cc b/deno2/mock_runtime_test.cc new file mode 100644 index 000000000..bdaf30416 --- /dev/null +++ b/deno2/mock_runtime_test.cc @@ -0,0 +1,98 @@ +// Copyright 2018 Ryan Dahl <ry@tinyclouds.org> +// All rights reserved. MIT License. +#include "testing/gtest/include/gtest/gtest.h" + +#include "include/deno.h" + +TEST(MockRuntimeTest, InitializesCorrectly) { + Deno* d = deno_new(NULL, NULL); + EXPECT_TRUE(deno_execute(d, "a.js", "1 + 2")); + deno_delete(d); +} + +TEST(MockRuntimeTest, CanCallFunction) { + Deno* d = deno_new(NULL, NULL); + EXPECT_TRUE(deno_execute(d, "a.js", + "if (CanCallFunction() != 'foo') throw Error();")); + deno_delete(d); +} + +TEST(MockRuntimeTest, ErrorsCorrectly) { + Deno* d = deno_new(NULL, NULL); + EXPECT_FALSE(deno_execute(d, "a.js", "throw Error()")); + deno_delete(d); +} + +deno_buf strbuf(const char* str) { return deno_buf{str, strlen(str)}; } + +TEST(MockRuntimeTest, PubSuccess) { + Deno* d = deno_new(NULL, NULL); + EXPECT_TRUE(deno_execute(d, "a.js", "PubSuccess()")); + EXPECT_TRUE(deno_pub(d, "PubSuccess", strbuf("abc"))); + deno_delete(d); +} + +TEST(MockRuntimeTest, PubByteLength) { + Deno* d = deno_new(NULL, NULL); + EXPECT_TRUE(deno_execute(d, "a.js", "PubByteLength()")); + // We pub the wrong sized message, it should throw. + EXPECT_FALSE(deno_pub(d, "PubByteLength", strbuf("abcd"))); + deno_delete(d); +} + +TEST(MockRuntimeTest, PubNoCallback) { + Deno* d = deno_new(NULL, NULL); + // We didn't call deno_sub(), pubing should fail. + EXPECT_FALSE(deno_pub(d, "PubNoCallback", strbuf("abc"))); + deno_delete(d); +} + +TEST(MockRuntimeTest, SubReturnEmpty) { + static int count = 0; + Deno* d = deno_new(NULL, [](auto _, auto channel, auto buf) { + count++; + EXPECT_STREQ(channel, "SubReturnEmpty"); + EXPECT_EQ(static_cast<size_t>(3), buf.len); + EXPECT_EQ(buf.data[0], 'a'); + EXPECT_EQ(buf.data[1], 'b'); + EXPECT_EQ(buf.data[2], 'c'); + return deno_buf{nullptr, 0}; + }); + EXPECT_TRUE(deno_execute(d, "a.js", "SubReturnEmpty()")); + EXPECT_EQ(count, 2); + deno_delete(d); +} + +TEST(MockRuntimeTest, SubReturnBar) { + static int count = 0; + Deno* d = deno_new(NULL, [](auto _, auto channel, auto buf) { + count++; + EXPECT_STREQ(channel, "SubReturnBar"); + EXPECT_EQ(static_cast<size_t>(3), buf.len); + EXPECT_EQ(buf.data[0], 'a'); + EXPECT_EQ(buf.data[1], 'b'); + EXPECT_EQ(buf.data[2], 'c'); + return strbuf("bar"); + }); + EXPECT_TRUE(deno_execute(d, "a.js", "SubReturnBar()")); + EXPECT_EQ(count, 1); + deno_delete(d); +} + +TEST(MockRuntimeTest, DoubleSubFails) { + Deno* d = deno_new(NULL, NULL); + EXPECT_FALSE(deno_execute(d, "a.js", "DoubleSubFails()")); + deno_delete(d); +} + +TEST(MockRuntimeTest, TypedArraySnapshots) { + Deno* d = deno_new(NULL, NULL); + EXPECT_TRUE(deno_execute(d, "a.js", "TypedArraySnapshots()")); + deno_delete(d); +} + +int main(int argc, char** argv) { + testing::InitGoogleTest(&argc, argv); + deno_init(); + return RUN_ALL_TESTS(); +} |