Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0c4b3a31 authored by Dan Albert's avatar Dan Albert
Browse files

Get libbase tests working on Windows.

Tests using files from /proc still fail on Windows (obviously), but
all tests are passing when run in Wine.

Change-Id: Ie4c3ba65b642202f8fcaec73332a53bee6115fba
parent 850188fc
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -55,6 +55,9 @@ TEST(file, WriteStringToFile) {
  EXPECT_EQ("abc", s);
}

// WriteStringToFile2 is explicitly for setting Unix permissions, which make no
// sense on Windows.
#if !defined(_WIN32)
TEST(file, WriteStringToFile2) {
  TemporaryFile tf;
  ASSERT_TRUE(tf.fd != -1);
@@ -71,6 +74,7 @@ TEST(file, WriteStringToFile2) {
    << strerror(errno);
  EXPECT_EQ("abc", s);
}
#endif

TEST(file, WriteStringToFd) {
  TemporaryFile tf;
+3 −0
Original line number Diff line number Diff line
@@ -20,11 +20,14 @@

#include <string>

// The z size sepcifier isn't supported on Windows, so this test isn't useful.
#if !defined(_WIN32)
TEST(StringPrintfTest, HexSizeT) {
  size_t size = 0x00107e59;
  EXPECT_EQ("00107e59", android::base::StringPrintf("%08zx", size));
  EXPECT_EQ("0x00107e59", android::base::StringPrintf("0x%08zx", size));
}
#endif

TEST(StringPrintfTest, StringAppendF) {
  std::string s("a");
+5 −0
Original line number Diff line number Diff line
@@ -20,6 +20,11 @@

int main(int argc, char** argv) {
  ::testing::InitGoogleTest(&argc, argv);

  // No logging on Windows yet.
#if !defined(_WIN32)
  android::base::InitLogging(argv, android::base::StderrLogger);
#endif

  return RUN_ALL_TESTS();
}
+24 −3
Original line number Diff line number Diff line
@@ -16,15 +16,26 @@

#include "test_utils.h"

#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <unistd.h>

#if defined(_WIN32)
#include <windows.h>
#endif

TemporaryFile::TemporaryFile() {
#if defined(__ANDROID__)
  init("/data/local/tmp");
  if (fd == -1) {
#elif defined(_WIN32)
  char wd[MAX_PATH] = {};
  _getcwd(wd, sizeof(wd));
  init(wd);
#else
  init("/tmp");
  }
#endif
}

TemporaryFile::~TemporaryFile() {
@@ -34,5 +45,15 @@ TemporaryFile::~TemporaryFile() {

void TemporaryFile::init(const char* tmp_dir) {
  snprintf(filename, sizeof(filename), "%s/TemporaryFile-XXXXXX", tmp_dir);
#if !defined(_WIN32)
  fd = mkstemp(filename);
#else
  // Windows doesn't have mkstemp, and tmpfile creates the file in the root
  // directory, requiring root (?!) permissions. We have to settle for mktemp.
  if (mktemp(filename) == nullptr) {
    abort();
  }

  fd = open(filename, O_RDWR | O_NOINHERIT | O_CREAT, _S_IREAD | _S_IWRITE);
#endif
}