VirtualBox

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

Last change on this file since 85535 was 85535, checked in by vboxsync, 5 years ago

DnD/DnDTransferList: More fixes for newly added testcases.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 7.1 KB
Line 
1/* $Id: tstDnDTransferList.cpp 85535 2020-07-30 06:53:40Z 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.virtualbox.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 RTTEST_CHECK_RC(hTest, DnDTransferListInitEx(&list, "", DNDTRANSFERLISTFMT_NATIVE), VERR_INVALID_PARAMETER);
55 RTTEST_CHECK_RC(hTest, DnDTransferListInitEx(&list, szPathWellKnown, DNDTRANSFERLISTFMT_NATIVE), VINF_SUCCESS);
56 RTTEST_CHECK_RC(hTest, DnDTransferListInitEx(&list, szPathWellKnown, DNDTRANSFERLISTFMT_NATIVE), VERR_WRONG_ORDER);
57 DnDTransferListDestroy(&list);
58
59 /* Empty. */
60 RTTEST_CHECK_RC(hTest, DnDTransferListInit(&list), VINF_SUCCESS);
61 DnDTransferListDestroy(&list);
62
63 /* Initial status. */
64 RTTEST_CHECK_RC(hTest, DnDTransferListInitEx(&list, szPathWellKnown, DNDTRANSFERLISTFMT_NATIVE), VINF_SUCCESS);
65 RTTEST_CHECK(hTest, DnDTransferListGetRootCount(&list) == 0);
66 RTTEST_CHECK(hTest, DnDTransferListObjCount(&list) == 0);
67 RTTEST_CHECK(hTest, DnDTransferListObjTotalBytes(&list) == 0);
68 RTTEST_CHECK(hTest, DnDTransferListObjGetFirst(&list) == NULL);
69 DnDTransferListDestroy(&list);
70
71 char szPathTest[RTPATH_MAX];
72
73 /* Root path handling. */
74 RTTEST_CHECK_RC(hTest, DnDTransferListInitEx(&list, szPathWellKnown, DNDTRANSFERLISTFMT_NATIVE), VINF_SUCCESS);
75 RTTEST_CHECK_RC(hTest, DnDTransferListAppendPath(&list, DNDTRANSFERLISTFMT_NATIVE, "/wrong/root/path", DNDTRANSFERLIST_FLAGS_NONE), VERR_INVALID_PARAMETER);
76 rc = RTPathJoin(szPathTest, sizeof(szPathTest), szPathWellKnown, "/non/existing");
77 AssertRCReturn(rc, RTEXITCODE_FAILURE);
78 RTTEST_CHECK_RC(hTest, DnDTransferListAppendPath(&list, DNDTRANSFERLISTFMT_NATIVE, szPathTest, DNDTRANSFERLIST_FLAGS_NONE), VERR_PATH_NOT_FOUND);
79 DnDTransferListDestroy(&list);
80
81 /* Adding native stuff. */
82 /* No root path set yet and non-recursive -> will set root path to szPathWellKnown, but without any entries added. */
83 RTTEST_CHECK_RC(hTest, DnDTransferListInitEx(&list, szPathWellKnown, DNDTRANSFERLISTFMT_NATIVE), VINF_SUCCESS);
84 RTTEST_CHECK_RC(hTest, DnDTransferListAppendPath(&list, DNDTRANSFERLISTFMT_NATIVE, szPathWellKnown, DNDTRANSFERLIST_FLAGS_NONE), VINF_SUCCESS);
85 RTTEST_CHECK(hTest, DnDTransferListGetRootCount(&list));
86 RTTEST_CHECK(hTest, DnDTransferListObjCount(&list));
87
88 /* Add szPathWellKnown again, this time recursively. */
89 RTTEST_CHECK_RC(hTest, DnDTransferListAppendPath(&list, DNDTRANSFERLISTFMT_NATIVE, szPathWellKnown, DNDTRANSFERLIST_FLAGS_RECURSIVE), VINF_SUCCESS);
90 RTTEST_CHECK(hTest, DnDTransferListGetRootCount(&list));
91 RTTEST_CHECK(hTest, DnDTransferListObjCount(&list));
92
93 char *pszString = NULL;
94 size_t cbString = 0;
95 RTTEST_CHECK_RC_OK(hTest, DnDTransferListGetRoots(&list, DNDTRANSFERLISTFMT_NATIVE, &pszString, &cbString));
96 RTTestPrintf(hTest, RTTESTLVL_DEBUG, "Roots:\n%s\n\n", pszString);
97 RTStrFree(pszString);
98
99 PDNDTRANSFEROBJECT pObj;
100 while ((pObj = DnDTransferListObjGetFirst(&list)))
101 {
102 RTTestPrintf(hTest, RTTESTLVL_DEBUG, "Obj: %s\n", DnDTransferObjectGetDestPath(pObj));
103 DnDTransferListObjRemoveFirst(&list);
104 }
105 DnDTransferListDestroy(&list);
106
107 char *pszBuf;
108 size_t cbBuf;
109
110 /* To URI data. */
111 RTTEST_CHECK_RC(hTest, DnDTransferListInitEx(&list, szPathWellKnownURI, DNDTRANSFERLISTFMT_URI), VINF_SUCCESS);
112 RTStrPrintf(szPathTest, sizeof(szPathTest), "%s/foo", szPathWellKnownURI);
113 RTTEST_CHECK_RC(hTest, DnDTransferListAppendPath(&list, DNDTRANSFERLISTFMT_URI, szPathWellKnownURI, DNDTRANSFERLIST_FLAGS_NONE), VINF_SUCCESS);
114 RTTEST_CHECK_RC(hTest, DnDTransferListAppendPath(&list, DNDTRANSFERLISTFMT_URI, szPathTest, DNDTRANSFERLIST_FLAGS_NONE), VERR_FILE_NOT_FOUND);
115 RTTEST_CHECK_RC(hTest, DnDTransferListGetRootsEx(&list, DNDTRANSFERLISTFMT_NATIVE, "" /* pszBasePath */, "\n", &pszBuf, &cbBuf), VINF_SUCCESS);
116 RTTestPrintf(hTest, RTTESTLVL_DEBUG, "Roots (native):\n%s\n", pszBuf);
117 RTStrFree(pszBuf);
118 RTTEST_CHECK_RC(hTest, DnDTransferListGetRootsEx(&list, DNDTRANSFERLISTFMT_URI, "" /* pszBasePath */, "\n", &pszBuf, &cbBuf), VINF_SUCCESS);
119 RTTestPrintf(hTest, RTTESTLVL_DEBUG, "Roots (URI):\n%s\n", pszBuf);
120 RTStrFree(pszBuf);
121 RTTEST_CHECK_RC(hTest, DnDTransferListGetRootsEx(&list, DNDTRANSFERLISTFMT_URI, "\\new\\base\\path", "\n", &pszBuf, &cbBuf), VINF_SUCCESS);
122 RTTestPrintf(hTest, RTTESTLVL_ALWAYS, "Roots (URI, new base):\n%s\n", pszBuf);
123 RTStrFree(pszBuf);
124 RTTEST_CHECK_RC(hTest, DnDTransferListGetRootsEx(&list, DNDTRANSFERLISTFMT_URI, "\\..\\invalid\\path", "\n", &pszBuf, &cbBuf), VERR_INVALID_PARAMETER);
125 DnDTransferListDestroy(&list);
126
127 /* From URI data. */
128 const char szURI[] = "file:///C:/Windows/System32/Boot/\r\n"
129 "file:///C:/Windows/System/\r\n";
130
131 RTTEST_CHECK_RC(hTest, DnDTransferListAppendPathsFromBuffer(&list, DNDTRANSFERLISTFMT_URI, szURI, sizeof(szURI), "\r\n",
132 DNDTRANSFERLIST_FLAGS_NONE), VINF_SUCCESS);
133 RTTEST_CHECK(hTest, DnDTransferListGetRootCount(&list) == 2);
134 RTTEST_CHECK(hTest, RTPathCompare(DnDTransferListGetRootPathAbs(&list), "C:/Windows/") == 0);
135 RTTEST_CHECK_RC(hTest, DnDTransferListGetRootsEx(&list, DNDTRANSFERLISTFMT_NATIVE, "/native/base/path", "\n", &pszBuf, &cbBuf), VINF_SUCCESS);
136 RTTestPrintf(hTest, RTTESTLVL_ALWAYS, "Roots (URI, new base):\n%s\n", pszBuf);
137 RTTEST_CHECK_RC(hTest, DnDTransferListGetRootsEx(&list, DNDTRANSFERLISTFMT_NATIVE, "\\windows\\path", "\n", &pszBuf, &cbBuf), VINF_SUCCESS);
138 RTTestPrintf(hTest, RTTESTLVL_ALWAYS, "Roots (URI, new base):\n%s\n", pszBuf);
139 RTTEST_CHECK_RC(hTest, DnDTransferListGetRootsEx(&list, DNDTRANSFERLISTFMT_NATIVE, "\\\\windows\\\\path", "\n", &pszBuf, &cbBuf), VINF_SUCCESS);
140 RTTestPrintf(hTest, RTTESTLVL_ALWAYS, "Roots (URI, new base):\n%s\n", pszBuf);
141 RTStrFree(pszBuf);
142
143 DnDTransferListDestroy(&list);
144 DnDTransferListDestroy(&list); /* Doing this twice here is intentional. */
145
146 return RTTestSummaryAndDestroy(hTest);
147}
148
Note: See TracBrowser for help on using the repository browser.

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