diff --git a/clang_delta/CMakeLists.txt b/clang_delta/CMakeLists.txt index 10dbeedb..83fb0f2b 100644 --- a/clang_delta/CMakeLists.txt +++ b/clang_delta/CMakeLists.txt @@ -349,6 +349,10 @@ set(SOURCE_FILES "/tests/rename-param/stuck.ii" "/tests/rename-var/rename-var.c" "/tests/rename-var/rename-var.output" + "/tests/replace-dependent-typedef/test1.cc" + "/tests/replace-dependent-typedef/test1.output" + "/tests/replace-dependent-typedef/test1.output2" + "/tests/replace-dependent-typedef/test1.output3" "/tests/replace-derived-class/replace-derived1.cpp" "/tests/replace-derived-class/replace-derived1.output" "/tests/replace-derived-class/replace-derived2.cpp" diff --git a/clang_delta/tests/replace-dependent-typedef/test1.cc b/clang_delta/tests/replace-dependent-typedef/test1.cc new file mode 100644 index 00000000..c0cf4ee2 --- /dev/null +++ b/clang_delta/tests/replace-dependent-typedef/test1.cc @@ -0,0 +1,12 @@ +typedef long xx_t; +typedef xx_t xx; + +template struct S { typedef T type; }; +struct A { }; +struct B { typedef S::type type; }; + +template +struct C { + typedef int Inner; + typedef C::Inner Bar; +}; diff --git a/clang_delta/tests/replace-dependent-typedef/test1.output b/clang_delta/tests/replace-dependent-typedef/test1.output new file mode 100644 index 00000000..58961044 --- /dev/null +++ b/clang_delta/tests/replace-dependent-typedef/test1.output @@ -0,0 +1,12 @@ +typedef long xx_t; +typedef long xx; + +template struct S { typedef T type; }; +struct A { }; +struct B { typedef S::type type; }; + +template +struct C { + typedef int Inner; + typedef C::Inner Bar; +}; diff --git a/clang_delta/tests/replace-dependent-typedef/test1.output2 b/clang_delta/tests/replace-dependent-typedef/test1.output2 new file mode 100644 index 00000000..968d7e2c --- /dev/null +++ b/clang_delta/tests/replace-dependent-typedef/test1.output2 @@ -0,0 +1,12 @@ +typedef long xx_t; +typedef xx_t xx; + +template struct S { typedef T type; }; +struct A { }; +struct B { typedef A type; }; + +template +struct C { + typedef int Inner; + typedef C::Inner Bar; +}; diff --git a/clang_delta/tests/replace-dependent-typedef/test1.output3 b/clang_delta/tests/replace-dependent-typedef/test1.output3 new file mode 100644 index 00000000..4900aa6c --- /dev/null +++ b/clang_delta/tests/replace-dependent-typedef/test1.output3 @@ -0,0 +1,12 @@ +typedef long xx_t; +typedef xx_t xx; + +template struct S { typedef T type; }; +struct A { }; +struct B { typedef S::type type; }; + +template +struct C { + typedef int Inner; + typedef int Bar; +}; diff --git a/clang_delta/tests/test_clang_delta.py b/clang_delta/tests/test_clang_delta.py index 39ba2a49..621af637 100644 --- a/clang_delta/tests/test_clang_delta.py +++ b/clang_delta/tests/test_clang_delta.py @@ -1049,6 +1049,26 @@ def test_rename_param_stuck(self): def test_rename_var_rename_var(self): self.check_clang_delta('rename-var/rename-var.c', '--transformation=rename-var --counter=1') + def test_replace_derived_class_replace_dependent_typedef_1_1(self): + self.check_clang_delta( + 'replace-dependent-typedef/test1.cc', + '--transformation=replace-dependent-typedef --counter=1', + ) + + def test_replace_derived_class_replace_dependent_typedef_1_2(self): + self.check_clang_delta( + 'replace-dependent-typedef/test1.cc', + '--transformation=replace-dependent-typedef --counter=2', + 'replace-dependent-typedef/test1.output2', + ) + + def test_replace_derived_class_replace_dependent_typedef_1_3(self): + self.check_clang_delta( + 'replace-dependent-typedef/test1.cc', + '--transformation=replace-dependent-typedef --counter=3', + 'replace-dependent-typedef/test1.output3', + ) + def test_replace_derived_class_replace_derived1(self): self.check_clang_delta( 'replace-derived-class/replace-derived1.cpp',