clang/.gitignore | 5 clang/Makefile | 13 + clang/qa/data/rename-cxx-constructor-decl-class.cxx | 9 + clang/qa/data/rename-cxx-constructor-decl-class.cxx.expected | 9 + clang/qa/data/rename-cxx-constructor-decl.csv | 2 clang/qa/data/rename-cxx-constructor-decl.cxx | 16 + clang/qa/data/rename-cxx-constructor-decl.cxx.expected | 16 + clang/qa/data/rename-cxx-constructor-expr.cxx | 8 clang/qa/data/rename-cxx-constructor-expr.cxx.expected | 8 clang/qa/data/rename-cxx-method-decl.cxx | 15 + clang/qa/data/rename-cxx-method-decl.cxx.expected | 15 + clang/qa/data/rename-cxx-static-cast-expr.cxx | 12 + clang/qa/data/rename-cxx-static-cast-expr.cxx.expected | 12 + clang/qa/data/rename-decl-ref-expr.cxx | 17 + clang/qa/data/rename-decl-ref-expr.cxx.expected | 17 + clang/qa/data/rename-field-decl.csv | 1 clang/qa/data/rename-field-decl.csv-emptycol1 | 1 clang/qa/data/rename-field-decl.csv-emptycol2 | 1 clang/qa/data/rename-field-decl.cxx | 5 clang/qa/data/rename-field-decl.cxx.expected | 5 clang/qa/data/rename-member-expr.cxx | 19 ++ clang/qa/data/rename-member-expr.cxx.expected | 19 ++ clang/qa/data/rename-var-decl-class.cxx | 11 + clang/qa/data/rename-var-decl-class.cxx.expected | 11 + clang/qa/data/rename-var-decl.cxx | 5 clang/qa/data/rename-var-decl.cxx.expected | 5 clang/qa/llvm-gcov.sh | 2 clang/qa/test-rename.sh | 94 +++++++++++ 28 files changed, 353 insertions(+)
New commits: commit 820370ba69c395f22182cf33bc1557c824de0da1 Author: Miklos Vajna <[email protected]> Date: Sun Jan 31 12:00:11 2016 +0100 clang: add rename tests Thanks <http://logan.tw/posts/2015/04/28/check-code-coverage-with-clang-and-lcov/> for the llvm-gcov wrapper script idea. diff --git a/clang/.gitignore b/clang/.gitignore new file mode 100644 index 0000000..fc5000d --- /dev/null +++ b/clang/.gitignore @@ -0,0 +1,5 @@ +bin +lib64 +clang.info +coverage +*.new-rename diff --git a/clang/Makefile b/clang/Makefile index 828ea71..b7d3eb7 100644 --- a/clang/Makefile +++ b/clang/Makefile @@ -1,3 +1,5 @@ +.PHONY : coverage + CLANGDEFS=-D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -fno-rtti CLANGWARNS=-Werror -Wall -Wno-missing-braces -Wnon-virtual-dtor -Wendif-labels -Wextra -Wundef -Wunused-macros -Wshadow -Woverloaded-virtual CLANGFLAGS = $(CLANGDEFS) $(CLANGWARNS) -g -std=c++11 @@ -17,4 +19,15 @@ bin/find-unprefixed-members: find-unprefixed-members.cxx Makefile test: test.cxx test.hxx Makefile clang++ -o test test.cxx +check: + qa/test-rename.sh + +coverage: + rm -f bin/rename rename.cxx.gc{da,no} + $(MAKE) GCOV=y bin/rename + $(MAKE) check + lcov --directory $(PWD) --gcov-tool $(PWD)/qa/llvm-gcov.sh --capture --output-file clang.info + genhtml -o coverage clang.info + @echo "Now open <file://$(PWD)/coverage$(PWD)/rename.cxx.gcov.html>" + # vim: set noet sw=4 ts=4: diff --git a/clang/qa/data/rename-cxx-constructor-decl-class.cxx b/clang/qa/data/rename-cxx-constructor-decl-class.cxx new file mode 100644 index 0000000..66c0f02 --- /dev/null +++ b/clang/qa/data/rename-cxx-constructor-decl-class.cxx @@ -0,0 +1,9 @@ +class C +{ +public: + C(); +}; + +C::C() +{ +} diff --git a/clang/qa/data/rename-cxx-constructor-decl-class.cxx.expected b/clang/qa/data/rename-cxx-constructor-decl-class.cxx.expected new file mode 100644 index 0000000..3d3d342 --- /dev/null +++ b/clang/qa/data/rename-cxx-constructor-decl-class.cxx.expected @@ -0,0 +1,9 @@ +class D +{ +public: + D(); +}; + +D::D() +{ +} diff --git a/clang/qa/data/rename-cxx-constructor-decl.csv b/clang/qa/data/rename-cxx-constructor-decl.csv new file mode 100644 index 0000000..8747849 --- /dev/null +++ b/clang/qa/data/rename-cxx-constructor-decl.csv @@ -0,0 +1,2 @@ +C::nX,m_nX +C::aA,m_aA diff --git a/clang/qa/data/rename-cxx-constructor-decl.cxx b/clang/qa/data/rename-cxx-constructor-decl.cxx new file mode 100644 index 0000000..ca32c02 --- /dev/null +++ b/clang/qa/data/rename-cxx-constructor-decl.cxx @@ -0,0 +1,16 @@ +class A +{ +}; + +class C +{ +public: + C(); + int nX; + A aA; +}; + +C::C() + : nX(0) +{ +} diff --git a/clang/qa/data/rename-cxx-constructor-decl.cxx.expected b/clang/qa/data/rename-cxx-constructor-decl.cxx.expected new file mode 100644 index 0000000..a2930dc --- /dev/null +++ b/clang/qa/data/rename-cxx-constructor-decl.cxx.expected @@ -0,0 +1,16 @@ +class A +{ +}; + +class C +{ +public: + C(); + int m_nX; + A m_aA; +}; + +C::C() + : m_nX(0) +{ +} diff --git a/clang/qa/data/rename-cxx-constructor-expr.cxx b/clang/qa/data/rename-cxx-constructor-expr.cxx new file mode 100644 index 0000000..0b24a17 --- /dev/null +++ b/clang/qa/data/rename-cxx-constructor-expr.cxx @@ -0,0 +1,8 @@ +class C +{ +}; + +int main() +{ + C* pC = new C(); +} diff --git a/clang/qa/data/rename-cxx-constructor-expr.cxx.expected b/clang/qa/data/rename-cxx-constructor-expr.cxx.expected new file mode 100644 index 0000000..6ff6d26 --- /dev/null +++ b/clang/qa/data/rename-cxx-constructor-expr.cxx.expected @@ -0,0 +1,8 @@ +class D +{ +}; + +int main() +{ + D* pC = new D(); +} diff --git a/clang/qa/data/rename-cxx-method-decl.cxx b/clang/qa/data/rename-cxx-method-decl.cxx new file mode 100644 index 0000000..5066927 --- /dev/null +++ b/clang/qa/data/rename-cxx-method-decl.cxx @@ -0,0 +1,15 @@ +class C +{ +public: + void foo(); +}; + +void C::foo() +{ +} + +int main() +{ + C aC; + aC.foo(); +} diff --git a/clang/qa/data/rename-cxx-method-decl.cxx.expected b/clang/qa/data/rename-cxx-method-decl.cxx.expected new file mode 100644 index 0000000..89f2499 --- /dev/null +++ b/clang/qa/data/rename-cxx-method-decl.cxx.expected @@ -0,0 +1,15 @@ +class C +{ +public: + void bar(); +}; + +void C::bar() +{ +} + +int main() +{ + C aC; + aC.bar(); +} diff --git a/clang/qa/data/rename-cxx-static-cast-expr.cxx b/clang/qa/data/rename-cxx-static-cast-expr.cxx new file mode 100644 index 0000000..a9fd3bf --- /dev/null +++ b/clang/qa/data/rename-cxx-static-cast-expr.cxx @@ -0,0 +1,12 @@ +class C +{ +public: + int getValue() const { return 0; } +}; + +int main() +{ + C* pC = 0; + static_cast<const C&>(*pC).getValue(); + static_cast<const C*>(0)->getValue(); +} diff --git a/clang/qa/data/rename-cxx-static-cast-expr.cxx.expected b/clang/qa/data/rename-cxx-static-cast-expr.cxx.expected new file mode 100644 index 0000000..fb78a02 --- /dev/null +++ b/clang/qa/data/rename-cxx-static-cast-expr.cxx.expected @@ -0,0 +1,12 @@ +class D +{ +public: + int getValue() const { return 0; } +}; + +int main() +{ + D* pC = 0; + static_cast<const D&>(*pC).getValue(); + static_cast<const D*>(0)->getValue(); +} diff --git a/clang/qa/data/rename-decl-ref-expr.cxx b/clang/qa/data/rename-decl-ref-expr.cxx new file mode 100644 index 0000000..20eaba3 --- /dev/null +++ b/clang/qa/data/rename-decl-ref-expr.cxx @@ -0,0 +1,17 @@ +class C +{ +public: + static const int aS[]; + static const int* getS() { return aS; } +}; + +int foo(const int* pS) +{ + return 0; +} +#define FOO(a) foo(a) + +int main() +{ + FOO(C::aS); +} diff --git a/clang/qa/data/rename-decl-ref-expr.cxx.expected b/clang/qa/data/rename-decl-ref-expr.cxx.expected new file mode 100644 index 0000000..10e99f1 --- /dev/null +++ b/clang/qa/data/rename-decl-ref-expr.cxx.expected @@ -0,0 +1,17 @@ +class C +{ +public: + static const int m_aS[]; + static const int* getS() { return m_aS; } +}; + +int foo(const int* pS) +{ + return 0; +} +#define FOO(a) foo(a) + +int main() +{ + FOO(C::m_aS); +} diff --git a/clang/qa/data/rename-field-decl.csv b/clang/qa/data/rename-field-decl.csv new file mode 100644 index 0000000..1c8e71d --- /dev/null +++ b/clang/qa/data/rename-field-decl.csv @@ -0,0 +1 @@ +C::nX,m_nX diff --git a/clang/qa/data/rename-field-decl.csv-emptycol1 b/clang/qa/data/rename-field-decl.csv-emptycol1 new file mode 100644 index 0000000..7edb2fa --- /dev/null +++ b/clang/qa/data/rename-field-decl.csv-emptycol1 @@ -0,0 +1 @@ +, diff --git a/clang/qa/data/rename-field-decl.csv-emptycol2 b/clang/qa/data/rename-field-decl.csv-emptycol2 new file mode 100644 index 0000000..597638b --- /dev/null +++ b/clang/qa/data/rename-field-decl.csv-emptycol2 @@ -0,0 +1 @@ +x, diff --git a/clang/qa/data/rename-field-decl.cxx b/clang/qa/data/rename-field-decl.cxx new file mode 100644 index 0000000..86e8455 --- /dev/null +++ b/clang/qa/data/rename-field-decl.cxx @@ -0,0 +1,5 @@ +class C +{ +public: + int nX; +}; diff --git a/clang/qa/data/rename-field-decl.cxx.expected b/clang/qa/data/rename-field-decl.cxx.expected new file mode 100644 index 0000000..1f214ba --- /dev/null +++ b/clang/qa/data/rename-field-decl.cxx.expected @@ -0,0 +1,5 @@ +class C +{ +public: + int m_nX; +}; diff --git a/clang/qa/data/rename-member-expr.cxx b/clang/qa/data/rename-member-expr.cxx new file mode 100644 index 0000000..377ef58 --- /dev/null +++ b/clang/qa/data/rename-member-expr.cxx @@ -0,0 +1,19 @@ +class C +{ +public: + int nX; +}; + +int foo(int x) +{ + return 0; +} +#define FOO(a) foo(a) + +int main() +{ + C aC; + aC.nX = 1; + FOO(aC.nX); + int y = aC.nX; +} diff --git a/clang/qa/data/rename-member-expr.cxx.expected b/clang/qa/data/rename-member-expr.cxx.expected new file mode 100644 index 0000000..59e51f4 --- /dev/null +++ b/clang/qa/data/rename-member-expr.cxx.expected @@ -0,0 +1,19 @@ +class C +{ +public: + int m_nX; +}; + +int foo(int x) +{ + return 0; +} +#define FOO(a) foo(a) + +int main() +{ + C aC; + aC.m_nX = 1; + FOO(aC.m_nX); + int y = aC.m_nX; +} diff --git a/clang/qa/data/rename-var-decl-class.cxx b/clang/qa/data/rename-var-decl-class.cxx new file mode 100644 index 0000000..9cf77e6 --- /dev/null +++ b/clang/qa/data/rename-var-decl-class.cxx @@ -0,0 +1,11 @@ +class C +{ +public: + static const int aS[]; +}; + +int main() +{ + C* pC = 0; + return 0; +} diff --git a/clang/qa/data/rename-var-decl-class.cxx.expected b/clang/qa/data/rename-var-decl-class.cxx.expected new file mode 100644 index 0000000..d187c07 --- /dev/null +++ b/clang/qa/data/rename-var-decl-class.cxx.expected @@ -0,0 +1,11 @@ +class D +{ +public: + static const int aS[]; +}; + +int main() +{ + D* pC = 0; + return 0; +} diff --git a/clang/qa/data/rename-var-decl.cxx b/clang/qa/data/rename-var-decl.cxx new file mode 100644 index 0000000..0838efb --- /dev/null +++ b/clang/qa/data/rename-var-decl.cxx @@ -0,0 +1,5 @@ +class C +{ +public: + static const int aS[]; +}; diff --git a/clang/qa/data/rename-var-decl.cxx.expected b/clang/qa/data/rename-var-decl.cxx.expected new file mode 100644 index 0000000..bce936b --- /dev/null +++ b/clang/qa/data/rename-var-decl.cxx.expected @@ -0,0 +1,5 @@ +class C +{ +public: + static const int m_aS[]; +}; diff --git a/clang/qa/llvm-gcov.sh b/clang/qa/llvm-gcov.sh new file mode 100755 index 0000000..4e320d8 --- /dev/null +++ b/clang/qa/llvm-gcov.sh @@ -0,0 +1,2 @@ +#!/bin/bash +exec llvm-cov gcov "$@" diff --git a/clang/qa/test-rename.sh b/clang/qa/test-rename.sh new file mode 100755 index 0000000..bcbdec1 --- /dev/null +++ b/clang/qa/test-rename.sh @@ -0,0 +1,94 @@ +#!/usr/bin/env bash + +test_assert_fail() +{ + if "$@" 2>/dev/null; then + echo "Error: assertion failure in ${test_name}." + exit 1 + fi +} + +test_assert_equal() +{ + if ! diff -u $1 $2; then + echo "Error: assertion failure in ${test_name}." + exit 1 + fi +} + +declare_rename_test() +{ + test_name="Rename::${1}" + test_input="qa/data/${2}" + test_output="qa/data/${2}.new-rename" + test_expected="qa/data/${2}.expected" +} + +declare_rename_test "testFieldDecl" "rename-field-decl.cxx" +bin/rename -old-name=C::nX -new-name=m_nX $test_input -- +test_assert_equal $test_expected $test_output + +# Do the same as previously, but trigger the csv parser this time. +declare_rename_test "testFieldDeclCsv" "rename-field-decl.cxx" +bin/rename -csv=qa/data/rename-field-decl.csv $test_input -- +test_assert_equal $test_expected $test_output + +# Test that we fail on non-existing -csv parameter. +declare_rename_test "testFieldDeclCsvFail" "rename-field-decl.cxx" +test_assert_fail bin/rename -csv=qa/data/rename-field-decl.cvs $test_input -- + +# Test that the first column can't be empty. +declare_rename_test "testFieldDeclCsvFailCol1Empty" "rename-field-decl.cxx" +test_assert_fail bin/rename -csv=qa/data/rename-field-decl.csv-emptycol1 $test_input -- + +# Test that the second column can't be empty. +declare_rename_test "testFieldDeclCsvFailCol2Empty" "rename-field-decl.cxx" +test_assert_fail bin/rename -csv=qa/data/rename-field-decl.csv-emptycol2 $test_input -- + +# Test that rename fails without options. +declare_rename_test "testFieldDeclCsvFailNoopt" "rename-field-decl.cxx" +test_assert_fail bin/rename qa/data/rename-field-decl.cxx -- + +# Test that rename dump creates no output +declare_rename_test "testFieldDeclDump" "rename-field-decl.cxx" +rm -f qa/data/rename-field-decl.cxx.new-rename +bin/rename -csv=qa/data/rename-field-decl.csv -dump qa/data/rename-field-decl.cxx -- 2>/dev/null +test_assert_fail test -f qa/data/rename-field-decl.cxx.new-rename + +declare_rename_test "testVarDecl" "rename-var-decl.cxx" +bin/rename -old-name=C::aS -new-name=m_aS $test_input -- +test_assert_equal $test_expected $test_output + +declare_rename_test "testVarDeclClass" "rename-var-decl-class.cxx" +bin/rename -old-name=C -new-name=D $test_input -- +test_assert_equal $test_expected $test_output + +declare_rename_test "testCXXConstructorDecl" "rename-cxx-constructor-decl.cxx" +bin/rename -csv=qa/data/rename-cxx-constructor-decl.csv $test_input -- +test_assert_equal $test_expected $test_output + +declare_rename_test "testCXXConstructorDeclClass" "rename-cxx-constructor-decl-class.cxx" +bin/rename -old-name=C -new-name=D $test_input -- +test_assert_equal $test_expected $test_output + +declare_rename_test "testMemberExpr" "rename-member-expr.cxx" +bin/rename -old-name=C::nX -new-name=m_nX $test_input -- +test_assert_equal $test_expected $test_output + +declare_rename_test "testDeclRefExpr" "rename-decl-ref-expr.cxx" +bin/rename -old-name=C::aS -new-name=m_aS $test_input -- +test_assert_equal $test_expected $test_output + +declare_rename_test "testCXXMethodDecl" "rename-cxx-method-decl.cxx" +bin/rename -old-name=C::foo -new-name=bar $test_input -- +test_assert_equal $test_expected $test_output + +declare_rename_test "testCXXConstructExpr" "rename-cxx-constructor-expr.cxx" +bin/rename -old-name=C -new-name=D $test_input -- +test_assert_equal $test_expected $test_output + +declare_rename_test "testCXXStaticCastExpr" "rename-cxx-static-cast-expr.cxx" +bin/rename -old-name=C -new-name=D $test_input -- +test_assert_equal $test_expected $test_output + +# vi:set shiftwidth=4 expandtab: _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
