| // Copyright 2024 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| class Foo { |
| public: |
| void bar(int x) {} |
| void not_bar() {} |
| Foo& baz() { return *this; } |
| }; |
| |
| class FooDerived : public Foo {}; |
| |
| class NotFoo { |
| public: |
| void bar() {} |
| }; |
| |
| Foo& get_foo() { |
| static Foo f; |
| return f; |
| } |
| |
| // Tests that only `bar()` calls on `Foo`s are rewritten. |
| void RewritesFoo() { |
| Foo foo; |
| foo.bar(1); |
| foo.not_bar(); |
| } |
| |
| // Tests that `bar()` calls on `Foo` pointers are rewritten. |
| void RewritesFooPtr() { |
| Foo foo; |
| Foo* foo_ptr = &foo; |
| foo_ptr->bar(3); |
| } |
| |
| // Tests that `bar()` calls on `Foo` referencess are rewritten. |
| void RewritesFooRef() { |
| Foo foo; |
| Foo& foo_ref = foo; |
| foo_ref.bar(4); |
| } |
| |
| // Tests that when the `Foo` is retried through a function call, rewrites work. |
| void RewritesFooIndirection() { |
| get_foo().bar(5); |
| } |
| |
| // Tests that `bar()` calls on classes derived from `Foo` are rewritten. |
| void RewritesFooDerived() { |
| FooDerived foo; |
| foo.bar(6); |
| } |
| |
| // Tests that `bar()` calls on non-`Foo` classes are not rewritten. |
| void DoesntRewriteNotFoo() { |
| NotFoo not_foo; |
| not_foo.bar(); |
| } |