fprime/Os/Stub/test/File.cpp
Rob Bocchino b89b5d91c4
Add DpWriter (#2593)
* Pull in framework changes from data-products branch

* Pull in changes to DpManager from data-products branch

* Pull in DpWriter from data-products branch

* Fix spelling

* Revise FileNameString

* Fix warnings in CI

* Fix static analysis warnings

* Fix static analysis warnings

* Revise formatting and comments

* Revise banner comments

* Revise FileNameString per PR comment

* Revise path names in config headers

If a header H.hpp exists in the F Prime source base, then

is dangerous. Because [project root] and [fprime root] are both
in the list of include paths, it's not clear whether this means "include
[project root]/config/H.hpp" or "include [fprime root]/config/H.hpp."

On the other hand,

or

has no such ambiguity, because only one of [project root]/config
and [fprime root]/config is in the list of include paths.

* Revise path names in config headers

If a header H.hpp exists in the F Prime source base, then

`#include "config/H.hpp"`

is dangerous. Because [project root] and [fprime root] are both
in the list of include paths, it's not clear whether this means "include
[project root]/config/H.hpp" or "include [fprime root]/config/H.hpp."

On the other hand,

include <config/H.hpp>

or

`#include "config/H.hpp"`

has no such ambiguity, because only one of [project root]/config
and [fprime root]/config is in the list of include paths.
2024-03-28 16:09:38 -07:00

140 lines
4.5 KiB
C++

#include "Os/Stub/test/File.hpp"
#include "Os/File.hpp"
#include <new>
namespace Os {
namespace Stub {
namespace File {
namespace Test {
StaticData StaticData::data;
void StaticData::setNextStatus(Os::File::Status status) {
StaticData::data.openStatus = status;
StaticData::data.sizeStatus = status;
StaticData::data.positionStatus = status;
StaticData::data.preallocateStatus = status;
StaticData::data.seekStatus = status;
StaticData::data.flushStatus = status;
StaticData::data.readStatus = status;
StaticData::data.writeStatus = status;
}
void StaticData::setSizeResult(FwSignedSizeType size) {
StaticData::data.sizeResult = size;
}
void StaticData::setPositionResult(FwSignedSizeType position) {
StaticData::data.positionResult = position;
}
void StaticData::setReadResult(U8 *buffer, FwSignedSizeType size) {
StaticData::data.readResult = buffer;
StaticData::data.readResultSize = size;
}
void StaticData::setReadSize(FwSignedSizeType size) {
StaticData::data.readSizeResult = size;
}
void StaticData::setWriteResult(U8 *buffer, FwSignedSizeType size) {
StaticData::data.writeResult = buffer;
StaticData::data.writeResultSize = size;
}
void StaticData::setWriteSize(FwSignedSizeType size) {
StaticData::data.writeSizeResult = size;
}
TestFile::TestFile() {
StaticData::data.lastCalled = StaticData::CONSTRUCT_FN;
}
TestFile::~TestFile() {
StaticData::data.lastCalled = StaticData::DESTRUCT_FN;
}
FileInterface::Status TestFile::open(const char *filepath, Mode open_mode, OverwriteType overwrite) {
StaticData::data.openPath = filepath;
StaticData::data.openMode = open_mode;
StaticData::data.openOverwrite = overwrite;
StaticData::data.lastCalled = StaticData::OPEN_FN;
StaticData::data.pointer = 0;
return StaticData::data.openStatus;
}
void TestFile::close() {
StaticData::data.lastCalled = StaticData::CLOSE_FN;
}
FileInterface::Status TestFile::size(FwSignedSizeType& size_result) {
StaticData::data.lastCalled = StaticData::SIZE_FN;
size_result = StaticData::data.sizeResult;
return StaticData::data.sizeStatus;
}
FileInterface::Status TestFile::position(FwSignedSizeType& position_result) {
StaticData::data.lastCalled = StaticData::POSITION_FN;
position_result = StaticData::data.positionResult;
return StaticData::data.positionStatus;
}
FileInterface::Status TestFile::preallocate(FwSignedSizeType offset, FwSignedSizeType length) {
StaticData::data.preallocateOffset = offset;
StaticData::data.preallocateLength = length;
StaticData::data.lastCalled = StaticData::PREALLOCATE_FN;
return StaticData::data.preallocateStatus;
}
FileInterface::Status TestFile::seek(FwSignedSizeType offset, SeekType seekType) {
StaticData::data.seekOffset = offset;
StaticData::data.seekType = seekType;
StaticData::data.lastCalled = StaticData::SEEK_FN;
return StaticData::data.seekStatus;
}
FileInterface::Status TestFile::flush() {
StaticData::data.lastCalled = StaticData::FLUSH_FN;
return StaticData::data.flushStatus;
}
FileInterface::Status TestFile::read(U8 *buffer, FwSignedSizeType &size, WaitType wait) {
StaticData::data.readBuffer = buffer;
StaticData::data.readSize = size;
StaticData::data.readWait = wait;
StaticData::data.lastCalled = StaticData::READ_FN;
// Copy read data if set
if (nullptr != StaticData::data.readResult) {
size = FW_MIN(size, StaticData::data.readResultSize - StaticData::data.pointer);
(void) ::memcpy(buffer, StaticData::data.readResult + StaticData::data.pointer, size);
StaticData::data.pointer += size;
} else {
size = StaticData::data.readSizeResult;
}
return StaticData::data.readStatus;
}
FileInterface::Status TestFile::write(const U8* buffer, FwSignedSizeType &size, WaitType wait) {
StaticData::data.writeBuffer = buffer;
StaticData::data.writeSize = size;
StaticData::data.writeWait = wait;
StaticData::data.lastCalled = StaticData::WRITE_FN;
// Copy read data if set
if (nullptr != StaticData::data.writeResult) {
size = FW_MIN(size, StaticData::data.writeResultSize - StaticData::data.pointer);
(void) ::memcpy(StaticData::data.writeResult + StaticData::data.pointer, buffer, size);
StaticData::data.pointer += size;
} else {
size = StaticData::data.writeSizeResult;
}
return StaticData::data.writeStatus;
}
FileHandle* TestFile::getHandle() {
return &this->m_handle;
}
} // namespace Test
} // namespace File
} // namespace Stub
} // namespace Os