/* * Copyright (C) 2012 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ #include "Log.h" #include "Settings.h" #include "StringUtil.h" #include "Report.h" #include "task/TaskCase.h" Report* Report::mInstance = NULL; Report* Report::Instance(const char* dirName) { if (mInstance == NULL) { mInstance = new Report(); ASSERT(mInstance->init(dirName)); } return mInstance; } void Report::Finalize() { delete mInstance; mInstance = NULL; } Report::Report() { } Report::~Report() { writeReport(); mFailedCases.clear(); mPassedCases.clear(); } bool Report::init(const char* dirName) { if (dirName == NULL) { return true; } android::String8 report; if (report.appendFormat("%s/report.xml", dirName) != 0) { return false; } Settings::Instance()->addSetting(Settings::EREPORT_FILE, report); return FileUtil::init(report.string()); } void Report::printf(const char* fmt, ...) { va_list ap; va_start(ap, fmt); FileUtil::doVprintf(false, -1, fmt, ap); va_end(ap); } void Report::addCasePassed(const TaskCase* task) { android::String8 name(" "); task->getCaseName(name); StringPair pair(name, task->getDetails()); mPassedCases.push_back(pair); } void Report::addCaseFailed(const TaskCase* task) { android::String8 name(" "); task->getCaseName(name); StringPair pair(name, task->getDetails()); mFailedCases.push_back(pair); } void Report::writeResult(std::list<StringPair>::const_iterator begin, std::list<StringPair>::const_iterator end, bool passed) { std::list<StringPair>::const_iterator it; for (it = begin; it != end; it++) { if (passed) { printf(" <test title=\"%s\" result=\"pass\" >", it->first.string()); } else { printf(" <test title=\"%s\" result=\"fail\" >", it->first.string()); } printf(" <details>\n%s", it->second.string()); printf(" </details>"); printf(" </test>"); } } void Report::writeReport() { printf("<?xml version='1.0' encoding='utf-8' standalone='yes' ?>"); printf("<audio-test-results-report report-version=\"1\" creation-time=\"%s\">", Settings::Instance()->getSetting(Settings::EREPORT_TIME).string()); printf(" <verifier-info version-name=\"1\" version-code=\"1\" />"); printf(" <device-info>"); printf(" %s", Settings::Instance()->getSetting(Settings::EDEVICE_INFO).string()); printf(" </device-info>"); printf(" <audio-test-results xml=\"%s\">", Settings::Instance()->getSetting(Settings::ETEST_XML).string()); writeResult(mFailedCases.begin(), mFailedCases.end(), false); writeResult(mPassedCases.begin(), mPassedCases.end(), true); printf(" </audio-test-results>"); printf("</audio-test-results-report>"); }