721f89b890
This moves runtime/base/*/* to runtime/base, and fixes paths.
117 linhas
3.5 KiB
C++
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;
|
|
}
|