Re-work Subtitle class; remove STL text writer.
[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 <boost/test/unit_test.hpp>
21 #include <fstream>
22 #include "stl_text_reader.h"
23 #include "subtitle.h"
24
25 using std::list;
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         list<sub::Subtitle> subs = reader.subtitles ();
35
36         list<sub::Subtitle>::iterator i = subs.begin ();
37
38         BOOST_CHECK (i != subs.end ());
39         BOOST_CHECK_EQUAL (i->blocks.size(), 1);
40         sub::Block b = i->blocks.front ();
41         BOOST_CHECK_EQUAL (b.text, " This is a subtitle ");
42         BOOST_CHECK_EQUAL (b.font, "Arial");
43         BOOST_CHECK_EQUAL (b.font_size.points().get(), 42);
44         BOOST_CHECK_EQUAL (b.bold, false);
45         BOOST_CHECK_EQUAL (b.italic, false);
46         BOOST_CHECK_EQUAL (b.underline, false);
47         BOOST_CHECK_EQUAL (i->vertical_position.line.get(), 0);
48         BOOST_CHECK_EQUAL (i->from.frame().get(), sub::FrameTime (0, 0, 41, 9));
49         BOOST_CHECK_EQUAL (i->to.frame().get(), sub::FrameTime (0, 0, 42, 21));
50         ++i;
51
52         BOOST_CHECK (i != subs.end ());
53         BOOST_CHECK_EQUAL (i->blocks.size(), 1);
54         b = i->blocks.front ();
55         BOOST_CHECK_EQUAL (b.text, " and that's a line break");
56         BOOST_CHECK_EQUAL (b.font, "Arial");
57         BOOST_CHECK_EQUAL (b.font_size.points().get(), 42);
58         BOOST_CHECK_EQUAL (b.bold, false);
59         BOOST_CHECK_EQUAL (b.italic, false);
60         BOOST_CHECK_EQUAL (b.underline, false);
61         BOOST_CHECK_EQUAL (i->vertical_position.line.get(), 1);
62         BOOST_CHECK_EQUAL (i->from.frame().get(), sub::FrameTime (0, 0, 41, 9));
63         BOOST_CHECK_EQUAL (i->to.frame().get(), sub::FrameTime (0, 0, 42, 21));
64         ++i;
65
66         BOOST_CHECK (i != subs.end ());
67         BOOST_CHECK_EQUAL (i->blocks.size(), 7);
68         BOOST_CHECK_EQUAL (i->vertical_position.line.get(), 0);
69         BOOST_CHECK_EQUAL (i->from.frame().get(), sub::FrameTime (0, 1, 1, 1));
70         BOOST_CHECK_EQUAL (i->to.frame().get(), sub::FrameTime (0, 1, 2, 10));
71
72         list<sub::Block>::iterator j = i->blocks.begin ();
73         
74         BOOST_CHECK (j != i->blocks.end ());
75         BOOST_CHECK_EQUAL (j->text, " This is some ");
76         BOOST_CHECK_EQUAL (j->font, "Arial");
77         BOOST_CHECK_EQUAL (j->font_size.points().get(), 42);
78         BOOST_CHECK_EQUAL (j->bold, false);
79         BOOST_CHECK_EQUAL (j->italic, false);
80         BOOST_CHECK_EQUAL (j->underline, false);
81         ++j;
82
83         BOOST_CHECK (j != i->blocks.end ());
84         BOOST_CHECK_EQUAL (j->text, "bold");
85         BOOST_CHECK_EQUAL (j->font, "Arial");
86         BOOST_CHECK_EQUAL (j->font_size.points().get(), 42);
87         BOOST_CHECK_EQUAL (j->bold, true);
88         BOOST_CHECK_EQUAL (j->italic, false);
89         BOOST_CHECK_EQUAL (j->underline, false);
90         ++j;
91
92         BOOST_CHECK (j != i->blocks.end ());
93         BOOST_CHECK_EQUAL (j->text, " and some ");
94         BOOST_CHECK_EQUAL (j->font, "Arial");
95         BOOST_CHECK_EQUAL (j->font_size.points().get(), 42);
96         BOOST_CHECK_EQUAL (j->bold, false);
97         BOOST_CHECK_EQUAL (j->italic, false);
98         BOOST_CHECK_EQUAL (j->underline, false);
99         ++j;
100
101         BOOST_CHECK (j != i->blocks.end ());
102         BOOST_CHECK_EQUAL (j->text, "bold italic");
103         BOOST_CHECK_EQUAL (j->font, "Arial");
104         BOOST_CHECK_EQUAL (j->font_size.points().get(), 42);
105         BOOST_CHECK_EQUAL (j->bold, true);
106         BOOST_CHECK_EQUAL (j->italic, true);
107         BOOST_CHECK_EQUAL (j->underline, false);
108         ++j;
109
110         BOOST_CHECK (j != i->blocks.end ());
111         BOOST_CHECK_EQUAL (j->text, " and some ");
112         BOOST_CHECK_EQUAL (j->font, "Arial");
113         BOOST_CHECK_EQUAL (j->font_size.points().get(), 42);
114         BOOST_CHECK_EQUAL (j->bold, false);
115         BOOST_CHECK_EQUAL (j->italic, false);
116         BOOST_CHECK_EQUAL (j->underline, false);
117         ++j;
118
119         BOOST_CHECK (j != i->blocks.end ());
120         BOOST_CHECK_EQUAL (j->text, "underlined");
121         BOOST_CHECK_EQUAL (j->font, "Arial");
122         BOOST_CHECK_EQUAL (j->font_size.points().get(), 42);
123         BOOST_CHECK_EQUAL (j->bold, false);
124         BOOST_CHECK_EQUAL (j->italic, false);
125         BOOST_CHECK_EQUAL (j->underline, true);
126         ++j;
127
128         BOOST_CHECK (j != i->blocks.end ());
129         BOOST_CHECK_EQUAL (j->text, ".");
130         BOOST_CHECK_EQUAL (j->font, "Arial");
131         BOOST_CHECK_EQUAL (j->font_size.points().get(), 42);
132         BOOST_CHECK_EQUAL (j->bold, false);
133         BOOST_CHECK_EQUAL (j->italic, false);
134         BOOST_CHECK_EQUAL (j->underline, false);
135         ++j;
136         
137         BOOST_CHECK (j == i->blocks.end ());
138 }
139
140