123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 |
- /*********************************************************************
- * Software License Agreement (AGPL-3 License)
- *
- * OpenViBE SDK Test Software
- * Based on OpenViBE V1.1.0, Copyright (C) Inria, 2006-2015
- * Copyright (C) Inria, 2015-2017,V1.0
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License version 3,
- * as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.
- * If not, see <http://www.gnu.org/licenses/>.
- */
-
- #include <iostream>
- #include <iomanip>
- #include <fstream>
-
- #include "ebml/IReader.h"
- #include "ebml/CReader.h"
- #include "ebml/CReaderHelper.h"
-
- #include "ovtAssert.h"
-
- std::ofstream g_OutputStream;
-
- class CReaderCallBack : public EBML::IReaderCallBack
- {
- public:
- CReaderCallBack() { }
-
- ~CReaderCallBack() override { }
-
- bool isMasterChild(const EBML::CIdentifier& identifier) override
- {
- if (identifier == EBML_Identifier_Header) { return true; }
- if (identifier == EBML::CIdentifier(0xffff)) { return true; }
-
- return false;
- }
-
- void openChild(const EBML::CIdentifier& identifier) override
- {
- m_CurrentID = identifier;
-
- for (int i = 0; i < m_Depth; ++i) { g_OutputStream << " "; }
- g_OutputStream << "Opening child node [0x" << std::setw(16) << std::setfill('0') << std::hex << m_CurrentID << std::dec << "]\n";
- m_Depth++;
- }
-
- void processChildData(const void* buffer, const size_t size) override
- {
- for (int i = 0; i < m_Depth; ++i) { g_OutputStream << " "; }
- if (m_CurrentID == EBML_Identifier_DocType) { g_OutputStream << "Got doc type : [" << m_helper.getStr(buffer, size) << "]\n"; }
- else if (m_CurrentID == EBML_Identifier_EBMLVersion)
- {
- g_OutputStream << "Got EBML version : [0x" << std::setw(16) << std::setfill('0') << std::hex << m_helper.getUInt(buffer, size) << std::dec << "]\n";
- }
- else if (m_CurrentID == EBML_Identifier_EBMLIdLength)
- {
- g_OutputStream << "Got EBML ID length : [0x" << std::setw(16) << std::setfill('0') << std::hex << m_helper.getUInt(buffer, size) << std::dec <<
- "]\n";
- }
- else if (m_CurrentID == EBML_Identifier_DocTypeVersion)
- {
- g_OutputStream << "Got doc type version : [0x" << std::setw(16) << std::setfill('0') << std::hex << m_helper.getUInt(buffer, size) << std::dec <<
- "]\n";
- }
- else if (m_CurrentID == EBML_Identifier_DocTypeReadVersion)
- {
- g_OutputStream << "Got doc type read version : [0x" << std::setw(16) << std::setfill('0') << std::hex << m_helper.getUInt(buffer, size) << std::dec
- << "]\n";
- }
- else if (m_CurrentID == EBML::CIdentifier(0x1234))
- {
- g_OutputStream << "Got uinteger : [0x" << std::setw(16) << std::setfill('0') << std::hex << m_helper.getUInt(buffer, size) << std::dec << "]\n";
- }
- else if (m_CurrentID == EBML::CIdentifier(0xffffffffffffffffLL))
- {
- g_OutputStream << "Got uinteger : [0x" << std::setw(16) << std::setfill('0') << std::hex << m_helper.getUInt(buffer, size) << std::dec << "]\n";
- }
- else if (m_CurrentID == EBML::CIdentifier(0x4321)) { g_OutputStream << "Got double : [" << m_helper.getDouble(buffer, size) << "]\n"; }
- else if (m_CurrentID == EBML::CIdentifier(0x8765)) { g_OutputStream << "Got float : [" << m_helper.getDouble(buffer, size) << "]\n"; }
- else { g_OutputStream << "Got " << size << " data bytes, node id not known\n"; }
- }
-
- void closeChild() override
- {
- m_Depth--;
- for (int i = 0; i < m_Depth; ++i) { g_OutputStream << " "; }
- g_OutputStream << "Node closed\n";
- }
-
- private:
-
- int m_Depth = 0;
-
- EBML::CReaderHelper m_helper;
- EBML::CIdentifier m_CurrentID;
- };
-
- int uoEBMLReaderTest(int argc, char* argv[])
- {
- OVT_ASSERT(argc == 3, "Failure to retrieve tests arguments. Expecting: data_dir output_dir");
-
- std::string dataFile = std::string(argv[1]) + "ref_data.ebml";
- std::string expectedFile = std::string(argv[1]) + "ref_result.txt";
- std::string outputFile = std::string(argv[2]) + "uoEBMLReaderTest.txt";
-
- // The test parses a known ebml file,
- // writes the results into a text file and compares the output
- // text file to a reference text file.
-
- g_OutputStream.open(outputFile);
-
-
- OVT_ASSERT(g_OutputStream.is_open(), "Failure to open output file for writing");
-
- // parsing
- for (size_t n = 17; n >= 1; n--)
- {
- CReaderCallBack callback;
- EBML::CReader reader(callback);
-
- g_OutputStream << "testing with n=" << n << std::endl;
-
- FILE* file = fopen(dataFile.c_str(), "rb");
-
- OVT_ASSERT(file != nullptr, "Failure to open data file for reading");
-
- unsigned char* c = new unsigned char[n];
- size_t i = 0;
- while (!feof(file))
- {
- i = fread(c, 1, n * sizeof(unsigned char), file);
- reader.processData(c, i);
- }
- delete[] c;
- fclose(file);
- }
- g_OutputStream.close();
- // comparison part
- std::ifstream generatedStream(outputFile);
- std::ifstream expectedStream(expectedFile);
-
- OVT_ASSERT(generatedStream.is_open(), "Failure to open generated results for reading");
- OVT_ASSERT(expectedStream.is_open(), "Failure to open expected results for reading");
-
- std::string generatedString;
- std::string expectedString;
- while (std::getline(expectedStream, expectedString))
- {
- OVT_ASSERT(std::getline(generatedStream, generatedString), "Failure to retrieve a line to match");
- OVT_ASSERT_STREQ(expectedString, generatedString, "Failure to match expected line to generated line");
- }
-
- // last check to verify the expected file has no additional line
- OVT_ASSERT(!std::getline(generatedStream, generatedString), "Failure to match expected file size and generated file size");
-
-
- return EXIT_SUCCESS;
- }
|