diff options
-rw-r--r-- | test/file-descriptor.cpp | 42 |
1 files changed, 38 insertions, 4 deletions
diff --git a/test/file-descriptor.cpp b/test/file-descriptor.cpp index 7477a843..aa3c896f 100644 --- a/test/file-descriptor.cpp +++ b/test/file-descriptor.cpp @@ -56,16 +56,19 @@ protected: delete desc1_; desc1_ = nullptr; - /* Test creating FileDescriptor from numerical file descriptor. */ + /* + * Test creating FileDescriptor by copying numerical file + * descriptor. + */ desc1_ = new FileDescriptor(fd_); if (desc1_->fd() == fd_) { - std::cout << "Failed fd numerical check (int constructor)" + std::cout << "Failed fd numerical check (lvalue ref constructor)" << std::endl; return TestFail; } if (!isValidFd(fd_) || !isValidFd(desc1_->fd())) { - std::cout << "Failed fd validity after construction (int constructor)" + std::cout << "Failed fd validity after construction (lvalue ref constructor)" << std::endl; return TestFail; } @@ -76,7 +79,38 @@ protected: desc1_ = nullptr; if (!isValidFd(fd_) || isValidFd(fd)) { - std::cout << "Failed fd validity after destruction (int constructor)" + std::cout << "Failed fd validity after destruction (lvalue ref constructor)" + << std::endl; + return TestFail; + } + + /* + * Test creating FileDescriptor by taking ownership of + * numerical file descriptor. + */ + int dupFd = dup(fd_); + int dupFdCopy = dupFd; + + desc1_ = new FileDescriptor(std::move(dupFd)); + if (desc1_->fd() != dupFdCopy) { + std::cout << "Failed fd numerical check (rvalue ref constructor)" + << std::endl; + return TestFail; + } + + if (dupFd != -1 || !isValidFd(fd_) || !isValidFd(desc1_->fd())) { + std::cout << "Failed fd validity after construction (rvalue ref constructor)" + << std::endl; + return TestFail; + } + + fd = desc1_->fd(); + + delete desc1_; + desc1_ = nullptr; + + if (!isValidFd(fd_) || isValidFd(fd)) { + std::cout << "Failed fd validity after destruction (rvalue ref constructor)" << std::endl; return TestFail; } |