Arquivos
hhvm/hphp/test/ext/test.cpp
T
Edwin Smith 721f89b890 Flatten directories under runtime/base
This moves runtime/base/*/* to runtime/base, and fixes paths.
2013-07-18 17:28:35 -07:00

117 linhas
3.5 KiB
C++

/*
+----------------------------------------------------------------------+
| HipHop for PHP |
+----------------------------------------------------------------------+
| Copyright (c) 2010-2013 Facebook, Inc. (http://www.facebook.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
| available through the world-wide-web at the following url: |
| http://www.php.net/license/3_01.txt |
| If you did not receive a copy of the PHP license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@php.net so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
*/
#include "hphp/test/ext/test.h"
#include "hphp/runtime/base/shared_store_base.h"
#include "hphp/compiler/option.h"
using namespace HPHP;
///////////////////////////////////////////////////////////////////////////////
#ifndef PHP_PATH
#define PHP_PATH "php"
#endif
const char *php_path = PHP_PATH;
int Test::s_total = 0;
int Test::s_passed = 0;
int Test::s_skipped = 0;
std::string Test::s_suite;
bool Test::s_quiet = false;
TestLogger Test::logger;
///////////////////////////////////////////////////////////////////////////////
bool Test::RunTests(std::string &suite, std::string &which, std::string &set) {
bool allPassed = true;
Option::Load();
size_t pos = suite.find("::");
if (pos != std::string::npos) {
which = suite.substr(pos + 2);
suite = suite.substr(0, pos);
}
if (!logger.initializeRun()) {
printf("WARNING: couldn't initialize test logging\n");
}
RunTestsImpl(allPassed, suite, which, set);
if (!logger.finishRun()) {
printf("WARNING: couldn't finish test logging\n");
}
if (s_skipped) {
printf("%d/%d unit tests skipped.\n", s_skipped, s_total);
}
if (allPassed) {
assert(s_total == s_passed + s_skipped);
printf("%d/%d unit tests passed.\n", s_passed, s_total);
return true;
}
printf("ERROR: %d/%d unit tests failed.\n", s_total - s_passed - s_skipped,
s_total);
return false;
}
bool Test::logTestResults(std::string name, std::string details, int pass,
int fail, int skip) {
if (!logger.doLog()) {
return true;
}
long seconds = finish.tv_sec - start.tv_sec;
long useconds = finish.tv_usec - start.tv_usec;
long mseconds = ((seconds) * 1000 + useconds / 1000.0) + 0.5; // round up
char summary[100];
sprintf(summary, "PASSED (%d)", pass);
const char* status = "passed";
if (skip > 0) {
sprintf(summary, "SKIPPED (%d)", skip);
}
if (fail > 0) {
status = "failed";
sprintf(summary, "FAILED (%d)", fail);
}
ArrayInit data(8);
data.set(String("type"), "hphp");
data.set(String("name"), name);
data.set(String("contacts"), null_array);
data.set(String("endedTime"), time(nullptr));
data.set(String("durationSecs"), mseconds / 1000.0);
data.set(String("status"), status);
data.set(String("summary"), std::string(summary));
data.set(String("details"), details);
if (!logger.logTest(Array(data.create()))) {
printf("WARNING: Logging %s failed\n", name.c_str());
return false;
}
return true;
}