| // Purpose: |
| // Check that \DexExpectWatchType applies penalties when expected |
| // types are not found and unexpected types are. |
| // |
| // UNSUPPORTED: system-darwin |
| // |
| // |
| // NOTE: This test passes but not in the expected way on Windows. |
| // TODO: Reduce this test's coverage and be more specific about |
| // expected behaviour. |
| // |
| // RUN: not %dexter_regression_test -- %s | FileCheck %s |
| // CHECK: expect_watch_type.cpp: |
| |
| template<class T> |
| class Doubled { |
| public: |
| Doubled(const T & to_double) |
| : m_member(to_double * 2) {} |
| |
| T GetVal() { |
| T to_return = m_member; // DexLabel('gv_start') |
| return to_return; // DexLabel('gv_end') |
| } |
| |
| static T static_doubler(const T & to_double) { |
| T result = 0; // DexLabel('sd_start') |
| result = to_double * 2; |
| return result; // DexLabel('sd_end') |
| } |
| |
| private: |
| T m_member; |
| }; |
| |
| int main() { |
| auto myInt = Doubled<int>(5); // DexLabel('main_start') |
| auto myDouble = Doubled<double>(5.5); |
| auto staticallyDoubledInt = Doubled<int>::static_doubler(5); |
| auto staticallyDoubledDouble = Doubled<double>::static_doubler(5.5); |
| return int(double(myInt.GetVal()) |
| + double(staticallyDoubledInt) |
| + myDouble.GetVal() |
| + staticallyDoubledDouble); // DexLabel('main_end') |
| } |
| |
| |
| // DexExpectWatchType('m_member', 'int', 'double', from_line=ref('gv_start'), to_line=ref('gv_end')) |
| |
| // THIS COMMAND should create a penalty for a missing type 'const double' and unexpected type 'const double &' |
| // DexExpectWatchType('to_double', 'const double', 'const int &', from_line=ref('sd_start'), to_line=ref('sd_end')) |
| |
| // DexExpectWatchType('myInt', 'Doubled<int>', from_line=ref('main_start'), to_line=ref('main_end')) |
| // DexExpectWatchType('myDouble', 'Doubled<double>', from_line=ref('main_start'), to_line=ref('main_end')) |
| // DexExpectWatchType('staticallyDoubledInt', 'int', from_line=ref('main_start'), to_line=ref('main_end')) |
| // DexExpectWatchType('staticallyDoubledDouble', 'double', from_line=ref('main_start'), to_line=ref('main_end')) |
| |