PuzzleSDK
HttpClientTest类 参考

#include <HttpClientTest.h>

+ 类 HttpClientTest 继承关系图:
+ HttpClientTest 的协作图:

Public 成员函数

 CREATE_FUNC (HttpClientTest)
 
 HttpClientTest ()
 
virtual ~HttpClientTest ()
 
void onMenuGetTestClicked (cocos2d::Ref *sender, bool isImmediate)
 
void onMenuPostTestClicked (cocos2d::Ref *sender, bool isImmediate)
 
void onMenuPostBinaryTestClicked (cocos2d::Ref *sender, bool isImmediate)
 
void onMenuPutTestClicked (cocos2d::Ref *sender, bool isImmediate)
 
void onMenuDeleteTestClicked (cocos2d::Ref *sender, bool isImmediate)
 
void onHttpRequestCompleted (cocos2d::network::HttpClient *sender, cocos2d::network::HttpResponse *response)
 
virtual std::string title () const override
 
- Public 成员函数 继承自 TestCase
 TestCase ()
 
 ~TestCase ()
 
virtual std::string subtitle () const
 
virtual Type getTestType () const
 
virtual float getDuration () const
 
virtual std::string getExpectedOutput () const
 
virtual std::string getActualOutput () const
 
virtual void restartTestCallback (cocos2d::Ref *sender)
 
virtual void nextTestCallback (cocos2d::Ref *sender)
 
virtual void priorTestCallback (cocos2d::Ref *sender)
 
virtual void onBackCallback (cocos2d::Ref *sender)
 
void setTestSuite (TestSuite *testSuite)
 
TestSuitegetTestSuite () const
 
float getRunTime () const
 
void setTestCaseName (const std::string &name)
 
std::string getTestCaseName () const
 
const cocos2d::Label * getSubtitleLable () const
 
const cocos2d::MenuItemImage * getRestartTestItem () const
 
virtual void onEnter () override
 

Private 属性

cocos2d::Label * _labelStatusCode
 

额外继承的成员函数

- Public 类型 继承自 TestCase
enum class  Type { ROBUSTNESS , UNIT , GRAPHICAL_STATIC , MANUAL }
 
- Public 属性 继承自 TestCase
CC_CONSTRUCTOR_ACCESS __pad0__: virtual bool init() override
 
- Protected 属性 继承自 TestCase
cocos2d::MenuItemImage * _priorTestItem
 
cocos2d::MenuItemImage * _restartTestItem
 
cocos2d::MenuItemImage * _nextTestItem
 
cocos2d::Label * _titleLabel
 
cocos2d::Label * _subtitleLabel
 

详细描述

在文件 HttpClientTest.h35 行定义.

构造及析构函数说明

◆ HttpClientTest()

HttpClientTest::HttpClientTest ( )

在文件 HttpClientTest.cpp39 行定义.

40: _labelStatusCode(nullptr)
41{
42 auto winSize = Director::getInstance()->getWinSize();
43
44 const int MARGIN = 40;
45 const int SPACE = 35;
46
47 const int LEFT = winSize.width / 4;
48 const int RIGHT = winSize.width / 4 * 3;
49
50 auto menuRequest = Menu::create();
51 menuRequest->setPosition(Vec2::ZERO);
52 addChild(menuRequest);
53
54 // Get
55 auto labelGet = Label::createWithTTF("Test Get", "fonts/arial.ttf", 22);
56 auto itemGet = MenuItemLabel::create(labelGet, CC_CALLBACK_1(HttpClientTest::onMenuGetTestClicked, this, false));
57 itemGet->setPosition(LEFT, winSize.height - MARGIN - SPACE);
58 menuRequest->addChild(itemGet);
59
60 // Post
61 auto labelPost = Label::createWithTTF("Test Post", "fonts/arial.ttf", 22);
62 auto itemPost = MenuItemLabel::create(labelPost, CC_CALLBACK_1(HttpClientTest::onMenuPostTestClicked, this, false));
63 itemPost->setPosition(LEFT, winSize.height - MARGIN - 2 * SPACE);
64 menuRequest->addChild(itemPost);
65
66 // Post Binary
67 auto labelPostBinary = Label::createWithTTF("Test Post Binary", "fonts/arial.ttf", 22);
68 auto itemPostBinary = MenuItemLabel::create(labelPostBinary, CC_CALLBACK_1(HttpClientTest::onMenuPostBinaryTestClicked, this, false));
69 itemPostBinary->setPosition(LEFT, winSize.height - MARGIN - 3 * SPACE);
70 menuRequest->addChild(itemPostBinary);
71
72 // Put
73 auto labelPut = Label::createWithTTF("Test Put", "fonts/arial.ttf", 22);
74 auto itemPut = MenuItemLabel::create(labelPut, CC_CALLBACK_1(HttpClientTest::onMenuPutTestClicked, this, false));
75 itemPut->setPosition(LEFT, winSize.height - MARGIN - 4 * SPACE);
76 menuRequest->addChild(itemPut);
77
78 // Delete
79 auto labelDelete = Label::createWithTTF("Test Delete", "fonts/arial.ttf", 22);
80 auto itemDelete = MenuItemLabel::create(labelDelete, CC_CALLBACK_1(HttpClientTest::onMenuDeleteTestClicked, this, false));
81 itemDelete->setPosition(LEFT, winSize.height - MARGIN - 5 * SPACE);
82 menuRequest->addChild(itemDelete);
83
84 // Get for sendImmediate
85 labelGet = Label::createWithTTF("Test Immediate Get", "fonts/arial.ttf", 22);
86 itemGet = MenuItemLabel::create(labelGet, CC_CALLBACK_1(HttpClientTest::onMenuGetTestClicked, this, true));
87 itemGet->setPosition(RIGHT, winSize.height - MARGIN - SPACE);
88 menuRequest->addChild(itemGet);
89
90 // Post for sendImmediate
91 labelPost = Label::createWithTTF("Test Immediate Post", "fonts/arial.ttf", 22);
92 itemPost = MenuItemLabel::create(labelPost, CC_CALLBACK_1(HttpClientTest::onMenuPostTestClicked, this, true));
93 itemPost->setPosition(RIGHT, winSize.height - MARGIN - 2 * SPACE);
94 menuRequest->addChild(itemPost);
95
96 // Post Binary for sendImmediate
97 labelPostBinary = Label::createWithTTF("Test Immediate Post Binary", "fonts/arial.ttf", 22);
98 itemPostBinary = MenuItemLabel::create(labelPostBinary, CC_CALLBACK_1(HttpClientTest::onMenuPostBinaryTestClicked, this, true));
99 itemPostBinary->setPosition(RIGHT, winSize.height - MARGIN - 3 * SPACE);
100 menuRequest->addChild(itemPostBinary);
101
102 // Put for sendImmediate
103 labelPut = Label::createWithTTF("Test Immediate Put", "fonts/arial.ttf", 22);
104 itemPut = MenuItemLabel::create(labelPut, CC_CALLBACK_1(HttpClientTest::onMenuPutTestClicked, this, true));
105 itemPut->setPosition(RIGHT, winSize.height - MARGIN - 4 * SPACE);
106 menuRequest->addChild(itemPut);
107
108 // Delete for sendImmediate
109 labelDelete = Label::createWithTTF("Test Immediate Delete", "fonts/arial.ttf", 22);
110 itemDelete = MenuItemLabel::create(labelDelete, CC_CALLBACK_1(HttpClientTest::onMenuDeleteTestClicked, this, true));
111 itemDelete->setPosition(RIGHT, winSize.height - MARGIN - 5 * SPACE);
112 menuRequest->addChild(itemDelete);
113
114 // Response Code Label
115 _labelStatusCode = Label::createWithTTF("HTTP Status Code", "fonts/arial.ttf", 18);
116 _labelStatusCode->setPosition(winSize.width / 2, winSize.height - MARGIN - 6 * SPACE);
117 addChild(_labelStatusCode);
118}
void onMenuGetTestClicked(cocos2d::Ref *sender, bool isImmediate)
void onMenuDeleteTestClicked(cocos2d::Ref *sender, bool isImmediate)
void onMenuPostBinaryTestClicked(cocos2d::Ref *sender, bool isImmediate)
void onMenuPostTestClicked(cocos2d::Ref *sender, bool isImmediate)
void onMenuPutTestClicked(cocos2d::Ref *sender, bool isImmediate)
cocos2d::Label * _labelStatusCode

引用了 _labelStatusCode, onMenuDeleteTestClicked(), onMenuGetTestClicked(), onMenuPostBinaryTestClicked(), onMenuPostTestClicked() , 以及 onMenuPutTestClicked().

+ 函数调用图:

◆ ~HttpClientTest()

HttpClientTest::~HttpClientTest ( )
virtual

在文件 HttpClientTest.cpp120 行定义.

121{
122 HttpClient::destroyInstance();
123}

成员函数说明

◆ CREATE_FUNC()

HttpClientTest::CREATE_FUNC ( HttpClientTest  )

◆ onHttpRequestCompleted()

void HttpClientTest::onHttpRequestCompleted ( cocos2d::network::HttpClient *  sender,
cocos2d::network::HttpResponse *  response 
)

在文件 HttpClientTest.cpp363 行定义.

364{
365 if (!response)
366 {
367 return;
368 }
369
370 // You can get original request type from: response->request->reqType
371 if (0 != strlen(response->getHttpRequest()->getTag()))
372 {
373 log("%s completed", response->getHttpRequest()->getTag());
374 }
375
376 long statusCode = response->getResponseCode();
377 char statusString[64] = {};
378 sprintf(statusString, "HTTP Status Code: %ld, tag = %s", statusCode, response->getHttpRequest()->getTag());
379 _labelStatusCode->setString(statusString);
380 log("response code: %ld", statusCode);
381
382 if (!response->isSucceed())
383 {
384 log("response failed");
385 log("error buffer: %s", response->getErrorBuffer());
386 return;
387 }
388
389 // dump data
390 std::vector<char> *buffer = response->getResponseData();
391 log("Http Test, dump data: ");
392 for (unsigned int i = 0; i < buffer->size(); i++)
393 {
394 log("%c", (*buffer)[i]);
395 }
396 log("\n");
397 if (response->getHttpRequest()->getReferenceCount() != 2)
398 {
399 log("request ref count not 2, is %d", response->getHttpRequest()->getReferenceCount());
400 }
401}

引用了 _labelStatusCode.

被这些函数引用 onMenuDeleteTestClicked(), onMenuGetTestClicked(), onMenuPostBinaryTestClicked(), onMenuPostTestClicked() , 以及 onMenuPutTestClicked().

+ 这是这个函数的调用关系图:

◆ onMenuDeleteTestClicked()

void HttpClientTest::onMenuDeleteTestClicked ( cocos2d::Ref *  sender,
bool  isImmediate 
)

在文件 HttpClientTest.cpp321 行定义.

322{
323 // test 1
324 {
325 HttpRequest* request = new (std::nothrow) HttpRequest();
326 request->setUrl("https://just-make-this-request-failed.com");
327 request->setRequestType(HttpRequest::Type::DELETE);
328 request->setResponseCallback(CC_CALLBACK_2(HttpClientTest::onHttpRequestCompleted, this));
329 if (isImmediate)
330 {
331 request->setTag("DELETE immediate test1");
332 HttpClient::getInstance()->sendImmediate(request);
333 }else
334 {
335 request->setTag("DELETE test1");
336 HttpClient::getInstance()->send(request);
337 }
338 request->release();
339 }
340
341 // test 2
342 {
343 HttpRequest* request = new (std::nothrow) HttpRequest();
344 request->setUrl("https://httpbin.org/delete");
345 request->setRequestType(HttpRequest::Type::DELETE);
346 request->setResponseCallback(CC_CALLBACK_2(HttpClientTest::onHttpRequestCompleted, this));
347 if (isImmediate)
348 {
349 request->setTag("DELETE immediate test2");
350 HttpClient::getInstance()->sendImmediate(request);
351 }else
352 {
353 request->setTag("DELETE test2");
354 HttpClient::getInstance()->send(request);
355 }
356 request->release();
357 }
358
359 // waiting
360 _labelStatusCode->setString("waiting...");
361}
void onHttpRequestCompleted(cocos2d::network::HttpClient *sender, cocos2d::network::HttpResponse *response)

引用了 _labelStatusCode , 以及 onHttpRequestCompleted().

被这些函数引用 HttpClientTest().

+ 函数调用图:
+ 这是这个函数的调用关系图:

◆ onMenuGetTestClicked()

void HttpClientTest::onMenuGetTestClicked ( cocos2d::Ref *  sender,
bool  isImmediate 
)

在文件 HttpClientTest.cpp125 行定义.

126{
127 // test 1
128 {
129 HttpRequest* request = new (std::nothrow) HttpRequest();
130 request->setUrl("https://just-make-this-request-failed.com");
131 request->setRequestType(HttpRequest::Type::GET);
132 request->setResponseCallback(CC_CALLBACK_2(HttpClientTest::onHttpRequestCompleted, this));
133 if (isImmediate)
134 {
135 request->setTag("GET immediate test1");
136 HttpClient::getInstance()->sendImmediate(request);
137 }else
138 {
139 request->setTag("GET test1");
140 HttpClient::getInstance()->send(request);
141 }
142 request->release();
143 }
144
145 // test 2
146 {
147 HttpRequest* request = new (std::nothrow) HttpRequest();
148 // required fields
149 request->setUrl("https://httpbin.org/ip");
150 request->setRequestType(HttpRequest::Type::GET);
151 request->setResponseCallback(CC_CALLBACK_2(HttpClientTest::onHttpRequestCompleted, this));
152 if (isImmediate)
153 {
154 request->setTag("GET immediate test2");
155 HttpClient::getInstance()->sendImmediate(request);
156 }else
157 {
158 request->setTag("GET test2");
159 HttpClient::getInstance()->send(request);
160 }
161 // don't forget to release it, pair to new
162 request->release();
163 }
164
165 // test 3
166 {
167 HttpRequest* request = new (std::nothrow) HttpRequest();
168 request->setUrl("https://httpbin.org/get");
169 request->setRequestType(HttpRequest::Type::GET);
170 request->setResponseCallback(CC_CALLBACK_2(HttpClientTest::onHttpRequestCompleted, this));
171 if (isImmediate)
172 {
173 request->setTag("GET immediate test3");
174 HttpClient::getInstance()->sendImmediate(request);
175 }else
176 {
177 request->setTag("GET test3");
178 HttpClient::getInstance()->send(request);
179 }
180 request->release();
181 }
182
183 // waiting
184 _labelStatusCode->setString("waiting...");
185
186}

引用了 _labelStatusCode , 以及 onHttpRequestCompleted().

被这些函数引用 HttpClientTest().

+ 函数调用图:
+ 这是这个函数的调用关系图:

◆ onMenuPostBinaryTestClicked()

void HttpClientTest::onMenuPostBinaryTestClicked ( cocos2d::Ref *  sender,
bool  isImmediate 
)

在文件 HttpClientTest.cpp241 行定义.

242{
243 HttpRequest* request = new (std::nothrow) HttpRequest();
244 request->setUrl("https://httpbin.org/post");
245 request->setRequestType(HttpRequest::Type::POST);
246 request->setResponseCallback(CC_CALLBACK_2(HttpClientTest::onHttpRequestCompleted, this));
247
248 // write the post data
249 char postData[22] = "binary=hello\0\0cocos2d"; // including \0, the strings after \0 should not be cut in response
250 request->setRequestData(postData, 22);
251 if (isImmediate)
252 {
253 request->setTag("POST Binary immediate test");
254 HttpClient::getInstance()->sendImmediate(request);
255 }else
256 {
257 request->setTag("POST Binary test");
258 HttpClient::getInstance()->send(request);
259 }
260 request->release();
261
262 // waiting
263 _labelStatusCode->setString("waiting...");
264}

引用了 _labelStatusCode , 以及 onHttpRequestCompleted().

被这些函数引用 HttpClientTest().

+ 函数调用图:
+ 这是这个函数的调用关系图:

◆ onMenuPostTestClicked()

void HttpClientTest::onMenuPostTestClicked ( cocos2d::Ref *  sender,
bool  isImmediate 
)

在文件 HttpClientTest.cpp188 行定义.

189{
190 // test 1
191 {
192 HttpRequest* request = new (std::nothrow) HttpRequest();
193 request->setUrl("https://httpbin.org/post");
194 request->setRequestType(HttpRequest::Type::POST);
195 request->setResponseCallback(CC_CALLBACK_2(HttpClientTest::onHttpRequestCompleted, this));
196
197 // write the post data
198 const char* postData = "visitor=cocos2d&TestSuite=Extensions Test/NetworkTest";
199 request->setRequestData(postData, strlen(postData));
200 if (isImmediate)
201 {
202 request->setTag("POST immediate test1");
203 HttpClient::getInstance()->sendImmediate(request);
204 }else
205 {
206 request->setTag("POST test1");
207 HttpClient::getInstance()->send(request);
208 }
209 request->release();
210 }
211
212 // test 2: set Content-Type
213 {
214 HttpRequest* request = new (std::nothrow) HttpRequest();
215 request->setUrl("https://httpbin.org/post");
216 request->setRequestType(HttpRequest::Type::POST);
217 std::vector<std::string> headers;
218 headers.push_back("Content-Type: application/json; charset=utf-8");
219 request->setHeaders(headers);
220 request->setResponseCallback(CC_CALLBACK_2(HttpClientTest::onHttpRequestCompleted, this));
221
222 // write the post data
223 const char* postData = "visitor=cocos2d&TestSuite=Extensions Test/NetworkTest";
224 request->setRequestData(postData, strlen(postData));
225 if (isImmediate)
226 {
227 request->setTag("POST immediate test2");
228 HttpClient::getInstance()->sendImmediate(request);
229 }else
230 {
231 request->setTag("POST test2");
232 HttpClient::getInstance()->send(request);
233 }
234 request->release();
235 }
236
237 // waiting
238 _labelStatusCode->setString("waiting...");
239}

引用了 _labelStatusCode , 以及 onHttpRequestCompleted().

被这些函数引用 HttpClientTest().

+ 函数调用图:
+ 这是这个函数的调用关系图:

◆ onMenuPutTestClicked()

void HttpClientTest::onMenuPutTestClicked ( cocos2d::Ref *  sender,
bool  isImmediate 
)

在文件 HttpClientTest.cpp268 行定义.

269{
270 // test 1
271 {
272 HttpRequest* request = new (std::nothrow) HttpRequest();
273 request->setUrl("https://httpbin.org/put");
274 request->setRequestType(HttpRequest::Type::PUT);
275 request->setResponseCallback(CC_CALLBACK_2(HttpClientTest::onHttpRequestCompleted, this));
276
277 // write the post data
278 const char* postData = "visitor=cocos2d&TestSuite=Extensions Test/NetworkTest";
279 request->setRequestData(postData, strlen(postData));
280 if (isImmediate)
281 {
282 request->setTag("PUT Binary immediate test1");
283 HttpClient::getInstance()->sendImmediate(request);
284 }else
285 {
286 request->setTag("PUT Binary test1");
287 HttpClient::getInstance()->send(request);
288 }
289 request->release();
290 }
291
292 // test 2: set Content-Type
293 {
294 HttpRequest* request = new (std::nothrow) HttpRequest();
295 request->setUrl("https://httpbin.org/put");
296 request->setRequestType(HttpRequest::Type::PUT);
297 std::vector<std::string> headers;
298 headers.push_back("Content-Type: application/json; charset=utf-8");
299 request->setHeaders(headers);
300 request->setResponseCallback(CC_CALLBACK_2(HttpClientTest::onHttpRequestCompleted, this));
301
302 // write the post data
303 const char* postData = "visitor=cocos2d&TestSuite=Extensions Test/NetworkTest";
304 request->setRequestData(postData, strlen(postData));
305 if (isImmediate)
306 {
307 request->setTag("PUT Binary immediate test2");
308 HttpClient::getInstance()->sendImmediate(request);
309 }else
310 {
311 request->setTag("PUT Binary test2");
312 HttpClient::getInstance()->send(request);
313 }
314 request->release();
315 }
316
317 // waiting
318 _labelStatusCode->setString("waiting...");
319}

引用了 _labelStatusCode , 以及 onHttpRequestCompleted().

被这些函数引用 HttpClientTest().

+ 函数调用图:
+ 这是这个函数的调用关系图:

◆ title()

virtual std::string HttpClientTest::title ( ) const
inlineoverridevirtual

重载 TestCase .

在文件 HttpClientTest.h53 行定义.

53{ return "Http Request Test"; }

类成员变量说明

◆ _labelStatusCode

cocos2d::Label* HttpClientTest::_labelStatusCode
private

该类的文档由以下文件生成: