def test_08_fromURL(self): """Test 'fromURL' constructor""" url = 'http://media.tannern.com/pynliner/test.html' p = Pynliner() p.from_url(url) self.assertEqual(p.root_url, 'http://media.tannern.com') self.assertEqual(p.relative_url, 'http://media.tannern.com/pynliner/') p._get_soup() p._get_external_styles() self.assertEqual(p.style_string, "p {color: #999}") p._get_internal_styles() self.assertEqual(p.style_string, "p {color: #999}\nh1 {color: #ffcc00;}\n") p._get_styles() output = p.run() desired = u"""<?xml version='1.0' encoding='utf-8'?> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>test</title> </head> <body> <h1 style="color: #fc0">Hello World!</h1> <p style="color: #999">Possim tincidunt putamus iriure eu nulla. Facer qui volutpat ut aliquam sequitur. Mutationem legere feugiat autem clari notare. Nulla typi augue suscipit lectores in.</p> <p style="color: #999">Facilisis claritatem eum decima dignissim legentis. Nulla per legentis odio molestie quarta. Et velit typi claritas ipsum ullamcorper.</p> </body> </html>""" self.assertEqual(output, desired)
def _test_external_url(self, url, expected_url): with mock.patch.object(Pynliner, '_get_url') as mocked: def check_url(url): self.assertEqual(url, expected_url) return ".b1,.b2 { font-weight:bold; } .c {color: red}" mocked.side_effect = check_url p = Pynliner() p.root_url = self.root_url p.relative_url = self.relative_url p.from_string(self.html_template.format(href=url)) p._get_soup() p._get_styles()
def test_fromURL(self): """Test 'fromURL' constructor""" url = 'http://media.tannern.com/pynliner/test.html' p = Pynliner() with mock.patch.object(Pynliner, '_get_url') as mocked: mocked.return_value = u"""<?xml version='1.0' encoding='utf-8'?> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>test</title> <link rel="stylesheet" type="text/css" href="test.css"/> <style type="text/css">h1 {color: #fc0;}</style> </head> <body> <h1>Hello World!</h1> <p>:)</p> </body> </html>""" p.from_url(url) self.assertEqual(p.root_url, 'http://media.tannern.com') self.assertEqual(p.relative_url, 'http://media.tannern.com/pynliner/') p._get_soup() with mock.patch.object(Pynliner, '_get_url') as mocked: mocked.return_value = 'p {color: #999}' p._get_external_styles() self.assertEqual(p.style_string, "p {color: #999}") p._get_internal_styles() self.assertEqual(p.style_string, "p {color: #999}\nh1 {color: #fc0;}\n") p._get_styles() output = p.run() desired = u"""<?xml version='1.0' encoding='utf-8'?> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>test</title> </head> <body> <h1 style="color: #fc0">Hello World!</h1> <p style="color: #999">:)</p> </body> </html>""" self.assertEqual(output, desired)
def test_08_fromURL(self): """Test 'fromURL' constructor""" url = 'https://raw.github.com/voidfiles/pynliner/master/test_data/test.html' p = Pynliner() p.from_url(url) self.assertEqual(p.root_url, 'https://raw.github.com') self.assertEqual(p.relative_url, 'https://raw.github.com/voidfiles/pynliner/master/test_data/') p._get_soup() p._get_external_styles() self.assertEqual(p.style_string, "p {color: #999}") p._get_internal_styles() self.assertEqual(p.style_string, "p {color: #999}\nh1 {color: #ffcc00;}") p._get_styles() output = p.run() desired = u"""<html><head></head><body>\n <h1 style="color: #fc0">Testing Title</h1>\n <p style="color: #999">Awesome</p>\n </body></html>""" self.assertEqual(output, desired)
class CommaSelector(unittest.TestCase): def setUp(self): self.html = """<style>.b1,.b2 { font-weight:bold; } .c {color: red}</style><span class="b1">Bold</span><span class="b2 c">Bold Red</span>""" self.p = Pynliner().from_string(self.html) def test_fromString(self): """Test 'fromString' constructor""" self.assertEqual(self.p.source_string, self.html) def test_get_soup(self): """Test '_get_soup' method""" self.p._get_soup() self.assertEqual(unicode(self.p.soup), self.html) def test_get_styles(self): """Test '_get_styles' method""" self.p._get_soup() self.p._get_styles() self.assertEqual(self.p.style_string, u'.b1,.b2 { font-weight:bold; } .c {color: red}\n') self.assertEqual(unicode(self.p.soup), u'<span class="b1">Bold</span><span class="b2 c">Bold Red</span>') def test_apply_styles(self): """Test '_apply_styles' method""" self.p._get_soup() self.p._get_styles() self.p._apply_styles() self.assertEqual(unicode(self.p.soup), u'<span class="b1" style="font-weight: bold">Bold</span><span class="b2 c" style="color: red; font-weight: bold">Bold Red</span>') def test_run(self): """Test 'run' method""" output = self.p.run() self.assertEqual(output, u'<span class="b1" style="font-weight: bold">Bold</span><span class="b2 c" style="color: red; font-weight: bold">Bold Red</span>') def test_with_cssString(self): """Test 'with_cssString' method""" cssString = '.b1,.b2 {font-size: 2em;}' self.p = Pynliner().from_string(self.html).with_cssString(cssString) output = self.p.run() self.assertEqual(output, u'<span class="b1" style="font-weight: bold; font-size: 2em">Bold</span><span class="b2 c" style="color: red; font-weight: bold; font-size: 2em">Bold Red</span>') def test_fromString_complete(self): """Test 'fromString' complete""" output = pynliner.fromString(self.html) desired = u'<span class="b1" style="font-weight: bold">Bold</span><span class="b2 c" style="color: red; font-weight: bold">Bold Red</span>' self.assertEqual(output, desired) def test_comma_whitespace(self): """Test excess whitespace in CSS""" html = '<style>h1, h2 ,h3,\nh4{ color: #000} </style><h1>1</h1><h2>2</h2><h3>3</h3><h4>4</h4>' desired_output = '<h1 style="color: #000">1</h1><h2 style="color: #000">2</h2><h3 style="color: #000">3</h3><h4 style="color: #000">4</h4>' output = Pynliner().from_string(html).run() self.assertEqual(output, desired_output) def test_comma_separated_nested_styles(self): html = """<style>.orange-wrapper p, .super-orange-wrapper p { color:orange; }</style><div class="orange-wrapper"><p>Orange</p></div><div><p>Black</p></div>""" desired_output = """<div class="orange-wrapper"><p style="color: orange">Orange</p></div><div><p>Black</p></div>""" output = Pynliner().from_string(html).run() self.assertEqual(output, desired_output)
class CommaSelector(unittest.TestCase): def setUp(self): self.html = """<style>.b1,.b2 { font-weight:bold; } .c {color: red}</style><span class="b1">Bold</span><span class="b2 c">Bold Red</span>""" self.p = Pynliner().from_string(self.html) def test_01_fromString(self): """Test 'fromString' constructor""" self.assertEqual(self.p.source_string, self.html) def test_02_get_soup(self): """Test '_get_soup' method""" self.p._get_soup() self.assertEqual(unicode(self.p.soup), self.html) def test_03_get_styles(self): """Test '_get_styles' method""" self.p._get_soup() self.p._get_styles() self.assertEqual(self.p.style_string, u'.b1,.b2 { font-weight:bold; } .c {color: red}\n') self.assertEqual(unicode(self.p.soup), u'<span class="b1">Bold</span><span class="b2 c">Bold Red</span>') def test_04_apply_styles(self): """Test '_apply_styles' method""" self.p._get_soup() self.p._get_styles() self.p._apply_styles() self.assertEqual(unicode(self.p.soup), u'<span class="b1" style="font-weight: bold">Bold</span><span class="b2 c" style="font-weight: bold; color: red">Bold Red</span>') def test_05_run(self): """Test 'run' method""" output = self.p.run() self.assertEqual(output, u'<span class="b1" style="font-weight: bold">Bold</span><span class="b2 c" style="font-weight: bold; color: red">Bold Red</span>') def test_06_with_cssString(self): """Test 'with_cssString' method""" cssString = '.b1,.b2 {font-size: 2em;}' self.p = Pynliner().from_string(self.html).with_cssString(cssString) self.assertEqual(self.p.style_string, cssString + '\n') output = self.p.run() self.assertEqual(output, u'<span class="b1" style="font-size: 2em; font-weight: bold">Bold</span><span class="b2 c" style="font-size: 2em; font-weight: bold; color: red">Bold Red</span>') def test_07_fromString(self): """Test 'fromString' complete""" output = pynliner.fromString(self.html) desired = u'<span class="b1" style="font-weight: bold">Bold</span><span class="b2 c" style="font-weight: bold; color: red">Bold Red</span>' self.assertEqual(output, desired) def test_08_comma_whitespace(self): """Test excess whitespace in CSS""" html = '<style>h1, h2 ,h3,\nh4{ color: #000} </style><h1>1</h1><h2>2</h2><h3>3</h3><h4>4</h4>' desired_output = '<h1 style="color: #000">1</h1><h2 style="color: #000">2</h2><h3 style="color: #000">3</h3><h4 style="color: #000">4</h4>' output = Pynliner().from_string(html).run() self.assertEqual(output, desired_output)
class Basic(unittest.TestCase): def setUp(self): self.html = "<style>h1 { color:#ffcc00; }</style><h1>Hello World!</h1>" self.p = Pynliner().from_string(self.html) def test_01_fromString(self): """Test 'fromString' constructor""" self.assertEqual(self.p.source_string, self.html) def test_02_get_soup(self): """Test '_get_soup' method""" self.p._get_soup() self.assertEqual(unicode(self.p.soup), self.html) def test_03_get_styles(self): """Test '_get_styles' method""" self.p._get_soup() self.p._get_styles() self.assertEqual(self.p.style_string, u'h1 { color:#ffcc00; }\n') self.assertEqual(unicode(self.p.soup), u'<h1>Hello World!</h1>') def test_04_apply_styles(self): """Test '_apply_styles' method""" self.p._get_soup() self.p._get_styles() self.p._apply_styles() self.assertEqual(unicode(self.p.soup), u'<h1 style="color: #fc0">Hello World!</h1>') def test_05_run(self): """Test 'run' method""" output = self.p.run() self.assertEqual(output, u'<h1 style="color: #fc0">Hello World!</h1>') def test_06_with_cssString(self): """Test 'with_cssString' method""" cssString = 'h1 {font-size: 2em;}' self.p = Pynliner().from_string(self.html).with_cssString(cssString) self.assertEqual(self.p.style_string, cssString + '\n') output = self.p.run() self.assertEqual(output, u'<h1 style="font-size: 2em; color: #fc0">Hello World!</h1>') def test_07_fromString(self): """Test 'fromString' complete""" output = pynliner.fromString(self.html) desired = u'<h1 style="color: #fc0">Hello World!</h1>' self.assertEqual(output, desired) def test_08_fromURL(self): """Test 'fromURL' constructor""" url = 'http://media.tannern.com/pynliner/test.html' p = Pynliner() p.from_url(url) self.assertEqual(p.root_url, 'http://media.tannern.com') self.assertEqual(p.relative_url, 'http://media.tannern.com/pynliner/') p._get_soup() p._get_external_styles() self.assertEqual(p.style_string, "p {color: #999}") p._get_internal_styles() self.assertEqual(p.style_string, "p {color: #999}\nh1 {color: #ffcc00;}\n") p._get_styles() output = p.run() desired = u"""<?xml version='1.0' encoding='utf-8'?> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>test</title> </head> <body> <h1 style="color: #fc0">Hello World!</h1> <p style="color: #999">Possim tincidunt putamus iriure eu nulla. Facer qui volutpat ut aliquam sequitur. Mutationem legere feugiat autem clari notare. Nulla typi augue suscipit lectores in.</p> <p style="color: #999">Facilisis claritatem eum decima dignissim legentis. Nulla per legentis odio molestie quarta. Et velit typi claritas ipsum ullamcorper.</p> </body> </html>""" self.assertEqual(output, desired)
class Basic(unittest.TestCase): def setUp(self): self.html = "<html><head><style>h1 { color:#ffcc00; }</style></head><body><h1>Hello World!</h1></body></html>" self.p = Pynliner().from_string(self.html) def test_01_fromString(self): """Test 'fromString' constructor""" self.assertEqual(self.p.source_string, self.html) def test_02_get_soup(self): """Test '_get_soup' method""" self.p._get_soup() self.assertEqual(lxml.html.tostring(self.p.soup), self.html) def test_03_get_styles(self): """Test '_get_styles' method""" self.p._get_soup() self.p._get_styles() self.assertEqual(self.p.style_string, u'h1 { color:#ffcc00; }') self.assertEqual(lxml.html.tostring(self.p.soup), u'<html><head></head><body><h1>Hello World!</h1></body></html>') def test_04_apply_styles(self): """Test '_apply_styles' method""" self.p._get_soup() self.p._get_styles() self.p._apply_styles() self.assertEqual(lxml.html.tostring(self.p.soup), u'<html><head></head><body><h1 style="color: #fc0">Hello World!</h1></body></html>') def test_05_run(self): """Test 'run' method""" output = self.p.run() self.assertEqual(output, u'<html><head></head><body><h1 style="color: #fc0">Hello World!</h1></body></html>') def test_06_with_cssString(self): """Test 'with_cssString' method""" cssString = 'h1 {font-size: 2em;}' self.p = Pynliner().from_string(self.html).with_cssString(cssString) self.assertEqual(self.p.style_string, cssString + '\n') output = self.p.run() self.assertEqual(output, '<html><head></head><body><h1 style="font-size: 2em; color: #fc0">Hello World!</h1></body></html>') def test_07_fromString(self): """Test 'fromString' complete""" output = pynliner.fromString(self.html) desired = u'<html><head></head><body><h1 style="color: #fc0">Hello World!</h1></body></html>' self.assertEqual(output, desired) def test_08_fromURL(self): """Test 'fromURL' constructor""" url = 'https://raw.github.com/voidfiles/pynliner/master/test_data/test.html' p = Pynliner() p.from_url(url) self.assertEqual(p.root_url, 'https://raw.github.com') self.assertEqual(p.relative_url, 'https://raw.github.com/voidfiles/pynliner/master/test_data/') p._get_soup() p._get_external_styles() self.assertEqual(p.style_string, "p {color: #999}") p._get_internal_styles() self.assertEqual(p.style_string, "p {color: #999}\nh1 {color: #ffcc00;}") p._get_styles() output = p.run() desired = u"""<html><head></head><body>\n <h1 style="color: #fc0">Testing Title</h1>\n <p style="color: #999">Awesome</p>\n </body></html>""" self.assertEqual(output, desired) def test_09_overloadedStyles(self): html = '<style>h1 { color: red; } #test { color: blue; }</style><h1 id="test">Hello world!</h1>' expected = '<html><head></head><body><h1 id="test" style="color: blue">Hello world!</h1></body></html>' output = Pynliner().from_string(html).run() self.assertEqual(expected, output)
class Basic(unittest.TestCase): def setUp(self): self.html = "<style>h1 { color:#ffcc00; }</style><h1>Hello World!</h1>" self.p = Pynliner().from_string(self.html) def test_01_fromString(self): """Test 'fromString' constructor""" self.assertEqual(self.p.source_string, self.html) def test_02_get_soup(self): """Test '_get_soup' method""" self.p._get_soup() self.assertEqual(unicode(self.p.soup), self.html) def test_03_get_styles(self): """Test '_get_styles' method""" self.p._get_soup() self.p._get_styles() self.assertEqual(self.p.style_string, u'h1 { color:#ffcc00; }\n') self.assertEqual(unicode(self.p.soup), u'<h1>Hello World!</h1>') def test_04_apply_styles(self): """Test '_apply_styles' method""" self.p._get_soup() self.p._get_styles() self.p._apply_styles() self.assertEqual(unicode(self.p.soup), u'<h1 style="color: #fc0">Hello World!</h1>') def test_05_run(self): """Test 'run' method""" output = self.p.run() self.assertEqual(output, u'<h1 style="color: #fc0">Hello World!</h1>') def test_06_with_cssString(self): """Test 'with_cssString' method""" cssString = 'h1 {font-size: 2em;}' self.p = Pynliner().from_string(self.html).with_cssString(cssString) self.assertEqual(self.p.style_string, cssString + '\n') output = self.p.run() self.assertEqual( output, u'<h1 style="font-size: 2em; color: #fc0">Hello World!</h1>') def test_07_fromString(self): """Test 'fromString' complete""" output = pynliner.fromString(self.html) desired = u'<h1 style="color: #fc0">Hello World!</h1>' self.assertEqual(output, desired) def test_08_fromURL(self): """Test 'fromURL' constructor""" url = 'http://media.tannern.com/pynliner/test.html' p = Pynliner() p.from_url(url) self.assertEqual(p.root_url, 'http://media.tannern.com') self.assertEqual(p.relative_url, 'http://media.tannern.com/pynliner/') p._get_soup() p._get_external_styles() self.assertEqual(p.style_string, "p {color: #999}") p._get_internal_styles() self.assertEqual(p.style_string, "p {color: #999}\nh1 {color: #ffcc00;}\n") p._get_styles() output = p.run() desired = u"""<?xml version='1.0' encoding='utf-8'?> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>test</title> </head> <body> <h1 style="color: #fc0">Hello World!</h1> <p style="color: #999">Possim tincidunt putamus iriure eu nulla. Facer qui volutpat ut aliquam sequitur. Mutationem legere feugiat autem clari notare. Nulla typi augue suscipit lectores in.</p> <p style="color: #999">Facilisis claritatem eum decima dignissim legentis. Nulla per legentis odio molestie quarta. Et velit typi claritas ipsum ullamcorper.</p> </body> </html>""" self.assertEqual(output, desired)
class CommaSelector(unittest.TestCase): def setUp(self): self.html = """<style>.b1,.b2 { font-weight:bold; } .c {color: red}</style><span class="b1">Bold</span><span class="b2 c">Bold Red</span>""" self.p = Pynliner().from_string(self.html) def test_fromString(self): """Test 'fromString' constructor""" self.assertEqual(self.p.source_string, self.html) def test_get_soup(self): """Test '_get_soup' method""" self.p._get_soup() self.assertEqual(unicode(self.p.soup), self.html) def test_get_styles(self): """Test '_get_styles' method""" self.p._get_soup() self.p._get_styles() self.assertEqual(self.p.style_string, u'.b1,.b2 { font-weight:bold; } .c {color: red}\n') self.assertEqual( unicode(self.p.soup), u'<span class="b1">Bold</span><span class="b2 c">Bold Red</span>') def test_apply_styles(self): """Test '_apply_styles' method""" self.p._get_soup() self.p._get_styles() self.p._apply_styles() self.assertEqual( unicode(self.p.soup), u'<span class="b1" style="font-weight: bold">Bold</span><span class="b2 c" style="font-weight: bold; color: red">Bold Red</span>' ) def test_run(self): """Test 'run' method""" output = self.p.run() self.assertEqual( output, u'<span class="b1" style="font-weight: bold">Bold</span><span class="b2 c" style="font-weight: bold; color: red">Bold Red</span>' ) def test_with_cssString(self): """Test 'with_cssString' method""" cssString = '.b1,.b2 {font-size: 2em;}' self.p = Pynliner().from_string(self.html).with_cssString(cssString) output = self.p.run() self.assertEqual( output, u'<span class="b1" style="font-weight: bold; font-size: 2em">Bold</span><span class="b2 c" style="font-weight: bold; color: red; font-size: 2em">Bold Red</span>' ) def test_fromString_complete(self): """Test 'fromString' complete""" output = pynliner.fromString(self.html) desired = u'<span class="b1" style="font-weight: bold">Bold</span><span class="b2 c" style="font-weight: bold; color: red">Bold Red</span>' self.assertEqual(output, desired) def test_comma_whitespace(self): """Test excess whitespace in CSS""" html = '<style>h1, h2 ,h3,\nh4{ color: #000} </style><h1>1</h1><h2>2</h2><h3>3</h3><h4>4</h4>' desired_output = '<h1 style="color: #000">1</h1><h2 style="color: #000">2</h2><h3 style="color: #000">3</h3><h4 style="color: #000">4</h4>' output = Pynliner().from_string(html).run() self.assertEqual(output, desired_output) def test_comma_separated_nested_styles(self): html = """<style>.orange-wrapper p, .super-orange-wrapper p { color:orange; }</style><div class="orange-wrapper"><p>Orange</p></div><div><p>Black</p></div>""" desired_output = """<div class="orange-wrapper"><p style="color: orange">Orange</p></div><div><p>Black</p></div>""" output = Pynliner().from_string(html).run() self.assertEqual(output, desired_output)
class Basic(unittest.TestCase): def setUp(self): self.html = "<style>h1 { color:#ffcc00; }</style><h1>Hello World!</h1>" self.p = Pynliner().from_string(self.html) def test_fromString(self): """Test 'fromString' constructor""" self.assertEqual(self.p.source_string, self.html) def test_get_soup(self): """Test '_get_soup' method""" self.p._get_soup() self.assertEqual(unicode(self.p.soup), self.html) def test_get_styles(self): """Test '_get_styles' method""" self.p._get_soup() self.p._get_styles() self.assertEqual(self.p.style_string, u'h1 { color:#ffcc00; }\n') self.assertEqual(unicode(self.p.soup), u'<h1>Hello World!</h1>') def test_apply_styles(self): """Test '_apply_styles' method""" self.p._get_soup() self.p._get_styles() self.p._apply_styles() attr_dict = dict(self.p.soup.contents[0].attrs) self.assertTrue('style' in attr_dict) self.assertEqual(attr_dict['style'], u'color: #fc0') def test_run(self): """Test 'run' method""" output = self.p.run() self.assertEqual(output, u'<h1 style="color: #fc0">Hello World!</h1>') def test_with_cssString(self): """Test 'with_cssString' method""" cssString = 'h1 {color: #f00;}' self.p.with_cssString(cssString) output = self.p.run() self.assertEqual(output, u'<h1 style="color: #f00">Hello World!</h1>') def test_fromString_complete(self): """Test 'fromString' complete""" output = pynliner.fromString(self.html) desired = u'<h1 style="color: #fc0">Hello World!</h1>' self.assertEqual(output, desired) def test_fromURL(self): """Test 'fromURL' constructor""" url = 'http://media.tannern.com/pynliner/test.html' p = Pynliner() with mock.patch.object(Pynliner, '_get_url') as mocked: mocked.return_value = u"""<?xml version='1.0' encoding='utf-8'?> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>test</title> <link rel="stylesheet" type="text/css" href="test.css"/> <style type="text/css">h1 {color: #fc0;}</style> </head> <body> <h1>Hello World!</h1> <p>:)</p> </body> </html>""" p.from_url(url) self.assertEqual(p.root_url, 'http://media.tannern.com') self.assertEqual(p.relative_url, 'http://media.tannern.com/pynliner/') p._get_soup() with mock.patch.object(Pynliner, '_get_url') as mocked: mocked.return_value = 'p {color: #999}' p._get_external_styles() self.assertEqual(p.style_string, "p {color: #999}") p._get_internal_styles() self.assertEqual(p.style_string, "p {color: #999}\nh1 {color: #fc0;}\n") p._get_styles() output = p.run() desired = u"""<?xml version='1.0' encoding='utf-8'?> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>test</title> </head> <body> <h1 style="color: #fc0">Hello World!</h1> <p style="color: #999">:)</p> </body> </html>""" self.assertEqual(output, desired) def test_overloaded_styles(self): html = '<style>h1 { color: red; } #test { color: blue; }</style>' \ '<h1 id="test">Hello world!</h1>' expected = '<h1 id="test" style="color: blue">Hello world!</h1>' output = Pynliner().from_string(html).run() self.assertEqual(expected, output) def test_unicode_content(self): html = u"""<h1>Hello World!</h1><p>\u2022 point</p>""" css = """h1 { color: red; }""" expected = u"""<h1 style="color: red">Hello World!</h1><p>\u2022 point</p>""" output = Pynliner().from_string(html).with_cssString(css).run() self.assertEqual(output, expected)
class Basic(unittest.TestCase): def setUp(self): self.html = "<style>h1 { color:#ffcc00; }</style><h1>Hello World!</h1>" self.p = Pynliner().from_string(self.html) def test_fromString(self): """Test 'fromString' constructor""" self.assertEqual(self.p.source_string, self.html) def test_get_soup(self): """Test '_get_soup' method""" self.p._get_soup() self.assertEqual(unicode(self.p.soup), self.html) def test_get_styles(self): """Test '_get_styles' method""" self.p._get_soup() self.p._get_styles() self.assertEqual(self.p.style_string, u'h1 { color:#ffcc00; }\n') self.assertEqual(unicode(self.p.soup), u'<h1>Hello World!</h1>') def test_apply_styles(self): """Test '_apply_styles' method""" self.p._get_soup() self.p._get_styles() self.p._apply_styles() attr_dict = dict(self.p.soup.contents[0].attrs) self.assertTrue('style' in attr_dict) self.assertEqual(attr_dict['style'], u'color: #fc0') def test_run(self): """Test 'run' method""" output = self.p.run() self.assertEqual(output, u'<h1 style="color: #fc0">Hello World!</h1>') def test_with_cssString(self): """Test 'with_cssString' method""" cssString = 'h1 {color: #f00;}' self.p.with_cssString(cssString) output = self.p.run() self.assertEqual(output, u'<h1 style="color: #f00">Hello World!</h1>') def test_fromString_complete(self): """Test 'fromString' complete""" output = pynliner.fromString(self.html) desired = u'<h1 style="color: #fc0">Hello World!</h1>' self.assertEqual(output, desired) def test_fromURL(self): """Test 'fromURL' constructor""" url = 'http://media.tannern.com/pynliner/test.html' p = Pynliner() with mock.patch.object(Pynliner, '_get_url') as mocked: mocked.return_value = u"""<?xml version='1.0' encoding='utf-8'?> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>test</title> <link rel="stylesheet" type="text/css" href="test.css"/> <style type="text/css">h1 {color: #fc0;}</style> </head> <body> <h1>Hello World!</h1> <p>:)</p> </body> </html>""" p.from_url(url) self.assertEqual(p.root_url, 'http://media.tannern.com') self.assertEqual(p.relative_url, 'http://media.tannern.com/pynliner/') p._get_soup() with mock.patch.object(Pynliner, '_get_url') as mocked: mocked.return_value = 'p {color: #999}' p._get_external_styles() self.assertEqual(p.style_string, "p {color: #999}") p._get_internal_styles() self.assertEqual(p.style_string, "p {color: #999}\nh1 {color: #fc0;}\n") p._get_styles() output = p.run() desired = u"""<?xml version='1.0' encoding='utf-8'?> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>test</title> </head> <body> <h1 style="color: #fc0">Hello World!</h1> <p style="color: #999">:)</p> </body> </html>""" self.assertEqual(output, desired) def test_overloaded_styles(self): html = '<style>h1 { color: red; } #test { color: blue; }</style>' \ '<h1 id="test">Hello world!</h1>' expected = '<h1 id="test" style="color: blue">Hello world!</h1>' output = Pynliner().from_string(html).run() self.assertEqual(expected, output) def test_unicode_content(self): html = u"""<h1>Hello World!</h1><p>\u2022 point</p>""" css = """h1 { color: red; }""" expected = u"""<h1 style="color: red">Hello World!</h1><p>\u2022 point</p>""" output = Pynliner().from_string(html).with_cssString(css).run() self.assertEqual(output, expected) def test_conditional_comments(self): html = "<!-- <normal> --><!--[if condition]><p>special</p><![endif]-->" expected = "<!-- <normal> --><!--[if condition]><p>special</p><![endif]-->" output = Pynliner(allow_conditional_comments=True).from_string(html).run() self.assertEqual(output, expected)