# -*- coding: utf-8 -*- # # Copyright (C) 2022 Chris Caron # All rights reserved. # # This code is licensed under the MIT License. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files(the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and / or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions : # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. from apprise import NotifyFormat from apprise.conversion import convert_between import pytest # Disable logging for a cleaner testing output import logging logging.disable(logging.CRITICAL) def test_conversion_html_to_text(): """conversion: Test HTML to plain text """ def to_html(body): """ A function to simply html conversion tests """ return convert_between(NotifyFormat.HTML, NotifyFormat.TEXT, body) assert to_html("No HTML code here.") == "No HTML code here." clist = to_html("") assert "Lots and lots" in clist assert "of lists." in clist assert "To be or not to be." in to_html( "
To be or not to be.
") cspace = to_html( "

Fancy heading

" "

And a paragraph too.
Plus line break.

") assert "Fancy heading" in cspace assert "And a paragraph too.\nPlus line break." in cspace assert to_html( "" "

Some obnoxious text here.

") == "Some obnoxious text here." assert to_html( "

line 1

" "

line 2

" "

line 3

") == "line 1\nline 2\nline 3" # Case sensitivity assert to_html( "

line 1

" "

line 2

" "

line 3

") == "line 1\nline 2\nline 3" # double new lines (testing
and
) assert to_html( "some information

and more information") == \ "some information\n\nand more information" # # Test bad tags # # first 2 entries are okay, but last will do as best as it can assert to_html( "

line 1" "

line 2" "

line 3>") == "line 1\nline 2\nline 3>" # Make sure we ignore fields that aren't important to us assert to_html( "" "

line 1

" "Another line without being enclosed") == \ "line 1\nAnother line without being enclosed" # Test cases when there are no new lines (we're dealing with just inline # entries); an empty entry as well assert to_html("test " "my link") == \ "test my link" #

missing assert to_html("
line 1 bold
" " my link" "

3rd line") == \ "line 1 bold\nmy link\n3rd line" #


on it's own assert to_html("
") == "---" assert to_html("
") == "---" # We need to handle HTML Encodings assert to_html(""" ignore this entry Let's handle special html encoding
""") == "Let's handle special html encoding\n---" # If you give nothing, you get nothing in return assert to_html("") == "" with pytest.raises(TypeError): # Invalid input assert to_html(None) with pytest.raises(TypeError): # Invalid input assert to_html(42) with pytest.raises(TypeError): # Invalid input assert to_html(object) def test_conversion_text_to(): """conversion: Test Text to all types """ response = convert_between( NotifyFormat.TEXT, NotifyFormat.HTML, "Test MessageBody") assert response == \ '<title>Test Message</title><body>Body<'\ '/body>'