How to use reason method in stryker-parent

Best JavaScript code snippet using stryker-parent

test_denial_reasons.py

Source:test_denial_reasons.py Github

copy

Full Screen

...91 querystring = urlencode(params)92 response = client.get(f'{url}?{querystring}')93 assert response.status_code == 40494@pytest.mark.django_db95def test_delete_denial_reason(client, valid_user_1):96 user = create_moderator_test_user(valid_user_1)97 client.force_login(user)98 reason = PostDenialReason(description='test', moderator=user)99 reason.save()100 assert user.post_denial_reasons.count() == 1101 url = reverse('moderation:denial-reason-delete', kwargs={'id': reason.id})102 response = client.get(url)103 assert response.status_code == 200104 assertTemplateUsed(response, 'moderation/denial_reason_delete.html')105 response = client.post(url)106 assert response.status_code == 302107 assert response.url == reverse('moderation:denial-reason-list')108 assert user.post_denial_reasons.count() == 0109@pytest.mark.django_db110def test_delete_invalid_reason(client, valid_user_1):111 user = create_moderator_test_user(valid_user_1)112 client.force_login(user)113 url = reverse('moderation:denial-reason-delete', kwargs={'id': 0})114 response = client.get(url)115 assert response.status_code == 404116 response = client.post(url)117 assert response.status_code == 404118def perform_modify_reason_another_user(client, url_name, user_data_1, user_data_2):119 user1 = create_moderator_test_user(user_data_1)120 user2 = create_moderator_test_user(user_data_2)121 client.force_login(user1)122 reason = PostDenialReason(description='test', moderator=user2)123 reason.save()124 assert user2.post_denial_reasons.count() == 1125 url = reverse(url_name, kwargs={'id': reason.id})126 response = client.get(url)127 assert response.status_code == 404128 response = client.post(url)129 assert response.status_code == 404130 assert user2.post_denial_reasons.count() == 1131@pytest.mark.django_db132def test_delete_reason_another_user(client, valid_user_1, valid_user_2):133 perform_modify_reason_another_user(134 client, 'moderation:denial-reason-delete', valid_user_1, valid_user_2)135def perform_modify_reason_no_user(client, url_name, user_data):136 user = create_moderator_test_user(user_data)137 client.force_login(user)138 reason = PostDenialReason(description='test')139 reason.save()140 assert PostDenialReason.objects.count() == 1141 url = reverse(url_name, kwargs={'id': reason.id})142 response = client.get(url)143 assert response.status_code == 404144 response = client.post(url)145 assert response.status_code == 404146 assert PostDenialReason.objects.count() == 1147@pytest.mark.django_db148def test_delete_reason_no_user(client, valid_user_1):149 perform_modify_reason_no_user(150 client, 'moderation:denial-reason-delete', valid_user_1)151def perform_successful_create_reason(client, user_data, reason_data):152 user = create_moderator_test_user(user_data)153 client.force_login(user)154 url = reverse('moderation:denial-reason-create')155 response = client.get(url)156 assert response.status_code == 200157 assertTemplateUsed('moderation/denial_reason_create.html')158 response = client.post(url, reason_data)159 assert response.status_code == 302160 assert response.url == reverse('moderation:denial-reason-list')161 assert user.post_denial_reasons.count() == 1162 assert user.post_denial_reasons.first(163 ).description == reason_data['description']164@pytest.mark.django_db165def test_successful_create_reason(client, valid_user_1, valid_denial_reason_1):166 perform_successful_create_reason(167 client, valid_user_1, {'description': valid_denial_reason_1})168@pytest.mark.django_db169def test_create_repeated_reason_another_user(client, valid_user_1, valid_user_2, valid_denial_reason_1):170 user = create_moderator_test_user(valid_user_2)171 reason = PostDenialReason(172 description=valid_denial_reason_1, moderator=user)173 reason.save()174 assert user.post_denial_reasons.count() == 1175 assert user.post_denial_reasons.first().description == valid_denial_reason_1176 perform_successful_create_reason(177 client, valid_user_1, {'description': valid_denial_reason_1})178def perform_failed_create_reason(client, user_data, reason_data):179 user = create_moderator_test_user(user_data)180 client.force_login(user)181 url = reverse('moderation:denial-reason-create')182 response = client.post(url, reason_data)183 assert response.status_code == 302184 assert response.url == url185 assert user.post_denial_reasons.count() == 0186@pytest.mark.django_db187def test_create_reason_description_missing(client, valid_user_1):188 perform_failed_create_reason(client, valid_user_1, {})189@pytest.mark.django_db190def test_create_reason_short_description(client, valid_user_1, short_denial_reason):191 reason_data = {192 'description': short_denial_reason193 }194 perform_failed_create_reason(client, valid_user_1, reason_data)195@pytest.mark.django_db196def test_create_reason_long_description(client, valid_user_1, long_denial_reason):197 reason_data = {198 'description': long_denial_reason199 }200 perform_failed_create_reason(client, valid_user_1, reason_data)201def perform_repeated_reason(client, url_name, url_args, user, reason_data, existing_reason, initial_count=1):202 assert reason_data['description'].lower(203 ) == existing_reason.description.lower()204 assert user.post_denial_reasons.count() == initial_count205 url = reverse(url_name, kwargs=url_args)206 response = client.post(url, reason_data)207 assert response.status_code == 302208 assert response.url == url209 assert user.post_denial_reasons.count() == initial_count210@pytest.mark.django_db211def test_create_repeated_reason(client, valid_user_1, valid_denial_reason_1, repeated_denial_reason):212 user = create_moderator_test_user(valid_user_1)213 client.force_login(user)214 reason = PostDenialReason(215 description=valid_denial_reason_1, moderator=user)216 reason.save()217 reason_data = {218 'description': repeated_denial_reason219 }220 perform_repeated_reason(221 client, 'moderation:denial-reason-create', {}, user, reason_data, reason)222@pytest.mark.django_db223def test_create_repeated_generic_reason(client, valid_user_1, valid_denial_reason_1, repeated_denial_reason):224 user = create_moderator_test_user(valid_user_1)225 client.force_login(user)226 reason = PostDenialReason(description=valid_denial_reason_1)227 reason.save()228 reason_data = {229 'description': repeated_denial_reason230 }231 perform_repeated_reason(232 client, 'moderation:denial-reason-create', {}, user, reason_data, reason, 0)233def perform_successful_edit_reason(client, user_data, reason_description, reason_data):234 user = create_moderator_test_user(user_data)235 client.force_login(user)236 reason = PostDenialReason(description=reason_description, moderator=user)237 reason.save()238 assert user.post_denial_reasons.count() == 1239 assert user.post_denial_reasons.first() == reason240 url = reverse('moderation:denial-reason-edit', kwargs={'id': reason.id})241 response = client.get(url)242 assert response.status_code == 200243 assertTemplateUsed('moderation/denial_reason_create.html')244 response = client.post(url, reason_data)245 assert response.status_code == 302246 assert response.url == reverse('moderation:denial-reason-list')247 assert user.post_denial_reasons.count() == 1248 assert user.post_denial_reasons.first(249 ).description == reason_data['description']250@pytest.mark.django_db251def test_successful_edit_reason(client, valid_user_1, valid_denial_reason_1, valid_denial_reason_2):252 reason_data = {253 'description': valid_denial_reason_2254 }255 perform_successful_edit_reason(256 client, valid_user_1, valid_denial_reason_1, reason_data)257@pytest.mark.django_db258def test_repeated_same_reason(client, valid_user_1, valid_denial_reason_1, repeated_denial_reason):259 reason_data = {260 'description': repeated_denial_reason261 }262 perform_successful_edit_reason(263 client, valid_user_1, valid_denial_reason_1, reason_data)264@pytest.mark.django_db265def test_successful_edit_reason_another_user(client, valid_user_1, valid_user_2,266 valid_denial_reason_1, valid_denial_reason_2):267 user = create_moderator_test_user(valid_user_2)268 reason = PostDenialReason(269 description=valid_denial_reason_2, moderator=user)270 reason.save()271 assert user.post_denial_reasons.count() == 1272 assert user.post_denial_reasons.first() == reason273 reason_data = {274 'description': valid_denial_reason_2275 }276 perform_successful_edit_reason(277 client, valid_user_1, valid_denial_reason_1, reason_data)278def perform_failed_edit_reason(client, user_data, reason_description, reason_data):279 user = create_moderator_test_user(user_data)280 client.force_login(user)281 reason = PostDenialReason(description=reason_description, moderator=user)282 reason.save()283 assert user.post_denial_reasons.count() == 1284 assert user.post_denial_reasons.first() == reason285 url = reverse('moderation:denial-reason-edit', kwargs={'id': reason.id})286 response = client.post(url, reason_data)287 assert response.status_code == 302288 assert response.url == url289 assert user.post_denial_reasons.count() == 1290 assert user.post_denial_reasons.first().description == reason_description291@pytest.mark.django_db292def test_edit_reason_missing_description(client, valid_user_1, valid_denial_reason_1):293 perform_failed_edit_reason(client, valid_user_1, valid_denial_reason_1, {})294@pytest.mark.django_db295def test_edit_reason_short_description(client, valid_user_1, valid_denial_reason_1, short_denial_reason):296 reason_data = {297 'description': short_denial_reason298 }299 perform_failed_edit_reason(300 client, valid_user_1, valid_denial_reason_1, reason_data)301@pytest.mark.django_db302def test_edit_reason_long_description(client, valid_user_1, valid_denial_reason_1, long_denial_reason):303 reason_data = {304 'description': long_denial_reason305 }306 perform_failed_edit_reason(307 client, valid_user_1, valid_denial_reason_1, reason_data)308@pytest.mark.django_db309def test_edit_repeated_reason(client, valid_user_1, valid_denial_reason_1,310 valid_denial_reason_2, repeated_denial_reason):311 user = create_moderator_test_user(valid_user_1)312 client.force_login(user)313 reason1 = PostDenialReason(314 description=valid_denial_reason_1, moderator=user)315 reason1.save()316 reason2 = PostDenialReason(317 description=valid_denial_reason_2, moderator=user)318 reason2.save()319 reason_data = {320 'description': repeated_denial_reason321 }322 perform_repeated_reason(client, 'moderation:denial-reason-edit',323 {'id': reason2.id}, user, reason_data, reason1, 2)324@pytest.mark.django_db325def test_edit_repeated_generic_reason(client, valid_user_1, valid_denial_reason_1,326 valid_denial_reason_2, repeated_denial_reason):327 user = create_moderator_test_user(valid_user_1)328 client.force_login(user)329 reason1 = PostDenialReason(description=valid_denial_reason_1)330 reason1.save()331 reason2 = PostDenialReason(332 description=valid_denial_reason_2, moderator=user)333 reason2.save()334 reason_data = {335 'description': repeated_denial_reason336 }337 perform_repeated_reason(client, 'moderation:denial-reason-edit',338 {'id': reason2.id}, user, reason_data, reason1)339@pytest.mark.django_db340def test_edit_reason_another_user(client, valid_user_1, valid_user_2):341 perform_modify_reason_another_user(342 client, 'moderation:denial-reason-edit', valid_user_1, valid_user_2)343@pytest.mark.django_db344def test_edit_reason_no_user(client, valid_user_1):345 perform_modify_reason_no_user(...

Full Screen

Full Screen

mailerdaemon.py

Source:mailerdaemon.py Github

copy

Full Screen

1#!/usr/bin/env python2"""mailerdaemon - classes to parse mailer-daemon messages"""3import rfc8224import calendar5import re6import os7import sys8Unparseable = 'mailerdaemon.Unparseable'9class ErrorMessage(rfc822.Message):10 def __init__(self, fp):11 rfc822.Message.__init__(self, fp)12 self.sub = ''13 def is_warning(self):14 sub = self.getheader('Subject')15 if not sub:16 return 017 sub = sub.lower()18 if sub.startswith('waiting mail'): return 119 if 'warning' in sub: return 120 self.sub = sub21 return 022 def get_errors(self):23 for p in EMPARSERS:24 self.rewindbody()25 try:26 return p(self.fp, self.sub)27 except Unparseable:28 pass29 raise Unparseable30# List of re's or tuples of re's.31# If a re, it should contain at least a group (?P<email>...) which32# should refer to the email address. The re can also contain a group33# (?P<reason>...) which should refer to the reason (error message).34# If no reason is present, the emparse_list_reason list is used to35# find a reason.36# If a tuple, the tuple should contain 2 re's. The first re finds a37# location, the second re is repeated one or more times to find38# multiple email addresses. The second re is matched (not searched)39# where the previous match ended.40# The re's are compiled using the re module.41emparse_list_list = [42 'error: (?P<reason>unresolvable): (?P<email>.+)',43 ('----- The following addresses had permanent fatal errors -----\n',44 '(?P<email>[^ \n].*)\n( .*\n)?'),45 'remote execution.*\n.*rmail (?P<email>.+)',46 ('The following recipients did not receive your message:\n\n',47 ' +(?P<email>.*)\n(The following recipients did not receive your message:\n\n)?'),48 '------- Failure Reasons --------\n\n(?P<reason>.*)\n(?P<email>.*)',49 '^<(?P<email>.*)>:\n(?P<reason>.*)',50 '^(?P<reason>User mailbox exceeds allowed size): (?P<email>.+)',51 '^5\\d{2} <(?P<email>[^\n>]+)>\\.\\.\\. (?P<reason>.+)',52 '^Original-Recipient: rfc822;(?P<email>.*)',53 '^did not reach the following recipient\\(s\\):\n\n(?P<email>.*) on .*\n +(?P<reason>.*)',54 '^ <(?P<email>[^\n>]+)> \\.\\.\\. (?P<reason>.*)',55 '^Report on your message to: (?P<email>.*)\nReason: (?P<reason>.*)',56 '^Your message was not delivered to +(?P<email>.*)\n +for the following reason:\n +(?P<reason>.*)',57 '^ was not +(?P<email>[^ \n].*?) *\n.*\n.*\n.*\n because:.*\n +(?P<reason>[^ \n].*?) *\n',58 ]59# compile the re's in the list and store them in-place.60for i in range(len(emparse_list_list)):61 x = emparse_list_list[i]62 if type(x) is type(''):63 x = re.compile(x, re.MULTILINE)64 else:65 xl = []66 for x in x:67 xl.append(re.compile(x, re.MULTILINE))68 x = tuple(xl)69 del xl70 emparse_list_list[i] = x71 del x72del i73# list of re's used to find reasons (error messages).74# if a string, "<>" is replaced by a copy of the email address.75# The expressions are searched for in order. After the first match,76# no more expressions are searched for. So, order is important.77emparse_list_reason = [78 r'^5\d{2} <>\.\.\. (?P<reason>.*)',79 '<>\.\.\. (?P<reason>.*)',80 re.compile(r'^<<< 5\d{2} (?P<reason>.*)', re.MULTILINE),81 re.compile('===== stderr was =====\nrmail: (?P<reason>.*)'),82 re.compile('^Diagnostic-Code: (?P<reason>.*)', re.MULTILINE),83 ]84emparse_list_from = re.compile('^From:', re.IGNORECASE|re.MULTILINE)85def emparse_list(fp, sub):86 data = fp.read()87 res = emparse_list_from.search(data)88 if res is None:89 from_index = len(data)90 else:91 from_index = res.start(0)92 errors = []93 emails = []94 reason = None95 for regexp in emparse_list_list:96 if type(regexp) is type(()):97 res = regexp[0].search(data, 0, from_index)98 if res is not None:99 try:100 reason = res.group('reason')101 except IndexError:102 pass103 while 1:104 res = regexp[1].match(data, res.end(0), from_index)105 if res is None:106 break107 emails.append(res.group('email'))108 break109 else:110 res = regexp.search(data, 0, from_index)111 if res is not None:112 emails.append(res.group('email'))113 try:114 reason = res.group('reason')115 except IndexError:116 pass117 break118 if not emails:119 raise Unparseable120 if not reason:121 reason = sub122 if reason[:15] == 'returned mail: ':123 reason = reason[15:]124 for regexp in emparse_list_reason:125 if type(regexp) is type(''):126 for i in range(len(emails)-1,-1,-1):127 email = emails[i]128 exp = re.compile(re.escape(email).join(regexp.split('<>')), re.MULTILINE)129 res = exp.search(data)130 if res is not None:131 errors.append(' '.join((email.strip()+': '+res.group('reason')).split()))132 del emails[i]133 continue134 res = regexp.search(data)135 if res is not None:136 reason = res.group('reason')137 break138 for email in emails:139 errors.append(' '.join((email.strip()+': '+reason).split()))140 return errors141EMPARSERS = [emparse_list, ]142def sort_numeric(a, b):143 a = int(a)144 b = int(b)145 if a < b: return -1146 elif a > b: return 1147 else: return 0148def parsedir(dir, modify):149 os.chdir(dir)150 pat = re.compile('^[0-9]*$')151 errordict = {}152 errorfirst = {}153 errorlast = {}154 nok = nwarn = nbad = 0155 # find all numeric file names and sort them156 files = filter(lambda fn, pat=pat: pat.match(fn) is not None, os.listdir('.'))157 files.sort(sort_numeric)158 for fn in files:159 # Lets try to parse the file.160 fp = open(fn)161 m = ErrorMessage(fp)162 sender = m.getaddr('From')163 print '%s\t%-40s\t'%(fn, sender[1]),164 if m.is_warning():165 fp.close()166 print 'warning only'167 nwarn = nwarn + 1168 if modify:169 os.rename(fn, ','+fn)170## os.unlink(fn)171 continue172 try:173 errors = m.get_errors()174 except Unparseable:175 print '** Not parseable'176 nbad = nbad + 1177 fp.close()178 continue179 print len(errors), 'errors'180 # Remember them181 for e in errors:182 try:183 mm, dd = m.getdate('date')[1:1+2]184 date = '%s %02d' % (calendar.month_abbr[mm], dd)185 except:186 date = '??????'187 if not errordict.has_key(e):188 errordict[e] = 1189 errorfirst[e] = '%s (%s)' % (fn, date)190 else:191 errordict[e] = errordict[e] + 1192 errorlast[e] = '%s (%s)' % (fn, date)193 fp.close()194 nok = nok + 1195 if modify:196 os.rename(fn, ','+fn)197## os.unlink(fn)198 print '--------------'199 print nok, 'files parsed,',nwarn,'files warning-only,',200 print nbad,'files unparseable'201 print '--------------'202 list = []203 for e in errordict.keys():204 list.append((errordict[e], errorfirst[e], errorlast[e], e))205 list.sort()206 for num, first, last, e in list:207 print '%d %s - %s\t%s' % (num, first, last, e)208def main():209 modify = 0210 if len(sys.argv) > 1 and sys.argv[1] == '-d':211 modify = 1212 del sys.argv[1]213 if len(sys.argv) > 1:214 for folder in sys.argv[1:]:215 parsedir(folder, modify)216 else:217 parsedir('/ufs/jack/Mail/errorsinbox', modify)218if __name__ == '__main__' or sys.argv[0] == __name__:...

Full Screen

Full Screen

FlagPostModal.js

Source:FlagPostModal.js Github

copy

Full Screen

...36 <div className="Form Form--centered">37 <div className="Form-group">38 <div>39 <label className="checkbox">40 <input type="radio" name="reason" checked={this.reason() === 'off_topic'} value="off_topic" onclick={withAttr('value', this.reason)}/>41 <strong>{app.translator.trans('flarum-flags.forum.flag_post.reason_off_topic_label')}</strong>42 {app.translator.trans('flarum-flags.forum.flag_post.reason_off_topic_text')}43 {this.reason() === 'off_topic' ? (44 <textarea className="FormControl" placeholder={app.translator.trans('flarum-flags.forum.flag_post.reason_details_placeholder')} value={this.reasonDetail()} oninput={withAttr('value', this.reasonDetail)}></textarea>45 ) : ''}46 </label>47 <label className="checkbox">48 <input type="radio" name="reason" checked={this.reason() === 'inappropriate'} value="inappropriate" onclick={withAttr('value', this.reason)}/>49 <strong>{app.translator.trans('flarum-flags.forum.flag_post.reason_inappropriate_label')}</strong>50 {app.translator.trans('flarum-flags.forum.flag_post.reason_inappropriate_text', {51 a: guidelinesUrl ? <a href={guidelinesUrl} target="_blank"/> : undefined52 })}53 {this.reason() === 'inappropriate' ? (54 <textarea className="FormControl" placeholder={app.translator.trans('flarum-flags.forum.flag_post.reason_details_placeholder')} value={this.reasonDetail()} oninput={withAttr('value', this.reasonDetail)}></textarea>55 ) : ''}56 </label>57 <label className="checkbox">58 <input type="radio" name="reason" checked={this.reason() === 'spam'} value="spam" onclick={withAttr('value', this.reason)}/>59 <strong>{app.translator.trans('flarum-flags.forum.flag_post.reason_spam_label')}</strong>60 {app.translator.trans('flarum-flags.forum.flag_post.reason_spam_text')}61 {this.reason() === 'spam' ? (62 <textarea className="FormControl" placeholder={app.translator.trans('flarum-flags.forum.flag_post.reason_details_placeholder')} value={this.reasonDetail()} oninput={withAttr('value', this.reasonDetail)}></textarea>63 ) : ''}64 </label>65 <label className="checkbox">66 <input type="radio" name="reason" checked={this.reason() === 'other'} value="other" onclick={withAttr('value', this.reason)}/>67 <strong>{app.translator.trans('flarum-flags.forum.flag_post.reason_other_label')}</strong>68 {this.reason() === 'other' ? (69 <textarea className="FormControl" value={this.reasonDetail()} oninput={withAttr('value', this.reasonDetail)}></textarea>70 ) : ''}71 </label>72 </div>73 </div>74 <div className="Form-group">75 <Button76 className="Button Button--primary Button--block"77 type="submit"78 loading={this.loading}79 disabled={!this.reason()}>80 {app.translator.trans('flarum-flags.forum.flag_post.submit_button')}81 </Button>82 </div>83 </div>84 </div>85 );86 }87 onsubmit(e) {88 e.preventDefault();89 this.loading = true;90 app.store.createRecord('flags').save({91 reason: this.reason() === 'other' ? null : this.reason(),92 reasonDetail: this.reasonDetail(),93 relationships: {94 user: app.session.user,95 post: this.attrs.post96 }97 }, {errorHandler: this.onerror.bind(this)})98 .then(() => this.success = true)99 .catch(() => {})100 .then(this.loaded.bind(this));101 }...

Full Screen

Full Screen

trace-maps-processor.py

Source:trace-maps-processor.py Github

copy

Full Screen

1#!/usr/bin/env python2# Copyright 2014 the V8 project authors. All rights reserved.3# Use of this source code is governed by a BSD-style license that can be4# found in the LICENSE file.5import sys6action = sys.argv[1]7if action in ["help", "-h", "--help"] or len(sys.argv) != 3:8 print("Usage: %s <action> <inputfile>, where action can be: \n"9 "help Print this message\n"10 "plain Print ASCII tree to stdout\n"11 "dot Print dot file to stdout\n"12 "count Count most frequent transition reasons\n" % sys.argv[0])13 sys.exit(0)14filename = sys.argv[2]15maps = {}16root_maps = []17transitions = {}18annotations = {}19class Map(object):20 def __init__(self, pointer, origin):21 self.pointer = pointer22 self.origin = origin23 def __str__(self):24 return "%s (%s)" % (self.pointer, self.origin)25class Transition(object):26 def __init__(self, from_map, to_map, reason):27 self.from_map = from_map28 self.to_map = to_map29 self.reason = reason30def RegisterNewMap(raw_map):31 if raw_map in annotations:32 annotations[raw_map] += 133 else:34 annotations[raw_map] = 035 return AnnotateExistingMap(raw_map)36def AnnotateExistingMap(raw_map):37 return "%s_%d" % (raw_map, annotations[raw_map])38def AddMap(pointer, origin):39 pointer = RegisterNewMap(pointer)40 maps[pointer] = Map(pointer, origin)41 return pointer42def AddTransition(from_map, to_map, reason):43 from_map = AnnotateExistingMap(from_map)44 to_map = AnnotateExistingMap(to_map)45 if from_map not in transitions:46 transitions[from_map] = {}47 targets = transitions[from_map]48 if to_map in targets:49 # Some events get printed twice, that's OK. In some cases, ignore the50 # second output...51 old_reason = targets[to_map].reason52 if old_reason.startswith("ReplaceDescriptors"):53 return54 # ...and in others use it for additional detail.55 if reason in []:56 targets[to_map].reason = reason57 return58 # Unexpected duplicate events? Warn.59 print("// warning: already have a transition from %s to %s, reason: %s" %60 (from_map, to_map, targets[to_map].reason))61 return62 targets[to_map] = Transition(from_map, to_map, reason)63with open(filename, "r") as f:64 last_to_map = ""65 for line in f:66 if not line.startswith("[TraceMaps: "): continue67 words = line.split(" ")68 event = words[1]69 if event == "InitialMap":70 assert words[2] == "map="71 assert words[4] == "SFI="72 new_map = AddMap(words[3], "SFI#%s" % words[5])73 root_maps.append(new_map)74 continue75 if words[2] == "from=" and words[4] == "to=":76 from_map = words[3]77 to_map = words[5]78 if from_map not in annotations:79 print("// warning: unknown from_map %s" % from_map)80 new_map = AddMap(from_map, "<unknown>")81 root_maps.append(new_map)82 if to_map != last_to_map:83 AddMap(to_map, "<transition> (%s)" % event)84 last_to_map = to_map85 if event in ["Transition", "NoTransition"]:86 assert words[6] == "name=", line87 reason = "%s: %s" % (event, words[7])88 elif event in ["Normalize", "ReplaceDescriptors", "SlowToFast"]:89 assert words[6] == "reason=", line90 reason = "%s: %s" % (event, words[7])91 if words[8].strip() != "]":92 reason = "%s_%s" % (reason, words[8])93 else:94 reason = event95 AddTransition(from_map, to_map, reason)96 continue97def PlainPrint(m, indent, label):98 print("%s%s (%s)" % (indent, m, label))99 if m in transitions:100 for t in transitions[m]:101 PlainPrint(t, indent + " ", transitions[m][t].reason)102def CountTransitions(m):103 if m not in transitions: return 0104 return len(transitions[m])105def DotPrint(m, label):106 print("m%s [label=\"%s\"]" % (m[2:], label))107 if m in transitions:108 for t in transitions[m]:109 # GraphViz doesn't like node labels looking like numbers, so use110 # "m..." instead of "0x...".111 print("m%s -> m%s" % (m[2:], t[2:]))112 reason = transitions[m][t].reason113 reason = reason.replace("\\", "BACKSLASH")114 reason = reason.replace("\"", "\\\"")115 DotPrint(t, reason)116if action == "plain":117 root_maps = sorted(root_maps, key=CountTransitions, reverse=True)118 for m in root_maps:119 PlainPrint(m, "", maps[m].origin)120elif action == "dot":121 print("digraph g {")122 for m in root_maps:123 DotPrint(m, maps[m].origin)124 print("}")125elif action == "count":126 reasons = {}127 for s in transitions:128 for t in transitions[s]:129 reason = transitions[s][t].reason130 if reason not in reasons:131 reasons[reason] = 1132 else:133 reasons[reason] += 1134 reasons_list = []135 for r in reasons:136 reasons_list.append("%8d %s" % (reasons[r], r))137 reasons_list.sort(reverse=True)138 for r in reasons_list[:20]:...

Full Screen

Full Screen

__init__.py

Source:__init__.py Github

copy

Full Screen

1# -*- coding: utf-8 -*-2# @Date : 2018/3/283# @Author : Shu4# @Email : httpservlet@yeah.net5# 错误格式说明: 201016# 2: 服务级错误7# 01: 服务模块代码(服务类别)8# 01:具体错误代码9import copy10_errcodes={11 # 正常12 0:{'errcode':0,'reason':'success'}, # 可以重写reason与result内容13 # HTTP协议错误码14 400:{'errcode':400,'reason':'Bad Request.'},15 401:{'errcode':401,'reason':'Authentication Required.'},16 403:{'errcode':403,'reason':'Forbidden.'},17 404:{'errcode':404,'reason':'Not found.'},18 405:{'errcode':405,'reason':'Method Not Allowed.'},19 500:{'errcode':500,'reason':'Internal Server Error.'},20 # 系统级错误码21 10001:{'errcode':10001,'reason':'错误的请求KEY.'},22 10002:{'errcode':10002,'reason':'该KEY无请求权限.'},23 10003:{'errcode':10003,'reason':'KEY过期.'},24 10004:{'errcode':10004,'reason':'被禁止的IP.'},25 10005:{'errcode':10005,'reason':'被禁止的KEY.'},26 10006:{'errcode':10006,'reason':'当前IP请求超过限制.'},27 10007:{'errcode':10007,'reason':'请求超过次数限制.'},28 10008:{'errcode':10008,'reason':'系统内部异常.'},29 10009:{'errcode':10009,'reason':'接口维护.'},30 10010:{'errcode':10010,'reason':'接口停用.'},31 10011:{'errcode':10011,'reason':'当前没有登录用户,请登录.'},32 10012:{'errcode':10012,'reason':'缺少应用KEY值.'},33 10013:{'errcode':10013,'reason':'无权限进行此操作.'},34 10014:{'errcode':10014,'reason':'需要管理员权限.'},35 10015:{'errcode':10015,'reason':'用户被禁用.'},36 10016:{'errcode':10016,'reason':'用户可新建的uapp数量已达最大数.'},37 10017:{'errcode':10017,'reason':'此请求已过期.'},38 # 服务级错误码39 # 1. DB查询验证40 20000:{'errcode':20000,'reason':'用户已存在.'},41 20001:{'errcode':20001,'reason':'邮箱已存在.'},42 20002:{'errcode':20002,'reason':'应用名已存在.'},43 20003:{'errcode':20003,'reason':'用户不存在.'},44 20004:{'errcode':20004,'reason':'密码错误.'},45 20005:{'errcode':20005,'reason':'数据不存在.'},46 20006:{'errcode':20006,'reason':'用户被禁用.'},47 20007:{'errcode':20007,'reason':'资源不存在.'},48 20008:{'errcode':20008,'reason':'资源需付费.'},49 20009:{'errcode':20009,'reason':'加密参数不合要求.'},50 20010:{'errcode':20010,'reason':'密码长度不符合要求,请输入3-128位长度.'},51 # 2. 请求参数验证相关52 20100:{'errcode':20100,'reason':'参数错误.'},53 20101:{'errcode':20101,'reason':'参数必须为json格式.'},54 20102:{'errcode':20102,'reason':'签名错误.'},55 # 3. 钱包相关接口调用56 20200:{'errcode':20200,'reason':'调用钱包接口失败.'},57 20201:{'errcode':20201,'reason':'资源发布失败.'},58 20202:{'errcode':20202,'reason':'资源消费失败.'},59 20203:{'errcode':20203,'reason':'查询余额失败.'},60 20204:{'errcode':20204,'reason':'创建钱包失败.'},61 20205:{'errcode':20205,'reason':'用户注册失败,因为没有成功创建ulord钱包.'},62 20206:{'errcode':20206,'reason':'支付失败.'},63 20207:{'errcode':20207,'reason':'修改钱包密码失败.'},64 20208:{'errcode':20208,'reason':'资源更新失败.'},65}66def return_result(errcode=0,reason=None,result=None):67 if errcode==0:68 res=copy.deepcopy(_errcodes[0])69 if reason is not None:70 res.update({'reason':reason})71 if result is not None:72 res.update({'result':result})73 return res74 else:75 rs= _errcodes[errcode]76 if reason:77 rs.update(dict(reason=reason))78 if result:79 rs.update(dict(result=result))...

Full Screen

Full Screen

admin_modal.js

Source:admin_modal.js Github

copy

Full Screen

1import React, { useState } from "react";2import Modal from "react-modal";3import { t } from "../../modules/i18n";4import Boundary from "../../Boundary";5export default function AdminModal(props) {6 const [isOpen, setIsOpen] = useState(true);7 const [formValues, setformValues] = useState({ chosenReason: null, customReason: "" });8 function closeModal() {9 setIsOpen(false);10 window.setTimeout(props.onClose, 300);11 }12 const isValid = () => {13 const hasReason = !!formValues.chosenReason;14 const hasCustom = formValues.chosenReason === "custom" && !!formValues.customReason;15 const customIsValid = hasCustom || formValues.chosenReason !== "custom";16 return hasReason && customIsValid;17 };18 const reasonChanged = (ev) => setformValues({ ...formValues, chosenReason: ev.target.value });19 const customReasonChanged = (ev) => setformValues({ ...formValues, customReason: ev.target.value });20 const noReasonAction = () => {21 props.noReasonAction();22 closeModal();23 };24 const checkDeleteMessage = () => {25 if (isValid) {26 props.reasonAction(formValues.chosenReason, formValues.customReason);27 closeModal();28 }29 };30 return (31 <Boundary>32 <Modal33 isOpen={isOpen}34 appElement={document.body}35 contentLabel={props.heading}36 onRequestClose={closeModal}37 closeTimeoutMS={300}38 >39 <h2>{props.heading}</h2>40 <div className="cf-form cf-delete-message-modal">41 <div className="cf-cgroup">42 <label className="radio">43 <input44 type="radio"45 name="reason"46 value="off-topic"47 checked={formValues.chosenReason === "off-topic"}48 onChange={reasonChanged}49 />{" "}50 {t("message is off-topic")}51 </label>52 <label className="radio">53 <input54 type="radio"55 name="reason"56 value="not-constructive"57 checked={formValues.chosenReason === "not-constructive"}58 onChange={reasonChanged}59 />{" "}60 {t("message is not constructive")}61 </label>62 <label className="radio">63 <input64 type="radio"65 name="reason"66 value="illegal"67 checked={formValues.chosenReason === "illegal"}68 onChange={reasonChanged}69 />{" "}70 {t("message is illegal")}71 </label>72 <label className="radio">73 <input74 type="radio"75 name="reason"76 value="duplicate"77 checked={formValues.chosenReason === "duplicate"}78 onChange={reasonChanged}79 />{" "}80 {t("message is a duplicate")}81 </label>82 <label className="radio">83 <input84 type="radio"85 name="reason"86 value="spam"87 checked={formValues.chosenReason === "spam"}88 onChange={reasonChanged}89 />{" "}90 {t("message is spam")}91 </label>92 <label className="radio">93 <input94 type="radio"95 name="reason"96 value="custom"97 checked={formValues.chosenReason === "custom"}98 onChange={reasonChanged}99 />{" "}100 {t("custom reason")}101 </label>102 </div>103 {formValues.chosenReason === "custom" && (104 <div className="cf-cgroup">105 <label htmlFor="delete-message-custom-reason">{t("custom reason")}</label>106 <textarea107 name="custom_reason"108 id="delete-message-custom-reason"109 value={formValues.customReason}110 onChange={customReasonChanged}111 />112 </div>113 )}114 <p>115 {window.currentUser.admin && (116 <>117 <button type="button" className="cf-primary-btn" onClick={noReasonAction}>118 {props.noReasonActionText}119 </button>{" "}120 </>121 )}122 <button type="button" className="cf-primary-btn" onClick={checkDeleteMessage} disabled={!isValid()}>123 {props.reasonActionText}124 </button>{" "}125 <button type="button" className="cf-btn" onClick={closeModal}>126 {t("cancel")}127 </button>128 </p>129 </div>130 </Modal>131 </Boundary>132 );...

Full Screen

Full Screen

requestPermission.ts

Source:requestPermission.ts Github

copy

Full Screen

1/*2 Copyright (C) 2021 Tijn Hoftijzer3 This program is free software: you can redistribute it and/or modify4 it under the terms of the GNU General Public License as published by5 the Free Software Foundation, either version 3 of the License, or6 (at your option) any later version.7 This program is distributed in the hope that it will be useful,8 but WITHOUT ANY WARRANTY; without even the implied warranty of9 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the10 GNU General Public License for more details.11 You should have received a copy of the GNU General Public License12 along with this program. If not, see <http://www.gnu.org/licenses/>.13*/14import {15 GuildMember,16 MessageReaction,17 TextChannel,18 User,19} from 'discord.js-light';20import Client from '../classes/Client';21import { getNotification } from './embed';22export enum DJPermission {23 dj,24 vote,25 alone,26 any,27}28export enum PermissionReason {29 none,30 notConnected,31 isDj,32 isAlone,33 vote,34 connected,35}36export function requestPermission(37 bot: Client,38 channel: TextChannel,39 user: GuildMember,40 permissions: DJPermission[]41): Promise<{42 perm: boolean;43 reason: PermissionReason;44}> {45 return new Promise(async (res) => {46 if (permissions.length < 1)47 return res({48 perm: true,49 reason: PermissionReason.none,50 });51 const player = await bot.guildManager.getPlayer(channel.guild);52 const isConnected = player.connected;53 if (permissions.includes(DJPermission.any) && isConnected)54 return res({55 perm: true,56 reason: PermissionReason.connected,57 });58 const roleIds: string[] = (<any>await user.fetch())._roles;59 let isDj = false;60 for (let i = 0; i < roleIds.length; i++) {61 const role = await user.guild.roles.fetch(roleIds[i]);62 if (role.name.toLowerCase() === 'dj') {63 isDj = true;64 break;65 } else continue;66 }67 if (permissions.includes(DJPermission.dj) && isDj)68 return res({69 perm: true,70 reason: PermissionReason.isDj,71 });72 if (!isConnected)73 return res({74 perm: false,75 reason: PermissionReason.notConnected,76 });77 if (permissions.includes(DJPermission.alone)) {78 if (player.connected) {79 if (player.channel.members.size < 3) {80 return res({81 perm: true,82 reason: PermissionReason.isAlone,83 });84 }85 }86 }87 if (permissions.includes(DJPermission.vote) && isConnected) {88 const msg = await channel.send(89 getNotification('Give vote permissions?', user.user)90 );91 await msg.react('✅');92 await msg.react('❌');93 const collector = msg.createReactionCollector(94 (reaction: MessageReaction, user: User) => {95 return (96 user.id !== bot.user.id &&97 (reaction.emoji.name === '✅' || reaction.emoji.name === '❌') &&98 player.channel.members.array().filter((m) => m.id === user.id)99 .length > 0100 );101 },102 {103 time: 20 * 1000,104 }105 );106 const requiredYes = Math.round(107 ((player.channel.members.size - 1) / 3) * 2108 );109 let yes = 0;110 collector.on('collect', (reaction) => {111 if (reaction.emoji.name === '✅') yes++;112 if (yes >= requiredYes) {113 collector.stop('-1');114 return res({115 perm: true,116 reason: PermissionReason.vote,117 });118 }119 });120 collector.on('end', (collected, reason) => {121 if (reason !== '-1')122 return res({123 perm: false,124 reason: PermissionReason.none,125 });126 });127 } else128 return res({129 perm: false,130 reason: PermissionReason.none,131 });132 });133}134export function getMessage(135 perm: boolean,136 reason: PermissionReason,137 author: User138) {139 if (reason === PermissionReason.notConnected) {140 return getNotification('You are not connected to my voice channel', author);141 } else if (reason === PermissionReason.none) {142 return getNotification(143 perm ? 'You are allowed to do this' : 'You are not allowed to do this',144 author145 );146 }...

Full Screen

Full Screen

reducer.js

Source:reducer.js Github

copy

Full Screen

1// Action Types2export const actionTypes = {3 GET_REASON_FOR_LEAVING: "GET_REASON_FOR_LEAVING",4 GET_REASON_FOR_LEAVING_SUCCESS: "GET_REASON_FOR_LEAVING_SUCCESS",5 GET_REASON_FOR_LEAVING_FAILED: "GET_REASON_FOR_LEAVING_FAILED",6 GET_ALL_REASON_FOR_LEAVING: "GET_ALL_REASON_FOR_LEAVING",7 GET_ALL_REASON_FOR_LEAVING_SUCCESS: "GET_ALL_REASON_FOR_LEAVING_SUCCESS",8 GET_ALL_REASON_FOR_LEAVING_FAILED: "GET_ALL_REASON_FOR_LEAVING_FAILED",9 CREATE_REASON_FOR_LEAVING: "CREATE_REASON_FOR_LEAVING",10 CREATE_REASON_FOR_LEAVING_SUCCESS: "CREATE_REASON_FOR_LEAVING_SUCCESS",11 CREATE_REASON_FOR_LEAVING_FAILED: "CREATE_REASON_FOR_LEAVING_FAILED",12 UPDATE_REASON_FOR_LEAVING: "UPDATE_REASON_FOR_LEAVING",13 UPDATE_REASON_FOR_LEAVING_SUCCESS: "UPDATE_REASON_FOR_LEAVING_SUCCESS",14 UPDATE_REASON_FOR_LEAVING_FAILED: "UPDATE_REASON_FOR_LEAVING_FAILED",15 DELETE_REASON_FOR_LEAVING: "DELETE_REASON_FOR_LEAVING",16 DELETE_REASON_FOR_LEAVING_SUCCESS: "DELETE_REASON_FOR_LEAVING_SUCCESS",17 DELETE_REASON_FOR_LEAVING_FAILED: "DELETE_REASON_FOR_LEAVING_FAILED"18};19// Reducer20const initialState = {21 data: null,22 data_all: null,23 meta: null,24 isLoading: false,25 errors: null26};27export default (state = initialState, action) => {28 switch (action.type) {29 case actionTypes.DELETE_REASON_FOR_LEAVING:30 case actionTypes.UPDATE_REASON_FOR_LEAVING:31 case actionTypes.CREATE_REASON_FOR_LEAVING:32 case actionTypes.GET_REASON_FOR_LEAVING:33 case actionTypes.GET_ALL_REASON_FOR_LEAVING:34 return Object.assign({}, state, { isLoading: true, errors: null });35 case actionTypes.GET_REASON_FOR_LEAVING_SUCCESS:36 return Object.assign({}, state, {37 isLoading: false,38 errors: null,39 data: action.payload.data,40 meta: action.payload.meta41 });42 case actionTypes.GET_ALL_REASON_FOR_LEAVING_SUCCESS:43 return Object.assign({}, state, {44 isLoading: false,45 errors: null,46 data_all: action.payload.data,47 meta: action.payload.meta48 });49 case actionTypes.CREATE_REASON_FOR_LEAVING_SUCCESS:50 return Object.assign({}, state, {51 isLoading: false,52 error: null,53 data: state.data.concat([action.payload])54 });55 case actionTypes.UPDATE_REASON_FOR_LEAVING_SUCCESS:56 return Object.assign({}, state, {57 isLoading: false,58 error: null,59 data: state.data.map(item => {60 if (item.id === action.payload.id) {61 return action.payload;62 } else {63 return item;64 }65 })66 });67 case actionTypes.DELETE_REASON_FOR_LEAVING_SUCCESS:68 return Object.assign({}, state, {69 isLoading: false,70 error: null,71 data: state.data.filter(item => item.id !== action.payload.id)72 });73 case actionTypes.GET_REASON_FOR_LEAVING_FAILED:74 case actionTypes.GET_ALL_REASON_FOR_LEAVING_FAILED:75 return Object.assign({}, state, {76 isLoading: false,77 errors: action.errors,78 data: null79 });80 default:81 return state;82 }83};84export const actionCreators = {85 getLeavingReasonsRequest: filters => ({86 type: actionTypes.GET_REASON_FOR_LEAVING,87 filters88 }),89 getAllLeavingReasonsRequest: () => ({90 type: actionTypes.GET_ALL_REASON_FOR_LEAVING91 }),92 createReasonForLeaving: body => ({93 type: actionTypes.CREATE_REASON_FOR_LEAVING,94 body95 }),96 updateReasonForLeaving: (id, body) => ({97 type: actionTypes.UPDATE_REASON_FOR_LEAVING,98 id,99 body100 }),101 deleteReasonForLeaving: id => ({102 type: actionTypes.DELETE_REASON_FOR_LEAVING,103 id104 })...

Full Screen

Full Screen

Using AI Code Generation

copy

Full Screen

1var strykerParent = require('stryker-parent');2strykerParent.reason();3var strykerParent = require('stryker-parent');4strykerParent.reason();5var strykerParent = require('stryker-parent');6strykerParent.reason();7var strykerParent = require('stryker-parent');8strykerParent.reason();9var strykerParent = require('stryker-parent');10strykerParent.reason();11var strykerParent = require('stryker-parent');12strykerParent.reason();13var strykerParent = require('stryker-parent');14strykerParent.reason();15var strykerParent = require('stryker-parent');16strykerParent.reason();17var strykerParent = require('stryker-parent');18strykerParent.reason();19var strykerParent = require('stryker-parent');20strykerParent.reason();21var strykerParent = require('stryker-parent');22strykerParent.reason();23var strykerParent = require('stryker-parent');24strykerParent.reason();25var strykerParent = require('stryker-parent');26strykerParent.reason();27var strykerParent = require('stryker-parent');28strykerParent.reason();29var strykerParent = require('stry

Full Screen

Using AI Code Generation

copy

Full Screen

1console.log(strykerParent.reason());2console.log(strykerChild.reason());3module.exports = function(config) {4 config.set({5 mochaOptions: {6 }7 });8};9 at Function.Module._resolveFilename (module.js:470:15)10 at Function.Module._load (module.js:418:25)11 at Module.require (module.js:498:17)12 at require (internal/module.js:20:19)13 at Object.<anonymous> (/Users/johnsmith/Documents/stryker/stryker-mocha-runner/node_modules/stryker/src/Sandbox.js:3:15)14 at Module._compile (module.js:571:32)15 at Object.Module._extensions..js (module.js:580:10)16 at Module.load (module.js:488:32)17 at tryModuleLoad (module.js:447:12)18 at Function.Module._load (module.js:439:3)19 at Module.require (

Full Screen

Using AI Code Generation

copy

Full Screen

1const strykerParent = require('stryker-parent');2console.log(strykerParent.reason());3const strykerChild = require('stryker-child');4console.log(strykerChild.reason());5const strykerParent = require('stryker-parent');6console.log(strykerParent.reason());7const strykerChild = require('stryker-child');8console.log(strykerChild.reason());9const strykerParent = require('stryker-parent');10console.log(strykerParent.reason());11const strykerChild = require('stryker-child');12console.log(strykerChild.reason());13const strykerParent = require('stryker-parent');14console.log(strykerParent.reason());15const strykerChild = require('stryker-child');16console.log(strykerChild.reason());17const strykerParent = require('stryker-parent');18console.log(strykerParent.reason());19const strykerChild = require('stryker-child');20console.log(strykerChild.reason());21const strykerParent = require('stryker-parent');22console.log(strykerParent.reason());

Full Screen

Using AI Code Generation

copy

Full Screen

1const reason = require('stryker-parent').reason;2reason('test');3module.exports = {4 reason: function (message) {5 console.log('reason:', message);6 }7};8{9}10{11}12 at Function.module.exports [as sync] (stryker/node_modules/resolve/lib/sync.js:33:11)13 at Object.require (stryker/node_modules/resolve/lib/sync.js:18:19)14 at Object.require (stryker/src/utils/requireWrapper.ts:18:19)15 at Object.<anonymous> (stryker/src/child-proxy/ChildProcessProxy.ts:1:1)16 at Module._compile (module.js:570:32)17 at Object.Module._extensions..js (module.js:579:10)18 at Module.load (module.js:487:32)19 at tryModuleLoad (module.js:446:12)20 at Function.Module._load (module.js:438:3)21 at Module.require (module.js:497:17)22 at require (internal/module.js:20:19)23 at Object.<anonymous> (stryker/src/child-proxy/ChildProcessProxyWorker.ts:1:1)24 at Module._compile (module.js:570:32)25 at Object.Module._extensions..js (module.js:579:10)26 at Module.load (module.js:487:32)27 at tryModuleLoad (module.js:446:12)28 at Function.Module._load (module.js:438:3)29 at Module.require (module.js:497:17)30 at require (internal/module.js:20:19)31 at Object.<anonymous> (stryker/src/child-proxy/ChildProcessProxy.ts:1:1)32 at Module._compile (module.js:570:32)

Full Screen

Using AI Code Generation

copy

Full Screen

1var stryker = require('stryker-parent');2var reason = stryker.reason(2);3console.log(reason);4var stryker = require('stryker-parent');5var reason = stryker.reason(1);6console.log(reason);7var stryker = require('stryker-parent');8var reason = stryker.reason(0);9console.log(reason);10var stryker = require('stryker-parent');11var reason = stryker.reason(-1);12console.log(reason);13var stryker = require('stryker-parent');14var reason = stryker.reason(3);15console.log(reason);16var stryker = require('stryker-parent');17var reason = stryker.reason(4);18console.log(reason);19var stryker = require('stryker-parent');20var reason = stryker.reason(5);21console.log(reason);22var stryker = require('stryker-parent');23var reason = stryker.reason(6);24console.log(reason);25var stryker = require('stryker-parent');26var reason = stryker.reason(7);27console.log(reason);28var stryker = require('stryker-parent');29var reason = stryker.reason(8);30console.log(reason);31var stryker = require('stryker

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run stryker-parent automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful