Replace list with vector in most of the API.
[libsub.git] / test / stl_text_reader_test.cc
1 /*
2     Copyright (C) 2014 Carl Hetherington <cth@carlh.net>
3
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.
8
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.
13
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.
17
18 */
19
20 #include "stl_text_reader.h"
21 #include "subtitle.h"
22 #include "collect.h"
23 #include <boost/test/unit_test.hpp>
24 #include <fstream>
25
26 using std::ifstream;
27 using std::vector;
28
29 /* Test reading of a textual STL file */
30 BOOST_AUTO_TEST_CASE (stl_text_reader_test)
31 {
32         ifstream file ("test/data/test_text.stl");
33         sub::STLTextReader reader (file);
34         auto subs = sub::collect<vector<sub::Subtitle>> (reader.subtitles());
35
36         auto i = subs.begin ();
37
38
39         /* First subtitle */
40
41         BOOST_CHECK (i != subs.end ());
42         BOOST_CHECK_EQUAL (i->from, sub::Time::from_hmsf (0, 0, 41, 9));
43         BOOST_CHECK_EQUAL (i->to, sub::Time::from_hmsf (0, 0, 42, 21));
44
45         auto j = i->lines.begin ();
46         BOOST_CHECK (j != i->lines.end ());
47         BOOST_CHECK_EQUAL (j->blocks.size(), 1);
48         auto b = j->blocks.front ();
49         BOOST_CHECK_EQUAL (b.text, " This is a subtitle ");
50         BOOST_CHECK_EQUAL (b.font.get(), "Arial");
51         BOOST_CHECK_EQUAL (b.font_size.points().get(), 42);
52         BOOST_CHECK_EQUAL (b.bold, false);
53         BOOST_CHECK_EQUAL (b.italic, false);
54         BOOST_CHECK_EQUAL (b.underline, false);
55         BOOST_CHECK_EQUAL (j->vertical_position.line.get(), 0);
56         ++j;
57
58         BOOST_CHECK (j != i->lines.end ());
59         BOOST_CHECK_EQUAL (j->blocks.size(), 1);
60         b = j->blocks.front ();
61         BOOST_CHECK_EQUAL (b.text, " and that's a line break");
62         BOOST_CHECK_EQUAL (b.font.get(), "Arial");
63         BOOST_CHECK_EQUAL (b.font_size.points().get(), 42);
64         BOOST_CHECK_EQUAL (b.bold, false);
65         BOOST_CHECK_EQUAL (b.italic, false);
66         BOOST_CHECK_EQUAL (b.underline, false);
67         BOOST_CHECK_EQUAL (j->vertical_position.line.get(), 1);
68         ++i;
69
70
71         /* Second subtitle */
72
73         BOOST_CHECK (i != subs.end ());
74         BOOST_CHECK_EQUAL (i->from, sub::Time::from_hmsf (0, 1, 1, 1));
75         BOOST_CHECK_EQUAL (i->to, sub::Time::from_hmsf (0, 1, 2, 10));
76
77         BOOST_CHECK_EQUAL (i->lines.size(), 1);
78         sub::Line l = i->lines.front ();
79         BOOST_CHECK_EQUAL (l.blocks.size(), 7);
80         BOOST_CHECK_EQUAL (l.vertical_position.line.get(), 0);
81
82         auto k = l.blocks.begin ();
83
84         BOOST_CHECK (k != l.blocks.end ());
85         BOOST_CHECK_EQUAL (k->text, " This is some ");
86         BOOST_CHECK_EQUAL (k->font.get(), "Arial");
87         BOOST_CHECK_EQUAL (k->font_size.points().get(), 42);
88         BOOST_CHECK_EQUAL (k->bold, false);
89         BOOST_CHECK_EQUAL (k->italic, false);
90         BOOST_CHECK_EQUAL (k->underline, false);
91         ++k;
92
93         BOOST_CHECK (k != l.blocks.end ());
94         BOOST_CHECK_EQUAL (k->text, "bold");
95         BOOST_CHECK_EQUAL (k->font.get(), "Arial");
96         BOOST_CHECK_EQUAL (k->font_size.points().get(), 42);
97         BOOST_CHECK_EQUAL (k->bold, true);
98         BOOST_CHECK_EQUAL (k->italic, false);
99         BOOST_CHECK_EQUAL (k->underline, false);
100         ++k;
101
102         BOOST_CHECK (k != l.blocks.end ());
103         BOOST_CHECK_EQUAL (k->text, " and some ");
104         BOOST_CHECK_EQUAL (k->font.get(), "Arial");
105         BOOST_CHECK_EQUAL (k->font_size.points().get(), 42);
106         BOOST_CHECK_EQUAL (k->bold, false);
107         BOOST_CHECK_EQUAL (k->italic, false);
108         BOOST_CHECK_EQUAL (k->underline, false);
109         ++k;
110
111         BOOST_CHECK (k != l.blocks.end ());
112         BOOST_CHECK_EQUAL (k->text, "bold italic");
113         BOOST_CHECK_EQUAL (k->font.get(), "Arial");
114         BOOST_CHECK_EQUAL (k->font_size.points().get(), 42);
115         BOOST_CHECK_EQUAL (k->bold, true);
116         BOOST_CHECK_EQUAL (k->italic, true);
117         BOOST_CHECK_EQUAL (k->underline, false);
118         ++k;
119
120         BOOST_CHECK (k != l.blocks.end ());
121         BOOST_CHECK_EQUAL (k->text, " and some ");
122         BOOST_CHECK_EQUAL (k->font.get(), "Arial");
123         BOOST_CHECK_EQUAL (k->font_size.points().get(), 42);
124         BOOST_CHECK_EQUAL (k->bold, false);
125         BOOST_CHECK_EQUAL (k->italic, false);
126         BOOST_CHECK_EQUAL (k->underline, false);
127         ++k;
128
129         BOOST_CHECK (k != l.blocks.end ());
130         BOOST_CHECK_EQUAL (k->text, "underlined");
131         BOOST_CHECK_EQUAL (k->font.get(), "Arial");
132         BOOST_CHECK_EQUAL (k->font_size.points().get(), 42);
133         BOOST_CHECK_EQUAL (k->bold, false);
134         BOOST_CHECK_EQUAL (k->italic, false);
135         BOOST_CHECK_EQUAL (k->underline, true);
136         ++k;
137
138         BOOST_CHECK (k != l.blocks.end ());
139         BOOST_CHECK_EQUAL (k->text, ".");
140         BOOST_CHECK_EQUAL (k->font.get(), "Arial");
141         BOOST_CHECK_EQUAL (k->font_size.points().get(), 42);
142         BOOST_CHECK_EQUAL (k->bold, false);
143         BOOST_CHECK_EQUAL (k->italic, false);
144         BOOST_CHECK_EQUAL (k->underline, false);
145         ++k;
146
147         BOOST_CHECK (k == l.blocks.end ());
148 }
149
150