示例#1
0
def test_text_input(register_builtin_html):
    with html.plugged():
        html.text_input('tralala')
        written_text = "".join(html.drain())
        assert compare_html(
            written_text,
            '<input style="" name="tralala" type="text" class="text" value=\'\' />'
        )

    with html.plugged():
        html.text_input('blabla', cssclass='blubb')
        written_text = "".join(html.drain())
        assert compare_html(
            written_text,
            '<input style="" name="tralala" type="text" class="blubb" value=\'\' />'
        )

    with html.plugged():
        html.text_input('blabla', autocomplete='yep')
        written_text = "".join(html.drain())
        assert compare_html(
            written_text,
            '<input style="" name="blabla" autocomplete="yep" type="text" class="text" value=\'\' />'
        )

    with html.plugged():
        html.text_input('blabla',
                        placeholder='placido',
                        data_world='welt',
                        data_max_labels=42)
        written_text = "".join(html.drain())
        assert compare_html(
            written_text,
            '<input style="" name="tralala" type="text" class="text" value=\'\' />'
        )
示例#2
0
def test_render_a(register_builtin_html):
    a = html.render_a("bla", href="blu", class_=["eee"], target="_blank")
    assert compare_html(a, '<a href="blu" target="_blank" class="eee">bla</a>')

    a = html.render_a("b<script>alert(1)</script>la",
                      href="b<script>alert(1)</script>lu",
                      class_=["eee"],
                      target="_blank")
    assert compare_html(
        a,
        '<a href="b&lt;script&gt;alert(1)&lt;/script&gt;lu" target="_blank" '
        'class="eee">b&lt;script&gt;alert(1)&lt;/script&gt;la</a>')
示例#3
0
def test_nesting_context():

    import table

    html = TableTester()
    __builtin__.html = html

    id = 0
    title = " TEST "

    with table.open(table_id=id, title=title, searchable=False,
                    sortable=False):
        table.row()
        table.cell("A", "1")
        table.cell("B", "")
        with table.open(id + 1, title + "2", searchable=False, sortable=False):
            table.row()
            table.cell("_", "+")
            table.cell("|", "-")

    text = html.written_text
    assert compare_html(
        text, '''<h3>  TEST </h3>
                            <table class="data oddeven">
                            <tr>  <th>   A  </th>  <th>   B  </th> </tr>
                            <tr class="data odd0">  <td>   1  </td>  <td>
                                <h3> TEST 2</h3>
                                <table class="data oddeven">
                                <tr><th>_</th><th>|</th></tr>
                                <tr class="data odd0"><td>+</td><td>-</td></tr>
                                </table>  </td>
                            </tr>
                            </table>'''), text
示例#4
0
def test_multiclass_call():
    html = HTMLGenerator()
    html.plug()

    with html.plugged():
        html.div('', class_="1", css="3", cssclass = "4", **{"class": "2"})
        assert tools.compare_html(html.drain(), "<div class=\"1 3 4 2\"></div>")
示例#5
0
def test_nesting_context(register_builtin_html):
    table_id = 0
    title = " TEST "

    with html.plugged():
        with table_element(table_id="%d" % table_id,
                           title=title,
                           searchable=False,
                           sortable=False) as table1:
            table1.row()
            table1.cell("A", "1")
            table1.cell("B", "")
            with table_element("%d" % (table_id + 1),
                               title + "2",
                               searchable=False,
                               sortable=False) as table2:
                table2.row()
                table2.cell("_", "+")
                table2.cell("|", "-")

        written_text = "".join(html.drain())
    assert compare_html(
        written_text, '''<h3 class="table">  TEST </h3>
                            <script type="text/javascript">\ncmk.utils.update_row_info(\'1 row\');\n</script>
                            <table class="data oddeven">
                            <tr>  <th>   A  </th>  <th>   B  </th> </tr>
                            <tr class="data even0">  <td>   1  </td>  <td>
                                <h3 class="table"> TEST 2</h3>
                                <script type="text/javascript">\ncmk.utils.update_row_info(\'1 row\');\n</script>
                                <table class="data oddeven">
                                <tr><th>_</th><th>|</th></tr>
                                <tr class="data even0"><td>+</td><td>-</td></tr>
                                </table>  </td>
                            </tr>
                            </table>'''), written_text
示例#6
0
def test_add_manual_link_anchor(module_wide_request_context, monkeypatch):
    monkeypatch.setattr(config.user, "language", lambda: "de")
    assert compare_html(
        html.render_help(u"[cms_graphing#rrds|RRDs]"),
        HTML(
            u"<div style=\"display:none\" class=\"help\"><a href=\"https://checkmk.de/cms_graphing.html#rrds\" target=\"_blank\">RRDs</a></div>"
        ))
示例#7
0
def test_add_manual_link(register_builtin_html):
    assert config.user.language is None
    assert compare_html(
        html.render_help(u"[cms_introduction_docker|docker]"),
        HTML(
            u"<div style=\"display:none\" class=\"help\"><a href=\"https://checkmk.com/cms_introduction_docker.html\" target=\"_blank\">docker</a></div>"
        ))
示例#8
0
def test_add_manual_link_localized(module_wide_request_context, monkeypatch):
    monkeypatch.setattr(config.user, "language", lambda: "de")
    assert compare_html(
        html.render_help(u"[cms_introduction_docker|docker]"),
        HTML(
            u"<div style=\"display:none\" class=\"help\"><a href=\"https://checkmk.de/cms_introduction_docker.html\" target=\"_blank\">docker</a></div>"
        ))
示例#9
0
def test_render_help_html(register_builtin_html):
    assert html.have_help is False
    assert compare_html(
        html.render_help(HTML("<abc>")),
        HTML("<div style=\"display:none\" class=\"help\"><abc></div>"))
    # NOTE: This seems to be a mypy 0.780 bug.
    assert html.have_help is True  # type: ignore[comparison-overlap]
示例#10
0
def test_nesting():

    from table import Table

    html = TableTester()
    __builtin__.html = html

    id = 0
    title = " TEST "

    table = Table(id, title, searchable=False, sortable=False)
    table.row()
    table.cell("A", "1")
    table.cell("B", "")

    t2 = Table(id + 1, title + "2", searchable=False, sortable=False)
    t2.row()
    t2.cell("_", "+")
    t2.cell("|", "-")
    t2.end()

    table.end()
    text = html.written_text
    assert compare_html(
        text, '''<h3>  TEST </h3>
                            <table class="data oddeven">
                            <tr>  <th>   A  </th>  <th>   B  </th> </tr>
                            <tr class="data odd0">  <td>   1  </td>  <td>
                                <h3> TEST 2</h3>
                                <table class="data oddeven">
                                <tr><th>_</th><th>|</th></tr>
                                <tr class="data odd0"><td>+</td><td>-</td></tr>
                                </table>  </td>
                            </tr>
                            </table>'''), text
示例#11
0
def test_ABCHTMLGenerator(register_builtin_html):
    with html.plugged():

        with html.plugged():
            html.open_div()
            text = html.drain()
            assert text.rstrip('\n').rstrip(' ') == "<div>"

        with html.plugged():
            #html.open_div().write("test").close_div()
            html.open_div()
            html.write("test")
            html.close_div()
            assert compare_html(html.drain(), "<div>test</div>")

        with html.plugged():
            #html.open_table().open_tr().td("1").td("2").close_tr().close_table()
            html.open_table()
            html.open_tr()
            html.td("1")
            html.td("2")
            html.close_tr()
            html.close_table()
            assert compare_html(
                html.drain(), "<table><tr><td>1</td><td>2</td></tr></table>")

        with html.plugged():
            html.div("test", **{"</div>malicious_code<div>": "trends"})
            assert compare_html(
                html.drain(),
                "<div &lt;/div&gt;malicious_code&lt;div&gt;=trends>test</div>")

        a = u"\u2665"
        with html.plugged():
            assert html.render_a("test", href="www.test.case")
            html.render_a(u"test", href="www.test.case")
            html.render_a("test", href=u"www.test.case")
            html.render_a(u"test", href=u"www.test.case")
            try:
                assert html.render_a(u"test",
                                     href=six.text_type("www.test.case"),
                                     id_=six.text_type("something"),
                                     class_=six.text_type("test_%s") % a)
            except Exception as e:
                traceback.print_exc()
                print(e)
示例#12
0
def test_render_help_visible(module_wide_request_context,
                             register_builtin_html, monkeypatch):
    monkeypatch.setattr(config.LoggedInUser, "show_help",
                        property(lambda s: True))
    assert config.user.show_help is True
    assert compare_html(
        html.render_help(u"äbc"),
        HTML(u"<div style=\"display:block\" class=\"help\">äbc</div>"))
示例#13
0
    def run(self, html=None):
        global eval_func, set_html_state
        construct_html = (html is None)
        if construct_html:
            html = Refactored_htmlTester()
        add_html_vars(html, self.add_vars)
        set_html_state(html, self.state_in)
        return_value, html_code = eval_func(html, self.function_name, self.arguments)

        try:
            assert tools.compare_html(self.return_value, return_value)
        except Exception, e:
            print tools.bcolors.WARNING + "Test failed: the return value differs!\n%s" % self
            print tools.bcolors.WARNING + "EXPECTED: \n%s" % self.return_value
            print tools.bcolors.WARNING + "RETURNED: \n%s" % return_value
            raise e
示例#14
0
def test_multiclass_call(register_builtin_html):
    with html.plugged():
        html.div('', class_="1", css="3", cssclass="4", **{"class": "2"})
        written_text = "".join(html.drain())
    assert compare_html(written_text, "<div class=\"1 3 4 2\"></div>")
示例#15
0
def test_render_help_visible(register_builtin_html):
    assert html.help_visible is False
    html.help_visible = True
    assert compare_html(html.render_help(u"äbc"),
                        HTML(u"<div style=\"display:block\" class=\"help\">äbc</div>"))
示例#16
0
def test_render_help_text(register_builtin_html):
    assert compare_html(html.render_help(u"äbc"),
                        HTML(u"<div style=\"display:none\" class=\"help\">äbc</div>"))
示例#17
0
def test_render_help_html(register_builtin_html):
    assert html.have_help is False
    assert compare_html(html.render_help(HTML("<abc>")),
                        HTML("<div style=\"display:none\" class=\"help\"><abc></div>"))
    assert html.have_help is True
示例#18
0
def test_exception_handling():
    html = HTMLGenerator()
    try:
        raise Exception("Test")
    except Exception, e:
        assert tools.compare_html(html.render_div(e), "<div>%s</div>" % e)
def test_check_mk():

    old = HTMLOrigTester()
    new = HTMLCheck_MKTester()


    old.plug()
    new.plug()


    # form elements


    # gentest(old, new, lambda x: x.begin_form("Test", method="GET"))
    # gentest(old, new, lambda x: x.begin_form("Test", method="POST"))
    # gentest(old, new, lambda x: x.begin_form("Test", action="TestAction", onsubmit="Do Something"))
    # gentest(old, new, lambda x: x.begin_form("Test", add_transid=False))



    assert compare_html(\
        old.render_icon("TestIcon", help="Icon Title", middle=True, id="TestID", cssclass="test"),\
        new.render_icon("TestIcon", help="Icon Title", middle=True, id="TestID", cssclass="test"))


    assert compare_html(\
        old.render_icon_button("www.test.de", "Test Title", "TestIcon", id="TestID",
                  onclick="Do domething", style="Test Style", target="Test Target",
                  cssclass="test", ty="button"),\
        new.render_icon_button("www.test.de", "Test Title", "TestIcon", id="TestID",
                  onclick="Do domething", style="Test Style", target="Test Target",
                  cssclass="test", ty="button"))

    gentest(old, new, lambda x: x.icon("Test Title", "TestIcon"))

    gentest(old, new, lambda x: x.empty_icon())

    gentest(old, new, lambda x: x.icon_button("www.test.de", "Test Title", "TestIcon", id="TestID",
                  onclick="Do domething", style="Test Style", target="Test Target",
                  cssclass="test", ty="button"))


    # headers

    gentest(old, new, lambda x: x.default_html_headers())

    gentest(old, new, lambda x: x.top_heading("Test"))

    gentest(old, new, lambda x: x.top_heading_left("Test"))

    gentest(old, new, lambda x: x.top_heading_right())


    javascripts = ['alert(\"Hallo Welt!\");']
    stylesheets = ['pages', 'teststylesheet']


    gentest(old, new, attributes=['header_sent'], fun = lambda x:
                        x.html_head("Test", javascripts=javascripts,
                                            stylesheets=stylesheets, force=False))

    gentest(old, new, attributes=['header_sent'], fun = lambda x:
                        x.html_head("Test", javascripts=javascripts,
                                            stylesheets=stylesheets, force=True))

    gentest(old, new, attributes=['header_sent'], fun = lambda x:
                        x.header("Test", javascripts=javascripts,
                                         stylesheets=stylesheets, force=False))

    gentest(old, new, attributes=['header_sent'], fun = lambda x:
                        x.header("Test", javascripts=javascripts,
                                         stylesheets=stylesheets, force=True))


    # body

    gentest(old, new, attributes=['header_sent'], fun = lambda x:
                        x.body_start("Test", javascripts=javascripts,
                                         stylesheets=stylesheets, force=False))

    gentest(old, new, attributes=['header_sent'], fun = lambda x:
                        x.body_start("Test", javascripts=javascripts,
                                         stylesheets=stylesheets, force=True))


    gentest(old, new, lambda x: x.html_foot())
示例#20
0
class HtmlTest(object):


    # empty constructor
    def __init__(self):
        super(HtmlTest, self).__init__()
        self.function_name  = ''    # the function to be called
        self.arguments      = {}    # the arguments for the function call
        self.state_in       = {}    # the state of the html object before the function call
        self.add_vars       = {}    # the variables of the html object before the function call
        self.expected_html  = ''    # the expected generated html
        self.state_out      = {}    # the state of the html object after the function call
        self.return_value   = None  # the return value of the function call


    def __str__(self):
        return pprint.pformat(self.to_dict())


    # this is the standard constructor. This was necessary in order to make a constructor call from_dict
    def create(self, function_name, expected_html, arguments=None, state_in=None, add_vars=None, state_out=None, return_value=None):
        self.function_name  = function_name
        self.arguments      = copy.deepcopy(arguments) if arguments is not None else {}
        self.state_in       = copy.deepcopy(state_in)  if state_in is not None else {}
        self.add_vars       = copy.deepcopy(add_vars)  if add_vars is not None else {}
        self.expected_html  = expected_html
        self.state_out      = copy.deepcopy(state_out) if state_out is not None else {}
        self.return_value   = return_value
        return self


    # convert to dictionary
    def to_dict(self):
        # required attributes
        d = { "function_name": self.function_name, \
              "input"        : { "arguments"  : self.arguments, }, \
              "output"       : { "html_code"  : self.expected_html } }
        # optional attributes
        if self.state_in:
            d["input"]["attributes"] = self.state_in
        if self.add_vars:
            d["input"]["variables"] = self.add_vars
        if self.state_out:
            d["output"]["attributes"] = self.state_out
        if self.return_value is not None:
            d["output"]["return_value"] = self.return_value
        return d


    # parse a dictionary
    def from_dict(self, test):
        # required attributes
        self.function_name = test["function_name"]
        self.arguments     = test["input"]["arguments"]
        self.expected_html = test["output"]["html_code"]
        # optional attributes
        self.state_in      = test["input"].get("attributes", {})
        self.add_vars      = test["input"].get("variables", {})
        self.state_out     = test["output"].get("attributes", {})
        self.return_value  = test["output"].get("return_value", None)
        return self


    # validate that the test is meaningfull
    # TODO: DEPRECATED
    def validate(self):
        return True


    def run(self, html=None):
        global eval_func, set_html_state
        construct_html = (html is None)
        if construct_html:
            html = Refactored_htmlTester()
        add_html_vars(html, self.add_vars)
        set_html_state(html, self.state_in)
        return_value, html_code = eval_func(html, self.function_name, self.arguments)

        try:
            assert tools.compare_html(self.return_value, return_value)
        except Exception, e:
            print tools.bcolors.WARNING + "Test failed: the return value differs!\n%s" % self
            print tools.bcolors.WARNING + "EXPECTED: \n%s" % self.return_value
            print tools.bcolors.WARNING + "RETURNED: \n%s" % return_value
            raise e

        try:
            assert tools.compare_html(self.expected_html, html_code)
        except Exception, e:
            print tools.bcolors.WARNING + "Test failed: generated html code differs!\n%s" % self
            print tools.bcolors.WARNING + "EXPECTED: \n%s" % self.expected_html
            print tools.bcolors.WARNING + "GENERATED: \n%s" % html_code
            raise e
示例#21
0
def test_exception_handling(register_builtin_html):
    try:
        raise Exception("Test")
    except Exception as e:
        assert compare_html(html.render_div(str(e)), "<div>%s</div>" % e)
示例#22
0
def test_check_mk():

    old = HTMLOrigTester()
    new = HTMLCheck_MKTester()

    old.plug()
    new.plug()

    # form elements

    # gentest(old, new, lambda x: x.begin_form("Test", method="GET"))
    # gentest(old, new, lambda x: x.begin_form("Test", method="POST"))
    # gentest(old, new, lambda x: x.begin_form("Test", action="TestAction", onsubmit="Do Something"))
    # gentest(old, new, lambda x: x.begin_form("Test", add_transid=False))



    assert compare_html(\
        old.render_icon("TestIcon", help="Icon Title", middle=True, id="TestID", cssclass="test"),\
        new.render_icon("TestIcon", help="Icon Title", middle=True, id="TestID", cssclass="test"))


    assert compare_html(\
        old.render_icon_button("www.test.de", "Test Title", "TestIcon", id="TestID",
                  onclick="Do domething", style="Test Style", target="Test Target",
                  cssclass="test", ty="button"),\
        new.render_icon_button("www.test.de", "Test Title", "TestIcon", id="TestID",
                  onclick="Do domething", style="Test Style", target="Test Target",
                  cssclass="test", ty="button"))

    gentest(old, new, lambda x: x.icon("Test Title", "TestIcon"))

    gentest(old, new, lambda x: x.empty_icon())

    gentest(
        old, new, lambda x: x.icon_button("www.test.de",
                                          "Test Title",
                                          "TestIcon",
                                          id="TestID",
                                          onclick="Do domething",
                                          style="Test Style",
                                          target="Test Target",
                                          cssclass="test",
                                          ty="button"))

    # headers

    gentest(old, new, lambda x: x.default_html_headers())

    gentest(old, new, lambda x: x.top_heading("Test"))

    gentest(old, new, lambda x: x.top_heading_left("Test"))

    gentest(old, new, lambda x: x.top_heading_right())

    javascripts = ['alert(\"Hallo Welt!\");']
    stylesheets = ['pages', 'teststylesheet']

    gentest(old,
            new,
            attributes=['header_sent'],
            fun=lambda x: x.html_head("Test",
                                      javascripts=javascripts,
                                      stylesheets=stylesheets,
                                      force=False))

    gentest(old,
            new,
            attributes=['header_sent'],
            fun=lambda x: x.html_head("Test",
                                      javascripts=javascripts,
                                      stylesheets=stylesheets,
                                      force=True))

    gentest(old,
            new,
            attributes=['header_sent'],
            fun=lambda x: x.header("Test",
                                   javascripts=javascripts,
                                   stylesheets=stylesheets,
                                   force=False))

    gentest(old,
            new,
            attributes=['header_sent'],
            fun=lambda x: x.header("Test",
                                   javascripts=javascripts,
                                   stylesheets=stylesheets,
                                   force=True))

    # body

    gentest(old,
            new,
            attributes=['header_sent'],
            fun=lambda x: x.body_start("Test",
                                       javascripts=javascripts,
                                       stylesheets=stylesheets,
                                       force=False))

    gentest(old,
            new,
            attributes=['header_sent'],
            fun=lambda x: x.body_start("Test",
                                       javascripts=javascripts,
                                       stylesheets=stylesheets,
                                       force=True))

    gentest(old, new, lambda x: x.html_foot())