Home | History | Annotate | Download | only in tests
      1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef VIRTUAL_METHODS_H_
      6 #define VIRTUAL_METHODS_H_
      7 
      8 // Note: This is not actual windows.h but the stub file in system/windows.h
      9 #include <windows.h>
     10 
     11 #define CR_BEGIN_MSG_MAP_EX(theClass) virtual int f() { return 4; }
     12 #define BEGIN_SAFE_MSG_MAP_EX(theClass) virtual int g() { return 4; }
     13 
     14 // Should warn about virtual method usage.
     15 class VirtualMethodsInHeaders {
     16  public:
     17   // Don't complain about these.
     18   virtual void MethodIsAbstract() = 0;
     19   virtual void MethodHasNoArguments();
     20   virtual void MethodHasEmptyDefaultImpl() {}
     21 
     22   // But complain about this:
     23   virtual bool ComplainAboutThis() { return true; }
     24 
     25   SYSTEM_INLINE_VIRTUAL
     26   CR_BEGIN_MSG_MAP_EX(Sub)
     27   BEGIN_SAFE_MSG_MAP_EX(Sub)
     28 };
     29 
     30 // Complain on missing 'virtual' keyword in overrides.
     31 class WarnOnMissingVirtual : public VirtualMethodsInHeaders {
     32  public:
     33   void MethodHasNoArguments() override;
     34 };
     35 
     36 // Don't complain about things in a 'testing' namespace.
     37 namespace testing {
     38 struct TestStruct {};
     39 }  // namespace testing
     40 
     41 class VirtualMethodsInHeadersTesting : public VirtualMethodsInHeaders {
     42  public:
     43   // Don't complain about no virtual testing methods.
     44   void MethodHasNoArguments();
     45 
     46  private:
     47   testing::TestStruct tester_;
     48 };
     49 
     50 #endif  // VIRTUAL_METHODS_H_
     51