DYTSrouce/test_chart_parsing.cpp
2025-10-21 02:17:40 +08:00

129 lines
6.1 KiB
C++

#include <QApplication>
#include <QDebug>
#include <iostream>
#include "workspace/WorkSpaceXMLParse.h"
#include "common/ChartData.h"
void printChartData(const std::shared_ptr<BaseChartData>& chartData) {
if (!chartData) {
std::cout << " Chart data is null" << std::endl;
return;
}
std::cout << " Chart Name: " << chartData->name.toStdString() << std::endl;
std::cout << " Chart Path: " << chartData->path.toStdString() << std::endl;
// Handle different chart types
if (auto curveChart = std::dynamic_pointer_cast<CurveChartData>(chartData)) {
std::cout << " Chart Type: Curve" << std::endl;
std::cout << " X Title: " << curveChart->xTitle.toStdString() << std::endl;
std::cout << " Y Title: " << curveChart->yTitle.toStdString() << std::endl;
std::cout << " X Range: [" << curveChart->xMin << " - " << curveChart->xMax << "]" << std::endl;
std::cout << " Y Range: [" << curveChart->yMin << " - " << curveChart->yMax << "]" << std::endl;
std::cout << " X Count: " << curveChart->xCount << std::endl;
std::cout << " Time: " << curveChart->t << std::endl;
std::cout << " Curves (" << curveChart->curves.size() << "):" << std::endl;
for (const auto& curve : curveChart->curves) {
std::cout << " - Name: " << curve.name.toStdString()
<< ", Range: [" << curve.start << " - " << curve.stop << "]"
<< ", Color: " << curve.color.toStdString() << std::endl;
}
} else if (auto surfaceChart = std::dynamic_pointer_cast<SurfaceChartData>(chartData)) {
std::cout << " Chart Type: Surface" << std::endl;
std::cout << " X Title: " << surfaceChart->xTitle.toStdString() << std::endl;
std::cout << " Y Title: " << surfaceChart->yTitle.toStdString() << std::endl;
std::cout << " Z Title: " << surfaceChart->zTitle.toStdString() << std::endl;
std::cout << " X Range: [" << surfaceChart->xMin << " - " << surfaceChart->xMax << "]" << std::endl;
std::cout << " Y Range: [" << surfaceChart->yMin << " - " << surfaceChart->yMax << "]" << std::endl;
std::cout << " Z Range: [" << surfaceChart->zMin << " - " << surfaceChart->zMax << "]" << std::endl;
std::cout << " X Count: " << surfaceChart->xCount << std::endl;
std::cout << " Y Count: " << surfaceChart->yCount << std::endl;
std::cout << " Z Count: " << surfaceChart->zCount << std::endl;
std::cout << " Time: " << surfaceChart->t << std::endl;
std::cout << " Surface Curves (" << surfaceChart->curves.size() << "):" << std::endl;
for (const auto& curve : surfaceChart->curves) {
std::cout << " - Name: " << curve.name.toStdString()
<< ", Range: [" << curve.start << " - " << curve.stop << "]"
<< ", Color: " << curve.color.toStdString()
<< ", Position: (" << curve.x << "," << curve.y << "," << curve.z << ")" << std::endl;
}
} else if (auto tableChart = std::dynamic_pointer_cast<TableChartData>(chartData)) {
std::cout << " Chart Type: Table" << std::endl;
std::cout << " Head: " << tableChart->head.toStdString() << std::endl;
std::cout << " Time: " << tableChart->t << std::endl;
std::cout << " Table Data (" << tableChart->curves.size() << "):" << std::endl;
for (const auto& curve : tableChart->curves) {
std::cout << " - Name: " << curve.name.toStdString()
<< ", Color: " << curve.color.toStdString()
<< ", Data: " << curve.data.toStdString() << std::endl;
}
} else if (auto lightChart = std::dynamic_pointer_cast<LightChartData>(chartData)) {
std::cout << " Chart Type: Light" << std::endl;
std::cout << " Open Color: " << lightChart->openColor.toStdString() << std::endl;
std::cout << " Close Color: " << lightChart->closeColor.toStdString() << std::endl;
std::cout << " Time: " << lightChart->t << std::endl;
std::cout << " Light Data (" << lightChart->curves.size() << "):" << std::endl;
for (const auto& curve : lightChart->curves) {
std::cout << " - Name: " << curve.name.toStdString()
<< ", Data: " << curve.data.toStdString() << std::endl;
}
} else {
std::cout << " Chart Type: Unknown" << std::endl;
}
}
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
std::cout << "Testing XML Chart Parsing with New Inheritance Structure..." << std::endl;
// Test XML file path
QString xmlFilePath = "test_workspace.xml";
// Create parser instance
WorkSpaceXMLParse parser;
// Parse the XML file
FileTypeData fileData;
bool success = parser.ParseFiles(xmlFilePath, fileData);
if (!success) {
std::cout << "Failed to parse XML file: " << xmlFilePath.toStdString() << std::endl;
return -1;
}
std::cout << "Successfully parsed XML file!" << std::endl;
std::cout << "=== File Type Data ===" << std::endl;
std::cout << "Files count: " << fileData.files.size() << std::endl;
std::cout << "Charts count: " << fileData.charts.size() << std::endl;
// Print file information
std::cout << "\n=== Files ===" << std::endl;
for (int i = 0; i < fileData.files.size(); ++i) {
const auto& file = fileData.files[i];
std::cout << "File " << i << ":" << std::endl;
std::cout << " Name: " << file.name.toStdString() << std::endl;
std::cout << " Path: " << file.path.toStdString() << std::endl;
std::cout << " Type: " << static_cast<int>(file.type) << std::endl;
}
// Print chart information
std::cout << "\n=== Charts ===" << std::endl;
for (int i = 0; i < fileData.charts.size(); ++i) {
std::cout << "Chart " << i << ":" << std::endl;
printChartData(fileData.charts[i]);
std::cout << std::endl;
}
std::cout << "Test completed successfully!" << std::endl;
return 0;
}