Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
6bc9f83d
Commit
6bc9f83d
authored
Sep 23, 2021
by
Nikolay Sivov
Committed by
Alexandre Julliard
Sep 23, 2021
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ole32/tests: Add extendable tests for generic composite simplification.
Signed-off-by:
Nikolay Sivov
<
nsivov@codeweavers.com
>
Signed-off-by:
Alexandre Julliard
<
julliard@winehq.org
>
parent
5c18aa58
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
96 additions
and
71 deletions
+96
-71
moniker.c
dlls/ole32/tests/moniker.c
+96
-71
No files found.
dlls/ole32/tests/moniker.c
View file @
6bc9f83d
...
...
@@ -68,15 +68,6 @@ DEFINE_OLEGUID(CLSID_CompositeMoniker, 0x309, 0, 0);
DEFINE_OLEGUID
(
CLSID_ClassMoniker
,
0x31a
,
0
,
0
);
DEFINE_OLEGUID
(
CLSID_PointerMoniker
,
0x306
,
0
,
0
);
#define EXPECT_REF(obj,ref) _expect_ref((IUnknown *)obj, ref, __LINE__)
static
void
_expect_ref
(
IUnknown
*
obj
,
ULONG
ref
,
int
line
)
{
ULONG
refcount
;
IUnknown_AddRef
(
obj
);
refcount
=
IUnknown_Release
(
obj
);
ok_
(
__FILE__
,
line
)(
refcount
==
ref
,
"Unexpected got %u.
\n
"
,
refcount
);
}
#define TEST_MONIKER_TYPE_TODO(m,t) _test_moniker_type(m, t, TRUE, __LINE__)
#define TEST_MONIKER_TYPE(m,t) _test_moniker_type(m, t, FALSE, __LINE__)
static
void
_test_moniker_type
(
IMoniker
*
moniker
,
DWORD
type
,
BOOL
todo
,
int
line
)
...
...
@@ -2902,9 +2893,65 @@ todo_wine
IMoniker_Release
(
moniker2
);
}
static
HRESULT
create_moniker_from_desc
(
const
char
*
desc
,
unsigned
int
*
eaten
,
IMoniker
**
moniker
)
{
IMoniker
*
left
,
*
right
;
WCHAR
nameW
[
3
];
HRESULT
hr
;
desc
+=
*
eaten
;
switch
(
*
desc
)
{
case
'I'
:
nameW
[
0
]
=
desc
[
0
];
nameW
[
1
]
=
desc
[
1
];
nameW
[
2
]
=
0
;
*
eaten
+=
2
;
return
CreateItemMoniker
(
L"!"
,
nameW
,
moniker
);
case
'A'
:
*
eaten
+=
2
;
*
moniker
=
create_antimoniker
(
desc
[
1
]
-
'0'
);
return
S_OK
;
case
'C'
:
(
*
eaten
)
++
;
hr
=
create_moniker_from_desc
(
desc
,
eaten
,
&
left
);
ok
(
hr
==
S_OK
,
"Unexpected hr %#x.
\n
"
,
hr
);
hr
=
create_moniker_from_desc
(
desc
,
eaten
,
&
right
);
ok
(
hr
==
S_OK
,
"Unexpected hr %#x.
\n
"
,
hr
);
hr
=
CreateGenericComposite
(
left
,
right
,
moniker
);
IMoniker_Release
(
left
);
IMoniker_Release
(
right
);
return
hr
;
default:
ok
(
0
,
"Unexpected description %s.
\n
"
,
desc
);
return
E_NOTIMPL
;
}
}
static
void
test_generic_composite_moniker
(
void
)
{
IMoniker
*
moniker
,
*
inverse
,
*
inverse2
,
*
moniker1
,
*
moniker2
,
*
moniker3
,
*
moniker4
;
static
const
struct
simplify_test
{
const
char
*
left
;
const
char
*
right
;
unsigned
int
result_type
;
const
WCHAR
*
name
;
}
simplify_tests
[]
=
{
{
"I1"
,
"I2"
,
MKSYS_GENERICCOMPOSITE
,
L"!I1!I2"
},
{
"I1"
,
"A2"
,
MKSYS_ANTIMONIKER
,
L"
\\
.."
},
{
"A1"
,
"A1"
,
MKSYS_GENERICCOMPOSITE
,
L"
\\
..
\\
.."
},
{
"A2"
,
"A1"
,
MKSYS_GENERICCOMPOSITE
,
L"
\\
..
\\
..
\\
.."
},
{
"CI1I2"
,
"A1"
,
MKSYS_ITEMMONIKER
,
L"!I1"
},
{
"I1"
,
"A1"
,
MKSYS_NONE
},
{
"CI1I2"
,
"A2"
,
MKSYS_NONE
},
{
"CI1I2"
,
"A3"
,
MKSYS_ANTIMONIKER
,
L"
\\
.."
},
{
"CI1I3"
,
"CA1I2"
,
MKSYS_GENERICCOMPOSITE
,
L"!I1!I2"
},
};
IMoniker
*
moniker
,
*
inverse
,
*
moniker1
,
*
moniker2
;
IEnumMoniker
*
enummoniker
;
IRunningObjectTable
*
rot
;
DWORD
hash
,
cookie
;
...
...
@@ -2915,84 +2962,62 @@ static void test_generic_composite_moniker(void)
IROTData
*
rotdata
;
IMarshal
*
marshal
;
IStream
*
stream
;
unsigned
int
i
;
WCHAR
*
str
;
ULONG
len
;
hr
=
CreateBindCtx
(
0
,
&
bindctx
);
ok
(
hr
==
S_OK
,
"Failed to create bind context, hr %#x.
\n
"
,
hr
);
hr
=
CreateItemMoniker
(
L"!"
,
L"Test"
,
&
moniker1
);
ok
(
hr
==
S_OK
,
"Failed to create a moniker, hr %#x.
\n
"
,
hr
);
hr
=
CreateItemMoniker
(
L"#"
,
L"Wine"
,
&
moniker2
);
ok
(
hr
==
S_OK
,
"Failed to create a moniker, hr %#x.
\n
"
,
hr
);
hr
=
CreateGenericComposite
(
moniker1
,
moniker2
,
&
moniker
);
ok
(
hr
==
S_OK
,
"Failed to create a moniker, hr %#x.
\n
"
,
hr
);
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
simplify_tests
);
++
i
)
{
IMoniker
*
left
,
*
right
,
*
composite
=
NULL
;
unsigned
int
moniker_type
,
eaten
;
WCHAR
*
name
;
/* Compose with itself. */
EXPECT_REF
(
moniker1
,
2
);
hr
=
CreateGenericComposite
(
moniker1
,
moniker1
,
&
moniker
);
ok
(
hr
==
S_OK
,
"Failed to create composite, hr %#x.
\n
"
,
hr
);
EXPECT_REF
(
moniker1
,
4
);
TEST_MONIKER_TYPE
(
moniker
,
MKSYS_GENERICCOMPOSITE
);
IMoniker_Release
(
moniker
);
winetest_push_context
(
"simplify[%u]"
,
i
);
/* (I) + (A) -> () */
hr
=
IMoniker_Inverse
(
moniker1
,
&
inverse
);
ok
(
hr
==
S_OK
,
"Failed to invert, hr %#x.
\n
"
,
hr
);
hr
=
CreateGenericComposite
(
moniker1
,
inverse
,
&
moniker
);
ok
(
hr
==
S_OK
,
"Unexpected hr %#x.
\n
"
,
hr
);
ok
(
!
moniker
,
"Unexpected pointer.
\n
"
);
eaten
=
0
;
hr
=
create_moniker_from_desc
(
simplify_tests
[
i
].
left
,
&
eaten
,
&
left
);
ok
(
hr
==
S_OK
,
"Unexpected hr %#x.
\n
"
,
hr
);
eaten
=
0
;
hr
=
create_moniker_from_desc
(
simplify_tests
[
i
].
right
,
&
eaten
,
&
right
);
ok
(
hr
==
S_OK
,
"Unexpected hr %#x.
\n
"
,
hr
);
hr
=
CreateGenericComposite
(
left
,
right
,
&
composite
);
ok
(
hr
==
S_OK
,
"Failed to create a composite, hr %#x.
\n
"
,
hr
);
/* (I1,I2) + (A,A) -> (I1,I2+A,A) -> (I1,A) -> () */
hr
=
CreateGenericComposite
(
moniker1
,
moniker2
,
&
moniker
);
ok
(
hr
==
S_OK
,
"Failed to create composite, hr %#x.
\n
"
,
hr
);
hr
=
CreateGenericComposite
(
inverse
,
inverse
,
&
moniker3
);
ok
(
hr
==
S_OK
,
"Failed to create composite, hr %#x.
\n
"
,
hr
);
TEST_MONIKER_TYPE
(
moniker3
,
MKSYS_GENERICCOMPOSITE
);
if
(
composite
)
{
hr
=
IMoniker_IsSystemMoniker
(
composite
,
&
moniker_type
);
ok
(
hr
==
S_OK
,
"Unexpected hr %#x.
\n
"
,
hr
);
ok
(
moniker_type
==
simplify_tests
[
i
].
result_type
,
"Unexpected result type %u.
\n
"
,
moniker_type
);
hr
=
CreateGenericComposite
(
moniker
,
moniker3
,
&
moniker4
);
ok
(
hr
==
S_OK
,
"Unexpected hr %#x.
\n
"
,
hr
);
ok
(
!
moniker4
,
"Unexpected pointer.
\n
"
);
hr
=
IMoniker_GetDisplayName
(
composite
,
bindctx
,
NULL
,
&
name
);
ok
(
hr
==
S_OK
,
"Unexpected hr %#x.
\n
"
,
hr
);
ok
(
!
lstrcmpW
(
name
,
simplify_tests
[
i
].
name
),
"Unexpected result name %s.
\n
"
,
wine_dbgstr_w
(
name
));
CoTaskMemFree
(
name
);
IMoniker_Release
(
moniker
);
IMoniker_Release
(
moniker3
);
IMoniker_Release
(
composite
);
}
else
ok
(
simplify_tests
[
i
].
result_type
==
MKSYS_NONE
,
"Unexpected result type.
\n
"
);
/* (I1,I2) + (A2,A) -> (I1,I2+A2,A) -> (I1,A,A) -> (I1+A,A) -> (A) */
hr
=
CreateGenericComposite
(
moniker1
,
moniker2
,
&
moniker
);
ok
(
hr
==
S_OK
,
"Failed to create composite, hr %#x.
\n
"
,
hr
);
ok
(
!!
moniker
,
"Unexpected pointer.
\n
"
);
inverse2
=
create_antimoniker
(
2
);
hr
=
CreateGenericComposite
(
inverse2
,
inverse
,
&
moniker3
);
ok
(
hr
==
S_OK
,
"Failed to create composite, hr %#x.
\n
"
,
hr
);
ok
(
!!
moniker3
,
"Unexpected pointer.
\n
"
);
IMoniker_Release
(
inverse2
);
winetest_pop_context
();
hr
=
CreateGenericComposite
(
moniker
,
moniker3
,
&
moniker4
);
ok
(
hr
==
S_OK
,
"Unexpected hr %#x.
\n
"
,
hr
);
TEST_MONIKER_TYPE
(
moniker4
,
MKSYS_ANTIMONIKER
);
IMoniker_Release
(
moniker4
);
IMoniker_Release
(
moniker
);
IMoniker_Release
(
moniker3
);
IMoniker_Release
(
left
);
IMoniker_Release
(
right
);
}
/* (I1,I2) + (A,I2) -> (I1,I2+A,I2) -> (I1,I2) */
hr
=
CreateItemMoniker
(
L"!"
,
L"Test"
,
&
moniker1
);
ok
(
hr
==
S_OK
,
"Failed to create a moniker, hr %#x.
\n
"
,
hr
);
hr
=
CreateItemMoniker
(
L"#"
,
L"Wine"
,
&
moniker2
);
ok
(
hr
==
S_OK
,
"Failed to create a moniker, hr %#x.
\n
"
,
hr
);
hr
=
CreateGenericComposite
(
moniker1
,
moniker2
,
&
moniker
);
ok
(
hr
==
S_OK
,
"Failed to create composite, hr %#x.
\n
"
,
hr
);
ok
(
!!
moniker
,
"Unexpected pointer.
\n
"
);
ok
(
hr
==
S_OK
,
"Failed to create a moniker, hr %#x.
\n
"
,
hr
);
hr
=
CreateGenericComposite
(
inverse
,
moniker2
,
&
moniker3
);
hr
=
CreateGenericComposite
(
moniker1
,
moniker2
,
&
moniker
);
ok
(
hr
==
S_OK
,
"Failed to create composite, hr %#x.
\n
"
,
hr
);
ok
(
!!
moniker3
,
"Unexpected pointer.
\n
"
);
hr
=
CreateGenericComposite
(
moniker
,
moniker3
,
&
moniker4
);
ok
(
hr
==
S_OK
,
"Unexpected hr %#x.
\n
"
,
hr
);
TEST_MONIKER_TYPE
(
moniker4
,
MKSYS_GENERICCOMPOSITE
);
TEST_DISPLAY_NAME
(
moniker4
,
L"!Test#Wine"
);
IMoniker_Release
(
moniker4
);
IMoniker_Release
(
moniker3
);
IMoniker_Release
(
inverse
);
TEST_MONIKER_TYPE
(
moniker
,
MKSYS_GENERICCOMPOSITE
);
/* Generic composite is special, as it does not addref in this case. */
hr
=
IMoniker_QueryInterface
(
moniker
,
&
CLSID_CompositeMoniker
,
(
void
**
)
&
unknown
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment