def test_get_view_rendering(self): class IFoo(Interface): pass foo = self.create_dummy() alsoProvides(foo, IFoo) class FooView(object): implements(ILaTeXView) data = 'foo' def __init__(self, context, request, layout): pass def render(self): return self.data provideAdapter(FooView, (IFoo, Interface, Interface), name='') class PreFooView(FooView): data = 'pre' provideAdapter(PreFooView, (IFoo, Interface, Interface), name='pre-hook') class PostFooView(FooView): data = 'post' provideAdapter(PostFooView, (IFoo, Interface, Interface), name='post-hook') context = self.create_dummy() request = self.create_dummy() builder = self.create_dummy() layout = BaseLayout(context, request, builder) views = layout.get_views_for(foo) self.assertEqual(len(views), 3) self.assertEqual(type(views[0]), PreFooView) self.assertEqual(type(views[1]), FooView) self.assertEqual(type(views[2]), PostFooView) self.assertEqual( layout.render_latex_for(foo), 'pre\nfoo\npost')
class TestInjectionAwareConvertObject(MockTestCase): layer = LATEX_ZCML_LAYER def setUp(self): super(TestInjectionAwareConvertObject, self).setUp() context = self.create_dummy() request = self.create_dummy() directlyProvides(request, IWithinBookLayer) builder = self.create_dummy() self.layout = BaseLayout(context, request, builder) def test_not_injected_without_interface(self): obj = self.mocker.mock() self.expect(obj.Schema()).count(0) self.replay() self.assertEqual(self.layout.render_latex_for(obj), '') def test_injected_with_interface(self): latex_pre_code = 'INJECTED PRE LATEX CODE' latex_post_code = 'INJECTED POST LATEX CODE' obj_dummy = self.create_dummy() directlyProvides(obj_dummy, ILaTeXCodeInjectionEnabled) obj = self.mocker.proxy(obj_dummy, spec=None) schema = self.mocker.mock() self.expect(obj.Schema()).result(schema).count(2) self.expect(schema.getField('preLatexCode').get(obj)).result( latex_pre_code) self.expect(schema.getField('postLatexCode').get(obj)).result( latex_post_code) self.expect(obj.getPhysicalPath()).result( ['', 'myobj']).count(3) # 3 = pre + post + assertion below self.replay() latex = self.layout.render_latex_for(obj) self.assertIn(latex_pre_code, latex) self.assertIn(latex_post_code, latex) self.assertIn('/'.join(obj.getPhysicalPath()), latex) def test_bad_schemaextender_state(self): # sometimes the field can not be retrieved. We do nothing and we # don't fail in this case. obj_dummy = self.create_dummy() directlyProvides(obj_dummy, ILaTeXCodeInjectionEnabled) obj = self.mocker.proxy(obj_dummy, spec=None) schema = self.mocker.mock() self.expect(obj.Schema()).result(schema).count(2) # pre latex: field not found self.expect(schema.getField('preLatexCode')).result(None) # post latex: field value is empty self.expect(schema.getField('postLatexCode').get(obj)).result('') self.replay() latex = self.layout.render_latex_for(obj) self.assertEqual(latex.strip(), '')
class TestInjectionAwareConvertObject(MockTestCase): layer = LATEX_ZCML_LAYER def setUp(self): super(TestInjectionAwareConvertObject, self).setUp() context = self.create_dummy() request = self.providing_stub(IWithinBookLayer) builder = self.providing_stub(IBuilder) self.layout = BaseLayout(context, request, builder) def mock_extender_values(self, mock, **data): default_data = { 'preLatexCode': '', 'postLatexCode': '', 'preferredColumnLayout': NO_PREFERRED_LAYOUT, 'latexLandscape': False, 'preLatexClearpage': False, 'postLatexClearpage': False, 'preLatexNewpage': False } default_data.update(data) data = default_data schema = self.stub() self.expect(mock.Schema()).result(schema).count(0, None) for fieldname, value in data.items(): self.expect(schema.getField(fieldname).get(mock)).result(value) self.expect(mock.getPhysicalPath()).result(['', 'path', 'to', 'obj']) return schema def test_not_injected_without_interface(self): obj = self.mocker.mock() self.expect(obj.Schema()).count(0) self.replay() self.assertEqual(self.layout.render_latex_for(obj), '') def test_injected_with_interface(self): latex_pre_code = 'INJECTED PRE LATEX CODE' latex_post_code = 'INJECTED POST LATEX CODE' obj = self.providing_stub(ILaTeXCodeInjectionEnabled) self.mock_extender_values(obj, preLatexCode=latex_pre_code, postLatexCode=latex_post_code) self.replay() latex = self.layout.render_latex_for(obj) self.assertIn(latex_pre_code, latex) self.assertIn(latex_post_code, latex) self.assertIn('/'.join(obj.getPhysicalPath()), latex) def test_bad_schemaextender_state(self): # sometimes the field can not be retrieved. We do nothing and we # don't fail in this case. obj_dummy = self.create_dummy() directlyProvides(obj_dummy, ILaTeXCodeInjectionEnabled) obj = self.mocker.proxy(obj_dummy, spec=None) self.mock_extender_values(obj, preLatexCode=None) self.replay() latex = self.layout.render_latex_for(obj) self.assertEqual(latex.strip(), r'\label{path:/path/to/obj}') def test_column_layout_injected(self): obj1 = self.providing_stub(ILaTeXCodeInjectionEnabled) self.mock_extender_values(obj1, preferredColumnLayout=NO_PREFERRED_LAYOUT) obj1a = self.providing_stub(ILaTeXCodeInjectionEnabled) self.mock_extender_values(obj1a, preferredColumnLayout=TWOCOLUMN_LAYOUT) obj1b = self.providing_stub(ILaTeXCodeInjectionEnabled) self.mock_extender_values(obj1b, preferredColumnLayout=ONECOLUMN_LAYOUT) obj1c = self.providing_stub(ILaTeXCodeInjectionEnabled) self.mock_extender_values(obj1c, preferredColumnLayout=NO_PREFERRED_LAYOUT) obj2 = self.providing_stub(ILaTeXCodeInjectionEnabled) self.mock_extender_values(obj2, preferredColumnLayout=TWOCOLUMN_LAYOUT) self.replay() latex_obj1 = self.layout.render_latex_for(obj1) latex_obj1a = self.layout.render_latex_for(obj1a) latex_obj1b = self.layout.render_latex_for(obj1b) latex_obj1c = self.layout.render_latex_for(obj1c) latex_obj2 = self.layout.render_latex_for(obj2) self.assertNotIn('column', latex_obj1) self.assertIn(r'\twocolumn', latex_obj1a) self.assertIn(r'\onecolumn', latex_obj1b) self.assertNotIn('column', latex_obj1c) self.assertIn(r'\twocolumn', latex_obj2) def test_latex_clearpage_injected(self): normal_obj = self.providing_stub(ILaTeXCodeInjectionEnabled) self.mock_extender_values(normal_obj) pre_clearpage_obj = self.providing_stub(ILaTeXCodeInjectionEnabled) self.mock_extender_values(pre_clearpage_obj, preLatexClearpage=True) post_clearpage_obj = self.providing_stub(ILaTeXCodeInjectionEnabled) self.mock_extender_values(post_clearpage_obj, postLatexClearpage=True) for obj in [normal_obj, pre_clearpage_obj, post_clearpage_obj]: self.expect(obj.getPhysicalPath()).result(['', 'myobj']) self.replay() self.assertNotIn(r'\clearpage', self.layout.render_latex_for(normal_obj)) self.assertIn(r'\clearpage', self.layout.render_latex_for(pre_clearpage_obj)) self.assertIn(r'\clearpage', self.layout.render_latex_for(post_clearpage_obj)) def test_latex_newpage_injected(self): normal_obj = self.providing_stub(ILaTeXCodeInjectionEnabled) self.mock_extender_values(normal_obj) pre_newpage_obj = self.providing_stub(ILaTeXCodeInjectionEnabled) self.mock_extender_values(pre_newpage_obj, preLatexNewpage=True) for obj in [normal_obj, pre_newpage_obj]: self.expect(obj.getPhysicalPath()).result(['', 'myobj']) self.replay() self.assertNotIn(r'\newpage', self.layout.render_latex_for(normal_obj)) self.assertIn(r'\newpage', self.layout.render_latex_for(pre_newpage_obj)) def test_landscape_mode(self): obj1 = self.providing_stub(ILaTeXCodeInjectionEnabled) self.mock_extender_values(obj1, latexLandscape=False) obj2 = self.providing_stub(ILaTeXCodeInjectionEnabled) self.mock_extender_values(obj2, latexLandscape=True) self.replay() latex_obj1 = self.layout.render_latex_for(obj1) latex_obj2 = self.layout.render_latex_for(obj2) self.assertNotIn(r'landscape', latex_obj1) self.assertIn(r'landscape', latex_obj2) self.assertIn(r'\begin{landscape}', latex_obj2) self.assertIn(r'\end{landscape}', latex_obj2) def test_landscape_nested(self): foo = self.providing_stub([ILaTeXCodeInjectionEnabled, IFoo]) self.mock_extender_values(foo, latexLandscape=True) bar = self.providing_stub(ILaTeXCodeInjectionEnabled) self.mock_extender_values(bar, latexLandscape=False) baz = self.providing_stub(ILaTeXCodeInjectionEnabled) self.mock_extender_values(baz, latexLandscape=True) class FooLaTeXView(object): def __init__(self, context, request, layout): self.layout = layout def render(self): return '\n'.join(( 'Bar: %s' % self.layout.render_latex_for(bar).strip(), 'Baz: %s' % self.layout.render_latex_for(baz).strip(), )) self.mock_adapter(FooLaTeXView, ILaTeXView, (IFoo, Interface, Interface)) self.replay() self.assertEqual( '\n'.join((r'\label{path:/path/to/obj}', r'', r'\begin{landscape}', r'Bar: \label{path:/path/to/obj}', r'Baz: \label{path:/path/to/obj}', r'\end{landscape}')), self.layout.render_latex_for(foo))
class TestInjectionAwareConvertObject(MockTestCase): layer = LATEX_ZCML_LAYER def setUp(self): super(TestInjectionAwareConvertObject, self).setUp() context = self.create_dummy() request = self.providing_stub(IWithinBookLayer) builder = self.providing_stub(IBuilder) self.layout = BaseLayout(context, request, builder) def mock_extender_values(self, mock, **data): default_data = {'preLatexCode': '', 'postLatexCode': '', 'preferredColumnLayout': NO_PREFERRED_LAYOUT, 'latexLandscape': False, 'preLatexClearpage': False, 'postLatexClearpage': False, 'preLatexNewpage': False} default_data.update(data) data = default_data schema = self.stub() self.expect(mock.Schema()).result(schema).count(0, None) for fieldname, value in data.items(): self.expect(schema.getField(fieldname).get(mock)).result(value) self.expect(mock.getPhysicalPath()).result(['', 'path', 'to', 'obj']) return schema def test_not_injected_without_interface(self): obj = self.mocker.mock() self.expect(obj.Schema()).count(0) self.replay() self.assertEqual(self.layout.render_latex_for(obj), '') def test_injected_with_interface(self): latex_pre_code = 'INJECTED PRE LATEX CODE' latex_post_code = 'INJECTED POST LATEX CODE' obj = self.providing_stub(ILaTeXCodeInjectionEnabled) self.mock_extender_values(obj, preLatexCode=latex_pre_code, postLatexCode=latex_post_code) self.replay() latex = self.layout.render_latex_for(obj) self.assertIn(latex_pre_code, latex) self.assertIn(latex_post_code, latex) self.assertIn('/'.join(obj.getPhysicalPath()), latex) def test_bad_schemaextender_state(self): # sometimes the field can not be retrieved. We do nothing and we # don't fail in this case. obj_dummy = self.create_dummy() directlyProvides(obj_dummy, ILaTeXCodeInjectionEnabled) obj = self.mocker.proxy(obj_dummy, spec=None) self.mock_extender_values(obj, preLatexCode=None) self.replay() latex = self.layout.render_latex_for(obj) self.assertEqual(latex.strip(), r'\label{path:/path/to/obj}') def test_column_layout_injected(self): obj1 = self.providing_stub(ILaTeXCodeInjectionEnabled) self.mock_extender_values( obj1, preferredColumnLayout=NO_PREFERRED_LAYOUT) obj1a = self.providing_stub(ILaTeXCodeInjectionEnabled) self.mock_extender_values( obj1a, preferredColumnLayout=TWOCOLUMN_LAYOUT) obj1b = self.providing_stub(ILaTeXCodeInjectionEnabled) self.mock_extender_values( obj1b, preferredColumnLayout=ONECOLUMN_LAYOUT) obj1c = self.providing_stub(ILaTeXCodeInjectionEnabled) self.mock_extender_values( obj1c, preferredColumnLayout=NO_PREFERRED_LAYOUT) obj2 = self.providing_stub(ILaTeXCodeInjectionEnabled) self.mock_extender_values( obj2, preferredColumnLayout=TWOCOLUMN_LAYOUT) self.replay() latex_obj1 = self.layout.render_latex_for(obj1) latex_obj1a = self.layout.render_latex_for(obj1a) latex_obj1b = self.layout.render_latex_for(obj1b) latex_obj1c = self.layout.render_latex_for(obj1c) latex_obj2 = self.layout.render_latex_for(obj2) self.assertNotIn('column', latex_obj1) self.assertIn(r'\twocolumn', latex_obj1a) self.assertIn(r'\onecolumn', latex_obj1b) self.assertNotIn('column', latex_obj1c) self.assertIn(r'\twocolumn', latex_obj2) def test_latex_clearpage_injected(self): normal_obj = self.providing_stub(ILaTeXCodeInjectionEnabled) self.mock_extender_values(normal_obj) pre_clearpage_obj = self.providing_stub(ILaTeXCodeInjectionEnabled) self.mock_extender_values(pre_clearpage_obj, preLatexClearpage=True) post_clearpage_obj = self.providing_stub(ILaTeXCodeInjectionEnabled) self.mock_extender_values(post_clearpage_obj, postLatexClearpage=True) for obj in [normal_obj, pre_clearpage_obj, post_clearpage_obj]: self.expect(obj.getPhysicalPath()).result(['', 'myobj']) self.replay() self.assertNotIn(r'\clearpage', self.layout.render_latex_for(normal_obj)) self.assertIn(r'\clearpage', self.layout.render_latex_for(pre_clearpage_obj)) self.assertIn(r'\clearpage', self.layout.render_latex_for(post_clearpage_obj)) def test_latex_newpage_injected(self): normal_obj = self.providing_stub(ILaTeXCodeInjectionEnabled) self.mock_extender_values(normal_obj) pre_newpage_obj = self.providing_stub(ILaTeXCodeInjectionEnabled) self.mock_extender_values(pre_newpage_obj, preLatexNewpage=True) for obj in [normal_obj, pre_newpage_obj]: self.expect(obj.getPhysicalPath()).result(['', 'myobj']) self.replay() self.assertNotIn(r'\newpage', self.layout.render_latex_for(normal_obj)) self.assertIn(r'\newpage', self.layout.render_latex_for(pre_newpage_obj)) def test_landscape_mode(self): obj1 = self.providing_stub(ILaTeXCodeInjectionEnabled) self.mock_extender_values(obj1, latexLandscape=False) obj2 = self.providing_stub(ILaTeXCodeInjectionEnabled) self.mock_extender_values(obj2, latexLandscape=True) self.replay() latex_obj1 = self.layout.render_latex_for(obj1) latex_obj2 = self.layout.render_latex_for(obj2) self.assertNotIn(r'landscape', latex_obj1) self.assertIn(r'landscape', latex_obj2) self.assertIn(r'\begin{landscape}', latex_obj2) self.assertIn(r'\end{landscape}', latex_obj2) def test_landscape_nested(self): foo = self.providing_stub([ILaTeXCodeInjectionEnabled, IFoo]) self.mock_extender_values(foo, latexLandscape=True) bar = self.providing_stub(ILaTeXCodeInjectionEnabled) self.mock_extender_values(bar, latexLandscape=False) baz = self.providing_stub(ILaTeXCodeInjectionEnabled) self.mock_extender_values(baz, latexLandscape=True) class FooLaTeXView(object): def __init__(self, context, request, layout): self.layout = layout def render(self): return '\n'.join(( 'Bar: %s' % self.layout.render_latex_for(bar).strip(), 'Baz: %s' % self.layout.render_latex_for(baz).strip(), )) self.mock_adapter(FooLaTeXView, ILaTeXView, (IFoo, Interface, Interface)) self.replay() self.assertEqual( '\n'.join(( r'\label{path:/path/to/obj}', r'', r'\begin{landscape}', r'Bar: \label{path:/path/to/obj}', r'Baz: \label{path:/path/to/obj}', r'\end{landscape}')), self.layout.render_latex_for(foo))