brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.2 KiB · 20ab312 Raw
81 lines · cpp
1//===-- Unittests for posix_spwan_file_actions_t manipulation -------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "hdr/errno_macros.h"10#include "hdr/stdint_proxy.h"11#include "src/spawn/file_actions.h"12#include "src/spawn/posix_spawn_file_actions_addclose.h"13#include "src/spawn/posix_spawn_file_actions_adddup2.h"14#include "src/spawn/posix_spawn_file_actions_addopen.h"15#include "src/spawn/posix_spawn_file_actions_destroy.h"16#include "src/spawn/posix_spawn_file_actions_init.h"17#include "test/UnitTest/Test.h"18 19#include <spawn.h>20 21TEST(LlvmLibcPosixSpawnFileActionsTest, AddActions) {22  posix_spawn_file_actions_t actions;23  ASSERT_EQ(LIBC_NAMESPACE::posix_spawn_file_actions_init(&actions), 0);24 25  ASSERT_EQ(uintptr_t(actions.__front), uintptr_t(nullptr));26  ASSERT_EQ(uintptr_t(actions.__back), uintptr_t(nullptr));27 28  ASSERT_EQ(LIBC_NAMESPACE::posix_spawn_file_actions_addclose(&actions, 10), 0);29  ASSERT_NE(uintptr_t(actions.__front), uintptr_t(nullptr));30  ASSERT_NE(uintptr_t(actions.__back), uintptr_t(nullptr));31 32  ASSERT_EQ(LIBC_NAMESPACE::posix_spawn_file_actions_adddup2(&actions, 11, 12),33            0);34  ASSERT_EQ(LIBC_NAMESPACE::posix_spawn_file_actions_addopen(35                &actions, 13, "path/to/file", 0, 0),36            0);37 38  LIBC_NAMESPACE::BaseSpawnFileAction *act =39      reinterpret_cast<LIBC_NAMESPACE::BaseSpawnFileAction *>(actions.__front);40  int action_count = 0;41  while (act != nullptr) {42    ++action_count;43    if (action_count == 1) {44      ASSERT_EQ(act->type, LIBC_NAMESPACE::BaseSpawnFileAction::CLOSE);45    }46    if (action_count == 2) {47      ASSERT_EQ(act->type, LIBC_NAMESPACE::BaseSpawnFileAction::DUP2);48    }49    if (action_count == 3) {50      ASSERT_EQ(act->type, LIBC_NAMESPACE::BaseSpawnFileAction::OPEN);51    }52    act = act->next;53  }54  ASSERT_EQ(action_count, 3);55  ASSERT_EQ(LIBC_NAMESPACE::posix_spawn_file_actions_destroy(&actions), 0);56}57 58TEST(LlvmLibcPosixSpawnFileActionsTest, InvalidActions) {59  ASSERT_EQ(LIBC_NAMESPACE::posix_spawn_file_actions_addclose(nullptr, 1),60            EINVAL);61  ASSERT_EQ(LIBC_NAMESPACE::posix_spawn_file_actions_adddup2(nullptr, 1, 2),62            EINVAL);63  ASSERT_EQ(LIBC_NAMESPACE::posix_spawn_file_actions_addopen(nullptr, 1,64                                                             nullptr, 0, 0),65            EINVAL);66  ASSERT_EQ(LIBC_NAMESPACE::posix_spawn_file_actions_destroy(nullptr), EINVAL);67 68  posix_spawn_file_actions_t actions;69  ASSERT_EQ(LIBC_NAMESPACE::posix_spawn_file_actions_init(&actions), 0);70  ASSERT_EQ(LIBC_NAMESPACE::posix_spawn_file_actions_addclose(&actions, -1),71            EBADF);72  ASSERT_EQ(LIBC_NAMESPACE::posix_spawn_file_actions_adddup2(&actions, -1, 2),73            EBADF);74  ASSERT_EQ(LIBC_NAMESPACE::posix_spawn_file_actions_adddup2(&actions, 1, -2),75            EBADF);76  ASSERT_EQ(LIBC_NAMESPACE::posix_spawn_file_actions_addopen(&actions, -1,77                                                             nullptr, 0, 0),78            EBADF);79  ASSERT_EQ(LIBC_NAMESPACE::posix_spawn_file_actions_destroy(&actions), 0);80}81