summaryrefslogtreecommitdiff
path: root/fpcsrc/tests/utils/macos/LinkRunDir
blob: 13bd52a1a793bc3e7cf50fbdac27ef5d901754ad (plain)
1
#Assembles, links and run tests of FreePascal
#Param 1, the directory with the tests to perform.
#Note versions can be either 2 or 3 fields, e g 1.1  1.0.10

Export nrOfSucceded
Export nrOfFailed

#Iterate through tests
Set Exit 0 # To handle the case, in the for stmt, when there is no match
For sourceWithExt In {1}tÅ.log  #only test files, which begins with a 't'
  Set Exit 1 #Revert error handling

  (Evaluate "{sourceWithExt}" =~ /(([Â.])*)¨1Å/) > Dev:Null
  Set apppath {¨1}

  (Evaluate {apppath} =~ /Å:([Â:]*)¨1/) > Dev:Null
  Set appname {¨1}

  If `Exists {apppath}.elg`
    Continue
  End

  Set testdirectives ""
  Set testdirectives "`StreamEdit {apppath}.pp ¶
      -d -e "/¶{[ ¶t]*(%Å*)¨1[ ¶t]*¶}/ Print ¨1"`" > Dev:Null
  Echo "============================================================="

  If {debugverbose}
    Echo {testdirectives}
  End

  If `Evaluate "{testdirectives}" =~ /Å%CPU=([,_0-9A-Za-z]*)¨1Å/`
    If `Evaluate "{¨1}" !~ /ÅpowerpcÅ/`
      Echo Skipped {apppath}. Test only for CPU: "{¨1}"
      Continue
    End
  End
  
  If `Evaluate "{testdirectives}" =~ /Å%SKIPCPU=([,_0-9A-Za-z]*)¨1Å/`
    If `Evaluate "{¨1}" =~ /ÅpowerpcÅ/`
      Echo Skipped {apppath}. Test not for CPU: {¨1}
      Continue
    End
  End
  
  If `Evaluate "{testdirectives}" =~ /Å%TARGET=([,_0-9A-Za-z]*)¨1Å/`
    If `Evaluate "{¨1}" !~ /ÅmacosÅ/`
      Echo Skipped {apppath}. Test only for target: {¨1}
      Continue
    End
  End
  
  If `Evaluate "{testdirectives}" =~ /Å%SKIPTARGET=([,_0-9A-Za-z]*)¨1Å/`
    If `Evaluate "{¨1}" =~ /ÅmacosÅ/`
      Echo Skipped {apppath}. Test not for target: {¨1}
      Continue
    End
  End

  If `Evaluate "{testdirectives}" =~ /Å%VERSION=([0-9.]*)¨1Å/`
    Set minver {¨1}
    If `Evaluate "{minver}" !~ /([0-9]*)¨1.([0-9]*)¨2.([0-9]*)¨3/`
      If `Evaluate "{minver}" !~ /([0-9]*)¨1.([0-9]*)¨2/`
        Echo Skipped {apppath}. Error in version no: {minver}
        Continue
      Else
        Set ¨3 0
      End
    End
    
    If Â(({cv1}> {¨1}) || (({cv1}=={¨1}) && ¶
           (({cv2}> {¨2}) || (({cv2}=={¨2}) && ¶
           ({cv3}>={¨3})))))
      Echo Skipped {apppath}. Compiler too old, test requires at least: {minver}
      Continue
    End
  End
  
  If `Evaluate "{testdirectives}" =~ /Å%MAXVERSION=([0-9.]*)¨1Å/`
    Set maxver {¨1}
    If `Evaluate "{maxver}" !~ /([0-9]*)¨1.([0-9]*)¨2.([0-9]*)¨3/`
      If `Evaluate "{maxver}" !~ /([0-9]*)¨1.([0-9]*)¨2/`
        Echo Skipped {apppath}. Error in version no: {maxver}
        Continue
      Else
        Set ¨3 0
      End
    End
    
    If Â(({cv1}< {¨1}) || (({cv1}=={¨1}) && ¶
           (({cv2}< {¨2}) || (({cv2}=={¨2}) && ¶
           ({cv3}<={¨3})))))
      Echo Skipped {apppath}. Compiler too new, test requires no more than: {maxver}
      Continue
    End
  End

  If `Evaluate "{testdirectives}" =~ /Å%NOTE=([Â%]*)¨1Å/`
    Echo Note: {¨1}
  End

  # Start compiling
  Echo Start compiling "{apppath}"
  

  Set Exit 0
  SetFile -c 'MPS ' -t 'TEXT' {appname}_ppas
  
  If {debugverbose}
    (Execute {appname}_ppas; Set linkresult "{Status}") | Tee {apppath}.log
  Else
    Execute {appname}_ppas > {apppath}.log
    Set linkresult "{Status}"
  End

  If "{linkresult}" != 0
    Set Exit 1
    Echo Compiling of "{apppath}" failed
    Set -e nrOfFailed `Evaluate {nrOfFailed}+1`
    If {debugverbose}
      StreamEdit  {apppath}.pp -d -e "1,15 Print"
    End
    Continue
  Else
    Set Exit 1
    Echo Compiling of "{apppath}" succeded
  End
  
  If `Evaluate "{testdirectives}" =~ /Å%NORUNÅ/`
    Echo Skipped running of {apppath} due to option NORUN
    Continue
  End

  If `Evaluate "{testdirectives}" =~ /Å%INTERACTIVEÅ/`
    Echo Skipped running of {apppath} due to option INTERACTIVE
    Continue
  End

  If Not `Exists {apppath}`
    # Should this be counted as a failed test ?
    # Or perhaps files is to be checked for if they are units ?
    Echo Skipped running due to nonexisting executable
    Continue
  End

  If 1
    If `Evaluate "{testdirectives}" =~ /Å%RESULT=([0-9]*)¨1Å/`
      Set expectedresult {¨1}
    Else
      Set expectedresult 0
    End
    
    #Execute test program
    Echo "Xxx" > "{apppath}.elg" #Needed, to continue if test app crashes
    Set Exit 0
    If {debugverbose}
      ( {apppath} ; Set actualresult "{Status}" ) | Tee {apppath}.elg
    Else
      {apppath} > {apppath}.elg
      Set actualresult "{Status}"
    End
    Set Exit 1

    If {actualresult} != 0
      Echo Running of "{apppath}" failed
    Else
      Echo Running of "{apppath}" succeded
    End

    Echo "Exit code was {actualresult}, expected {expectedresult}"
    If "{actualresult}" != "{expectedresult}"
      Echo -n "Failed to run {apppath}¶r" >> log #¶r gives a linefeed
      Echo Failed test "{apppath}"
      Set -e nrOfFailed `Evaluate {nrOfFailed}+1`
      If {debugverbose}
        StreamEdit  {apppath}.pp -d -e "1,15 Print"
      End
    Else
      Echo -n "Successfully run {apppath}¶r" >> log #¶r gives a linefeed
      Echo Succeded test "{apppath}"
      Set -e nrOfSucceded `Evaluate {nrOfSucceded}+1`
    End

  End
  Set Exit 0 # To handle the case, in the for stmt, when there is no match
End
Set Exit 1 #Revert error handling