mirror of
https://github.com/joncampbell123/dosbox-x.git
synced 2025-05-09 03:41:10 +08:00

This commit fixes most -Wzero-as-null-pointer-constant warnings, except in some places which appear to be vendored 3rd party libraries, e.g. in sdl_ttf.c, libchdr, physfs and gmock and in 3rd party components therein. Since it might make more sense to update this 3rd party code to some later versions instead of fixing the warnings manually, I decided not to enable the C++ compiler flag in configure.ac at this point. In two functions with the return type of std::string executed `return 0;` statements, causing std::string to be constructed from a null pointer. To avoid undefined behavior these were changed to `return {};`. Signed-off-by: Jaak Ristioja <jaak@ristioja.ee>
155 lines
5.2 KiB
C++
155 lines
5.2 KiB
C++
/*
|
|
* Copyright (C) 2002-2021 The DOSBox Team
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along
|
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
*/
|
|
|
|
#include "shell.h"
|
|
|
|
#include <string>
|
|
|
|
#include <gmock/gmock.h>
|
|
#include <gtest/gtest.h>
|
|
|
|
#include "dosbox_test_fixture.h"
|
|
|
|
namespace {
|
|
|
|
using namespace testing;
|
|
|
|
class DOS_Shell_REDIRTest : public DOSBoxTestFixture {};
|
|
|
|
class MockDOS_ShellRedir : public DOS_Shell {
|
|
public:
|
|
/**
|
|
* NOTE: If we need to call the actual object, we use this. By
|
|
* default, the mocked functions return whatever we tell it to
|
|
* (if given a .WillOnce(Return(...)), or a default value
|
|
* (false).
|
|
*/
|
|
|
|
private:
|
|
DOS_Shell real_; // Keeps an instance of the real in the mock.
|
|
};
|
|
|
|
TEST_F(DOS_Shell_REDIRTest, CMD_Redirection)
|
|
{
|
|
MockDOS_Shell shell;
|
|
bool append = false;
|
|
char line[CROSS_LEN];
|
|
char * in = nullptr, * out = nullptr, * toc = nullptr;
|
|
|
|
strcpy(line, "echo hello!");
|
|
shell.GetRedirection(line, &in, &out, &toc, &append);
|
|
EXPECT_STREQ(line, "echo hello!");
|
|
EXPECT_EQ(in, nullptr);
|
|
EXPECT_EQ(out, nullptr);
|
|
EXPECT_EQ(toc, nullptr);
|
|
EXPECT_EQ(append, false);
|
|
|
|
in = nullptr; out = nullptr; toc = nullptr;
|
|
strcpy(line, "echo test>test.txt");
|
|
shell.GetRedirection(line, &in, &out, &toc, &append);
|
|
EXPECT_STREQ(line, "echo test");
|
|
EXPECT_EQ(in, nullptr);
|
|
EXPECT_STREQ(out, "test.txt");
|
|
EXPECT_EQ(toc, nullptr);
|
|
EXPECT_EQ(append, false);
|
|
|
|
in = nullptr; out = nullptr; toc = nullptr;
|
|
strcpy(line, "sort<test.txt");
|
|
shell.GetRedirection(line, &in, &out, &toc, &append);
|
|
EXPECT_STREQ(line, "sort");
|
|
EXPECT_STREQ(in, "test.txt");
|
|
EXPECT_EQ(out, nullptr);
|
|
EXPECT_EQ(toc, nullptr);
|
|
EXPECT_EQ(append, false);
|
|
|
|
in = nullptr; out = nullptr; toc = nullptr;
|
|
strcpy(line, "less<in.txt>out.txt");
|
|
shell.GetRedirection(line, &in, &out, &toc, &append);
|
|
EXPECT_STREQ(line, "less");
|
|
EXPECT_STREQ(in, "in.txt");
|
|
EXPECT_STREQ(out, "out.txt");
|
|
EXPECT_EQ(toc, nullptr);
|
|
EXPECT_EQ(append, false);
|
|
|
|
in = nullptr; out = nullptr; toc = nullptr;
|
|
strcpy(line, "more<file.txt|sort");
|
|
shell.GetRedirection(line, &in, &out, &toc, &append);
|
|
EXPECT_STREQ(line, "more");
|
|
EXPECT_STREQ(in, "file.txt");
|
|
EXPECT_EQ(out, nullptr);
|
|
EXPECT_STREQ(toc, "sort");
|
|
EXPECT_EQ(append, false);
|
|
|
|
in = nullptr; out = nullptr; toc = nullptr;
|
|
strcpy(line, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<in.txt>>out.txt");
|
|
shell.GetRedirection(line, &in, &out, &toc, &append);
|
|
EXPECT_STREQ(line, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
|
|
EXPECT_STREQ(in, "in.txt");
|
|
EXPECT_STREQ(out, "out.txt");
|
|
EXPECT_EQ(toc, nullptr);
|
|
EXPECT_EQ(append, true);
|
|
|
|
append = false;
|
|
in = nullptr; out = nullptr; toc = nullptr;
|
|
strcpy(line, "");
|
|
shell.GetRedirection(line, &in, &out, &toc, &append);
|
|
EXPECT_STREQ(line, "");
|
|
EXPECT_EQ(in, nullptr);
|
|
EXPECT_EQ(out, nullptr);
|
|
EXPECT_EQ(toc, nullptr);
|
|
EXPECT_EQ(append, false);
|
|
|
|
in = nullptr; out = nullptr; toc = nullptr;
|
|
strcpy(line, " echo test < in.txt > out.txt ");
|
|
shell.GetRedirection(line, &in, &out, &toc, &append);
|
|
EXPECT_STREQ(line, " echo test ");
|
|
EXPECT_STREQ(in, "in.txt");
|
|
EXPECT_STREQ(out, "out.txt");
|
|
EXPECT_EQ(toc, nullptr);
|
|
EXPECT_EQ(append, false);
|
|
|
|
in = nullptr; out = nullptr; toc = nullptr;
|
|
strcpy(line, "dir || more");
|
|
shell.GetRedirection(line, &in, &out, &toc, &append);
|
|
EXPECT_STREQ(line, "dir ");
|
|
EXPECT_EQ(in, nullptr);
|
|
EXPECT_EQ(out,nullptr);
|
|
EXPECT_STREQ(toc, "| more");
|
|
EXPECT_EQ(append, false);
|
|
|
|
in = nullptr; out = nullptr; toc = nullptr;
|
|
strcpy(line, "dir *.bat << in.txt >> out.txt");
|
|
shell.GetRedirection(line, &in, &out, &toc, &append);
|
|
EXPECT_STREQ(line, "dir *.bat in.txt ");
|
|
EXPECT_STREQ(in, "<");
|
|
EXPECT_STREQ(out, "out.txt");
|
|
EXPECT_EQ(toc, nullptr);
|
|
EXPECT_EQ(append, true);
|
|
|
|
in = nullptr; out = nullptr; toc = nullptr;
|
|
strcpy(line, "echo test>out1.txt>>out2.txt");
|
|
shell.GetRedirection(line, &in, &out, &toc, &append);
|
|
EXPECT_STREQ(line, "echo test");
|
|
EXPECT_EQ(in, nullptr);
|
|
EXPECT_STREQ(out, "out1.txt>>out2.txt");
|
|
EXPECT_EQ(toc, nullptr);
|
|
EXPECT_EQ(append, false);
|
|
}
|
|
|
|
} // namespace
|