22
33#include < chrono>
44#include < condition_variable>
5+ #include < iostream>
56#include < mutex>
67#include < thread>
78
@@ -15,6 +16,157 @@ struct ProgressData {
1516 size_t progress;
1617};
1718
19+ class TestWorkerWithNoCb : public AsyncProgressWorker <ProgressData> {
20+ public:
21+ static void DoWork (const CallbackInfo& info) {
22+ switch (info.Length ()) {
23+ case 1 : {
24+ Function cb = info[0 ].As <Function>();
25+ TestWorkerWithNoCb* worker = new TestWorkerWithNoCb (info.Env (), cb);
26+ worker->Queue ();
27+ } break ;
28+
29+ case 2 : {
30+ std::string resName = info[0 ].As <String>();
31+ Function cb = info[1 ].As <Function>();
32+ TestWorkerWithNoCb* worker =
33+ new TestWorkerWithNoCb (info.Env (), resName.c_str (), cb);
34+ worker->Queue ();
35+ } break ;
36+
37+ case 3 : {
38+ std::string resName = info[0 ].As <String>();
39+ Object resObject = info[1 ].As <Object>();
40+ Function cb = info[2 ].As <Function>();
41+ TestWorkerWithNoCb* worker =
42+ new TestWorkerWithNoCb (info.Env (), resName.c_str (), resObject, cb);
43+ worker->Queue ();
44+ } break ;
45+
46+ default :
47+
48+ break ;
49+ }
50+ }
51+
52+ protected:
53+ void Execute (const ExecutionProgress& progress) override {
54+ ProgressData data{1 };
55+ progress.Send (&data, 1 );
56+ }
57+
58+ void OnProgress (const ProgressData*, size_t /* count */ ) override {
59+ _cb.Call ({});
60+ }
61+
62+ private:
63+ TestWorkerWithNoCb (Napi::Env env, Function cb) : AsyncProgressWorker(env) {
64+ _cb.Reset (cb, 1 );
65+ }
66+ TestWorkerWithNoCb (Napi::Env env, const char * resourceName, Function cb)
67+ : AsyncProgressWorker(env, resourceName) {
68+ _cb.Reset (cb, 1 );
69+ }
70+ TestWorkerWithNoCb (Napi::Env env,
71+ const char * resourceName,
72+ const Object& resourceObject,
73+ Function cb)
74+ : AsyncProgressWorker(env, resourceName, resourceObject) {
75+ _cb.Reset (cb, 1 );
76+ }
77+ FunctionReference _cb;
78+ };
79+
80+ class TestWorkerWithRecv : public AsyncProgressWorker <ProgressData> {
81+ public:
82+ static void DoWork (const CallbackInfo& info) {
83+ switch (info.Length ()) {
84+ case 2 : {
85+ Object recv = info[0 ].As <Object>();
86+ Function cb = info[1 ].As <Function>();
87+ TestWorkerWithRecv* worker = new TestWorkerWithRecv (recv, cb);
88+ worker->Queue ();
89+ } break ;
90+
91+ case 3 : {
92+ Object recv = info[0 ].As <Object>();
93+ Function cb = info[1 ].As <Function>();
94+ std::string resName = info[2 ].As <String>();
95+ TestWorkerWithRecv* worker =
96+ new TestWorkerWithRecv (recv, cb, resName.c_str ());
97+ worker->Queue ();
98+ } break ;
99+
100+ case 4 : {
101+ Object recv = info[0 ].As <Object>();
102+ Function cb = info[1 ].As <Function>();
103+ std::string resName = info[2 ].As <String>();
104+ Object resObject = info[3 ].As <Object>();
105+ TestWorkerWithRecv* worker =
106+ new TestWorkerWithRecv (recv, cb, resName.c_str (), resObject);
107+ worker->Queue ();
108+ } break ;
109+
110+ default :
111+
112+ break ;
113+ }
114+ }
115+
116+ protected:
117+ void Execute (const ExecutionProgress&) override {}
118+
119+ void OnProgress (const ProgressData*, size_t /* count */ ) override {}
120+
121+ private:
122+ TestWorkerWithRecv (const Object& recv, const Function& cb)
123+ : AsyncProgressWorker(recv, cb) {}
124+ TestWorkerWithRecv (const Object& recv,
125+ const Function& cb,
126+ const char * resourceName)
127+ : AsyncProgressWorker(recv, cb, resourceName) {}
128+ TestWorkerWithRecv (const Object& recv,
129+ const Function& cb,
130+ const char * resourceName,
131+ const Object& resourceObject)
132+ : AsyncProgressWorker(recv, cb, resourceName, resourceObject) {}
133+ };
134+
135+ class TestWorkerWithCb : public AsyncProgressWorker <ProgressData> {
136+ public:
137+ static void DoWork (const CallbackInfo& info) {
138+ switch (info.Length ()) {
139+ case 1 : {
140+ Function cb = info[0 ].As <Function>();
141+ TestWorkerWithCb* worker = new TestWorkerWithCb (cb);
142+ worker->Queue ();
143+ } break ;
144+
145+ case 2 : {
146+ Function cb = info[0 ].As <Function>();
147+ std::string asyncResName = info[1 ].As <String>();
148+ TestWorkerWithCb* worker =
149+ new TestWorkerWithCb (cb, asyncResName.c_str ());
150+ worker->Queue ();
151+ } break ;
152+
153+ default :
154+
155+ break ;
156+ }
157+ }
158+
159+ protected:
160+ void Execute (const ExecutionProgress&) override {}
161+
162+ void OnProgress (const ProgressData*, size_t /* count */ ) override {}
163+
164+ private:
165+ TestWorkerWithCb (Function cb) : AsyncProgressWorker(cb) {}
166+ TestWorkerWithCb (Function cb, const char * res_name)
167+ : AsyncProgressWorker(cb, res_name) {}
168+ };
169+
18170class TestWorker : public AsyncProgressWorker <ProgressData> {
19171 public:
20172 static void DoWork (const CallbackInfo& info) {
@@ -196,6 +348,9 @@ Object InitAsyncProgressWorker(Env env) {
196348 exports[" doMalignTest" ] = Function::New (env, MalignWorker::DoWork);
197349 exports[" doSignalAfterProgressTest" ] =
198350 Function::New (env, SignalAfterProgressTestWorker::DoWork);
351+ exports[" runWorkerNoCb" ] = Function::New (env, TestWorkerWithNoCb::DoWork);
352+ exports[" runWorkerWithRecv" ] = Function::New (env, TestWorkerWithRecv::DoWork);
353+ exports[" runWorkerWithCb" ] = Function::New (env, TestWorkerWithCb::DoWork);
199354 return exports;
200355}
201356
0 commit comments