2 Copyright (C) 2014-2020 Carl Hetherington <cth@carlh.net>
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation; either version 2 of the License, or
7 (at your option) any later version.
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
14 You should have received a copy of the GNU General Public License
15 along with this program; if not, write to the Free Software
16 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 #include "stl_binary_reader.h"
24 #include <boost/test/unit_test.hpp>
29 using std::shared_ptr;
30 using std::make_shared;
32 /* Test reading of a binary STL file */
33 BOOST_AUTO_TEST_CASE (stl_binary_reader_test1)
35 if (private_test.empty ()) {
39 using boost::filesystem::path;
41 path stl = private_test / "VA_24fps_Reel_6_DE_FR.stl";
42 ifstream in (stl.string().c_str());
43 auto r = make_shared<sub::STLBinaryReader>(in);
44 path dump = path("build") / path("test") / path("VA_24fps_Reel_6_DE_FR.dump");
45 ofstream dump_stream (dump.string().c_str());
46 sub::dump (r, dump_stream);
49 check_file (private_test / "VA_24fps_Reel_6_DE_FR.dump", dump);
52 /* Test reading the same file but with the FILE* interface */
53 BOOST_AUTO_TEST_CASE (stl_binary_reader_test2)
55 if (private_test.empty ()) {
59 using boost::filesystem::path;
61 path stl = private_test / "VA_24fps_Reel_6_DE_FR.stl";
62 auto in = fopen (stl.string().c_str(), "rb");
64 auto r = make_shared<sub::STLBinaryReader>(in);
66 path dump = path("build") / path("test") / path("VA_24fps_Reel_6_DE_FR.dump");
67 ofstream dump_stream (dump.string().c_str());
68 sub::dump (r, dump_stream);
73 /** Test reading a file which raised "Unknown language group code U8" and which has
74 * bizarre line numbering.
76 BOOST_AUTO_TEST_CASE (stl_binary_reader_test3)
78 if (private_test.empty()) {
82 /* This file has a MNR value of 99, which (as per the spec recommendation)
83 * we "fix" to 12. But it also has line numbers which start at 99 and go up from there,
84 * so if we don't also alter the line numbers they end up way off the bottom of the screen.
85 * Check that the line numbers are brought into the range of our "fix".
88 auto path = private_test / "hsk.stl";
89 ifstream in (path.string().c_str());
90 auto reader = make_shared<sub::STLBinaryReader>(in);
91 for (auto i: reader->subtitles()) {
92 BOOST_REQUIRE(*i.vertical_position.line >= 0);
93 BOOST_REQUIRE(*i.vertical_position.line <= 12);