From c7463138c666d826de26969bf03819936a8cf664 Mon Sep 17 00:00:00 2001 From: Laurent Pinchart Date: Mon, 18 May 2020 16:33:52 +0300 Subject: test: file-descriptor: Add "fd move" constructor test MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add a test for the newly added "fd move" constructor. Signed-off-by: Laurent Pinchart Reviewed-by: Niklas Söderlund --- test/file-descriptor.cpp | 42 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 38 insertions(+), 4 deletions(-) (limited to 'test') 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; } -- cgit v1.2.1