(*********************************************************************************** * Copyright (c) 2016-2019 The University of Sheffield, UK * * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, this * list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * SPDX-License-Identifier: BSD-2-Clause ***********************************************************************************) (* This file is automatically generated, please do not modify! *) section\Testing Document\_getElementById\ text\This theory contains the test cases for Document\_getElementById.\ theory Document_getElementById imports "Core_DOM_BaseTest" begin definition Document_getElementById_heap :: heap\<^sub>f\<^sub>i\<^sub>n\<^sub>a\<^sub>l where "Document_getElementById_heap = create_heap [(cast (document_ptr.Ref 1), cast (create_document_obj html (Some (cast (element_ptr.Ref 1))) [])), (cast (element_ptr.Ref 1), cast (create_element_obj ''html'' [cast (element_ptr.Ref 2), cast (element_ptr.Ref 9)] fmempty None)), (cast (element_ptr.Ref 2), cast (create_element_obj ''head'' [cast (element_ptr.Ref 3), cast (element_ptr.Ref 4), cast (element_ptr.Ref 5), cast (element_ptr.Ref 6), cast (element_ptr.Ref 7), cast (element_ptr.Ref 8)] fmempty None)), (cast (element_ptr.Ref 3), cast (create_element_obj ''meta'' [] (fmap_of_list [(''charset'', ''utf-8'')]) None)), (cast (element_ptr.Ref 4), cast (create_element_obj ''title'' [cast (character_data_ptr.Ref 1)] fmempty None)), (cast (character_data_ptr.Ref 1), cast (create_character_data_obj ''Document.getElementById'')), (cast (element_ptr.Ref 5), cast (create_element_obj ''link'' [] (fmap_of_list [(''rel'', ''author''), (''title'', ''Tetsuharu OHZEKI''), (''href'', ''mailto:saneyuki.snyk@gmail.com'')]) None)), (cast (element_ptr.Ref 6), cast (create_element_obj ''link'' [] (fmap_of_list [(''rel'', ''help''), (''href'', ''https://dom.spec.whatwg.org/#dom-document-getelementbyid'')]) None)), (cast (element_ptr.Ref 7), cast (create_element_obj ''script'' [] (fmap_of_list [(''src'', ''/resources/testharness.js'')]) None)), (cast (element_ptr.Ref 8), cast (create_element_obj ''script'' [] (fmap_of_list [(''src'', ''/resources/testharnessreport.js'')]) None)), (cast (element_ptr.Ref 9), cast (create_element_obj ''body'' [cast (element_ptr.Ref 10), cast (element_ptr.Ref 11), cast (element_ptr.Ref 12), cast (element_ptr.Ref 13), cast (element_ptr.Ref 16), cast (element_ptr.Ref 19)] fmempty None)), (cast (element_ptr.Ref 10), cast (create_element_obj ''div'' [] (fmap_of_list [(''id'', ''log'')]) None)), (cast (element_ptr.Ref 11), cast (create_element_obj ''div'' [] (fmap_of_list [(''id'', '''')]) None)), (cast (element_ptr.Ref 12), cast (create_element_obj ''div'' [] (fmap_of_list [(''id'', ''test1'')]) None)), (cast (element_ptr.Ref 13), cast (create_element_obj ''div'' [cast (element_ptr.Ref 14), cast (element_ptr.Ref 15)] (fmap_of_list [(''id'', ''test5''), (''data-name'', ''1st'')]) None)), (cast (element_ptr.Ref 14), cast (create_element_obj ''p'' [cast (character_data_ptr.Ref 2)] (fmap_of_list [(''id'', ''test5''), (''data-name'', ''2nd'')]) None)), (cast (character_data_ptr.Ref 2), cast (create_character_data_obj ''P'')), (cast (element_ptr.Ref 15), cast (create_element_obj ''input'' [] (fmap_of_list [(''id'', ''test5''), (''type'', ''submit''), (''value'', ''Submit''), (''data-name'', ''3rd'')]) None)), (cast (element_ptr.Ref 16), cast (create_element_obj ''div'' [cast (element_ptr.Ref 17)] (fmap_of_list [(''id'', ''outer'')]) None)), (cast (element_ptr.Ref 17), cast (create_element_obj ''div'' [cast (element_ptr.Ref 18)] (fmap_of_list [(''id'', ''middle'')]) None)), (cast (element_ptr.Ref 18), cast (create_element_obj ''div'' [] (fmap_of_list [(''id'', ''inner'')]) None)), (cast (element_ptr.Ref 19), cast (create_element_obj ''script'' [cast (character_data_ptr.Ref 3)] fmempty None)), (cast (character_data_ptr.Ref 3), cast (create_character_data_obj ''%3C%3Cscript%3E%3E''))]" definition Document_getElementById_document :: "(unit, unit, unit, unit, unit, unit) object_ptr option" where "Document_getElementById_document = Some (cast (document_ptr.Ref 1))" text \"Document.getElementById with a script-inserted element"\ lemma "test (do { gBody \ Document_getElementById_document . body; TEST_ID \ return ''test2''; test \ Document_getElementById_document . createElement(''div''); test . setAttribute(''id'', TEST_ID); gBody . appendChild(test); result \ Document_getElementById_document . getElementById(TEST_ID); assert_not_equals(result, None, ''should not be null.''); tmp0 \ result . tagName; assert_equals(tmp0, ''div'', ''should have appended element's tag name''); gBody . removeChild(test); removed \ Document_getElementById_document . getElementById(TEST_ID); assert_equals(removed, None, ''should not get removed element.'') }) Document_getElementById_heap" by eval text \"update `id` attribute via setAttribute/removeAttribute"\ lemma "test (do { gBody \ Document_getElementById_document . body; TEST_ID \ return ''test3''; test \ Document_getElementById_document . createElement(''div''); test . setAttribute(''id'', TEST_ID); gBody . appendChild(test); UPDATED_ID \ return ''test3-updated''; test . setAttribute(''id'', UPDATED_ID); e \ Document_getElementById_document . getElementById(UPDATED_ID); assert_equals(e, test, ''should get the element with id.''); old \ Document_getElementById_document . getElementById(TEST_ID); assert_equals(old, None, ''shouldn't get the element by the old id.''); test . removeAttribute(''id''); e2 \ Document_getElementById_document . getElementById(UPDATED_ID); assert_equals(e2, None, ''should return null when the passed id is none in document.'') }) Document_getElementById_heap" by eval text \"Ensure that the id attribute only affects elements present in a document"\ lemma "test (do { TEST_ID \ return ''test4-should-not-exist''; e \ Document_getElementById_document . createElement(''div''); e . setAttribute(''id'', TEST_ID); tmp0 \ Document_getElementById_document . getElementById(TEST_ID); assert_equals(tmp0, None, ''should be null''); tmp1 \ Document_getElementById_document . body; tmp1 . appendChild(e); tmp2 \ Document_getElementById_document . getElementById(TEST_ID); assert_equals(tmp2, e, ''should be the appended element'') }) Document_getElementById_heap" by eval text \"in tree order, within the context object's tree"\ lemma "test (do { gBody \ Document_getElementById_document . body; TEST_ID \ return ''test5''; target \ Document_getElementById_document . getElementById(TEST_ID); assert_not_equals(target, None, ''should not be null''); tmp0 \ target . getAttribute(''data-name''); assert_equals(tmp0, ''1st'', ''should return the 1st''); element4 \ Document_getElementById_document . createElement(''div''); element4 . setAttribute(''id'', TEST_ID); element4 . setAttribute(''data-name'', ''4th''); gBody . appendChild(element4); target2 \ Document_getElementById_document . getElementById(TEST_ID); assert_not_equals(target2, None, ''should not be null''); tmp1 \ target2 . getAttribute(''data-name''); assert_equals(tmp1, ''1st'', ''should be the 1st''); tmp2 \ target2 . parentNode; tmp2 . removeChild(target2); target3 \ Document_getElementById_document . getElementById(TEST_ID); assert_not_equals(target3, None, ''should not be null''); tmp3 \ target3 . getAttribute(''data-name''); assert_equals(tmp3, ''4th'', ''should be the 4th'') }) Document_getElementById_heap" by eval text \"Modern browsers optimize this method with using internal id cache. This test checks that their optimization should effect only append to `Document`, not append to `Node`."\ lemma "test (do { TEST_ID \ return ''test6''; s \ Document_getElementById_document . createElement(''div''); s . setAttribute(''id'', TEST_ID); tmp0 \ Document_getElementById_document . createElement(''div''); tmp0 . appendChild(s); tmp1 \ Document_getElementById_document . getElementById(TEST_ID); assert_equals(tmp1, None, ''should be null'') }) Document_getElementById_heap" by eval text \"changing attribute's value via `Attr` gotten from `Element.attribute`."\ lemma "test (do { gBody \ Document_getElementById_document . body; TEST_ID \ return ''test7''; element \ Document_getElementById_document . createElement(''div''); element . setAttribute(''id'', TEST_ID); gBody . appendChild(element); target \ Document_getElementById_document . getElementById(TEST_ID); assert_equals(target, element, ''should return the element before changing the value''); element . setAttribute(''id'', (TEST_ID @ ''-updated'')); target2 \ Document_getElementById_document . getElementById(TEST_ID); assert_equals(target2, None, ''should return null after updated id via Attr.value''); target3 \ Document_getElementById_document . getElementById((TEST_ID @ ''-updated'')); assert_equals(target3, element, ''should be equal to the updated element.'') }) Document_getElementById_heap" by eval text \"update `id` attribute via element.id"\ lemma "test (do { gBody \ Document_getElementById_document . body; TEST_ID \ return ''test12''; test \ Document_getElementById_document . createElement(''div''); test . setAttribute(''id'', TEST_ID); gBody . appendChild(test); UPDATED_ID \ return (TEST_ID @ ''-updated''); test . setAttribute(''id'', UPDATED_ID); e \ Document_getElementById_document . getElementById(UPDATED_ID); assert_equals(e, test, ''should get the element with id.''); old \ Document_getElementById_document . getElementById(TEST_ID); assert_equals(old, None, ''shouldn't get the element by the old id.''); test . setAttribute(''id'', ''''); e2 \ Document_getElementById_document . getElementById(UPDATED_ID); assert_equals(e2, None, ''should return null when the passed id is none in document.'') }) Document_getElementById_heap" by eval text \"where insertion order and tree order don't match"\ lemma "test (do { gBody \ Document_getElementById_document . body; TEST_ID \ return ''test13''; container \ Document_getElementById_document . createElement(''div''); container . setAttribute(''id'', (TEST_ID @ ''-fixture'')); gBody . appendChild(container); element1 \ Document_getElementById_document . createElement(''div''); element1 . setAttribute(''id'', TEST_ID); element2 \ Document_getElementById_document . createElement(''div''); element2 . setAttribute(''id'', TEST_ID); element3 \ Document_getElementById_document . createElement(''div''); element3 . setAttribute(''id'', TEST_ID); element4 \ Document_getElementById_document . createElement(''div''); element4 . setAttribute(''id'', TEST_ID); container . appendChild(element2); container . appendChild(element4); container . insertBefore(element3, element4); container . insertBefore(element1, element2); test \ Document_getElementById_document . getElementById(TEST_ID); assert_equals(test, element1, ''should return 1st element''); container . removeChild(element1); test \ Document_getElementById_document . getElementById(TEST_ID); assert_equals(test, element2, ''should return 2nd element''); container . removeChild(element2); test \ Document_getElementById_document . getElementById(TEST_ID); assert_equals(test, element3, ''should return 3rd element''); container . removeChild(element3); test \ Document_getElementById_document . getElementById(TEST_ID); assert_equals(test, element4, ''should return 4th element''); container . removeChild(element4) }) Document_getElementById_heap" by eval text \"Inserting an id by inserting its parent node"\ lemma "test (do { gBody \ Document_getElementById_document . body; TEST_ID \ return ''test14''; a \ Document_getElementById_document . createElement(''a''); b \ Document_getElementById_document . createElement(''b''); a . appendChild(b); b . setAttribute(''id'', TEST_ID); tmp0 \ Document_getElementById_document . getElementById(TEST_ID); assert_equals(tmp0, None); gBody . appendChild(a); tmp1 \ Document_getElementById_document . getElementById(TEST_ID); assert_equals(tmp1, b) }) Document_getElementById_heap" by eval text \"Document.getElementById must not return nodes not present in document"\ lemma "test (do { TEST_ID \ return ''test15''; outer \ Document_getElementById_document . getElementById(''outer''); middle \ Document_getElementById_document . getElementById(''middle''); inner \ Document_getElementById_document . getElementById(''inner''); tmp0 \ Document_getElementById_document . getElementById(''middle''); outer . removeChild(tmp0); new_el \ Document_getElementById_document . createElement(''h1''); new_el . setAttribute(''id'', ''heading''); inner . appendChild(new_el); tmp1 \ Document_getElementById_document . getElementById(''heading''); assert_equals(tmp1, None) }) Document_getElementById_heap" by eval end