|  | // Copyright 2018 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/sys/appmgr/util.h" | 
|  |  | 
|  | #include <gtest/gtest.h> | 
|  |  | 
|  | namespace component { | 
|  | namespace { | 
|  |  | 
|  | TEST(UtilTests, GetLabelFromURL) { | 
|  | std::string values[][2] = {{"", ""},        {"foo/bar", "bar"},  {"foo/bar/", "foo/bar/"}, | 
|  | {"/foo", "foo"}, {"/foo/bar", "bar"}, {"foo", "foo"}, | 
|  | {"foo/", "foo/"}}; | 
|  | for (auto value : values) { | 
|  | auto& url = value[0]; | 
|  | auto& expected = value[1]; | 
|  | EXPECT_EQ(Util::GetLabelFromURL(url), expected) << "for url: " << url; | 
|  | } | 
|  | } | 
|  |  | 
|  | TEST(UtilTests, GetArgsString) { | 
|  | ::fidl::VectorPtr<::std::string> null_vec; | 
|  | EXPECT_EQ(Util::GetArgsString(null_vec), ""); | 
|  |  | 
|  | ::fidl::VectorPtr<::std::string> empty_vec(3); | 
|  | EXPECT_EQ(Util::GetArgsString(empty_vec), "  "); | 
|  |  | 
|  | std::vector<::std::string> vec; | 
|  | vec.push_back("foo"); | 
|  | EXPECT_EQ(Util::GetArgsString(vec), "foo"); | 
|  | vec.push_back("bar"); | 
|  | EXPECT_EQ(Util::GetArgsString(vec), "foo bar"); | 
|  | vec.push_back("blah"); | 
|  | EXPECT_EQ(Util::GetArgsString(vec), "foo bar blah"); | 
|  | } | 
|  |  | 
|  | TEST(UtilTests, BindDirectory) { | 
|  | zx::channel dir, dir_req; | 
|  | ASSERT_EQ(zx::channel::create(0, &dir, &dir_req), ZX_OK); | 
|  | fuchsia::sys::LaunchInfo launchInfo; | 
|  | launchInfo.directory_request = std::move(dir_req); | 
|  | auto channels = Util::BindDirectory(&launchInfo); | 
|  | ASSERT_TRUE(channels.exported_dir.is_valid()); | 
|  | ASSERT_TRUE(channels.client_request.is_valid()); | 
|  |  | 
|  | const char* msg1 = "message1"; | 
|  | dir.write(0, msg1, strlen(msg1) + 1, nullptr, 0); | 
|  |  | 
|  | const char* msg2 = "message2"; | 
|  | channels.exported_dir.write(0, msg2, strlen(msg2) + 1, nullptr, 0); | 
|  |  | 
|  | char got1[strlen(msg1) + 1]; | 
|  | char got2[strlen(msg2) + 1]; | 
|  |  | 
|  | channels.client_request.read(0, got1, nullptr, sizeof(got1), 0, nullptr, nullptr); | 
|  | launchInfo.directory_request.read(0, got2, nullptr, sizeof(got2), 0, nullptr, nullptr); | 
|  |  | 
|  | EXPECT_STREQ(got1, msg1); | 
|  | EXPECT_STREQ(got2, msg2); | 
|  | } | 
|  |  | 
|  | }  // namespace | 
|  | }  // namespace component |