VirtualBox

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

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

DnD: Added DnDTransferListInit() / DnDTransferListInitEx().

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 5.9 KB
Line 
1/* $Id: tstDnDTransferList.cpp 85428 2020-07-23 11:10:46Z 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\\INF\\");
43#else
44 "/bin/");
45#endif
46
47 DNDTRANSFERLIST list;
48 RT_ZERO(list);
49
50 /* Invalid stuff. */
51 RTTEST_CHECK_RC(hTest, DnDTransferListInitEx(&list, ""), VERR_INVALID_PARAMETER);
52 RTTEST_CHECK_RC(hTest, DnDTransferListInitEx(&list, szPathWellKnown), VINF_SUCCESS);
53 RTTEST_CHECK_RC(hTest, DnDTransferListInitEx(&list, szPathWellKnown), VERR_WRONG_ORDER);
54 DnDTransferListDestroy(&list);
55
56 /* Empty. */
57 RTTEST_CHECK_RC(hTest, DnDTransferListInit(&list), VINF_SUCCESS);
58 DnDTransferListDestroy(&list);
59
60 /* Initial status. */
61 RTTEST_CHECK_RC(hTest, DnDTransferListInitEx(&list, szPathWellKnown), VINF_SUCCESS);
62 RTTEST_CHECK(hTest, DnDTransferListGetRootCount(&list) == 0);
63 RTTEST_CHECK(hTest, DnDTransferListObjCount(&list) == 0);
64 RTTEST_CHECK(hTest, DnDTransferListObjTotalBytes(&list) == 0);
65 RTTEST_CHECK(hTest, DnDTransferListObjGetFirst(&list) == NULL);
66
67 char szPathTest[RTPATH_MAX];
68
69 /* Root path handling. */
70 RTTEST_CHECK_RC(hTest, DnDTransferListAppendPath(&list, DNDTRANSFERLISTFMT_NATIVE, "/wrong/root/path", DNDTRANSFERLIST_FLAGS_NONE), VERR_INVALID_PARAMETER);
71 rc = RTPathJoin(szPathTest, sizeof(szPathTest), szPathWellKnown, "/non/existing");
72 AssertRCReturn(rc, RTEXITCODE_FAILURE);
73 RTTEST_CHECK_RC(hTest, DnDTransferListAppendPath(&list, DNDTRANSFERLISTFMT_NATIVE, szPathTest, DNDTRANSFERLIST_FLAGS_NONE), VERR_PATH_NOT_FOUND);
74
75 /* Adding stuff. */
76 RTTEST_CHECK_RC(hTest, DnDTransferListAppendPath(&list, DNDTRANSFERLISTFMT_NATIVE, szPathWellKnown, DNDTRANSFERLIST_FLAGS_RECURSIVE), VINF_SUCCESS);
77 RTTEST_CHECK(hTest, DnDTransferListGetRootCount(&list));
78 RTTEST_CHECK(hTest, DnDTransferListObjCount(&list));
79
80 char *pszString = NULL;
81 size_t cbString = 0;
82 RTTEST_CHECK_RC_OK(hTest, DnDTransferListGetRoots(&list, DNDTRANSFERLISTFMT_NATIVE, &pszString, &cbString));
83 RTTestPrintf(hTest, RTTESTLVL_DEBUG, "Root: %s\n", pszString);
84 RTStrFree(pszString);
85 RTTestPrintf(hTest, RTTESTLVL_DEBUG, "\n");
86
87 PDNDTRANSFEROBJECT pObj;
88 while ((pObj = DnDTransferListObjGetFirst(&list)))
89 {
90 RTTestPrintf(hTest, RTTESTLVL_DEBUG, "Obj: %s\n", DnDTransferObjectGetDestPath(pObj));
91 DnDTransferListObjRemoveFirst(&list);
92 }
93 DnDTransferListDestroy(&list);
94
95 char *pszBuf;
96 size_t cbBuf;
97
98 /* To URI data. */
99 RTTEST_CHECK_RC(hTest, DnDTransferListInitEx(&list, szPathWellKnown), VINF_SUCCESS);
100 RTTEST_CHECK_RC(hTest, DnDTransferListAppendPath(&list, DNDTRANSFERLISTFMT_NATIVE, szPathWellKnown, DNDTRANSFERLIST_FLAGS_NONE), VINF_SUCCESS);
101 RTTEST_CHECK_RC(hTest, DnDTransferListGetRootsEx(&list, DNDTRANSFERLISTFMT_NATIVE, "" /* pszBasePath */, "\n", &pszBuf, &cbBuf), VINF_SUCCESS);
102 RTTestPrintf(hTest, RTTESTLVL_DEBUG, "Roots (native):\n%s\n", pszBuf);
103 RTStrFree(pszBuf);
104 RTTEST_CHECK_RC(hTest, DnDTransferListGetRootsEx(&list, DNDTRANSFERLISTFMT_URI, "" /* pszBasePath */, "\n", &pszBuf, &cbBuf), VINF_SUCCESS);
105 RTTestPrintf(hTest, RTTESTLVL_DEBUG, "Roots (URI):\n%s\n", pszBuf);
106 RTStrFree(pszBuf);
107 RTTEST_CHECK_RC(hTest, DnDTransferListGetRootsEx(&list, DNDTRANSFERLISTFMT_URI, "\\new\\base\\path", "\n", &pszBuf, &cbBuf), VINF_SUCCESS);
108 RTTestPrintf(hTest, RTTESTLVL_ALWAYS, "Roots (URI, new base):\n%s\n", pszBuf);
109 RTStrFree(pszBuf);
110 RTTEST_CHECK_RC(hTest, DnDTransferListGetRootsEx(&list, DNDTRANSFERLISTFMT_URI, "\\..\\invalid\\path", "\n", &pszBuf, &cbBuf), VERR_INVALID_PARAMETER);
111 DnDTransferListDestroy(&list);
112
113 /* From URI data. */
114 const char szURI[] = "file:///file1\r\n"
115 "file:///file2\r\n"
116 "file:///dir1\r\n"
117 "file:///dir%20with%20spaces\r\n";
118
119 RTTEST_CHECK_RC(hTest, DnDTransferListAppendPathsFromBuffer(&list, DNDTRANSFERLISTFMT_URI, szURI, sizeof(szURI), "\r\n",
120 DNDTRANSFERLIST_FLAGS_NONE), VINF_SUCCESS);
121 RTTEST_CHECK(hTest, DnDTransferListGetRootCount(&list) == 4);
122 RTTEST_CHECK(hTest, RTStrCmp(DnDTransferListGetRootPathAbs(&list), RTPATH_SLASH_STR) == 0);
123 RTTEST_CHECK_RC(hTest, DnDTransferListGetRootsEx(&list, DNDTRANSFERLISTFMT_NATIVE, "/native/base/path", "\n", &pszBuf, &cbBuf), VINF_SUCCESS);
124 RTTestPrintf(hTest, RTTESTLVL_ALWAYS, "Roots (URI, new base):\n%s\n", pszBuf);
125 RTTEST_CHECK_RC(hTest, DnDTransferListGetRootsEx(&list, DNDTRANSFERLISTFMT_NATIVE, "\\windows\\path", "\n", &pszBuf, &cbBuf), VINF_SUCCESS);
126 RTTestPrintf(hTest, RTTESTLVL_ALWAYS, "Roots (URI, new base):\n%s\n", pszBuf);
127 RTTEST_CHECK_RC(hTest, DnDTransferListGetRootsEx(&list, DNDTRANSFERLISTFMT_NATIVE, "\\\\windows\\\\path", "\n", &pszBuf, &cbBuf), VINF_SUCCESS);
128 RTTestPrintf(hTest, RTTESTLVL_ALWAYS, "Roots (URI, new base):\n%s\n", pszBuf);
129 RTStrFree(pszBuf);
130
131 return RTTestSummaryAndDestroy(hTest);
132}
133
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