Browse Source

test: add variable arguments support for Argv

At the moment Argv only supports three arguments which fulfilled my
requirements when working on #9163.

This commit adds support for a variable number of arguments. There is
also a no-args constructor that is the equivalent to running "node -p
process.version" which is hopefully alright as a default.

PR-URL: https://github.com/nodejs/node/pull/12166
Ref: https://github.com/nodejs/node/pull/9163
Reviewed-By: James M Snell <jasnell@gmail.com>
v6
Daniel Bevenius 8 years ago
committed by James M Snell
parent
commit
5ccaba49f0
  1. 32
      test/cctest/node_test_fixture.h

32
test/cctest/node_test_fixture.h

@ -32,17 +32,27 @@ class ArrayBufferAllocator : public v8::ArrayBuffer::Allocator {
struct Argv { struct Argv {
public: public:
Argv(const char* prog, const char* arg1, const char* arg2) { Argv() : Argv({"node", "-p", "process.version"}) {}
int prog_len = strlen(prog) + 1;
int arg1_len = strlen(arg1) + 1; Argv(const std::initializer_list<const char*> &args) {
int arg2_len = strlen(arg2) + 1; int nrArgs = args.size();
argv_ = static_cast<char**>(malloc(3 * sizeof(char*))); int totalLen = 0;
argv_[0] = static_cast<char*>(malloc(prog_len + arg1_len + arg2_len)); for (auto it = args.begin(); it != args.end(); ++it) {
snprintf(argv_[0], prog_len, "%s", prog); totalLen += strlen(*it) + 1;
snprintf(argv_[0] + prog_len, arg1_len, "%s", arg1); }
snprintf(argv_[0] + prog_len + arg1_len, arg2_len, "%s", arg2); argv_ = static_cast<char**>(malloc(nrArgs * sizeof(char*)));
argv_[1] = argv_[0] + prog_len; argv_[0] = static_cast<char*>(malloc(totalLen));
argv_[2] = argv_[0] + prog_len + arg1_len; int i = 0;
int offset = 0;
for (auto it = args.begin(); it != args.end(); ++it, ++i) {
int len = strlen(*it) + 1;
snprintf(argv_[0] + offset, len, "%s", *it);
// Skip argv_[0] as it points the correct location already
if (i > 0) {
argv_[i] = argv_[0] + offset;
}
offset += len;
}
} }
~Argv() { ~Argv() {

Loading…
Cancel
Save