summaryrefslogtreecommitdiffstats
path: root/security/nss/gtests/common/gtests.cc
diff options
context:
space:
mode:
Diffstat (limited to 'security/nss/gtests/common/gtests.cc')
-rw-r--r--security/nss/gtests/common/gtests.cc52
1 files changed, 52 insertions, 0 deletions
diff --git a/security/nss/gtests/common/gtests.cc b/security/nss/gtests/common/gtests.cc
new file mode 100644
index 0000000000..bacf391fc4
--- /dev/null
+++ b/security/nss/gtests/common/gtests.cc
@@ -0,0 +1,52 @@
+#include "nspr.h"
+#include "nss.h"
+
+#include <cstdlib>
+
+#define GTEST_HAS_RTTI 0
+#include "gtest/gtest.h"
+
+// Tests are passed the location of their source directory
+// so that they can load extra resources from there.
+std::string g_source_dir;
+
+void usage(const char *progname) {
+ PR_fprintf(PR_STDERR, "Usage: %s [-s <dir>] [-d <dir> [-w]]\n", progname);
+ exit(2);
+}
+
+int main(int argc, char **argv) {
+ ::testing::InitGoogleTest(&argc, argv);
+
+ const char *workdir = "";
+ uint32_t flags = NSS_INIT_READONLY;
+
+ for (int i = 0; i < argc; i++) {
+ if (!strcmp(argv[i], "-s")) {
+ if (i + 1 >= argc) {
+ usage(argv[0]);
+ }
+ i++;
+ g_source_dir = argv[i];
+ } else if (!strcmp(argv[i], "-d")) {
+ if (i + 1 >= argc) {
+ usage(argv[0]);
+ }
+ i++;
+ workdir = argv[i];
+ } else if (!strcmp(argv[i], "-w")) {
+ flags &= ~NSS_INIT_READONLY;
+ }
+ }
+
+ if (NSS_Initialize(workdir, "", "", SECMOD_DB, flags) != SECSuccess) {
+ return 1;
+ }
+ int rv = RUN_ALL_TESTS();
+
+ if (NSS_Shutdown() != SECSuccess) {
+ return 1;
+ }
+
+ return rv;
+}