cmdr
Hex Artifact Content
Not logged in
Bounty program for improvements to Tcl and certain Tcl packages.
Tcl 2019 Conference, Houston/TX, US, Nov 4-8
Send your abstracts to [email protected]
or submit via the online form by Sep 9.

Artifact e7c138b74338ee3846895640165841bfd3cebf1b:


0000: 23 20 2d 2a 2d 20 74 63 6c 20 2d 2a 2d 20 74 63  # -*- tcl -*- tc
0010: 6c 2e 74 6b 2f 2f 44 53 4c 20 74 63 6c 74 65 73  l.tk//DSL tcltes
0020: 74 2f 2f 45 4e 2f 2f 32 2e 30 0a 23 20 23 20 23  t//EN//2.0.# # #
0030: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23  # ### ##### ####
0040: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23  #### ###########
0050: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23  ## #############
0060: 23 23 23 23 23 23 23 23 0a 23 23 20 54 65 73 74  ########.## Test
0070: 69 6e 67 20 74 68 65 20 63 6d 64 72 3a 3a 76 61  ing the cmdr::va
0080: 6c 69 64 61 74 65 20 70 61 63 6b 61 67 65 20 28  lidate package (
0090: 73 75 62 3a 20 76 61 6c 74 79 70 65 3a 3a 65 61  sub: valtype::ea
00a0: 6e 31 33 29 2e 0a 0a 6b 74 20 63 68 65 63 6b 20  n13)...kt check 
00b0: 54 63 6c 20 20 20 20 20 38 2e 35 0a 6b 74 20 63  Tcl     8.5.kt c
00c0: 68 65 63 6b 20 74 63 6c 74 65 73 74 20 32 0a 0a  heck tcltest 2..
00d0: 6b 74 20 72 65 71 75 69 72 65 20 73 75 70 70 6f  kt require suppo
00e0: 72 74 20 64 65 62 75 67 0a 6b 74 20 72 65 71 75  rt debug.kt requ
00f0: 69 72 65 20 73 75 70 70 6f 72 74 20 64 65 62 75  ire support debu
0100: 67 3a 3a 63 61 6c 6c 65 72 0a 0a 6b 74 20 6c 6f  g::caller..kt lo
0110: 63 61 6c 20 20 20 73 75 70 70 6f 72 74 20 63 6d  cal   support cm
0120: 64 72 3a 3a 76 61 6c 69 64 61 74 65 3a 3a 63 6f  dr::validate::co
0130: 6d 6d 6f 6e 0a 6b 74 20 6c 6f 63 61 6c 20 20 20  mmon.kt local   
0140: 74 65 73 74 69 6e 67 20 63 6d 64 72 3a 3a 76 61  testing cmdr::va
0150: 6c 69 64 61 74 65 3a 3a 76 61 6c 74 79 70 65 3a  lidate::valtype:
0160: 3a 63 72 65 64 69 74 63 61 72 64 3a 3a 64 69 73  :creditcard::dis
0170: 63 6f 76 65 72 0a 0a 23 20 23 20 23 23 20 23 23  cover..# # ## ##
0180: 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23  # ##### ########
0190: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 20 23   ############# #
01a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
01b0: 23 23 23 23 0a 23 23 20 42 61 73 69 63 20 41 50  ####.## Basic AP
01c0: 49 2e 0a 0a 73 65 74 20 76 74 79 70 65 20 63 6d  I...set vtype cm
01d0: 64 72 3a 3a 76 61 6c 69 64 61 74 65 3a 3a 76 61  dr::validate::va
01e0: 6c 74 79 70 65 3a 3a 63 72 65 64 69 74 63 61 72  ltype::creditcar
01f0: 64 3a 3a 64 69 73 63 6f 76 65 72 0a 73 65 74 20  d::discover.set 
0200: 76 74 64 65 66 20 7b 7d 0a 6b 74 20 73 6f 75 72  vtdef {}.kt sour
0210: 63 65 20 76 74 79 70 65 2e 74 63 6c 0a 0a 23 20  ce vtype.tcl..# 
0220: 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23  # ## ### ##### #
0230: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23  ####### ########
0240: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23  ##### ##########
0250: 23 23 23 23 23 23 23 23 23 23 23 0a 23 23 20 53  ###########.## S
0260: 70 65 63 69 66 69 63 20 62 65 68 61 76 69 6f 75  pecific behaviou
0270: 72 0a 0a 74 65 73 74 20 76 74 2d 24 7b 76 74 79  r..test vt-${vty
0280: 70 65 7d 2d 76 61 6c 69 64 61 74 65 2d 32 2e 30  pe}-validate-2.0
0290: 20 7b 63 72 65 64 69 74 63 61 72 64 20 64 69 73   {creditcard dis
02a0: 63 6f 76 65 72 20 76 61 6c 69 64 61 74 69 6f 6e  cover validation
02b0: 20 66 61 69 6c 75 72 65 2c 20 62 61 64 20 63 68   failure, bad ch
02c0: 61 72 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20  ar} -body {.    
02d0: 24 76 74 79 70 65 20 76 61 6c 69 64 61 74 65 20  $vtype validate 
02e0: 50 20 36 35 41 33 34 35 36 32 37 34 39 31 30 34  P 65A34562749104
02f0: 36 33 0a 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65  63.} -returnCode
0300: 73 20 65 72 72 6f 72 20 5c 0a 20 20 20 20 2d 72  s error \.    -r
0310: 65 73 75 6c 74 20 7b 4e 6f 74 20 61 20 43 52 45  esult {Not a CRE
0320: 44 49 54 43 41 52 44 20 44 49 53 43 4f 56 45 52  DITCARD DISCOVER
0330: 20 6e 75 6d 62 65 72 2c 20 65 78 70 65 63 74 65   number, expecte
0340: 64 20 6f 6e 6c 79 20 64 69 67 69 74 73 7d 0a 0a  d only digits}..
0350: 66 6f 72 65 61 63 68 20 7b 6e 20 69 6e 7d 20 7b  foreach {n in} {
0360: 0a 20 20 20 20 31 20 20 30 33 30 36 34 30 36 31  .    1  03064061
0370: 35 34 35 0a 20 20 20 20 32 20 20 39 37 38 30 33  545.    2  97803
0380: 30 36 34 0a 7d 20 7b 0a 20 20 20 20 74 65 73 74  064.} {.    test
0390: 20 76 74 2d 24 7b 76 74 79 70 65 7d 2d 76 61 6c   vt-${vtype}-val
03a0: 69 64 61 74 65 2d 32 2e 31 2e 24 6e 20 7b 63 72  idate-2.1.$n {cr
03b0: 65 64 69 74 63 61 72 64 20 64 69 73 63 6f 76 65  editcard discove
03c0: 72 20 76 61 6c 69 64 61 74 69 6f 6e 20 66 61 69  r validation fai
03d0: 6c 75 72 65 2c 20 62 61 64 20 6c 65 6e 67 74 68  lure, bad length
03e0: 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 24 76  } -body {.    $v
03f0: 74 79 70 65 20 76 61 6c 69 64 61 74 65 20 50 20  type validate P 
0400: 24 69 6e 0a 20 20 20 20 7d 20 2d 72 65 74 75 72  $in.    } -retur
0410: 6e 43 6f 64 65 73 20 65 72 72 6f 72 20 5c 0a 20  nCodes error \. 
0420: 20 20 20 20 20 20 20 2d 72 65 73 75 6c 74 20 7b         -result {
0430: 4e 6f 74 20 61 20 43 52 45 44 49 54 43 41 52 44  Not a CREDITCARD
0440: 20 44 49 53 43 4f 56 45 52 20 6e 75 6d 62 65 72   DISCOVER number
0450: 2c 20 69 6e 63 6f 72 72 65 63 74 20 6c 65 6e 67  , incorrect leng
0460: 74 68 2c 20 65 78 70 65 63 74 65 64 20 31 36 20  th, expected 16 
0470: 63 68 61 72 61 63 74 65 72 73 7d 0a 7d 0a 0a 66  characters}.}..f
0480: 6f 72 65 61 63 68 20 7b 6e 20 69 6e 7d 20 7b 0a  oreach {n in} {.
0490: 20 20 20 20 31 20 20 36 30 31 31 32 33 34 35 36      1  601123456
04a0: 37 38 39 30 31 32 34 0a 20 20 20 20 32 20 20 36  7890124.    2  6
04b0: 35 34 33 32 31 30 39 38 37 36 35 34 33 32 35 0a  543210987654325.
04c0: 20 20 20 20 33 20 20 36 30 31 31 32 37 33 39 38      3  601127398
04d0: 37 31 37 35 35 39 36 0a 20 20 20 20 34 20 20 36  7175596.    4  6
04e0: 35 31 32 33 34 35 36 37 38 31 32 33 34 35 37 0a  512345678123457.
04f0: 7d 20 7b 0a 20 20 20 20 74 65 73 74 20 76 74 2d  } {.    test vt-
0500: 24 7b 76 74 79 70 65 7d 2d 76 61 6c 69 64 61 74  ${vtype}-validat
0510: 65 2d 32 2e 32 2e 24 6e 20 7b 63 72 65 64 69 74  e-2.2.$n {credit
0520: 63 61 72 64 20 64 69 73 63 6f 76 65 72 20 76 61  card discover va
0530: 6c 69 64 61 74 69 6f 6e 20 66 61 69 6c 75 72 65  lidation failure
0540: 2c 20 62 61 64 20 63 68 65 63 6b 7d 20 2d 62 6f  , bad check} -bo
0550: 64 79 20 7b 0a 09 24 76 74 79 70 65 20 76 61 6c  dy {..$vtype val
0560: 69 64 61 74 65 20 50 20 24 69 6e 0a 20 20 20 20  idate P $in.    
0570: 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65 73 20 65  } -returnCodes e
0580: 72 72 6f 72 20 5c 0a 09 2d 72 65 73 75 6c 74 20  rror \..-result 
0590: 7b 4e 6f 74 20 61 20 43 52 45 44 49 54 43 41 52  {Not a CREDITCAR
05a0: 44 20 44 49 53 43 4f 56 45 52 20 6e 75 6d 62 65  D DISCOVER numbe
05b0: 72 2c 20 74 68 65 20 63 68 65 63 6b 20 64 69 67  r, the check dig
05c0: 69 74 20 69 73 20 69 6e 63 6f 72 72 65 63 74 7d  it is incorrect}
05d0: 0a 7d 0a 0a 66 6f 72 65 61 63 68 20 7b 6e 20 69  .}..foreach {n i
05e0: 6e 7d 20 7b 0a 20 20 20 20 31 20 20 39 37 37 32  n} {.    1  9772
05f0: 38 39 30 34 35 38 39 32 35 35 37 34 0a 20 20 20  890458925574.   
0600: 20 32 20 20 38 32 38 35 32 39 38 34 37 35 38 34   2  828529847584
0610: 37 35 36 38 0a 7d 20 7b 0a 20 20 20 20 74 65 73  7568.} {.    tes
0620: 74 20 76 74 2d 24 7b 76 74 79 70 65 7d 2d 76 61  t vt-${vtype}-va
0630: 6c 69 64 61 74 65 2d 32 2e 33 2e 24 6e 20 7b 63  lidate-2.3.$n {c
0640: 72 65 64 69 74 63 61 72 64 20 64 69 73 63 6f 76  reditcard discov
0650: 65 72 20 76 61 6c 69 64 61 74 69 6f 6e 20 66 61  er validation fa
0660: 69 6c 75 72 65 2c 20 62 61 64 20 70 72 65 66 69  ilure, bad prefi
0670: 78 7d 20 2d 62 6f 64 79 20 7b 0a 09 24 76 74 79  x} -body {..$vty
0680: 70 65 20 76 61 6c 69 64 61 74 65 20 50 20 24 69  pe validate P $i
0690: 6e 0a 20 20 20 20 7d 20 2d 72 65 74 75 72 6e 43  n.    } -returnC
06a0: 6f 64 65 73 20 65 72 72 6f 72 20 5c 0a 09 2d 72  odes error \..-r
06b0: 65 73 75 6c 74 20 7b 4e 6f 74 20 61 20 43 52 45  esult {Not a CRE
06c0: 44 49 54 43 41 52 44 20 44 49 53 43 4f 56 45 52  DITCARD DISCOVER
06d0: 20 6e 75 6d 62 65 72 2c 20 69 6e 63 6f 72 72 65   number, incorre
06e0: 63 74 20 70 72 65 66 69 78 2c 20 65 78 70 65 63  ct prefix, expec
06f0: 74 65 64 20 6f 6e 65 20 6f 66 20 36 30 31 31 2c  ted one of 6011,
0700: 20 6f 72 20 36 35 7d 0a 7d 0a 0a 23 20 2d 2d 2d   or 65}.}..# ---
0710: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0720: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0730: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0740: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0750: 2d 2d 2d 2d 2d 2d 0a 0a 66 6f 72 65 61 63 68 20  ------..foreach 
0760: 7b 6e 20 69 6e 20 63 68 65 63 6b 7d 20 7b 0a 20  {n in check} {. 
0770: 20 20 20 31 20 20 36 35 30 31 32 33 34 35 36 37     1  6501234567
0780: 38 39 30 31 32 20 30 0a 20 20 20 20 32 20 20 36  89012 0.    2  6
0790: 30 31 31 39 38 37 36 35 34 33 32 31 30 30 20 31  01198765432100 1
07a0: 0a 20 20 20 20 33 20 20 36 35 39 39 32 37 33 39  .    3  65992739
07b0: 38 37 31 37 35 33 34 20 33 0a 20 20 20 20 34 20  8717534 3.    4 
07c0: 20 36 30 31 31 33 34 35 36 37 38 31 32 33 34 38   601134567812348
07d0: 20 33 0a 7d 20 7b 0a 20 20 20 20 74 65 73 74 20   3.} {.    test 
07e0: 76 74 2d 24 7b 76 74 79 70 65 7d 2d 76 61 6c 69  vt-${vtype}-vali
07f0: 64 61 74 65 2d 34 2e 24 6e 20 7b 63 72 65 64 69  date-4.$n {credi
0800: 74 63 61 72 64 20 64 69 73 63 6f 76 65 72 20 76  tcard discover v
0810: 61 6c 69 64 61 74 69 6f 6e 7d 20 2d 62 6f 64 79  alidation} -body
0820: 20 7b 0a 09 24 76 74 79 70 65 20 76 61 6c 69 64   {..$vtype valid
0830: 61 74 65 20 50 20 24 69 6e 24 63 68 65 63 6b 0a  ate P $in$check.
0840: 20 20 20 20 7d 20 2d 72 65 73 75 6c 74 20 24 69      } -result $i
0850: 6e 24 63 68 65 63 6b 0a 7d 0a 0a 23 20 23 20 23  n$check.}..# # #
0860: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23  # ### ##### ####
0870: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23  #### ###########
0880: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23  ## #############
0890: 23 23 23 23 23 23 23 23 0a 63 6c 65 61 6e 75 70  ########.cleanup
08a0: 54 65 73 74 73 0a 72 65 74 75 72 6e 0a           Tests.return.