| // Copyright 2019 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "src/developer/shell/josh/console/console.h" |
| |
| #include <lib/async-loop/cpp/loop.h> |
| #include <lib/async-loop/default.h> |
| #include <lib/memfs/memfs.h> |
| #include <stdlib.h> |
| |
| #include <array> |
| #include <fstream> |
| #include <string> |
| |
| #include <gtest/gtest.h> |
| |
| // Sanity check test to make sure Hello World works. |
| TEST(Console, Sanity) { |
| async::Loop loop(&kAsyncLoopConfigNoAttachToCurrentThread); |
| ASSERT_EQ(loop.StartThread(), ZX_OK); |
| memfs_filesystem_t* fs; |
| ASSERT_EQ(ZX_OK, memfs_install_at(loop.dispatcher(), "/test_tmp", &fs)); |
| |
| constexpr const char* name = "/test_tmp/tmp.XXXXXX"; |
| std::unique_ptr<char[]> buffer(new char[strlen(name) + 1]); |
| strcpy(buffer.get(), name); |
| int cfd = mkstemp(buffer.get()); |
| ASSERT_NE(cfd, -1); |
| std::string filename = buffer.get(); |
| |
| std::string command; |
| std::string expected = "Hello World"; |
| command += "file = std.open('" + filename + "', 'rw+');"; |
| command += "file.puts('" + expected + "');"; |
| command += "file.flush();"; |
| constexpr int kNumArgs = 7; |
| std::array<const char*, kNumArgs> argv = {"test_program", "-j", "/pkg/data/lib/", "-f", |
| "/pkg/data/fidling", "-c", command.c_str()}; |
| ASSERT_EQ(0, shell::ConsoleMain(kNumArgs, argv.data())); |
| |
| std::ifstream in(filename.c_str()); |
| std::string actual((std::istreambuf_iterator<char>(in)), std::istreambuf_iterator<char>()); |
| ASSERT_STREQ(expected.c_str(), actual.c_str()); |
| loop.Shutdown(); |
| memfs_uninstall_unsafe(fs, "/test_tmp"); |
| } |