Rémi Bernon (@rbernon) commented about dlls/windows.applicationmodel/tests/model.c:
+#define check_interface_optional( obj, iid, supported ) check_interface_( __LINE__, obj, iid, supported ) +static void check_interface_( unsigned int line, void *obj, const IID *iid, BOOL supported ) { IUnknown *iface = obj; IUnknown *unk;
- HRESULT hr;
HRESULT hr, expected_hr;
expected_hr = supported ? S_OK : E_NOINTERFACE;
hr = IUnknown_QueryInterface( iface, iid, (void **)&unk );
- ok_(__FILE__, line)( hr == S_OK || broken( hr == E_NOINTERFACE ) , "got hr %#lx.\n", hr );
- ok_(__FILE__, line)( hr == expected_hr || broken( hr == E_NOINTERFACE ), "got hr %#lx.\n", hr ); if (SUCCEEDED(hr)) IUnknown_Release( unk );
}
I missed this before, but I think the check_interface check is a bit pointless as it will always succeed on Windows.
Something like that would be better (using `check_interface_broken` only where it is needed):
```suggestion:-14+0 #define check_interface_broken( obj, iid, supported ) check_interface_( __LINE__, obj, iid, supported, TRUE ) #define check_interface( obj, iid, supported ) check_interface_( __LINE__, obj, iid, supported, FALSE ) static void check_interface_( unsigned int line, void *obj, const IID *iid, BOOL supported, BOOL is_broken ) { HRESULT hr, expected_hr, broken_hr; IUnknown *iface = obj; IUnknown *unk;
expected_hr = supported ? S_OK : E_NOINTERFACE; broken_hr = supported ? E_NOINTERFACE : S_OK;
hr = IUnknown_QueryInterface( iface, iid, (void **)&unk ); ok_(__FILE__, line)( hr == expected_hr || broken( is_broken && hr == broken_hr ), "got hr %#lx.\n", hr ); if (SUCCEEDED(hr)) IUnknown_Release( unk ); } ```
Or, maybe even better, use the basic `check_interface`, without the broken result and remove the broken check for IAgileObject interface which probably doesn't really matter on the factory.