| 1892 | ) |
| 1893 | |
| 1894 | def test_copy_internals(self): |
| 1895 | for fixtures_, compare_values in [ |
| 1896 | (self.fixtures, True), |
| 1897 | (self.dont_compare_values_fixtures, False), |
| 1898 | ]: |
| 1899 | for fixture in fixtures_: |
| 1900 | case_a = fixture() |
| 1901 | case_b = fixture() |
| 1902 | |
| 1903 | for idx in range(len(case_a)): |
| 1904 | assert case_a[idx].compare( |
| 1905 | case_b[idx], compare_values=compare_values |
| 1906 | ) |
| 1907 | |
| 1908 | clone = visitors.replacement_traverse( |
| 1909 | case_a[idx], {}, lambda elem: None |
| 1910 | ) |
| 1911 | |
| 1912 | assert clone.compare( |
| 1913 | case_b[idx], compare_values=compare_values |
| 1914 | ) |
| 1915 | |
| 1916 | assert case_a[idx].compare( |
| 1917 | case_b[idx], compare_values=compare_values |
| 1918 | ) |
| 1919 | |
| 1920 | # copy internals of Select is very different than other |
| 1921 | # elements and additionally this is extremely well tested |
| 1922 | # in test_selectable and test_external_traversal, so |
| 1923 | # skip these |
| 1924 | if isinstance(case_a[idx], Select): |
| 1925 | continue |
| 1926 | |
| 1927 | for elema, elemb in zip( |
| 1928 | visitors.iterate(case_a[idx], {}), |
| 1929 | visitors.iterate(clone, {}), |
| 1930 | ): |
| 1931 | if isinstance(elema, ClauseElement) and not isinstance( |
| 1932 | elema, Immutable |
| 1933 | ): |
| 1934 | assert elema is not elemb |
| 1935 | |
| 1936 | |
| 1937 | class CompareClausesTest(fixtures.TestBase): |