Automatic GUI Testing project 888888888888888888888888888888888888888888888888888888888888888888 development environment 888888888888888888888888888888888888888888888888888888888888888888 TOOLS/ENVIRONMENTS - Cygwin, with the following packages: - tcsh - NetPBM - IfranView - AutoHotkey DIRECTORIES /cygdrive/c/gmwb/bin /cygdrive/c/gmwb/binrw /cygdrive/c/Tools/ahk_new LANGUAGES/SKILLS unix-shell (tcsh) AutoHotkey NetPBM IrfanView command-line 888888888888888888888888888888888888888888888888888888888888888888 demo/presentation 888888888888888888888888888888888888888888888888888888888888888888 Automatic GUI Testing project Goals: * investigate tools which could automatically exercise RiverWare features via RiverWare GUI controls * provide a proof-of-concept and a sample implementation of basic operations for automatically exercising RiverWare via its GUI elements Components: * unix shell scripts * AutoHotkey * IrfanView * NetPBM Cygwin * a unix environment for Windows operating systems * free, open-source, easy to install * available since the late 1990's * primarily command-line oriented * can launch both Cygwin/unix applications as well as Native Windows applications * the Automatic GUI Testing project makes use of tcsh shell scripts, in an interactive tcsh shell running in a mintty terminal * Cygwin also includes NetPBM (discussed below) AutoHotkey * interpreted scripting language * free, open-source, easy to install * primarily used to manage windows on MS Windows systems * does MANY other things (create GUIs, run other apps, etc) IrfanView * the cat's pajamas * the best interactive image viewing/sorting/editing/ETC tool due to its robust and intuitive hot-key mappings and full set of image-managment features * free, easy to install * rich set of COMMAND-LINE options for editing/creating images: clipping, resizing, converting, compositing, concatenating, changing saturation/lightness/greyscale, overlaying text, drawing lines/shapes, loading an image as the Windows wallpaper, ETC * rich set of INTERACTIVE controls for performing the above image operations * can create dot-exe slideshow applications, generate "image-library" HTML pages from files in a directory, generate auto-run slideshows for burning to a CD, etc NetPBM * image editing/converting/measuring system * command-line only * sends/receives images between NetPBM applications using stdout/stdin, to avoid the inefficiency of having to write temporary files * to convert to/from N image different formats, uses a common PAM format, thus reducing the number of conversion applications required from N-squared to 2-times-N Overview Of Automated GUI Operations A top level shell script (heretofor "Cygwin tcsh shell script running in a mintty terminal") controls other special-purpose shell scripts. Special purpose shell scripts dynamically generate an AutoHotkey script from an embedded template. Then the shell script runs the AutoHotkey script. The AutoHotkey scripts find the running RiverWare main window, and proceed to "do things" with it. The AutoHotkey scripts also invoke Cygwin tcsh scripts, NetPBM applications, and IrfanView, for performing various operations that can be done (MUCH) more easily using those facilities than doing them in AutoHotkey. 888888888888888888888888888888888888888888888888888888888888888888 Cygwin NetPBM applications ( incomplete list ) 12553 Nov 10 00:48 /bin/anytopnm 21011 Nov 10 00:49 /bin/bmptopnm.exe 86547 Nov 10 00:49 /bin/fiascotopnm.exe 16403 Nov 10 00:49 /bin/fitstopnm.exe 12819 Nov 10 00:49 /bin/gemtopnm.exe 25107 Nov 10 00:49 /bin/giftopnm.exe 13843 Nov 10 00:49 /bin/jbigtopnm.exe 29715 Nov 10 00:49 /bin/jpegtopnm.exe 22547 Nov 10 00:49 /bin/palmtopnm.exe 11283 Nov 10 00:50 /bin/pamtopnm.exe 12 Nov 18 17:17 /bin/pngtopnm -> pngtopam.exe 14355 Nov 10 00:51 /bin/pnmalias.exe 12 Nov 18 17:17 /bin/pnmarith -> pamarith.exe 16403 Nov 10 00:51 /bin/pnmcat.exe 16403 Nov 10 00:51 /bin/pnmcolormap.exe 11 Nov 18 17:17 /bin/pnmcomp -> pamcomp.exe 28179 Nov 10 00:51 /bin/pnmconvol.exe 17939 Nov 10 00:51 /bin/pnmcrop.exe 10 Nov 18 17:17 /bin/pnmcut -> pamcut.exe 12 Nov 18 17:17 /bin/pnmdepth -> pamdepth.exe 14 Nov 18 17:17 /bin/pnmenlarge -> pamenlarge.exe 11 Nov 18 17:17 /bin/pnmfile -> pamfile.exe 3661 Nov 10 00:48 /bin/pnmflip 18451 Nov 10 00:51 /bin/pnmgamma.exe 13331 Nov 10 00:51 /bin/pnmhisteq.exe 14355 Nov 10 00:51 /bin/pnmhistmap.exe 14867 Nov 10 00:51 /bin/pnmindex.exe 14 Nov 18 17:17 /bin/pnminterp -> pamstretch.exe 10771 Nov 10 00:51 /bin/pnminvert.exe 2682 Nov 10 00:48 /bin/pnmmargin 13843 Nov 10 00:51 /bin/pnmmercator.exe 16403 Nov 10 00:51 /bin/pnmmontage.exe 20499 Nov 10 00:51 /bin/pnmnlfilt.exe 13 Nov 18 17:17 /bin/pnmnoraw -> pnmtoplainpnm 17427 Nov 10 00:51 /bin/pnmnorm.exe 17939 Nov 10 00:51 /bin/pnmpad.exe 13843 Nov 10 00:51 /bin/pnmpaste.exe 13331 Nov 10 00:51 /bin/pnmpsnr.exe 9370 Nov 10 00:48 /bin/pnmquant 6960 Nov 10 00:48 /bin/pnmquantall 18963 Nov 10 00:51 /bin/pnmremap.exe 15891 Nov 10 00:51 /bin/pnmrotate.exe 12 Nov 18 17:17 /bin/pnmscale -> pamscale.exe 17427 Nov 10 00:51 /bin/pnmscalefixed.exe 12819 Nov 10 00:51 /bin/pnmshear.exe 11795 Nov 10 00:51 /bin/pnmsmooth.exe 12 Nov 18 17:17 /bin/pnmsplit -> pamsplit.exe 26643 Nov 10 00:51 /bin/pnmstitch.exe 10771 Nov 10 00:51 /bin/pnmtile.exe 14867 Nov 10 00:51 /bin/pnmtoddif.exe 151571 Nov 10 00:51 /bin/pnmtofiasco.exe 13 Nov 18 17:17 /bin/pnmtofits -> pamtofits.exe 16915 Nov 10 00:51 /bin/pnmtojbig.exe 21011 Nov 10 00:51 /bin/pnmtojpeg.exe 24083 Nov 10 00:51 /bin/pnmtopalm.exe 16915 Nov 10 00:51 /bin/pnmtopclxl.exe 31 Nov 10 00:48 /bin/pnmtoplainpnm 44051 Nov 10 00:51 /bin/pnmtopng.exe 12 Nov 18 17:17 /bin/pnmtopnm -> pamtopnm.exe 27667 Nov 10 00:51 /bin/pnmtops.exe 16915 Nov 10 00:51 /bin/pnmtorast.exe 33811 Nov 10 00:51 /bin/pnmtorle.exe 13331 Nov 10 00:51 /bin/pnmtosgi.exe 11283 Nov 10 00:51 /bin/pnmtosir.exe 13 Nov 18 17:17 /bin/pnmtotiff -> pamtotiff.exe 29203 Nov 10 00:51 /bin/pnmtotiffcmyk.exe 13331 Nov 10 00:51 /bin/pnmtoxwd.exe 20499 Nov 10 00:52 /bin/pstopnm.exe 17939 Nov 10 00:52 /bin/rasttopnm.exe 28179 Nov 10 00:52 /bin/rletopnm.exe 14355 Nov 10 00:52 /bin/sgitopnm.exe 11283 Nov 10 00:52 /bin/sirtopnm.exe 11795 Nov 10 00:52 /bin/sunicontopnm.exe 33811 Nov 10 00:52 /bin/tifftopnm.exe 21523 Nov 10 00:52 /bin/xwdtopnm.exe 11795 Nov 10 00:52 /bin/zeisstopnm.exe 14355 Nov 10 00:51 /bin/ppmtoacad.exe 10259 Nov 10 00:51 /bin/ppmtoapplevol.exe 17427 Nov 10 00:51 /bin/ppmtoarbtxt.exe 12307 Nov 10 00:51 /bin/ppmtoascii.exe 16915 Nov 10 00:51 /bin/ppmtobmp.exe 14355 Nov 10 00:51 /bin/ppmtoeyuv.exe 13331 Nov 10 00:51 /bin/ppmtogif.exe 11795 Nov 10 00:51 /bin/ppmtoicr.exe 37907 Nov 10 00:51 /bin/ppmtoilbm.exe 13 Nov 18 17:17 /bin/ppmtojpeg -> pnmtojpeg.exe 11795 Nov 10 00:51 /bin/ppmtoleaf.exe 12307 Nov 10 00:51 /bin/ppmtolj.exe 82 Nov 10 00:48 /bin/ppmtomap 21011 Nov 10 00:51 /bin/ppmtomitsu.exe 11283 Nov 10 00:51 /bin/ppmtoneo.exe 16915 Nov 10 00:51 /bin/ppmtopcx.exe 13843 Nov 10 00:51 /bin/ppmtopgm.exe 11283 Nov 10 00:51 /bin/ppmtopi1.exe 13331 Nov 10 00:51 /bin/ppmtopict.exe 12307 Nov 10 00:51 /bin/ppmtopj.exe 15379 Nov 10 00:51 /bin/ppmtopjxl.exe 10259 Nov 10 00:51 /bin/ppmtoppm.exe 11283 Nov 10 00:51 /bin/ppmtopuzz.exe 10771 Nov 10 00:51 /bin/ppmtorgb3.exe 11795 Nov 10 00:51 /bin/ppmtosixel.exe 12307 Nov 10 00:52 /bin/ppmtospu.exe 10771 Nov 10 00:52 /bin/ppmtoterm.exe 12 Nov 18 17:17 /bin/ppmtotga -> pamtotga.exe 12 Nov 18 17:17 /bin/ppmtouil -> pamtouil.exe 18451 Nov 10 00:52 /bin/ppmtowinicon.exe 14867 Nov 10 00:52 /bin/ppmtoxpm.exe 10771 Nov 10 00:52 /bin/ppmtoyuv.exe 12307 Nov 10 00:52 /bin/ppmtoyuvsplit.exe 15379 Nov 10 00:49 /bin/pamaddnoise.exe 16403 Nov 10 00:49 /bin/pamarith.exe 13331 Nov 10 00:49 /bin/pambackground.exe 11795 Nov 10 00:49 /bin/pambayer.exe 11795 Nov 10 00:49 /bin/pamchannel.exe 19475 Nov 10 00:49 /bin/pamcomp.exe 13843 Nov 10 00:49 /bin/pamcrater.exe 16915 Nov 10 00:49 /bin/pamcut.exe 11283 Nov 10 00:49 /bin/pamdeinterlace.exe 11283 Nov 10 00:49 /bin/pamdepth.exe 13843 Nov 10 00:49 /bin/pamdice.exe 21011 Nov 10 00:49 /bin/pamditherbw.exe 11795 Nov 10 00:49 /bin/pamedge.exe 9747 Nov 10 00:49 /bin/pamendian.exe 13331 Nov 10 00:49 /bin/pamenlarge.exe 11283 Nov 10 00:49 /bin/pamexec.exe 11795 Nov 10 00:49 /bin/pamfile.exe 12307 Nov 10 00:49 /bin/pamfix.exe 2062 Nov 10 00:48 /bin/pamfixtrunc 18963 Nov 10 00:49 /bin/pamflip.exe 13843 Nov 10 00:49 /bin/pamfunc.exe 11795 Nov 10 00:49 /bin/pamgauss.exe 11795 Nov 10 00:49 /bin/pamgradient.exe 13843 Nov 10 00:49 /bin/pamlookup.exe 12307 Nov 10 00:49 /bin/pammasksharpen.exe 12307 Nov 10 00:49 /bin/pammixinterlace.exe 11283 Nov 10 00:49 /bin/pammosaicknit.exe 10771 Nov 10 00:49 /bin/pamoil.exe 13331 Nov 10 00:49 /bin/pampaintspill.exe 22547 Nov 10 00:49 /bin/pamperspective.exe 11283 Nov 10 00:49 /bin/pampick.exe 11283 Nov 10 00:49 /bin/pampop9.exe 14867 Nov 10 00:49 /bin/pamrecolor.exe 12 Nov 18 17:17 /bin/pamrgbatopng -> pamtopng.exe 43539 Nov 10 00:49 /bin/pamrubber.exe 26131 Nov 10 00:49 /bin/pamscale.exe 11795 Nov 10 00:49 /bin/pamseq.exe 11795 Nov 10 00:49 /bin/pamshadedrelief.exe 11283 Nov 10 00:49 /bin/pamsharpmap.exe 10771 Nov 10 00:49 /bin/pamsharpness.exe 12819 Nov 10 00:49 /bin/pamsistoaglyph.exe 11795 Nov 10 00:49 /bin/pamslice.exe 11283 Nov 10 00:49 /bin/pamsplit.exe 11795 Nov 10 00:49 /bin/pamstack.exe 23571 Nov 10 00:49 /bin/pamstereogram.exe 13843 Nov 10 00:49 /bin/pamstretch.exe 2383 Nov 10 00:48 /bin/pamstretch-gen 12307 Nov 10 00:50 /bin/pamsumm.exe 12307 Nov 10 00:50 /bin/pamsummcol.exe 15379 Nov 10 00:50 /bin/pamthreshold.exe 14355 Nov 10 00:50 /bin/pamtilt.exe 11283 Nov 10 00:50 /bin/pamtoavs.exe 11795 Nov 10 00:50 /bin/pamtodjvurle.exe 12307 Nov 10 00:50 /bin/pamtofits.exe 19475 Nov 10 00:50 /bin/pamtogif.exe 10771 Nov 10 00:50 /bin/pamtohdiff.exe 12307 Nov 10 00:50 /bin/pamtohtmltbl.exe 17427 Nov 10 00:50 /bin/pamtojpeg2k.exe 11283 Nov 10 00:50 /bin/pamtompfont.exe 11795 Nov 10 00:50 /bin/pamtooctaveimg.exe 10259 Nov 10 00:50 /bin/pamtopam.exe 17427 Nov 10 00:50 /bin/pamtopdbimg.exe 11795 Nov 10 00:50 /bin/pamtopfm.exe 27667 Nov 10 00:50 /bin/pamtopng.exe 11283 Nov 10 00:50 /bin/pamtopnm.exe 16915 Nov 10 00:50 /bin/pamtosrf.exe 74259 Nov 10 00:50 /bin/pamtosvg.exe 16403 Nov 10 00:50 /bin/pamtotga.exe 31763 Nov 10 00:50 /bin/pamtotiff.exe 13331 Nov 10 00:50 /bin/pamtouil.exe 16915 Nov 10 00:50 /bin/pamtowinicon.exe 11283 Nov 10 00:50 /bin/pamtoxvmini.exe 14355 Nov 10 00:50 /bin/pamundice.exe 11795 Nov 10 00:50 /bin/pamunlookup.exe 10771 Nov 10 00:50 /bin/pamvalidate.exe 11795 Nov 10 00:50 /bin/pamwipeout.exe 33811 Nov 10 00:50 /bin/pamx.exe IrfanView command-line options /one - force 'Only one instance' /fs - force Full Screen display /bf - force 'Fit images to desktop' display option /title=text - set window title to 'text' /pos=(x,y) - move the window to x,y (if display option allows that) /display=(x,y,w,h,zoom,sX,sY) - set position, size, zoom and scroll position of the IrfanView window and image /convert=filename - save/convert input image(s)/file(s) to "filename" and CLOSE IrfanView /makecopy - for convert: if destination file exists, save new file as copy: (1), (2), (3) etc. /slideshow=txtfile - play slideshow with the files from 'txtfile' /slideshow=folder - play slideshow with the files from 'folder' /reloadonloop - reload input source used in /slideshow when list finished /filelist=txtfile - use filenames from "txtfile" as input, see examples below /file=filename(s) - use filename(s) as input, see examples below /thumbs - open Thumbnails window /killmesoftly - close all IrfanView instances (exit after command line) /cmdexit - close current IrfanView after command line processing /closeslideshow - close slideshow and close IrfanView after the last image /page=X - open page number X from a multipage input image /crop=(x,y,w,h,C) - crop input image: x-start, y-start, width, height, C-start corner (0-4) /print - print input image to default printer and close IrfanView /print="Name" - print input image to specific printer and close IrfanView /resize=(w,h) - resize input image to w (width) and h (height) /resize_long=X - resize input image: set long side to X /resize_short=X - resize input image: set short side to X /resample - for resize: use Resample option (better quality) /aspectratio - used for /resize, keep image proportions /capture=X - capture the screen or window (see examples below) /ini - use the Windows folder for INI/LST files (read/save) /ini="Folder" - use the folder "Folder" for INI/LST files (read/save) /clippaste - paste image from the clipboard /clipcopy - copy image to the clipboard /silent - don't show error messages for command line read/save errors /invert - invert the input image (negative) /dpi=(x,y) - change DPI values, set DPIs for scanning /scan - acquire the image from the TWAIN device - show TWAIN dialog /scanhidden - acquire the image from the TWAIN device - hide TWAIN dialog /batchscan=(options) - simulate menu: File->Batch Scanning, see examples below /bpp=BitsPerPixel - change color depth of the input image to BitsPerPixel /swap_bw - swap black and white color /gray - convert input image to grayscale /rotate_r - rotate input image to right /rotate_l - rotate input image to left /hflip - horizontal flip /vflip - vertical flip /filepattern="x" - browse only specific files /sharpen=X - open image and apply the sharpen filter value X /effect=(X,p1,p2) - apply effect filter X, see below for examples /contrast=X - open image and apply the contrast value X /bright=X - open image and apply the brighntess value X /gamma=X - open image and apply the gamma correction value X /advancedbatch - apply Advanced Batch Dialog options to image (from INI file) /hide=X - hide toolbar, status bar, menu and/or caption of the main window (see examples below) /transpcolor=(r,g,b) - set transparent color if saving as GIF/PNG/ICO /info=txtfile - write image infos to "txtfile" /fullinfo - used for /info, write EXIF, IPTC and Comment data /shortinfo - used for /info, write just file index and name /append=tiffile - append image as (TIF) page to "tiffile" /multitif=(tif,files) - create multipage TIF from input files /multipdf=(pdf,files) - create multipage PDF from input files /panorama=(X,files) - create panorama image from input files; X = direction (1 or 2) /jpgq=X - JPG save quality /tifc=X - set TIF save compression /wall=X - set image as wallpaper; see below for /random and examples /extract=(folder,ext) - extract all pages from a multipage/multiframe file /import_pal=palfile - import and apply a special palette to the image (PAL format) /export_pal=palfile - export image palette to file (PAL format) /jpg_rotate=(options) - JPG lossless rotation, see examples below /monitor=X - start EXE-Slideshow on monitor X /window=(x,y,w,h) - set EXE-Slideshow window position and size /clearmonitors - play EXE-slideshow on one monitor, clear all other monitors