• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2 * Copyright (c) 2022 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15 #include <gmock/gmock.h>
16 #include <gtest/gtest.h>
17 
18 #include "copy_uri_handler.h"
19 #include "paste_uri_handler.h"
20 #include "pasteboard_client.h"
21 namespace OHOS::MiscServices {
22 using namespace testing::ext;
23 using namespace testing;
24 using namespace OHOS::AAFwk;
25 using namespace OHOS::Media;
26 constexpr const int32_t INVALID_FD = -1;
27 constexpr const char *FILE_URI = "/data/test/resource/pasteboardTest.txt";
28 class PasteDataTest : public testing::Test {
29 public:
30     static void SetUpTestCase(void);
31     static void TearDownTestCase(void);
32     void SetUp();
33     void TearDown();
34 };
35 
SetUpTestCase(void)36 void PasteDataTest::SetUpTestCase(void)
37 {
38 }
39 
TearDownTestCase(void)40 void PasteDataTest::TearDownTestCase(void)
41 {
42 }
43 
SetUp(void)44 void PasteDataTest::SetUp(void)
45 {
46 }
47 
TearDown(void)48 void PasteDataTest::TearDown(void)
49 {
50 }
51 
52 class UriHandlerMock : public UriHandler {
53 public:
54     UriHandlerMock() = default;
55     virtual ~UriHandlerMock() = default;
56 
57     MOCK_METHOD1(ToUri, std::string(int32_t fd));
58     MOCK_METHOD2(ToFd, int32_t(const std::string &uri, bool isClient));
59     MOCK_CONST_METHOD1(IsFile, bool(const std::string &uri));
60 };
61 /**
62 * @tc.name: ReplaceShareUri001
63 * @tc.desc: replace user id in share path
64 * @tc.type: FUNC
65 * @tc.require:AR000H5I1D
66 * @tc.author: baoyayong
67 */
68 HWTEST_F(PasteDataTest, ReplaceShareUri001, TestSize.Level0)
69 {
70     PasteData data;
71     PasteDataRecord::Builder builder(MIMETYPE_TEXT_URI);
72     std::string uriStr = "/data/storage/100/haps/caches/xxx.txt";
73     auto uri = std::make_shared<OHOS::Uri>(uriStr);
74     builder.SetUri(uri);
75     auto record = builder.Build();
76 
77     // mock
78     UriHandlerMock mock;
79     std::string mockUri = "/mnt/hmdfs/100/account/merge_view/services/psteboard_service/.share/xxx.txt";
80     EXPECT_CALL(mock, ToUri(_)).WillRepeatedly(Return(mockUri));
81     EXPECT_CALL(mock, ToFd(_, _)).WillRepeatedly(Return(2));
82     EXPECT_CALL(mock, IsFile(_)).WillRepeatedly(Return(true));
83 
84     data.AddRecord(record);
85     MessageParcel parcel;
86     data.WriteUriFd(parcel, mock);
87     bool result = data.ReadUriFd(parcel, mock);
88     EXPECT_TRUE(result);
89     EXPECT_EQ(mockUri, data.GetPrimaryUri()->ToString());
90     data.ReplaceShareUri(200);
91     std::string mockUri2 = "/mnt/hmdfs/200/account/merge_view/services/psteboard_service/.share/xxx.txt";
92     EXPECT_EQ(mockUri2, data.GetPrimaryUri()->ToString());
93 }
94 /**
95 * @tc.name: uriConvertTest001
96 * @tc.desc: uri convert(in same app)
97 * @tc.type: FUNC
98 * @tc.require:AR000H5I1D
99 * @tc.author: chenyu
100 */
101 HWTEST_F(PasteDataTest, uriConvertTest001, TestSize.Level0)
102 {
103     PasteData data;
104     PasteDataRecord::Builder builder(MIMETYPE_TEXT_URI);
105     std::string uriStr = FILE_URI;
106     auto uri = std::make_shared<OHOS::Uri>(uriStr);
107     builder.SetUri(uri);
108     auto record = builder.Build();
109     data.AddRecord(record);
110 
111     MessageParcel parcel;
112     CopyUriHandler copyHandler;
113     data.WriteUriFd(parcel, copyHandler);
114     bool result = data.ReadUriFd(parcel, copyHandler);
115     EXPECT_TRUE(result);
116     auto distributedUri = data.GetPrimaryUri()->ToString();
117     EXPECT_FALSE(uriStr == distributedUri);
118 
119     MessageParcel parcel1;
120     PasteUriHandler pasteHandler;
121     int32_t fd = 5;
122     pasteHandler.ToUri(fd);
123 
124     data.SetLocalPasteFlag(true);
125     data.WriteUriFd(parcel1, pasteHandler);
126     result = data.ReadUriFd(parcel1, pasteHandler);
127     EXPECT_TRUE(result);
128     ASSERT_TRUE(data.GetPrimaryUri() != nullptr);
129     auto convertedUri = data.GetPrimaryUri()->ToString();
130     EXPECT_EQ(distributedUri, convertedUri);
131     EXPECT_FALSE(uriStr == convertedUri);
132 }
133 
134 /**
135 * @tc.name: GetRealPathFailed001
136 * @tc.desc: GetRealPath Failed(realpath(inOriPath.c_str(), realPath) == nullptr)
137 * @tc.type: FUNC
138 * @tc.require: issuesI5Y6PO
139 * @tc.author: chenyu
140 */
141 HWTEST_F(PasteDataTest, GetRealPathFailed001, TestSize.Level0)
142 {
143     std::string uriStr = "/data/storage/100/haps/caches/xxx.txt";
144     PasteUriHandler pasteHandler;
145     auto ret = pasteHandler.ToFd(uriStr, true);
146     EXPECT_EQ(ret, INVALID_FD);
147 }
148 
149 /**
150 * @tc.name: GetRealPathFailed002
151 * @tc.desc: GetRealPath Failed(inOriPath.size() > PATH_MAX)
152 * @tc.type: FUNC
153 * @tc.require: issuesI5Y6PO
154 * @tc.author: chenyu
155 */
156 HWTEST_F(PasteDataTest, GetRealPathFailed002, TestSize.Level0)
157 {
158     std::string uriStr(PATH_MAX + 2, '*');
159     PasteUriHandler pasteHandler;
160     auto ret = pasteHandler.ToFd(uriStr, true);
161     EXPECT_EQ(ret, INVALID_FD);
162 }
163 
164 /**
165 * @tc.name: PasteDataMarshallingUnMarshalling001
166 * @tc.desc: PasteData: Marshalling unMarshalling
167 * @tc.type: FUNC
168 * @tc.require: AROOOH5R5G
169 * @tc.author: chenyu
170 */
171 HWTEST_F(PasteDataTest, PasteDataMarshallingUnMarshalling001, TestSize.Level0)
172 {
173     std::string htmlText = "<div class='disabled item tip user-programs'>";
174     auto pasteData = PasteboardClient::GetInstance()->CreateHtmlData(htmlText);
175     Parcel parcel;
176     auto ret = pasteData->Marshalling(parcel);
177     ASSERT_TRUE(ret);
178     std::shared_ptr<PasteData> pasteData1(pasteData->Unmarshalling(parcel));
179     ASSERT_TRUE(pasteData1 != nullptr);
180     auto html = pasteData1->GetPrimaryHtml();
181     ASSERT_TRUE(html != nullptr);
182     EXPECT_EQ(*html, htmlText);
183 }
184 
185 /**
186 * @tc.name: PasteDataRecordMarshallingUnMarshalling001
187 * @tc.desc: PasteDataRecord: Marshalling unMarshalling
188 * @tc.type: FUNC
189 * @tc.require: AROOOH5R5G
190 * @tc.author: chenyu
191 */
192 HWTEST_F(PasteDataTest, PasteDataRecordMarshallingUnMarshalling001, TestSize.Level0)
193 {
194     std::shared_ptr<OHOS::AAFwk::Want> want = std::make_shared<OHOS::AAFwk::Want>();
195     std::string key = "id";
196     int32_t id = 456;
197     Want wantIn = want->SetParam(key, id);
198     auto record = PasteboardClient::GetInstance()->CreateWantRecord(want);
199     ASSERT_TRUE(record != nullptr);
200     Parcel parcel;
201     auto ret = record->Marshalling(parcel);
202     ASSERT_TRUE(ret);
203     std::shared_ptr<PasteDataRecord> record1(record->Unmarshalling(parcel));
204     ASSERT_TRUE(record1 != nullptr);
205     auto newWant = record->GetWant();
206     ASSERT_TRUE(newWant != nullptr);
207     int32_t defaultValue = 333;
208     EXPECT_EQ(newWant->GetIntParam(key, defaultValue), id);
209 }
210 
211 /**
212 * @tc.name: ConvertToText001
213 * @tc.desc: PasteDataRecord: ConvertToText
214 * @tc.type: FUNC
215 * @tc.require: AR000HEECD
216 * @tc.author: chenyu
217 */
218 HWTEST_F(PasteDataTest, ConvertToText001, TestSize.Level0)
219 {
220     std::string htmlText = "<div class='disabled item tip user-programs'>";
221     auto record = PasteboardClient::GetInstance()->CreateHtmlTextRecord(htmlText);
222     ASSERT_TRUE(record != nullptr);
223     auto text = record->ConvertToText();
224     EXPECT_EQ(text, htmlText);
225 }
226 } // namespace OHOS::MiscServices