⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 twfunc.tpl

📁 在手机操作系统symbina上使用的一个脚本扩展语言的代码实现,可以参考用于自己的开发
💻 TPL
📖 第 1 页 / 共 2 页
字号:
REM tWFunc.tpl
REM EPOC OPL automatic test code for word functions.
REM Copyright (c) 1991-2000 Symbian Ltd. All rights reserved.

INCLUDE "Const.oph"
INCLUDE "hUtils.oph"

CONST kPath$="c:\Opl1993"

PROC Standalone:
	REM Main procedure called when not running inside test harness.
	LOADM KhUtils$
	hLink:("tWFunc", hThreadIdFromOplDoc&:, KhUserFull%)
	REM After standalone completion, control returns here.
	dINIT "Tests complete" :DIALOG
ENDP


proc tWfunc:
  global patha$(9)
  global pause%
	rem hInitTestHarness:(KhInitLocalErrorHandling%, KhInitNotUsed%)
	
	patha$=kPath$
  trap mkdir patha$

  rem strtest:("Word Functions")
  hRunTest%:("tIo")
  hRunTest%:("tWpeek")
  hRunTest%:("tBpeek")
  hRunTest%:("tLoc")
  hRunTest%:("tLen")
  hRunTest%:("tAsc")
  hRunTest%:("tErr")
  hRunTest%:("tDate")
  hRunTest%:("tDow")
  hRunTest%:("tWeek")
  hRunTest%:("tFileW")
  hRunTest%:("tDblToW")
  hRunTest%:("longToW")
  hRunTest%:("ldToUw")
rem	hRunTest%:("tKeyC")
	hCleanUp%:("CleanUp")
rem	KLog%:(KhLogHigh%,"Some sample text")
endp


PROC CleanUp:
	lclose rem just in case
  trap delete kpath$+"\tWFunc.odb"
  trap delete kpath$+"\t_io.txt"
  trap delete kpath$+"\*.*"
  trap rmdir kpath$
ENDP


proc tKeyC:
	local stat%,key%,ret%
	rem cls
	rem SubTest:("KEYC test")
  ret%=keya(stat%,key%)
	if ret%<0
		raise ret%
  	rem print "keya failed"
	else
  	rem print "keya done ok"
	endif
  ret%=keyc(stat%)
	if ret%<0
		raise ret%
	endif
endp


proc tDow:
  rem SubTest:("DOW test")
  onerr e1::
  dow(32,1,1990)
  onerr off
  raise 1
	e1::
  onerr e2::
  dow(-1,1,1990)
  onerr off
  raise 2
	e2::
  onerr e3::
  dow(0,1,1990)
  onerr off
  raise 3
	e3::
  onerr e4::
  dow(1,13,1990)
  onerr off
  raise 4
	e4::
  onerr e5::
  dow(1,-1,1990)
  onerr off
  raise 5
	e5::
  onerr e6::
  dow(1,0,1990)
  onerr off
  raise 6
	e6::
  onerr e7::
  dow(1,-1,90)
  onerr off
  raise 7
	e7::
  onerr off
  if dow(1,1,1900)<>1 :raise 10 :endif
  if dow(12,6,1990)<>2 :raise 11 :endif
  if dow(31,12,2155)<>3 :raise 12 :endif
endp


proc tWeek:
	rem SubTest:("WEEK test")
	onerr e1::
	print week(1,100,2156)
  onerr off
  raise 1
	e1::
  onerr e2::
  print week (301,12,1899)
  onerr off
  raise 2
	e2::
  onerr off
  if week(1,1,1900)<>1
    raise 3
  endif
  if week(28,12,2155)<>52 :rem maximum date for week
    raise 4
  endif
  if week(18,7,1990)<>29
    raise 5
  endif
endp


proc tBpeek:
  local i%
	
  rem SubTest:("Byte Peek test")
  i%=1
  if peekB(addr(i%))<>1
    raise 1
  endif
	
  i%=255
  if peekB(addr(i%))<>255
    raise 2
  endif
	
  i%=256
  if peekB(addr(i%))<>0
    raise 3
  endif
endp


proc tWpeek:
  local l&,p%
  rem SubTest:("Peek word")
  p%=addr(l&)
  l&=1
  if peekW(p%)<>1
    raise 1
  endif
	
  l&=65535
  if peekW(p%)<>-1
    raise 2
  endif
	
  l&=&ffff8000
  if peekW(p%)<>-32768
    raise 3
  endif
	
  l&=65536
  if peekW(p%)<>0
    raise 4
  endif
endp


proc tDate:
  local second%,minute%,hour%,day%,dayN$(10),monthN$(20),date$(30),month%,year%
  local bldDate$(30),dayInM$(2),day$(2),year$(6),hour$(4),minute$(4),second$(4)
	
  rem SubTest:("Date word functions")
  date$=datim$
  second%=second
  minute%=minute
  hour%=hour
  year%=year
  month%=month
  monthN$=month$(month%)
  day%=day
  dayN$=dayName$(dow(day%,month%,year%))
  dayInM$=num$(day%,-2)
  if day%<10
    dayInM$="0"+chr$($30+day%)
  endif
  year$=num$(year%,4)+" "
  hour$=num$(hour%,2)+":"
  if hour%<10
    hour$="0"+hour$
  endif
  minute$=num$(minute%,2)+":"
  if minute%<10
    minute$="0"+minute$
  endif
  second$=num$(second%,2)
  if second%<10
    second$="0"+second$
  endif
  bldDate$=dayN$+" "+dayInM$+" "+monthN$+" "+year$+hour$+minute$+second$
  rem print "datim$     ->",date$
  rem print "Built name ->",bldDate$
  rem pause pause% :key
  if bldDate$<>date$
		raise 1
    rem beep 3,500
    rem print "Check tDate:() : dates differ by at least 1 second"
    rem print "String slice the text time when time is available"
    rem pause pause% :key
    rem raise 1
  endif
endp


proc longToW:
  local i%,l&
  rem SubTest:("Long to word Function")
  i%=&00007fff
  i%=&ffff8000
  l&=-32768
  while i%<=32700  :rem all valid integers
    if (l&/1000*1000)=l& : print l& :endif
    i%=l&
    l&=l&+10
  endwh
  onerr e1::
  l&=32768
  i%=l&
  raise 1
	e1::
  onerr off
  if err<>KErrOverflow%
    raise 2
  endif
  onerr e2::
  l&=-32769
  i%=l&
  raise 3
	e2::
  onerr off
  if err<>KErrOverflow%
    raise 4
  endif
endp


proc ldToUw:
  local i%,lp&,dp,numErrs%
  rem SubTest:("Long/Double to unsigned word Function")
  lp&=0    : rem long ptr 
  dp=0    : rem double ptr
  numErrs%=0
  while lp&<65536
		if lp&/1000*1000=lp&
			rem at 1,21 :print lp&
		endif
		dp=lp&
		if uadd(lp&,0)<>uadd(dp,0)
			rem alert("ldToUw: BUG!","Failed on values "+num$(lp&,10))
			raise 1
		endif
    lp&=lp&+1
    dp=dp+1
  endwh
  rem print "There were",numErrs%,"discrepencies - consistent with RunTime stack change"
	rem pause pause% :key
	if numErrs%>3 :raise 1 :endif
  return
	e1::
  rem print "Reached loop",lp&-1
  rem pause pause%
  raise 2
endp


proc procPeek:(fill$,dp,lp&)
  REM Peek in procedure so rt stack not in same place
	return(peekB(dp)<>peekB(lp&))
endp


proc tDblToW:
  local d,j%,i%,name$(30),err%,errb%
	rem SubTest:("Double to word test")
	name$="tWFunc\tDblToW"
  err%=KErrOverflow%
  errb%=KErrInvalidArgs%
	
  onerr e1::
  j%=32768.0
  raise 2
	e1::
  onerr off
  if err<>err% :raise 3 :endif
  onerr e2::
  j%=-32769.0
  raise 4
	e2::
  onerr off
  if err<>err% :raise 5 :alert("About to raise 5",err$(err)) :raise 5 :endif
  onerr e3::
  j%=9e99
  raise 6
	e3::
  onerr off
  if err<>err% :raise 7 :endif
  onerr e4::
  j%=-9e99
  raise 8
	e4::
  onerr off
  if err<>err% :raise 9 :endif
	
  j%=-32768.0 :i%=-32768 :if i%<>j% :raise 10 :endif
  j%=32767.0  :i%=32767  :if i%<>j% :raise 11 :endif
	
  i%=-32768
  d=-32768
  do
    j%=d
    rem if (i%/1000*1000)=i% :print i% :endif
    if j%<>i%
    		raise 1
      rem beep 3,2000
      rem print "Double",d,"is converted to word",j%
      rem pause pause%
    endif
    i%=i%+100
    d=d+100.
  until i%>=32600
endp


proc tAsc:
  local a%,s$(2),i%,p%
	
  rem SubTest:("ASC() test")
  s$="12"
  p%=addr(s$)+1+KOplAlignment%
  i%=0
  while i%<256
    pokeB p%,i%
    a%=asc(s$)
    if a%<>i%
			raise 1
      alarmLp:("ASC",i%)
    endif
    i%=i%+1
  endwh
endp


proc tErr:
  rem SubTest:("ERR test")
  onerr e1::
  raise 1  :rem go to check err is 1
  onerr off
  raise 2
	e1::
  onerr off
  if err<>1
  		raise 3
    rem beep 3,2000
    rem print "'err' function failed!!!"
    rem pause pause%
  endif
endp


proc tLen:
  local a$(255),i%
	
  rem SubTest:("LEN test")
	
  rem Do 2 without rept$ in case rept$ not working !
  if len("")<>0 :raise 1 :endif
  if len("123")<>3 :raise 2 :endif
	
  i%=0
  while i%<256
    a$=rept$("A",i%)
    if len(a$)<>i%
			raise 3
      alarmLp:("tLen",i%)
    endif
    i%=i%+1
  endwh

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -