tests/nsis3/share/doc/nsis/Examples/TextFuncTest.nsi

Summary

Maintainability
Test Coverage
;_____________________________________________________________________________
;
;                          Text Functions Test
;_____________________________________________________________________________
;
; 2006 Shengalts Aleksander aka Instructor (Shengalts@mail.ru)

Name "Text Functions Test"
OutFile "TextFuncTest.exe"
Caption "$(^Name)"
ShowInstDetails show
XPStyle on
RequestExecutionLevel user

Var FUNCTION
Var TEMPFILE1
Var TEMPFILE2
Var TEMPFILE3
Var HANDLE
Var OUT

!include "TextFunc.nsh"

;############### INSTALL ###############

!define StackVerificationStart `!insertmacro StackVerificationStart`
!macro StackVerificationStart _FUNCTION
    StrCpy $FUNCTION ${_FUNCTION}
    Call StackVerificationStart
!macroend

!define StackVerificationEnd `!insertmacro StackVerificationEnd`
!macro StackVerificationEnd
    Call StackVerificationEnd
!macroend

Function StackVerificationStart
    StrCpy $0 !0
    StrCpy $1 !1
    StrCpy $2 !2
    StrCpy $3 !3
    StrCpy $4 !4
    StrCpy $5 !5
    StrCpy $6 !6
    StrCpy $7 !7
    StrCpy $8 !8
    StrCpy $9 !9
    StrCpy $R0 !R0
    StrCpy $R1 !R1
    StrCpy $R2 !R2
    StrCpy $R3 !R3
    StrCpy $R4 !R4
    StrCpy $R5 !R5
    StrCpy $R6 !R6
    StrCpy $R7 !R7
    StrCpy $R8 !R8
    StrCpy $R9 !R9
FunctionEnd

Function StackVerificationEnd
    IfErrors +3
    DetailPrint 'PASSED $FUNCTION no errors'
    goto +2
    DetailPrint 'FAILED   $FUNCTION error'

    StrCmp $0 '!0' 0 error
    StrCmp $1 '!1' 0 error
    StrCmp $2 '!2' 0 error
    StrCmp $3 '!3' 0 error
    StrCmp $4 '!4' 0 error
    StrCmp $5 '!5' 0 error
    StrCmp $6 '!6' 0 error
    StrCmp $7 '!7' 0 error
    StrCmp $8 '!8' 0 error
    StrCmp $9 '!9' 0 error
    StrCmp $R0 '!R0' 0 error
    StrCmp $R1 '!R1' 0 error
    StrCmp $R2 '!R2' 0 error
    StrCmp $R3 '!R3' 0 error
    StrCmp $R4 '!R4' 0 error
    StrCmp $R5 '!R5' 0 error
    StrCmp $R6 '!R6' 0 error
    StrCmp $R7 '!R7' 0 error
    StrCmp $R8 '!R8' 0 error
    StrCmp $R9 '!R9' 0 error
    DetailPrint 'PASSED $FUNCTION stack'
    goto end

    error:
    DetailPrint 'FAILED   $FUNCTION stack'
;    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
;    quit

    end:
FunctionEnd



Section CreateTestFile
    GetTempFileName $TEMPFILE1
    FileOpen $HANDLE $TEMPFILE1 w
    FileWrite $HANDLE '1A=a$\r$\n'
    FileWrite $HANDLE '2B=b$\r$\n'
    FileWrite $HANDLE '3C=c$\r$\n'
    FileWrite $HANDLE '4D=d$\r$\n'
    FileWrite $HANDLE '5E=e$\r$\n'
    FileClose $HANDLE
    GetTempFileName $TEMPFILE2
    GetTempFileName $TEMPFILE3
SectionEnd


Section LineFind
    ${StackVerificationStart} LineFind

    ${LineFind} '$TEMPFILE1' '/NUL' '1:-4 3 -1' 'LineFindCallback1'
    IfErrors error
    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

    StrCpy $OUT ''
    SetDetailsPrint none
    ${LineFind} '$TEMPFILE1' '$TEMPFILE2' '1:-1' 'LineFindCallback2'
    SetDetailsPrint both
    IfErrors error
    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

    goto +2
    error:
    SetErrors

    ${StackVerificationEnd}
SectionEnd

Function LineFindCallback1
    StrCpy $OUT '$OUT|$R6|$R7|$R8|$R9'
    StrCmp $R8 3 0 +2
    StrCpy $0 StopLineFind

    Push $0
FunctionEnd

Function LineFindCallback2
    StrCmp $R8 2 0 +2
    StrCpy $R9 '4D=d$\r$\n'
    StrCmp $R8 4 0 +2
    StrCpy $R9 '2B=B$\r$\n'

    StrCpy $OUT '$OUT|$R6|$R7|$R8|$R9'

    Push $0
FunctionEnd


Section LineRead
    ${StackVerificationStart} LineRead

    ${LineRead} '$TEMPFILE1' '-1' $OUT
    IfErrors error
    StrCmp $OUT '5E=e$\r$\n' 0 error

    goto +2
    error:
    SetErrors

    ${StackVerificationEnd}
SectionEnd


Section FileReadFromEnd
    ${StackVerificationStart} FileReadFromEnd

    StrCpy $OUT ''
    ${FileReadFromEnd} '$TEMPFILE1' 'FileReadFromEndCallback'
    IfErrors error
    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

    goto +2
    error:
    SetErrors

    ${StackVerificationEnd}
SectionEnd

Function FileReadFromEndCallback
    StrCpy $OUT '$OUT|$7|$8|$9'
    StrCmp $8 2 0 +2
    StrCpy $0 StopFileReadFromEnd

    Push $0
FunctionEnd


Section LineSum
    ${StackVerificationStart} LineSum

    ${LineSum} '$TEMPFILE1' $OUT
    IfErrors error
    StrCmp $OUT '5' 0 error

    goto +2
    error:
    SetErrors

    ${StackVerificationEnd}
SectionEnd


Section FileJoin
    ${StackVerificationStart} FileJoin

    SetDetailsPrint none
    ${FileJoin} '$TEMPFILE1' '$TEMPFILE2' '$TEMPFILE3'
    SetDetailsPrint both

    ${StackVerificationEnd}
SectionEnd


Section TextCompare
    ${StackVerificationStart} TextCompare

    StrCpy $OUT ''
    ${TextCompare} '$TEMPFILE1' '$TEMPFILE2' 'FastDiff' 'TextCompareCallback'
    StrCmp $OUT '|2|4D=d$\r$\n|2|2B=b$\r$\n|4|2B=B$\r$\n|4|4D=d$\r$\n' 0 error

    StrCpy $OUT ''
    ${TextCompare} '$TEMPFILE1' '$TEMPFILE2' 'FastEqual' 'TextCompareCallback'
    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

    StrCpy $OUT ''
    ${TextCompare} '$TEMPFILE1' '$TEMPFILE2' 'SlowDiff' 'TextCompareCallback'
    StrCmp $OUT '' 0 error

    StrCpy $OUT ''
    ${TextCompare} '$TEMPFILE1' '$TEMPFILE2' 'SlowEqual' 'TextCompareCallback'
    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

    goto +2
    error:
    SetErrors

    ${StackVerificationEnd}
SectionEnd

Section TextCompareS
    ${StackVerificationStart} TextCompareS

    StrCpy $OUT ''
    ${TextCompareS} '$TEMPFILE1' '$TEMPFILE2' 'SlowDiff' 'TextCompareCallback'
    StrCmp $OUT '|||2|2B=b$\r$\n' 0 error

    StrCpy $OUT ''
    ${TextCompareS} '$TEMPFILE1' '$TEMPFILE2' 'SlowEqual' 'TextCompareCallback'
    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

    goto +2
    error:
    SetErrors

    ${StackVerificationEnd}
SectionEnd

Function TextCompareCallback
    StrCpy $OUT '$OUT|$6|$7|$8|$9'

    Push $0
FunctionEnd


Section ConfigRead
    ${StackVerificationStart} ConfigRead

    ${ConfigRead} '$TEMPFILE1' '3c=' $OUT
    StrCmp $OUT 'c' 0 error

    ${ConfigRead} '$TEMPFILE1' '6F=' $OUT
    StrCmp $OUT '' 0 error

    ${ConfigRead} '$TEMPFILE1' 'FF=' $OUT
    IfErrors 0 error

    goto +2
    error:
    SetErrors

    ${StackVerificationEnd}
SectionEnd


Section ConfigReadS
    ${StackVerificationStart} ConfigReadS

    ${ConfigReadS} '$TEMPFILE1' '3C=' $OUT
    StrCmp $OUT 'c' 0 error

    ${ConfigReadS} '$TEMPFILE1' '3c=' $OUT
    IfErrors 0 error
    StrCmp $OUT '' 0 error

    goto +2
    error:
    SetErrors

    ${StackVerificationEnd}
SectionEnd


Section ConfigWrite
    ${StackVerificationStart} ConfigWrite

    ${ConfigWrite} '$TEMPFILE1' '5E=' 'e**' $OUT
    StrCmp $OUT 'CHANGED' 0 error

    ${ConfigWrite} '$TEMPFILE1' '2B=' '' $OUT
    StrCmp $OUT 'DELETED' 0 error

    ${ConfigWrite} '$TEMPFILE1' '3c=' 'c' $OUT
    StrCmp $OUT 'SAME' 0 error

    ${ConfigWrite} '$TEMPFILE1' '6F=' '*' $OUT
    StrCmp $OUT 'ADDED' 0 error

    goto +2
    error:
    SetErrors

    ${StackVerificationEnd}
SectionEnd


Section ConfigWriteS
    ${StackVerificationStart} ConfigWriteS

    ${ConfigWriteS} '$TEMPFILE1' '5e=' 'e**' $OUT
    StrCmp $OUT 'ADDED' 0 error

    goto +2
    error:
    SetErrors

    ${StackVerificationEnd}
SectionEnd


Section FileRecode
    ${StackVerificationStart} FileRecode

    ${FileRecode} '$TEMPFILE1' 'CharToOem'

    ${StackVerificationEnd}
SectionEnd


Section TrimNewLines
    ${StackVerificationStart} TrimNewLines

    ${TrimNewLines} 'Text Line$\r$\n' $OUT
    StrCmp $OUT 'Text Line' 0 error

    ${TrimNewLines} 'Text Line' $OUT
    StrCmp $OUT 'Text Line' 0 error

    ${TrimNewLines} 'Text Line$\n' $OUT
    StrCmp $OUT 'Text Line' 0 error

    goto +2
    error:
    SetErrors

    ${StackVerificationEnd}
SectionEnd


Section WriteUninstaller
    SetDetailsPrint none
    Delete $TEMPFILE1
    Delete $TEMPFILE2
    Delete $TEMPFILE3
    SetDetailsPrint both
    goto +2
    WriteUninstaller '$EXEDIR\un.TextFuncTest.exe'
SectionEnd



;############### UNINSTALL ###############

Section un.Uninstall
    ${LineFind} '$TEMPFILE1' '/NUL' '1:-1' 'un.LineFindCallback'
    ${LineRead} '$TEMPFILE1' '-1' $OUT
    ${FileReadFromEnd} '$TEMPFILE1' 'un.FileReadFromEndCallback'
    ${LineSum} '$TEMPFILE1' $OUT
    ${FileJoin} '$TEMPFILE1' '$TEMPFILE2' '$TEMPFILE3'
    ${TextCompare} '$TEMPFILE1' '$TEMPFILE2' 'FastDiff' 'un.TextCompareCallback'
    ${TextCompareS} '$TEMPFILE1' '$TEMPFILE2' 'FastDiff' 'un.TextCompareCallback'
    ${ConfigRead} '$TEMPFILE1' '3c=' $OUT
    ${ConfigReadS} '$TEMPFILE1' '3c=' $OUT
    ${ConfigWrite} '$TEMPFILE1' '5E=' 'e**' $OUT
    ${ConfigWriteS} '$TEMPFILE1' '5E=' 'e**' $OUT
    ${FileRecode} '$TEMPFILE1' 'CharToOem'
    ${TrimNewLines} 'Text Line$\r$\n' $OUT
SectionEnd

Function un.LineFindCallback
    Push $0
FunctionEnd

Function un.FileReadFromEndCallback
    Push $0
FunctionEnd

Function un.TextCompareCallback
    Push $0
FunctionEnd