| /* |
| * 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>"); |
| } |