VirtualBox

source: vbox/trunk/src/VBox/GuestHost/DragAndDrop/testcase/tstDnDTransferList.cpp@ 90569

最後變更 在這個檔案從90569是 86411,由 vboxsync 提交於 4 年 前

tstDnDTransferList: Leak fix. bugref:9841

  • 屬性 svn:eol-style 設為 native
  • 屬性 svn:keywords 設為 Author Date Id Revision
檔案大小: 7.5 KB
 
1/* $Id: tstDnDTransferList.cpp 86411 2020-10-02 10:27:10Z vboxsync $ */
2/** @file
3 * DnD transfer list tests.
4 */
5
6/*
7 * Copyright (C) 2020 Oracle Corporation
8 *
9 * This file is part of VirtualBox Open Source Edition (OSE), as
10 * available from http://www.alldomusa.eu.org. This file is free software;
11 * you can redistribute it and/or modify it under the terms of the GNU
12 * General Public License (GPL) as published by the Free Software
13 * Foundation, in version 2 as it comes in the "COPYING" file of the
14 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16 */
17
18#include <iprt/assert.h>
19#include <iprt/env.h>
20#include <iprt/err.h>
21#include <iprt/path.h>
22#include <iprt/string.h>
23#include <iprt/test.h>
24
25#include <VBox/GuestHost/DragAndDrop.h>
26
27
28int main()
29{
30 /*
31 * Init the runtime, test and say hello.
32 */
33 RTTEST hTest;
34 int rc = RTTestInitAndCreate("tstDnDTransferList", &hTest);
35 if (rc)
36 return rc;
37 RTTestBanner(hTest);
38
39 char szPathWellKnown[RTPATH_MAX];
40 RTStrCopy(szPathWellKnown, sizeof(szPathWellKnown),
41#ifdef RT_OS_WINDOWS
42 "C:\\Windows\\System32\\Boot\\");
43#else
44 "/bin/");
45#endif
46
47 char szPathWellKnownURI[RTPATH_MAX];
48 RTStrPrintf(szPathWellKnownURI, sizeof(szPathWellKnownURI), "file:///%s", szPathWellKnown);
49
50 DNDTRANSFERLIST list;
51 RT_ZERO(list);
52
53 /* Invalid stuff. */
54 RTTestDisableAssertions(hTest);
55 RTTEST_CHECK_RC(hTest, DnDTransferListInitEx(&list, "", DNDTRANSFERLISTFMT_NATIVE), VERR_INVALID_PARAMETER);
56 RTTEST_CHECK_RC(hTest, DnDTransferListInitEx(&list, szPathWellKnown, DNDTRANSFERLISTFMT_NATIVE), VINF_SUCCESS);
57 RTTEST_CHECK_RC(hTest, DnDTransferListInitEx(&list, szPathWellKnown, DNDTRANSFERLISTFMT_NATIVE), VERR_WRONG_ORDER);
58 RTTestRestoreAssertions(hTest);
59 DnDTransferListDestroy(&list);
60
61 /* Empty. */
62 RTTEST_CHECK_RC(hTest, DnDTransferListInit(&list), VINF_SUCCESS);
63 DnDTransferListDestroy(&list);
64
65 /* Initial status. */
66 RTTEST_CHECK_RC(hTest, DnDTransferListInitEx(&list, szPathWellKnown, DNDTRANSFERLISTFMT_NATIVE), VINF_SUCCESS);
67 RTTEST_CHECK(hTest, DnDTransferListGetRootCount(&list) == 0);
68 RTTEST_CHECK(hTest, DnDTransferListObjCount(&list) == 0);
69 RTTEST_CHECK(hTest, DnDTransferListObjTotalBytes(&list) == 0);
70 RTTEST_CHECK(hTest, DnDTransferListObjGetFirst(&list) == NULL);
71 DnDTransferListDestroy(&list);
72
73 char szPathTest[RTPATH_MAX];
74
75 /* Root path handling. */
76 RTTEST_CHECK_RC(hTest, DnDTransferListInitEx(&list, szPathWellKnown, DNDTRANSFERLISTFMT_NATIVE), VINF_SUCCESS);
77 RTTEST_CHECK_RC(hTest, DnDTransferListAppendPath(&list, DNDTRANSFERLISTFMT_NATIVE, "/wrong/root/path", DNDTRANSFERLIST_FLAGS_NONE), VERR_INVALID_PARAMETER);
78 rc = RTPathJoin(szPathTest, sizeof(szPathTest), szPathWellKnown, "/non/existing");
79 AssertRCReturn(rc, RTEXITCODE_FAILURE);
80 RTTEST_CHECK_RC(hTest, DnDTransferListAppendPath(&list, DNDTRANSFERLISTFMT_NATIVE, szPathTest, DNDTRANSFERLIST_FLAGS_NONE), VERR_PATH_NOT_FOUND);
81 DnDTransferListDestroy(&list);
82
83 /* Adding native stuff. */
84 /* No root path set yet and non-recursive -> will set root path to szPathWellKnown, but without any entries added. */
85 RTTEST_CHECK_RC(hTest, DnDTransferListInitEx(&list, szPathWellKnown, DNDTRANSFERLISTFMT_NATIVE), VINF_SUCCESS);
86 RTTEST_CHECK_RC(hTest, DnDTransferListAppendPath(&list, DNDTRANSFERLISTFMT_NATIVE, szPathWellKnown, DNDTRANSFERLIST_FLAGS_NONE), VINF_SUCCESS);
87 RTTEST_CHECK(hTest, DnDTransferListGetRootCount(&list));
88 RTTEST_CHECK(hTest, DnDTransferListObjCount(&list));
89
90 /* Add szPathWellKnown again, this time recursively. */
91 RTTEST_CHECK_RC(hTest, DnDTransferListAppendPath(&list, DNDTRANSFERLISTFMT_NATIVE, szPathWellKnown, DNDTRANSFERLIST_FLAGS_RECURSIVE), VINF_SUCCESS);
92 RTTEST_CHECK(hTest, DnDTransferListGetRootCount(&list));
93 RTTEST_CHECK(hTest, DnDTransferListObjCount(&list));
94
95 char *pszString = NULL;
96 size_t cbString = 0;
97 RTTEST_CHECK_RC_OK(hTest, DnDTransferListGetRoots(&list, DNDTRANSFERLISTFMT_NATIVE, &pszString, &cbString));
98 RTTestPrintf(hTest, RTTESTLVL_DEBUG, "Roots:\n%s\n\n", pszString);
99 RTStrFree(pszString);
100
101 PDNDTRANSFEROBJECT pObj;
102 while ((pObj = DnDTransferListObjGetFirst(&list)))
103 {
104 RTTestPrintf(hTest, RTTESTLVL_DEBUG, "Obj: %s\n", DnDTransferObjectGetDestPath(pObj));
105 DnDTransferListObjRemoveFirst(&list);
106 }
107 DnDTransferListDestroy(&list);
108
109 char *pszBuf;
110 size_t cbBuf;
111
112 /* To URI data. */
113 RTTEST_CHECK_RC(hTest, DnDTransferListInitEx(&list, szPathWellKnownURI, DNDTRANSFERLISTFMT_URI), VINF_SUCCESS);
114 RTStrPrintf(szPathTest, sizeof(szPathTest), "%s/foo", szPathWellKnownURI);
115 RTTEST_CHECK_RC(hTest, DnDTransferListAppendPath(&list, DNDTRANSFERLISTFMT_URI, szPathWellKnownURI, DNDTRANSFERLIST_FLAGS_NONE), VINF_SUCCESS);
116 RTTEST_CHECK_RC(hTest, DnDTransferListAppendPath(&list, DNDTRANSFERLISTFMT_URI, szPathTest, DNDTRANSFERLIST_FLAGS_NONE), VERR_PATH_NOT_FOUND);
117 RTTEST_CHECK_RC(hTest, DnDTransferListGetRootsEx(&list, DNDTRANSFERLISTFMT_NATIVE, "" /* pszBasePath */, "\n", &pszBuf, &cbBuf), VINF_SUCCESS);
118 RTTestPrintf(hTest, RTTESTLVL_DEBUG, "Roots (native):\n%s\n", pszBuf);
119 RTStrFree(pszBuf);
120 RTTEST_CHECK_RC(hTest, DnDTransferListGetRootsEx(&list, DNDTRANSFERLISTFMT_URI, "" /* pszBasePath */, "\n", &pszBuf, &cbBuf), VINF_SUCCESS);
121 RTTestPrintf(hTest, RTTESTLVL_DEBUG, "Roots (URI):\n%s\n", pszBuf);
122 RTStrFree(pszBuf);
123 RTTEST_CHECK_RC(hTest, DnDTransferListGetRootsEx(&list, DNDTRANSFERLISTFMT_URI, "\\new\\base\\path", "\n", &pszBuf, &cbBuf), VINF_SUCCESS);
124 RTTestPrintf(hTest, RTTESTLVL_ALWAYS, "Roots (URI, new base):\n%s\n", pszBuf);
125 RTStrFree(pszBuf);
126 RTTEST_CHECK_RC(hTest, DnDTransferListGetRootsEx(&list, DNDTRANSFERLISTFMT_URI, "\\..\\invalid\\path", "\n", &pszBuf, &cbBuf), VERR_INVALID_PARAMETER);
127 DnDTransferListDestroy(&list);
128
129 /* From URI data. */
130#ifdef RT_OS_WINDOWS
131 RTStrPrintf(szPathTest, sizeof(szPathTest), "C:/Windows/");
132 const char szURI[] =
133 "file:///C:/Windows/System32/Boot/\r\n"
134 "file:///C:/Windows/System/\r\n";
135#else
136 RTStrPrintf(szPathTest, sizeof(szPathTest), "/usr/");
137 const char szURI[] =
138 "file:///usr/bin/\r\n"
139 "file:///usr/lib/\r\n";
140#endif
141
142 RTTEST_CHECK_RC(hTest, DnDTransferListAppendPathsFromBuffer(&list, DNDTRANSFERLISTFMT_URI, szURI, sizeof(szURI), "\r\n",
143 DNDTRANSFERLIST_FLAGS_NONE), VINF_SUCCESS);
144 RTTEST_CHECK(hTest, DnDTransferListGetRootCount(&list) == 2);
145 RTTEST_CHECK(hTest, RTPathCompare(DnDTransferListGetRootPathAbs(&list), szPathTest) == 0);
146
147 pszBuf = NULL;
148 RTTEST_CHECK_RC(hTest, DnDTransferListGetRootsEx(&list, DNDTRANSFERLISTFMT_NATIVE, "/native/base/path", "\n", &pszBuf, &cbBuf), VINF_SUCCESS);
149 RTTestPrintf(hTest, RTTESTLVL_ALWAYS, "Roots (URI, new base):\n%s\n", pszBuf);
150 RTStrFree(pszBuf);
151
152 pszBuf = NULL;
153 RTTEST_CHECK_RC(hTest, DnDTransferListGetRootsEx(&list, DNDTRANSFERLISTFMT_NATIVE, "\\windows\\path", "\n", &pszBuf, &cbBuf), VINF_SUCCESS);
154 RTTestPrintf(hTest, RTTESTLVL_ALWAYS, "Roots (URI, new base):\n%s\n", pszBuf);
155 RTStrFree(pszBuf);
156
157 pszBuf = NULL;
158 RTTEST_CHECK_RC(hTest, DnDTransferListGetRootsEx(&list, DNDTRANSFERLISTFMT_NATIVE, "\\\\windows\\\\path", "\n", &pszBuf, &cbBuf), VINF_SUCCESS);
159 RTTestPrintf(hTest, RTTESTLVL_ALWAYS, "Roots (URI, new base):\n%s\n", pszBuf);
160 RTStrFree(pszBuf);
161
162 DnDTransferListDestroy(&list);
163 DnDTransferListDestroy(&list); /* Doing this twice here is intentional. */
164
165 return RTTestSummaryAndDestroy(hTest);
166}
167
注意: 瀏覽 TracBrowser 來幫助您使用儲存庫瀏覽器

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette