VAStGoodies.com
Your VA Smalltalk OSS repository. Powered by
with
.
Configuration Maps
|
Projects
|
Tags
|
Developers
|
Statistics
|
RSS
|
Disclaimer
|
About
|
Help
Configuration Maps Browser
Configuration Map Names
Abt Image Startup
AbtOleEdit
AbxProcessPeek
Announcements Core
Announcements Demos Seaside
Announcements Tests
Announcements Tools VA
Cloudfork
Cloudfork ActiveItem
CloudforkAWS
CloudforkAWSWithTests
CloudforkSSO
CloudforkSSOWithTests
CodeManagement
ComputerTelephony
Compuware SplitterWidget
CounterMap
DhbNumerics
DhbNumericsWithTests
Flotr Core
FogBugz Support
GemStoneCodeManagement
GemStoneCodeManagement Mods
Glorp
GlorpTest
GlorpVAPortMap
Goodies - UML Designer
GreaseVASTExtensions
Highcharts Seaside Addon
HQA Automated Build Support
HQA Code Snapshot Tool
InstallService
JNIPort
JNIPort Tests
JokXTEAEncryption
JQuery-plugin Autocomplete
JQuery-plugin Bind
JQuery-plugin QTip
JQuery-plugin Radiobutton and Checkbox
JQuery-plugin Table Sorter
JQuery-plugin Table Sorter Example
JQuery/JQueryUI
JQuery/JQueryUI Tests
JQueryMobile
JQueryMobile Tests
JQueryWidgetBox Core
JQueryWidgetBox Dynatree
JQueryWidgetBox Examples
JQueryWidgetBox Portability Extentions
JQueryWidgetBox Tests
JSON
KscCase
KscDynamicSortBlock
KscEMail
KscInspectWindow
KscLibUsb
KscMZZipExtensions
KscShellNotifyIcon
KscViewExtensions
KscWeather
KscX10Base
KscX10LibUSB
KscX10LibUsbGui
LibGit
Magritte
Magritte Seaside
Magritte Tests
MagritteMagic
Mastering ENVY/Developer Refactoring Browser Extensions
Mastering ENVY/Developer Script Manager
MessagePack
MessagePack Tests
MetaTest Browser
MethodPragmas
MethodWrappers
MethodWrappers Tests
MethodWrappersBase
MFNLSManagement
MiniSMock
MinneStoreDB
Modelling
Monticello Importer - Beta
MQTT-Paho
MQTT-Paho Tests
MSKAdditionalColorSupport
MSKCLDTPrimitivesExtension
MSKCLDTPrimitivesExtensionWithTestsAndResources
MSKClick
MSKCouchDB
MSKCouchDBWithTests
MSKCurlInterface
MSKDyBase
MSKDyBaseWithTests
MSKECLWrapper
MSKECLWrapperTestsAndResources
MSKFFLLInterface
MSKFischertechnikInterface
MSKFreeImageUI
MSKFreeImageWrapper
MSKFreeImageWrapperWithTests
MSKGeneralDatabase
MSKGhostscriptInterface
MSKGLibWrapper
MSKGLibWrapperWithTests
MSKICU
MSKICUAndTests
MSKICXDLibHaruDM
MSKICXDTNetStringsDM
MSKICXDTNetStringsTests
MSKJSONWrapper
MSKJSONWrapperWithTests
MSKLibHaruInterface
MSKLogging
MSKLua
MSKLuaWithTests
MSKMdlPlainRuntime
MSKMonoInterface
MSKMSAgentWrapper
MSKOleAdditions
MSKOOBaseDLLWrapper
MSKOOoAutoGenerated
MSKOOoBaseLibrary
MSKOOoCodeGenerator
MSKOOoExamplesAndIDE
MSKOOoSmalltalkExtensions
MSKOpenCLSupport
MSKOpenGLSupport
MSKOpenGLSupport Core
MSKOpenGLSupport Examples
MSKOpenGLSupport Examples FreeImage
MSKOpenGLSupport GUI
MSKOpenGLSupport Runtime Loading
MSKOpenGLSupport Structures
MSKPlatformExtension
MSKPostgreSQL
MSKPostgreSQLAbtDBMLayer
MSKPostgreSQLAbtDBMLayerWithTests
MSKPostgreSQLWithTests
MSKProcessViewer
MSKRaphaelExtensions
MSKRemoteCommandTools
MSKResourceManagement
MSKResourceManagementRuntime
MSKRexxSupport
MSKRexxSupportWithTests
MSKScintillaWrapper
MSKSDL
MSKSDLWithTests
MSKSeasideNLSExample
MSKSeasideNLSExtension
MSKSeasideSimpleREST
MSKSnarlInterface
MSKSQLite
MSKSQLiteAbtDBMLayer
MSKSQLiteGlorpSupport
MSKSQLiteWithTests
MSKSyslog
MSKSystemExtension
MSKSystemGraphicsExtension
MSKTestModel
MSKTreBinding
MSKTreBindingWithTests
MSKUDPMulticast
MSKUREWrapper
MSKVectorExtension
MSKVectorExtensionsWithTests
MSKZLibWrapper
MSKZLibWrapperWithTests
Mustache
NeoCSV
NeoJSON
Obdobion, EMan - Developer
Obdobion, EMan - Distribution
Obdobion, EMan - Examples
Obdobion, EMan - Runtime
OGLogger
Philemon Event Support
Philemon Melissa
Philemon TaggedData
Philemon Tools
Pier
Pier Add-ons
Pier Seaside
Pier Seaside Tests
Pier SIXX Persistence
Pier Tests
PUMRESTRuntime
QuotedPrintableCoderRun
QuotedPrintableCoderWithTests
Raphaël - JavaScript Library
Raphael - JavaScript Library Examples
RaspberryHardwareInterfaceCore
RaspberryHardwareInterfaceTest
RaspberryHardwareInterfaceViaDaemonTest
Reef
Refactoring Browser
Refactoring Browser Model
RefactoryTesting
Regex
Roassal
Roassal-Core
Seaside Core
Seaside GoogleChart
Seaside REST
Seaside REST Tests
SeasideGoogleMapsV3
SeasideGoogleMapsV3Examples
SimGeohash
Simple GBS Temperature Sensor Example
Simple Improvements
SIXX
SIXX Tests
SpsPdfLib
SpsPdfLib Development
StOMP
StOMP Tests
STON
StsBrowsersWin w/Code Completion
SUnit
SUnit Browser
SUnit Browser - Packagable
SUnit Tests
SWFObject2 Seaside Addon
SWFObject2 Seaside Addon Demo
Test Browser
Toothpick
TwitterBoostrapForSeaside
TwitterBootstrapForSeasideExamples
TwitterBootstrapForSeasideTests
USAstronomicalApi
VA Assist Pro for TrailBlazer
VAStGoodies.com Tools
VBRegex
WinCrypt
WinCryptWithTests
WinHttpClient
WinHttpClientWebServiceSupport
WinHttpClientWebServiceSupportWithTests
WinHttpClientWithTests
z.ST: Database, PostgreSQL-Base
z.ST: SUnit
z.ST: SUnit Testing
Zstandard
Zstandard Tests
Versions
Download
V 8.0.2 [146] CS19.AvO.36
V 8.0.0 [117] CS12.NFR.35
CS12.NFR.35
CS12.NFR.33
Applications
MethodWrappers V 8.0.2 [146]
Config. Expressions
Required Maps
Find
Notes
For general information on wrappers, see the comment section of this map. The tests are happy with any recent version of SUnit, so SUnit is an app pre-reqs but not a map pre-req to avoid chaining this to a specific SUnit version. The tests check basic wrapper behaviour, and that of called and conditional wrappers. They also test wrapping in #doesNotUnderstand:-overriding frameworks. Notes on my implementation ======================= 1) The VA implementation separates the two roles of a wrapper which the VW design unites: - to replace the wrapped method in its class' method dictionary - to (be able to) execute the wrapped method from within the wrapper into two separate objects, one a generated MethodWrapping (subclass of CompiledMethod), the other a MethodWrapper (subclass of Object, not of CompiledMethod) which the wrapping calls. VA does not allow CompiledMethod subclasses to have named instvars. 2) In VA pre-8.0, a base method is modified; see the pre-requisite map. 3) The VASmalltalk MethodWrappers application is equivalent to two packages in the VW implementation: MethodWrappers and MethodWrappersExtensions. 4) Might it be possible to make these wrappers packagable (e.g. to test a packaged image) by, before packaging, calling MethodWrapperSubClass #initialize: anInteger on all subclasses that would be used in the package, with integers for the number of parameters in the largest method you mean to wrap, so that you could package and use wrappers without packaging the compiler? This has not been shown to work as yet. History (post CS11) ================ V 8.0.2 [146] CS19.AvO.36 - Moved the tests to a sparate map. V8.0.2 - The application needs method Behavior>>includesBehavior: which is in the VA Smalltalk base in 8.0.2 and later. The MethodWrapper application prereq for RBEnvironmentsApp, where the method was in earlier releases, is dropped. V8.0.0 [122] CS12.NFR.35 - Integrated DNU-wrapping behaviour from CS12.NFR.35. Some frameworks override DNU on some classes; allow wrapping of methods sent to those classes which would be handled by the DNU- overriding implementation when unwrapped. V8.0.0 [122] - Removed VW subapps (38441) - Removed required map links for MethodWrappersBase -- these break the VA Smalltalk build process which supports only one version of a map in the build. An earlier version of this map used config expressions to load base-tweaking maps to let wrappers run in VAST 5.5 through VASmalltalk 7.5.2, and to let VW3/Envy handle Envy file pointers. VASmalltalk base in 7.5.3 and later do nt require these tweaks.
Comment
Method Wrappers can add hidden behavior to a method without recompiling it. They can be used to change a method's behavior. Commonly, they are used to add behavior before and after the default method executes, e.g. to measure coverage by using a method wrapper that increments a counter when it is called. Wrappers were originally created by John Brant and Don Roberts of The Refactory (http://www.refactory.com/Software/MethodWrappers/index.html). This VASmalltalk version was created by them and developed by Niall Ross. It is dialect-neutral; the same MethodWrapper subclass' code can be used in VASmalltalk, VW and Dolphin. Alternative VA implementations exist that use indexed instVars in MethodWrapper instead of named ones, so avoiding the need for class MethodWrapping as well as MethodWrapper but losing this cross-dialect compatibility. For more detailed information about method wrappers, read John and Don's paper "Wrappers to the Rescue" (in http://www.refactory.com/Publications/reflection.htm). For examples of their use in testing, read Niall Ross' paper 'eXtreme UI Testing' (slides in 97Mb conference archive http://www.stic.st/stsFiles/sts2007.zip, text in http://www.esug.org/data/ReportsFromNiallRoss/nfrStS2007andVendorReports.pdf. WARNING: Incorrectly using the wrappers can crash your image; save your image before using them. Do not install a wrapper on a method that you call from within that wrapper. For details on versions, see the notes section of this map.
Project:
Method Wrappers
Developer:
Adriaan van Os
Use the
VAStGoodies.com Tools
to submit your contributions.