TextFuncTest.nsi 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414
  1. ;_____________________________________________________________________________
  2. ;
  3. ; Text Functions Test
  4. ;_____________________________________________________________________________
  5. ;
  6. ; 2006 Shengalts Aleksander aka Instructor (Shengalts@mail.ru)
  7. Name "Text Functions Test"
  8. OutFile "TextFuncTest.exe"
  9. Caption "$(^Name)"
  10. ShowInstDetails show
  11. XPStyle on
  12. RequestExecutionLevel user
  13. Var FUNCTION
  14. Var TEMPFILE1
  15. Var TEMPFILE2
  16. Var TEMPFILE3
  17. Var HANDLE
  18. Var OUT
  19. !include "TextFunc.nsh"
  20. ;############### INSTALL ###############
  21. !define StackVerificationStart `!insertmacro StackVerificationStart`
  22. !macro StackVerificationStart _FUNCTION
  23. StrCpy $FUNCTION ${_FUNCTION}
  24. Call StackVerificationStart
  25. !macroend
  26. !define StackVerificationEnd `!insertmacro StackVerificationEnd`
  27. !macro StackVerificationEnd
  28. Call StackVerificationEnd
  29. !macroend
  30. Function StackVerificationStart
  31. StrCpy $0 !0
  32. StrCpy $1 !1
  33. StrCpy $2 !2
  34. StrCpy $3 !3
  35. StrCpy $4 !4
  36. StrCpy $5 !5
  37. StrCpy $6 !6
  38. StrCpy $7 !7
  39. StrCpy $8 !8
  40. StrCpy $9 !9
  41. StrCpy $R0 !R0
  42. StrCpy $R1 !R1
  43. StrCpy $R2 !R2
  44. StrCpy $R3 !R3
  45. StrCpy $R4 !R4
  46. StrCpy $R5 !R5
  47. StrCpy $R6 !R6
  48. StrCpy $R7 !R7
  49. StrCpy $R8 !R8
  50. StrCpy $R9 !R9
  51. FunctionEnd
  52. Function StackVerificationEnd
  53. IfErrors +3
  54. DetailPrint 'PASSED $FUNCTION no errors'
  55. goto +2
  56. DetailPrint 'FAILED $FUNCTION error'
  57. StrCmp $0 '!0' 0 error
  58. StrCmp $1 '!1' 0 error
  59. StrCmp $2 '!2' 0 error
  60. StrCmp $3 '!3' 0 error
  61. StrCmp $4 '!4' 0 error
  62. StrCmp $5 '!5' 0 error
  63. StrCmp $6 '!6' 0 error
  64. StrCmp $7 '!7' 0 error
  65. StrCmp $8 '!8' 0 error
  66. StrCmp $9 '!9' 0 error
  67. StrCmp $R0 '!R0' 0 error
  68. StrCmp $R1 '!R1' 0 error
  69. StrCmp $R2 '!R2' 0 error
  70. StrCmp $R3 '!R3' 0 error
  71. StrCmp $R4 '!R4' 0 error
  72. StrCmp $R5 '!R5' 0 error
  73. StrCmp $R6 '!R6' 0 error
  74. StrCmp $R7 '!R7' 0 error
  75. StrCmp $R8 '!R8' 0 error
  76. StrCmp $R9 '!R9' 0 error
  77. DetailPrint 'PASSED $FUNCTION stack'
  78. goto end
  79. error:
  80. DetailPrint 'FAILED $FUNCTION stack'
  81. ; MessageBox MB_OKCANCEL '$$0={$0}$\n$$1={$1}$\n$$2={$2}$\n$$3={$3}$\n$$4={$4}$\n$$5={$5}$\n$$6={$6}$\n$$7={$7}$\n$$8={$8}$\n$$9={$9}$\n$$R0={$R0}$\n$$R1={$R1}$\n$$R2={$R2}$\n$$R3={$R3}$\n$$R4={$R4}$\n$$R5={$R5}$\n$$R6={$R6}$\n$$R7={$R7}$\n$$R8={$R8}$\n$$R9={$R9}' IDOK +2
  82. ; quit
  83. end:
  84. FunctionEnd
  85. Section CreateTestFile
  86. GetTempFileName $TEMPFILE1
  87. FileOpen $HANDLE $TEMPFILE1 w
  88. FileWrite $HANDLE '1A=a$\r$\n'
  89. FileWrite $HANDLE '2B=b$\r$\n'
  90. FileWrite $HANDLE '3C=c$\r$\n'
  91. FileWrite $HANDLE '4D=d$\r$\n'
  92. FileWrite $HANDLE '5E=e$\r$\n'
  93. FileClose $HANDLE
  94. GetTempFileName $TEMPFILE2
  95. GetTempFileName $TEMPFILE3
  96. SectionEnd
  97. Section LineFind
  98. ${StackVerificationStart} LineFind
  99. ${LineFind} '$TEMPFILE1' '/NUL' '1:-4 3 -1' 'LineFindCallback1'
  100. IfErrors error
  101. StrCmp $OUT '|1:2|-5|1|1A=a$\r$\n|1:2|-4|2|2B=b$\r$\n|3:3|-3|3|3C=c$\r$\n' 0 error
  102. StrCpy $OUT ''
  103. SetDetailsPrint none
  104. ${LineFind} '$TEMPFILE1' '$TEMPFILE2' '1:-1' 'LineFindCallback2'
  105. SetDetailsPrint both
  106. IfErrors error
  107. StrCmp $OUT '|1:-1||1|1A=a$\r$\n|1:-1||2|4D=d$\r$\n|1:-1||3|3C=c$\r$\n|1:-1||4|2B=B$\r$\n|1:-1||5|5E=e$\r$\n' 0 error
  108. goto +2
  109. error:
  110. SetErrors
  111. ${StackVerificationEnd}
  112. SectionEnd
  113. Function LineFindCallback1
  114. StrCpy $OUT '$OUT|$R6|$R7|$R8|$R9'
  115. StrCmp $R8 3 0 +2
  116. StrCpy $0 StopLineFind
  117. Push $0
  118. FunctionEnd
  119. Function LineFindCallback2
  120. StrCmp $R8 2 0 +2
  121. StrCpy $R9 '4D=d$\r$\n'
  122. StrCmp $R8 4 0 +2
  123. StrCpy $R9 '2B=B$\r$\n'
  124. StrCpy $OUT '$OUT|$R6|$R7|$R8|$R9'
  125. Push $0
  126. FunctionEnd
  127. Section LineRead
  128. ${StackVerificationStart} LineRead
  129. ${LineRead} '$TEMPFILE1' '-1' $OUT
  130. IfErrors error
  131. StrCmp $OUT '5E=e$\r$\n' 0 error
  132. goto +2
  133. error:
  134. SetErrors
  135. ${StackVerificationEnd}
  136. SectionEnd
  137. Section FileReadFromEnd
  138. ${StackVerificationStart} FileReadFromEnd
  139. StrCpy $OUT ''
  140. ${FileReadFromEnd} '$TEMPFILE1' 'FileReadFromEndCallback'
  141. IfErrors error
  142. StrCmp $OUT '|-1|5|5E=e$\r$\n|-2|4|4D=d$\r$\n|-3|3|3C=c$\r$\n|-4|2|2B=b$\r$\n' 0 error
  143. goto +2
  144. error:
  145. SetErrors
  146. ${StackVerificationEnd}
  147. SectionEnd
  148. Function FileReadFromEndCallback
  149. StrCpy $OUT '$OUT|$7|$8|$9'
  150. StrCmp $8 2 0 +2
  151. StrCpy $0 StopFileReadFromEnd
  152. Push $0
  153. FunctionEnd
  154. Section LineSum
  155. ${StackVerificationStart} LineSum
  156. ${LineSum} '$TEMPFILE1' $OUT
  157. IfErrors error
  158. StrCmp $OUT '5' 0 error
  159. goto +2
  160. error:
  161. SetErrors
  162. ${StackVerificationEnd}
  163. SectionEnd
  164. Section FileJoin
  165. ${StackVerificationStart} FileJoin
  166. SetDetailsPrint none
  167. ${FileJoin} '$TEMPFILE1' '$TEMPFILE2' '$TEMPFILE3'
  168. SetDetailsPrint both
  169. ${StackVerificationEnd}
  170. SectionEnd
  171. Section TextCompare
  172. ${StackVerificationStart} TextCompare
  173. StrCpy $OUT ''
  174. ${TextCompare} '$TEMPFILE1' '$TEMPFILE2' 'FastDiff' 'TextCompareCallback'
  175. StrCmp $OUT '|2|4D=d$\r$\n|2|2B=b$\r$\n|4|2B=B$\r$\n|4|4D=d$\r$\n' 0 error
  176. StrCpy $OUT ''
  177. ${TextCompare} '$TEMPFILE1' '$TEMPFILE2' 'FastEqual' 'TextCompareCallback'
  178. StrCmp $OUT '|1|1A=a$\r$\n|1|1A=a$\r$\n|3|3C=c$\r$\n|3|3C=c$\r$\n|5|5E=e$\r$\n|5|5E=e$\r$\n' 0 error
  179. StrCpy $OUT ''
  180. ${TextCompare} '$TEMPFILE1' '$TEMPFILE2' 'SlowDiff' 'TextCompareCallback'
  181. StrCmp $OUT '' 0 error
  182. StrCpy $OUT ''
  183. ${TextCompare} '$TEMPFILE1' '$TEMPFILE2' 'SlowEqual' 'TextCompareCallback'
  184. StrCmp $OUT '|1|1A=a$\r$\n|1|1A=a$\r$\n|4|2B=B$\r$\n|2|2B=b$\r$\n|3|3C=c$\r$\n|3|3C=c$\r$\n|2|4D=d$\r$\n|4|4D=d$\r$\n|5|5E=e$\r$\n|5|5E=e$\r$\n' 0 error
  185. goto +2
  186. error:
  187. SetErrors
  188. ${StackVerificationEnd}
  189. SectionEnd
  190. Section TextCompareS
  191. ${StackVerificationStart} TextCompareS
  192. StrCpy $OUT ''
  193. ${TextCompareS} '$TEMPFILE1' '$TEMPFILE2' 'SlowDiff' 'TextCompareCallback'
  194. StrCmp $OUT '|||2|2B=b$\r$\n' 0 error
  195. StrCpy $OUT ''
  196. ${TextCompareS} '$TEMPFILE1' '$TEMPFILE2' 'SlowEqual' 'TextCompareCallback'
  197. StrCmp $OUT '|1|1A=a$\r$\n|1|1A=a$\r$\n|3|3C=c$\r$\n|3|3C=c$\r$\n|2|4D=d$\r$\n|4|4D=d$\r$\n|5|5E=e$\r$\n|5|5E=e$\r$\n' 0 error
  198. goto +2
  199. error:
  200. SetErrors
  201. ${StackVerificationEnd}
  202. SectionEnd
  203. Function TextCompareCallback
  204. StrCpy $OUT '$OUT|$6|$7|$8|$9'
  205. Push $0
  206. FunctionEnd
  207. Section ConfigRead
  208. ${StackVerificationStart} ConfigRead
  209. ${ConfigRead} '$TEMPFILE1' '3c=' $OUT
  210. StrCmp $OUT 'c' 0 error
  211. ${ConfigRead} '$TEMPFILE1' '6F=' $OUT
  212. StrCmp $OUT '' 0 error
  213. ${ConfigRead} '$TEMPFILE1' 'FF=' $OUT
  214. IfErrors 0 error
  215. goto +2
  216. error:
  217. SetErrors
  218. ${StackVerificationEnd}
  219. SectionEnd
  220. Section ConfigReadS
  221. ${StackVerificationStart} ConfigReadS
  222. ${ConfigReadS} '$TEMPFILE1' '3C=' $OUT
  223. StrCmp $OUT 'c' 0 error
  224. ${ConfigReadS} '$TEMPFILE1' '3c=' $OUT
  225. IfErrors 0 error
  226. StrCmp $OUT '' 0 error
  227. goto +2
  228. error:
  229. SetErrors
  230. ${StackVerificationEnd}
  231. SectionEnd
  232. Section ConfigWrite
  233. ${StackVerificationStart} ConfigWrite
  234. ${ConfigWrite} '$TEMPFILE1' '5E=' 'e**' $OUT
  235. StrCmp $OUT 'CHANGED' 0 error
  236. ${ConfigWrite} '$TEMPFILE1' '2B=' '' $OUT
  237. StrCmp $OUT 'DELETED' 0 error
  238. ${ConfigWrite} '$TEMPFILE1' '3c=' 'c' $OUT
  239. StrCmp $OUT 'SAME' 0 error
  240. ${ConfigWrite} '$TEMPFILE1' '6F=' '*' $OUT
  241. StrCmp $OUT 'ADDED' 0 error
  242. goto +2
  243. error:
  244. SetErrors
  245. ${StackVerificationEnd}
  246. SectionEnd
  247. Section ConfigWriteS
  248. ${StackVerificationStart} ConfigWriteS
  249. ${ConfigWriteS} '$TEMPFILE1' '5e=' 'e**' $OUT
  250. StrCmp $OUT 'ADDED' 0 error
  251. goto +2
  252. error:
  253. SetErrors
  254. ${StackVerificationEnd}
  255. SectionEnd
  256. Section FileRecode
  257. ${StackVerificationStart} FileRecode
  258. ${FileRecode} '$TEMPFILE1' 'CharToOem'
  259. ${StackVerificationEnd}
  260. SectionEnd
  261. Section TrimNewLines
  262. ${StackVerificationStart} TrimNewLines
  263. ${TrimNewLines} 'Text Line$\r$\n' $OUT
  264. StrCmp $OUT 'Text Line' 0 error
  265. ${TrimNewLines} 'Text Line' $OUT
  266. StrCmp $OUT 'Text Line' 0 error
  267. ${TrimNewLines} 'Text Line$\n' $OUT
  268. StrCmp $OUT 'Text Line' 0 error
  269. goto +2
  270. error:
  271. SetErrors
  272. ${StackVerificationEnd}
  273. SectionEnd
  274. Section WriteUninstaller
  275. SetDetailsPrint none
  276. Delete $TEMPFILE1
  277. Delete $TEMPFILE2
  278. Delete $TEMPFILE3
  279. SetDetailsPrint both
  280. goto +2
  281. WriteUninstaller '$EXEDIR\un.TextFuncTest.exe'
  282. SectionEnd
  283. ;############### UNINSTALL ###############
  284. Section un.Uninstall
  285. ${LineFind} '$TEMPFILE1' '/NUL' '1:-1' 'un.LineFindCallback'
  286. ${LineRead} '$TEMPFILE1' '-1' $OUT
  287. ${FileReadFromEnd} '$TEMPFILE1' 'un.FileReadFromEndCallback'
  288. ${LineSum} '$TEMPFILE1' $OUT
  289. ${FileJoin} '$TEMPFILE1' '$TEMPFILE2' '$TEMPFILE3'
  290. ${TextCompare} '$TEMPFILE1' '$TEMPFILE2' 'FastDiff' 'un.TextCompareCallback'
  291. ${TextCompareS} '$TEMPFILE1' '$TEMPFILE2' 'FastDiff' 'un.TextCompareCallback'
  292. ${ConfigRead} '$TEMPFILE1' '3c=' $OUT
  293. ${ConfigReadS} '$TEMPFILE1' '3c=' $OUT
  294. ${ConfigWrite} '$TEMPFILE1' '5E=' 'e**' $OUT
  295. ${ConfigWriteS} '$TEMPFILE1' '5E=' 'e**' $OUT
  296. ${FileRecode} '$TEMPFILE1' 'CharToOem'
  297. ${TrimNewLines} 'Text Line$\r$\n' $OUT
  298. SectionEnd
  299. Function un.LineFindCallback
  300. Push $0
  301. FunctionEnd
  302. Function un.FileReadFromEndCallback
  303. Push $0
  304. FunctionEnd
  305. Function un.TextCompareCallback
  306. Push $0
  307. FunctionEnd