Example #1
0
    def test_result_object_failed_with_element_def_not_matching_any_element(self):
        html_src = """
                    <html>
                        <p>Content found</p>
                    </html>
                   """

        heading_not_found_def = text('Heading not found')
        text_not_found_def = text('Text not found')
        spec = html(
            heading_not_found_def,
            text('Content found'),
            text_not_found_def
        )

        result = html_match(spec, html_src)

        self.assertEquals(spec, result.spec)
        self.assertEquals(html_src, result.html_src)
        self.assertIsNotNone(result.root_element)
        self.assertFalse(result.passed)
        self.assertTrue(result.failed)
        self.assertEquals(2, len(result.element_defs_not_found))
        self.assertIn(heading_not_found_def, result.element_defs_not_found)
        self.assertIn(text_not_found_def, result.element_defs_not_found)
        self.assertEquals(heading_not_found_def, result.failed_on_def)
Example #2
0
    def test_accordion(self):
        html_src = """
                    <html>
                        <body>
                            <div class="accordion">
                                <div class="accordion-group">
                                    <div class="accordion-heading">
                                        <p>Rick</p>
                                        <a href="www.rick.com">Rick Website</a>
                                        <p>Remove Me</p>
                                    </div>
                                    <div class="accordion-body">
                                        <h1>Foo</h1>
                                    </div>
                                </div>
                                <div class="accordion-group">
                                    <div class="accordion-heading">
                                        <p>Tom</p>
                                        <a href="www.tom.com">Tom Website</a>
                                    </div>
                                    <div class="accordion-body">
                                        <h1>Bar</h1>
                                    </div>
                                </div>
                            </div>
                        </body>
                    </html>
                   """

        spec = html(
            accordion(
                acc_group(
                    acc_heading(
                        text('Rick'),
                        a(href='www.rick.com', link_text='Rick Website')
                    ),
                    acc_body(
                        heading('Foo')
                    )
                ),
                acc_group(
                    acc_heading(
                        text('Tom'),
                        a(href='www.tom.com', link_text='Tom Website')
                    ),
                    acc_body(
                        heading('Bar')
                    )
                )
            )
        )

        self.assert_match(html_src, spec)
Example #3
0
    def test_more_complex_nested_structure(self):
        html_src = """
                    <div class="accordion-heading">
                        <div class="accordion-toggle">
                            <div class="ordericons"/>
                            <a>
                                <div>Rick</div>
                                <div>Labminds</div>
                            </a>
                        </div>
                    </div>
                   """

        spec = acc_heading(text('Rick'), text('Labminds'))

        self.assert_match(html_src, spec)
Example #4
0
    def test_accordion(self):
        html_src = """
                    <html>
                        <body>
                            <div class="accordion">
                                <div class="accordion-group">
                                    <div class="accordion-heading">
                                        <p>Rick</p>
                                        <a href="www.rick.com">Rick Website</a>
                                        <p>Remove Me</p>
                                    </div>
                                    <div class="accordion-body">
                                        <h1>Foo</h1>
                                    </div>
                                </div>
                                <div class="accordion-group">
                                    <div class="accordion-heading">
                                        <p>Tom</p>
                                        <a href="www.tom.com">Tom Website</a>
                                    </div>
                                    <div class="accordion-body">
                                        <h1>Bar</h1>
                                    </div>
                                </div>
                            </div>
                        </body>
                    </html>
                   """

        spec = html(
            accordion(
                acc_group(
                    acc_heading(
                        text('Rick'),
                        a(href='www.rick.com', link_text='Rick Website')),
                    acc_body(heading('Foo'))),
                acc_group(
                    acc_heading(text('Tom'),
                                a(href='www.tom.com',
                                  link_text='Tom Website')),
                    acc_body(heading('Bar')))))

        self.assert_match(html_src, spec)
Example #5
0
    def test_more_complex_nested_structure(self):
        html_src = """
                    <div class="accordion-heading">
                        <div class="accordion-toggle">
                            <div class="ordericons"/>
                            <a>
                                <div>Rick</div>
                                <div>Labminds</div>
                            </a>
                        </div>
                    </div>
                   """

        spec = acc_heading(
            text('Rick'),
            text('Labminds')
        )

        self.assert_match(html_src, spec)
Example #6
0
    def test_result_object_failed_with_matcher_not_matched_because_html_out_of_order(self):
        html_src = """
                    <html>
                        <p>Content found</p>
                        <h1>Heading not found</h1>
                    </html>
                   """

        heading_not_found_def = text('Heading not found')
        spec = html(
            heading_not_found_def,
            text('Content found'),
        )

        result = html_match(spec, html_src)

        self.assertEquals(spec, result.spec)
        self.assertEquals(html_src, result.html_src)
        self.assertIsNotNone(result.root_element)
        self.assertFalse(result.passed)
        self.assertTrue(result.failed)
        self.assertEquals(0, len(result.element_defs_not_found))
        self.assertEquals(heading_not_found_def, result.failed_on_def)
Example #7
0
    def test_result_object_failed_with_element_def_not_matching_any_element(
            self):
        html_src = """
                    <html>
                        <p>Content found</p>
                    </html>
                   """

        heading_not_found_def = text('Heading not found')
        text_not_found_def = text('Text not found')
        spec = html(heading_not_found_def, text('Content found'),
                    text_not_found_def)

        result = html_match(spec, html_src)

        self.assertEquals(spec, result.spec)
        self.assertEquals(html_src, result.html_src)
        self.assertIsNotNone(result.root_element)
        self.assertFalse(result.passed)
        self.assertTrue(result.failed)
        self.assertEquals(2, len(result.element_defs_not_found))
        self.assertIn(heading_not_found_def, result.element_defs_not_found)
        self.assertIn(text_not_found_def, result.element_defs_not_found)
        self.assertEquals(heading_not_found_def, result.failed_on_def)
Example #8
0
    def test_nested_recursive_middle_element(self):
        html_src = """
                    <html>
                        <h1>Hello</h1>
                        <div>
                            <p>Content</p>
                        </div>
                        <a href="www.google.com">Google</a>
                    </html>
                   """

        spec = html(heading('Hello'), text('Content'),
                    a(href='www.google.com', link_text='Google'))

        self.assert_match(html_src, spec)
Example #9
0
    def test_result_object_failed_with_matcher_not_matched_because_html_out_of_order(
            self):
        html_src = """
                    <html>
                        <p>Content found</p>
                        <h1>Heading not found</h1>
                    </html>
                   """

        heading_not_found_def = text('Heading not found')
        spec = html(
            heading_not_found_def,
            text('Content found'),
        )

        result = html_match(spec, html_src)

        self.assertEquals(spec, result.spec)
        self.assertEquals(html_src, result.html_src)
        self.assertIsNotNone(result.root_element)
        self.assertFalse(result.passed)
        self.assertTrue(result.failed)
        self.assertEquals(0, len(result.element_defs_not_found))
        self.assertEquals(heading_not_found_def, result.failed_on_def)
Example #10
0
    def test_element_def_construction(self):
        child_element_def = text('child')
        parent_element_def = elem('parent', child_element_def, id="abc", title="the parent")

        self.assertEquals(r'^parent$', parent_element_def.name_regex)
        self.assertIsNotNone(parent_element_def.name_matcher)
        self.assertIsNone(parent_element_def.content)
        self.assertIsNone(parent_element_def.parent)
        self.assertEquals(1, len(parent_element_def.children))
        self.assertIn(child_element_def, parent_element_def.children)
        self.assertEquals(2, len(parent_element_def.attrs))
        self.assertEquals('abc', parent_element_def.attrs['id'])
        self.assertEquals('the parent', parent_element_def.attrs['title'])

        self.assertEquals(parent_element_def, child_element_def.parent)
        self.assertEquals('child', child_element_def.content)
Example #11
0
    def test_result_object_passing(self):
        html_src = """
                    <html>
                        <p>Content found</p>
                    </html>
                   """

        spec = html(text('Content found'))

        result = html_match(spec, html_src)

        self.assertEquals(spec, result.spec)
        self.assertEquals(html_src, result.html_src)
        self.assertIsNotNone(result.root_element)
        self.assertTrue(result.passed)
        self.assertFalse(result.failed)
        self.assertEquals(0, len(result.element_defs_not_found))
        self.assertIsNone(result.failed_on_def)
Example #12
0
    def test_result_object_passing(self):
        html_src = """
                    <html>
                        <p>Content found</p>
                    </html>
                   """

        spec = html(text('Content found'))

        result = html_match(spec, html_src)

        self.assertEquals(spec, result.spec)
        self.assertEquals(html_src, result.html_src)
        self.assertIsNotNone(result.root_element)
        self.assertTrue(result.passed)
        self.assertFalse(result.failed)
        self.assertEquals(0, len(result.element_defs_not_found))
        self.assertIsNone(result.failed_on_def)
Example #13
0
    def test_nested_recursive_middle_element(self):
        html_src = """
                    <html>
                        <h1>Hello</h1>
                        <div>
                            <p>Content</p>
                        </div>
                        <a href="www.google.com">Google</a>
                    </html>
                   """

        spec = html(
            heading('Hello'),
            text('Content'),
            a(href='www.google.com', link_text='Google')
        )

        self.assert_match(html_src, spec)
Example #14
0
    def test_element_def_construction(self):
        child_element_def = text('child')
        parent_element_def = elem('parent',
                                  child_element_def,
                                  id="abc",
                                  title="the parent")

        self.assertEquals(r'^parent$', parent_element_def.name_regex)
        self.assertIsNotNone(parent_element_def.name_matcher)
        self.assertIsNone(parent_element_def.content)
        self.assertIsNone(parent_element_def.parent)
        self.assertEquals(1, len(parent_element_def.children))
        self.assertIn(child_element_def, parent_element_def.children)
        self.assertEquals(2, len(parent_element_def.attrs))
        self.assertEquals('abc', parent_element_def.attrs['id'])
        self.assertEquals('the parent', parent_element_def.attrs['title'])

        self.assertEquals(parent_element_def, child_element_def.parent)
        self.assertEquals('child', child_element_def.content)
Example #15
0
    def test_that_fails_when_we_use_the_recursive_parser(self):
        from pha import pretty_spec

        html_src = """
                    <html xmlns="http://www.w3.org/1999/xhtml">
                     <body>
                      <div id="wrap">
                       <div class="navbar-wrapper" MATCH="2">
                        <div class="navbar navbar-inverse navbar-static-top">
                         <div class="navbar-inner">
                          <div class="container">
                           <!-- Navigation menus -->
                           <div class="nav-collapse collapse">
                           </div>
                          </div>
                         </div>
                        </div>
                       </div>
                       <div class="container">
                        <!-- Support for displaying django user messages -->
                        <!-- Display page heading -->
                        <div class="row-fluid">
                         <span class="span12">
                          <h3 MATCH="3">
                           Users
                          </h3>
                         </span>
                        </div>
                        <!-- Placeholder for the main content pane -->
                        <a class="btn btn-small btn-primary pull-right" href="/accounts/users/new/">
                         <i class="icon-plus icon-white">
                         </i>
                         Create New User
                        </a>
                        <h4>
                         Active Users
                        </h4>
                        <div class="accordion" id="active_users">
                         <div class="accordion-group">
                          <div class="accordion-heading row-fluid">
                           <div class="accordion-toggle group-accordion-toggle">
                            <div class="ordericons pull-right dropdown">
                             <!-- User functions -->
                             <div class="btn-group" id="btn_group_Ricklef">
                              <a class="btn btn-small btn-primary" href="/accounts/users/Ricklef/profile/">
                               <i class="icon-user icon-white">
                               </i>
                               <span class="hidden-phone">
                                View Profile
                               </span>
                              </a>
                              <button class="btn btn-small btn-primary dropdown-toggle" data-toggle="dropdown">
                               <span class="caret">
                               </span>
                              </button>
                              <ul class="dropdown-menu">
                               <li>
                                <a class="btn btn-small btn-primary" href="/accounts/users/Ricklef/profile/">
                                 <i class="icon-user">
                                 </i>
                                 View Profile
                                </a>
                               </li>
                              </ul>
                             </div>
                            </div>
                            <a data-parent="#active_users" data-toggle="collapse" href="#active_users_Ricklef_body">
                             <div class="span4">
                              <strong>
                               Ricklef Wohlers (Ricklef)
                              </strong>
                             </div>
                             <div class="span5 hidden-phone muted">
                              Labminds (admin)
                             </div>
                            </a>
                           </div>
                          </div>
                         </div>
                        </div>
                       </div>
                      </div>
                     </body>
                    </html>
                   """

        spec = html(
            div(
                div(heading('Users')),
                a(href='/accounts/users/new/', link_text='Create New User'),
                heading('Active Users'),
                accordion(
                    acc_group(
                        acc_heading(
                            text('Ricklef Wohlers (Ricklef)'),
                            text('Labminds (admin)'),
                        )
                    )
                )
            )
        )

        self.assert_match(html_src, spec)
Example #16
0
    def test_big_example(self):
        html_src = """
                    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
                    <html xmlns="http://www.w3.org/1999/xhtml">
                     <head>
                      <title>
                       Users - LabOS
                      </title>
                     </head>
                     <body>
                      <div id="wrap">
                       <div class="navbar-wrapper">
                        <div class="navbar navbar-inverse navbar-static-top">
                         <div class="navbar-inner">
                          <div class="container">
                           <!-- Navigation menus -->
                           <div class="nav-collapse collapse">
                            <ul class="nav">
                             <!-- Admin menu -->
                             <li class="dropdown active" id="admin-dropdown">
                              <a class="dropdown-toggle" data-toggle="dropdown" href="#">
                               Admin
                               <b class="caret">
                               </b>
                              </a>
                              <ul class="dropdown-menu">
                               <li class="nav-header">
                                Manage Users
                               </li>
                               <li>
                                <a href="/accounts/users/">
                                 User List
                                </a>
                               </li>
                               <li>
                                <a href="/accounts/users/new/">
                                 Create New User
                                </a>
                               </li>
                              </ul>
                             </li>
                            </ul>
                            <!-- User menu -->
                            <ul class="nav pull-right">
                             <li class="dropdown" id="user-dropdown">
                              <a class="dropdown-toggle" data-toggle="dropdown" href="#">
                               <i class="icon-user icon-white">
                               </i>
                               <strong>
                                Ricklef
                               </strong>
                               (Labminds)
                               <b class="caret">
                               </b>
                              </a>
                              <ul class="dropdown-menu">
                               <li>
                                <a href="/accounts/users/Ricklef/profile/">
                                 View Profile
                                </a>
                               </li>
                               <li>
                                <a href="/auth/change-password/?next=/accounts/users/">
                                 Change Password
                                </a>
                               </li>
                               <li class="divider">
                               </li>
                               <li>
                                <a href="/accounts/users/feedback">
                                 Feedback
                                </a>
                               </li>
                               <li class="divider">
                               </li>
                               <li>
                                <a href="/auth/logout/">
                                 Logout
                                </a>
                               </li>
                              </ul>
                             </li>
                            </ul>
                           </div>
                          </div>
                         </div>
                        </div>
                       </div>
                       <div class="container">
                        <!-- Support for displaying django user messages -->
                        <!-- Display page heading -->
                        <div class="row-fluid">
                         <span class="span12">
                          <h3>
                           Users
                          </h3>
                         </span>
                        </div>
                        <!-- Placeholder for the main content pane -->
                        <a class="btn btn-small btn-primary pull-right" href="/accounts/users/new/">
                         <i class="icon-plus icon-white">
                         </i>
                         Create New User
                        </a>
                        <h4>
                         Active Users
                        </h4>
                        <div class="accordion" id="active_users">
                         <div class="accordion-group">
                          <div class="accordion-heading row-fluid">
                           <div class="accordion-toggle group-accordion-toggle">
                            <div class="ordericons pull-right dropdown">
                             <!-- User functions -->
                             <div class="btn-group" id="btn_group_Ricklef">
                              <a class="btn btn-small btn-primary" href="/accounts/users/Ricklef/profile/">
                               <i class="icon-user icon-white">
                               </i>
                               <span class="hidden-phone">
                                View Profile
                               </span>
                              </a>
                              <button class="btn btn-small btn-primary dropdown-toggle" data-toggle="dropdown">
                               <span class="caret">
                               </span>
                              </button>
                              <ul class="dropdown-menu">
                               <li>
                                <a class="btn btn-small btn-primary" href="/accounts/users/Ricklef/profile/">
                                 <i class="icon-user">
                                 </i>
                                 View Profile
                                </a>
                               </li>
                              </ul>
                             </div>
                            </div>
                            <a data-parent="#active_users" data-toggle="collapse" href="#active_users_Ricklef_body">
                             <div class="span4">
                              <strong>
                               Ricklef Wohlers (Ricklef)
                              </strong>
                             </div>
                             <div class="span5 hidden-phone muted">
                              Labminds (admin)
                             </div>
                            </a>
                           </div>
                          </div>
                          <div class="accordion-body collapse" id="active_users_Ricklef_body">
                           <div class="accordion-inner">
                            <div class="row-fluid">
                             <div class="span8 well">
                              <table class="table table-condensed">
                               <thead>
                                <tr>
                                 <th colspan="2">
                                  User Details
                                 </th>
                                </tr>
                               </thead>
                               <tr>
                                <td>
                                 Username
                                </td>
                                <td>
                                 Ricklef
                                </td>
                               </tr>
                               <tr>
                                <td>
                                 Org Group
                                </td>
                                <td>
                                 Labminds
                                </td>
                               </tr>
                               <tr>
                                <td>
                                 Permission Group
                                </td>
                                <td>
                                 admin
                                </td>
                               </tr>
                               <tr>
                                <td>
                                 Email Address
                                </td>
                                <td>
                                 [email protected]
                                </td>
                               </tr>
                               <tr>
                                <td>
                                 Date Setup
                                </td>
                                <td>
                                 May 13, 2014, 7:35 a.m.
                                </td>
                               </tr>
                               <tr>
                                <td>
                                 Last Login
                                </td>
                                <td>
                                 May 13, 2014, 7:35 a.m.
                                </td>
                               </tr>
                              </table>
                             </div>
                             <div class="span4 well">
                              <img src="/static/img/user_icons/male_long.png" width="280"/>
                             </div>
                            </div>
                           </div>
                          </div>
                         </div>
                         <div class="accordion-group">
                          <div class="accordion-heading row-fluid">
                           <div class="accordion-toggle group-accordion-toggle">
                            <div class="ordericons pull-right dropdown">
                             <!-- User functions -->
                             <div class="btn-group" id="btn_group_Ville">
                              <a class="btn btn-small btn-primary" href="/accounts/users/Ville/profile/">
                               <i class="icon-user icon-white">
                               </i>
                               <span class="hidden-phone">
                                View Profile
                               </span>
                              </a>
                              <button class="btn btn-small btn-primary dropdown-toggle" data-toggle="dropdown">
                               <span class="caret">
                               </span>
                              </button>
                              <ul class="dropdown-menu">
                               <!-- Activate/deactivate user -->
                               <li>
                                <a href="/accounts/users/Ville/deactivate/">
                                 <i class="icon-remove">
                                 </i>
                                 Deactivate
                                </a>
                               </li>
                               <!-- Change users group -->
                               <li>
                                <a href="/accounts/users/Ville/change-group/admin">
                                 <i class="icon-hand-up">
                                 </i>
                                 Grant Admin Privileges
                                </a>
                               </li>
                              </ul>
                             </div>
                            </div>
                            <a data-parent="#active_users" data-toggle="collapse" href="#active_users_Ville_body">
                             <div class="span4">
                              <strong>
                               Ville Lehtonen (Ville)
                              </strong>
                             </div>
                             <div class="span5 hidden-phone muted">
                              Labminds (users)
                             </div>
                            </a>
                           </div>
                          </div>
                          <div class="accordion-body collapse" id="active_users_Ville_body">
                           <div class="accordion-inner">
                            <div class="row-fluid">
                             <div class="span8 well">
                              <table class="table table-condensed">
                               <thead>
                                <tr>
                                 <th colspan="2">
                                  User Details
                                 </th>
                                </tr>
                               </thead>
                               <tr>
                                <td>
                                 Username
                                </td>
                                <td>
                                 Ville
                                </td>
                               </tr>
                               <tr>
                                <td>
                                 Org Group
                                </td>
                                <td>
                                 Labminds
                                </td>
                               </tr>
                               <tr>
                                <td>
                                 Permission Group
                                </td>
                                <td>
                                 users
                                </td>
                               </tr>
                               <tr>
                                <td>
                                 Email Address
                                </td>
                                <td>
                                 [email protected]
                                </td>
                               </tr>
                               <tr>
                                <td>
                                 Date Setup
                                </td>
                                <td>
                                 May 13, 2014, 7:35 a.m.
                                </td>
                               </tr>
                               <tr>
                                <td>
                                 Last Login
                                </td>
                                <td>
                                 May 13, 2014, 7:35 a.m.
                                </td>
                               </tr>
                              </table>
                             </div>
                             <div class="span4 well">
                              <img src="/static/img/user_icons/male_long.png" width="280"/>
                             </div>
                            </div>
                           </div>
                          </div>
                         </div>
                        </div>
                       </div>
                      </div>
                     </body>
                    </html>
                   """

        spec = html(
            div(
                div(
                    heading('Users')
                ),
                a(href='/accounts/users/new/', link_text='Create New User'),
                heading('Active Users'),
                accordion(
                    acc_group(
                        acc_heading(
                            a(href='/accounts/users/Ricklef/profile/'),
                            text('Ricklef Wohlers (Ricklef)'),
                            text('Labminds (admin)'),
                        )
                    )
                )
            )
        )

        self.assert_match(html_src, spec)
Example #17
0
 def test_text_element(self):
     self.assert_match('<html><p>This is some text</p></html>',
                       text('This is some text'))
     self.assert_not_match('<html><p>This is some other text</p></html>',
                           text('This is some text'))
Example #18
0
    def test_big_example(self):
        html_src = """
                    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
                    <html xmlns="http://www.w3.org/1999/xhtml">
                     <head>
                      <title>
                       Users - LabOS
                      </title>
                     </head>
                     <body>
                      <div id="wrap">
                       <div class="navbar-wrapper">
                        <div class="navbar navbar-inverse navbar-static-top">
                         <div class="navbar-inner">
                          <div class="container">
                           <!-- Navigation menus -->
                           <div class="nav-collapse collapse">
                            <ul class="nav">
                             <!-- Admin menu -->
                             <li class="dropdown active" id="admin-dropdown">
                              <a class="dropdown-toggle" data-toggle="dropdown" href="#">
                               Admin
                               <b class="caret">
                               </b>
                              </a>
                              <ul class="dropdown-menu">
                               <li class="nav-header">
                                Manage Users
                               </li>
                               <li>
                                <a href="/accounts/users/">
                                 User List
                                </a>
                               </li>
                               <li>
                                <a href="/accounts/users/new/">
                                 Create New User
                                </a>
                               </li>
                              </ul>
                             </li>
                            </ul>
                            <!-- User menu -->
                            <ul class="nav pull-right">
                             <li class="dropdown" id="user-dropdown">
                              <a class="dropdown-toggle" data-toggle="dropdown" href="#">
                               <i class="icon-user icon-white">
                               </i>
                               <strong>
                                Ricklef
                               </strong>
                               (Labminds)
                               <b class="caret">
                               </b>
                              </a>
                              <ul class="dropdown-menu">
                               <li>
                                <a href="/accounts/users/Ricklef/profile/">
                                 View Profile
                                </a>
                               </li>
                               <li>
                                <a href="/auth/change-password/?next=/accounts/users/">
                                 Change Password
                                </a>
                               </li>
                               <li class="divider">
                               </li>
                               <li>
                                <a href="/accounts/users/feedback">
                                 Feedback
                                </a>
                               </li>
                               <li class="divider">
                               </li>
                               <li>
                                <a href="/auth/logout/">
                                 Logout
                                </a>
                               </li>
                              </ul>
                             </li>
                            </ul>
                           </div>
                          </div>
                         </div>
                        </div>
                       </div>
                       <div class="container">
                        <!-- Support for displaying django user messages -->
                        <!-- Display page heading -->
                        <div class="row-fluid">
                         <span class="span12">
                          <h3>
                           Users
                          </h3>
                         </span>
                        </div>
                        <!-- Placeholder for the main content pane -->
                        <a class="btn btn-small btn-primary pull-right" href="/accounts/users/new/">
                         <i class="icon-plus icon-white">
                         </i>
                         Create New User
                        </a>
                        <h4>
                         Active Users
                        </h4>
                        <div class="accordion" id="active_users">
                         <div class="accordion-group">
                          <div class="accordion-heading row-fluid">
                           <div class="accordion-toggle group-accordion-toggle">
                            <div class="ordericons pull-right dropdown">
                             <!-- User functions -->
                             <div class="btn-group" id="btn_group_Ricklef">
                              <a class="btn btn-small btn-primary" href="/accounts/users/Ricklef/profile/">
                               <i class="icon-user icon-white">
                               </i>
                               <span class="hidden-phone">
                                View Profile
                               </span>
                              </a>
                              <button class="btn btn-small btn-primary dropdown-toggle" data-toggle="dropdown">
                               <span class="caret">
                               </span>
                              </button>
                              <ul class="dropdown-menu">
                               <li>
                                <a class="btn btn-small btn-primary" href="/accounts/users/Ricklef/profile/">
                                 <i class="icon-user">
                                 </i>
                                 View Profile
                                </a>
                               </li>
                              </ul>
                             </div>
                            </div>
                            <a data-parent="#active_users" data-toggle="collapse" href="#active_users_Ricklef_body">
                             <div class="span4">
                              <strong>
                               Ricklef Wohlers (Ricklef)
                              </strong>
                             </div>
                             <div class="span5 hidden-phone muted">
                              Labminds (admin)
                             </div>
                            </a>
                           </div>
                          </div>
                          <div class="accordion-body collapse" id="active_users_Ricklef_body">
                           <div class="accordion-inner">
                            <div class="row-fluid">
                             <div class="span8 well">
                              <table class="table table-condensed">
                               <thead>
                                <tr>
                                 <th colspan="2">
                                  User Details
                                 </th>
                                </tr>
                               </thead>
                               <tr>
                                <td>
                                 Username
                                </td>
                                <td>
                                 Ricklef
                                </td>
                               </tr>
                               <tr>
                                <td>
                                 Org Group
                                </td>
                                <td>
                                 Labminds
                                </td>
                               </tr>
                               <tr>
                                <td>
                                 Permission Group
                                </td>
                                <td>
                                 admin
                                </td>
                               </tr>
                               <tr>
                                <td>
                                 Email Address
                                </td>
                                <td>
                                 [email protected]
                                </td>
                               </tr>
                               <tr>
                                <td>
                                 Date Setup
                                </td>
                                <td>
                                 May 13, 2014, 7:35 a.m.
                                </td>
                               </tr>
                               <tr>
                                <td>
                                 Last Login
                                </td>
                                <td>
                                 May 13, 2014, 7:35 a.m.
                                </td>
                               </tr>
                              </table>
                             </div>
                             <div class="span4 well">
                              <img src="/static/img/user_icons/male_long.png" width="280"/>
                             </div>
                            </div>
                           </div>
                          </div>
                         </div>
                         <div class="accordion-group">
                          <div class="accordion-heading row-fluid">
                           <div class="accordion-toggle group-accordion-toggle">
                            <div class="ordericons pull-right dropdown">
                             <!-- User functions -->
                             <div class="btn-group" id="btn_group_Ville">
                              <a class="btn btn-small btn-primary" href="/accounts/users/Ville/profile/">
                               <i class="icon-user icon-white">
                               </i>
                               <span class="hidden-phone">
                                View Profile
                               </span>
                              </a>
                              <button class="btn btn-small btn-primary dropdown-toggle" data-toggle="dropdown">
                               <span class="caret">
                               </span>
                              </button>
                              <ul class="dropdown-menu">
                               <!-- Activate/deactivate user -->
                               <li>
                                <a href="/accounts/users/Ville/deactivate/">
                                 <i class="icon-remove">
                                 </i>
                                 Deactivate
                                </a>
                               </li>
                               <!-- Change users group -->
                               <li>
                                <a href="/accounts/users/Ville/change-group/admin">
                                 <i class="icon-hand-up">
                                 </i>
                                 Grant Admin Privileges
                                </a>
                               </li>
                              </ul>
                             </div>
                            </div>
                            <a data-parent="#active_users" data-toggle="collapse" href="#active_users_Ville_body">
                             <div class="span4">
                              <strong>
                               Ville Lehtonen (Ville)
                              </strong>
                             </div>
                             <div class="span5 hidden-phone muted">
                              Labminds (users)
                             </div>
                            </a>
                           </div>
                          </div>
                          <div class="accordion-body collapse" id="active_users_Ville_body">
                           <div class="accordion-inner">
                            <div class="row-fluid">
                             <div class="span8 well">
                              <table class="table table-condensed">
                               <thead>
                                <tr>
                                 <th colspan="2">
                                  User Details
                                 </th>
                                </tr>
                               </thead>
                               <tr>
                                <td>
                                 Username
                                </td>
                                <td>
                                 Ville
                                </td>
                               </tr>
                               <tr>
                                <td>
                                 Org Group
                                </td>
                                <td>
                                 Labminds
                                </td>
                               </tr>
                               <tr>
                                <td>
                                 Permission Group
                                </td>
                                <td>
                                 users
                                </td>
                               </tr>
                               <tr>
                                <td>
                                 Email Address
                                </td>
                                <td>
                                 [email protected]
                                </td>
                               </tr>
                               <tr>
                                <td>
                                 Date Setup
                                </td>
                                <td>
                                 May 13, 2014, 7:35 a.m.
                                </td>
                               </tr>
                               <tr>
                                <td>
                                 Last Login
                                </td>
                                <td>
                                 May 13, 2014, 7:35 a.m.
                                </td>
                               </tr>
                              </table>
                             </div>
                             <div class="span4 well">
                              <img src="/static/img/user_icons/male_long.png" width="280"/>
                             </div>
                            </div>
                           </div>
                          </div>
                         </div>
                        </div>
                       </div>
                      </div>
                     </body>
                    </html>
                   """

        spec = html(
            div(
                div(heading('Users')),
                a(href='/accounts/users/new/', link_text='Create New User'),
                heading('Active Users'),
                accordion(
                    acc_group(
                        acc_heading(
                            a(href='/accounts/users/Ricklef/profile/'),
                            text('Ricklef Wohlers (Ricklef)'),
                            text('Labminds (admin)'),
                        )))))

        self.assert_match(html_src, spec)
Example #19
0
 def test_text_element(self):
     self.assert_match('<html><p>This is some text</p></html>', text('This is some text'))
     self.assert_not_match('<html><p>This is some other text</p></html>', text('This is some text'))
Example #20
0
    def test_that_fails_when_we_use_the_recursive_parser(self):
        from pha import pretty_spec

        html_src = """
                    <html xmlns="http://www.w3.org/1999/xhtml">
                     <body>
                      <div id="wrap">
                       <div class="navbar-wrapper" MATCH="2">
                        <div class="navbar navbar-inverse navbar-static-top">
                         <div class="navbar-inner">
                          <div class="container">
                           <!-- Navigation menus -->
                           <div class="nav-collapse collapse">
                           </div>
                          </div>
                         </div>
                        </div>
                       </div>
                       <div class="container">
                        <!-- Support for displaying django user messages -->
                        <!-- Display page heading -->
                        <div class="row-fluid">
                         <span class="span12">
                          <h3 MATCH="3">
                           Users
                          </h3>
                         </span>
                        </div>
                        <!-- Placeholder for the main content pane -->
                        <a class="btn btn-small btn-primary pull-right" href="/accounts/users/new/">
                         <i class="icon-plus icon-white">
                         </i>
                         Create New User
                        </a>
                        <h4>
                         Active Users
                        </h4>
                        <div class="accordion" id="active_users">
                         <div class="accordion-group">
                          <div class="accordion-heading row-fluid">
                           <div class="accordion-toggle group-accordion-toggle">
                            <div class="ordericons pull-right dropdown">
                             <!-- User functions -->
                             <div class="btn-group" id="btn_group_Ricklef">
                              <a class="btn btn-small btn-primary" href="/accounts/users/Ricklef/profile/">
                               <i class="icon-user icon-white">
                               </i>
                               <span class="hidden-phone">
                                View Profile
                               </span>
                              </a>
                              <button class="btn btn-small btn-primary dropdown-toggle" data-toggle="dropdown">
                               <span class="caret">
                               </span>
                              </button>
                              <ul class="dropdown-menu">
                               <li>
                                <a class="btn btn-small btn-primary" href="/accounts/users/Ricklef/profile/">
                                 <i class="icon-user">
                                 </i>
                                 View Profile
                                </a>
                               </li>
                              </ul>
                             </div>
                            </div>
                            <a data-parent="#active_users" data-toggle="collapse" href="#active_users_Ricklef_body">
                             <div class="span4">
                              <strong>
                               Ricklef Wohlers (Ricklef)
                              </strong>
                             </div>
                             <div class="span5 hidden-phone muted">
                              Labminds (admin)
                             </div>
                            </a>
                           </div>
                          </div>
                         </div>
                        </div>
                       </div>
                      </div>
                     </body>
                    </html>
                   """

        spec = html(
            div(
                div(heading('Users')),
                a(href='/accounts/users/new/', link_text='Create New User'),
                heading('Active Users'),
                accordion(
                    acc_group(
                        acc_heading(
                            text('Ricklef Wohlers (Ricklef)'),
                            text('Labminds (admin)'),
                        )))))

        self.assert_match(html_src, spec)