SlideShare a Scribd company logo
The 25th Annual European
Smalltalk User Group ConferenceSeptember 4, 2017
AppeX and JavaScript
Support Enhancements in
Cincom Smalltalk™
Speaker: Vladimir K. Degen
Proprietary & Confidential
A Bargain
Two talks in one!
• Generic JavaScript code management in Smalltalk,
(a segue)
• JavaScript evaluation and web automation from within
Smalltalk.
@cincomsmalltalk #ESUG17
Proprietary & Confidential
A Misconception
• Lots of developers, Smalltalkers included, want to get
involved in web development.
• They might think that Smalltalk and JavaScript don’t go
together well, or that the mindsets are incompatible.
• Nothing could be further from the truth!
@cincomsmalltalk #ESUG17
Proprietary & Confidential
Actually,

Smalltalk and JavaScript

go together like…
Beer and Bratwurst
Lox and Cream Cheese
Chocolate and Peanut
Butter
Proprietary & Confidential
A Little Recap of AppeX
• AppeX manages your JavaScript code versioning
• It allows you to build client-side JavaScript in an Object
Oriented manner.
• In practical terms, this means defining JavaScript “classes”, and
creating “instance” methods on them.
• Take a quick look at the IDE to give a baseline for this
presentation
@cincomsmalltalk #ESUG17
Proprietary & Confidential
More Recap of AppeX
[Open the IDE, show senders/implementers etc.]
• What you write in the JavaScript function template is the JavaScript 

you get in the web browser!
• Developing in AppeX is good way to hone your JavaScript skills while
leveraging the Smalltalk IDE.
• See 3 previous ESUG presentations on AppeX, including
https://www.slideshare.net/esug/2014-0817esug2014appe-x
@cincomsmalltalk #ESUG17
Proprietary & Confidential
Some Subtleties, but only Briefly
• Up until EcmaScript6, JavaScript did not have a standard for class
hierarchies and method inheritance.
• Thus many products, including AppeX have implemented their own
class hierarchy inheritance frameworks.
• AppeX emphasizes the ApplicationClient as a delivery mechanism
of the JavaScript to the web client, with other JavaScript delivered
as external libraries.
• However the external libraries lose out on the code management
tools of AppeX.
@cincomsmalltalk #ESUG17
Proprietary & Confidential
Ok, a Bit of the Inheritance Hierarchy
JavascriptCode
JavascriptObject GenericJavascript
JavascriptArray,etc ApplicationClient JavascriptClosure
This talk
@cincomsmalltalk #ESUG17
Proprietary & Confidential
And a Couple More Subtleties
• With GenericJavascript, we are easing the process of delivering
JavaScript in any form.
• And this JavaScript can be completely managed within AppeX.
• This opens up further the possibility of easily porting sophisticated
web application code to and from AppeX, 

and also to use AppeX to produce applications in any

software design style that you wish.
@cincomsmalltalk #ESUG17
Proprietary & Confidential
GenericJavascript
• GenericJavascript just means code that will be displayed and
executed as written.
• The code in “initialize” will be delivered to the client as is and
executed immediately.
• The functions will appear as global functions on the client.
• Since the code is in the IDE , you get syntax highlighting, senders and
implementers and code version management.
• The markup in the comments below is so Smalltalk can parse it.
@cincomsmalltalk #ESUG17
Proprietary & Confidential
GenericJavascript – Code1
// <startContents: #{AppeX.HelloScript}>
function say(aString) {
var myDiv;
myDiv = document.createElement("div");
myDiv.innerHTML = aString;
document.body.appendChild(myDiv);
}
function sayHello(){
say('Hello from sayHello');
}
@cincomsmalltalk #ESUG17
Proprietary & Confidential
GenericJavascript – Code 2
// <startInitialize: #{AppeX.HelloScript}>
document.body = document.body ||
document.createElement("body");
sayHello();
// <endContents: #{AppeX.HelloScript}>
@cincomsmalltalk #ESUG17
Proprietary & Confidential
GenericJavascript
@cincomsmalltalk #ESUG17
Proprietary & Confidential
JavascriptClosure
• A subclass of GenericJavascript which avoids creating globals.
• With JavascriptClosure, you get in addition that your code is
encapsulated in functions.
• That is, you get method and data encapsulation.
• You can also make private methods, though this is still work in
progress.
• You do *not* get class hierarchy inheritance
@cincomsmalltalk #ESUG17
Proprietary & Confidential
JavascriptClosure – Code 1
This is how it looks like in JavaScript:
Object.defineProperty(AppeX.PersonClosure.prototype,'say
Goodbye',
{value: function sayGoodbye(){
this.say('Goodbye', this.getIsWhispering());
},
enumerable: false, writable: true
});
@cincomsmalltalk #ESUG17
Proprietary & Confidential
JavascriptClosure - Function
@cincomsmalltalk #ESUG17
Proprietary & Confidential
JavascriptClosure - Initialization
@cincomsmalltalk #ESUG17
Proprietary & Confidential
Application on the Server for the JavascriptClosure
@cincomsmalltalk #ESUG17
Proprietary & Confidential
JavaScript Closures and Generic JavaScript Scripts
• Note that the file based serving still works for these.
• However, cannot just parse and file in random JavaScript.
• We produce the code in a certain format (i.e. annotated with
comments) and file it in and parse it using the same format.
@cincomsmalltalk #ESUG17
Proprietary & Confidential
JavascriptClosure and GenericJavascript - 1
• One advantage comes in how you can more naturally view and perhaps
reuse your code when the view is restricted to the single method, but
the methods are listed and grouped.
• The Smalltalk tools based browsers and code separation aids in
understandability of JavaScript as well as it does for Smalltalk.
 
• Suppose that you had a bunch of JavaScript Code that was kind of
complex and maybe not optimally written. Obviously not your own
code. Might’ve been your coworkers or just something you got from the
web.
@cincomsmalltalk #ESUG17
Proprietary & Confidential
JavaScript Closure and Generic JavaScript - 2
• Putting your JavaScript into AppeX helps you to rationalize it. 

You are strongly encouraged by the tools to at least identify your
functions, the scopes of your variables, your objects, in order to get the
benefit of the tools.
 
• You could dump all your code into a big GenericJavascript, 

but that might not buy you much. So you can do this to get 

your application working then refactor from there.
• AppeX encourages an iterative development style.
@cincomsmalltalk #ESUG17
Proprietary & Confidential
On to the JSAutomator/JSEvaluator
• JSEvaluator uses whatever web browser is available on the
server to evaluate JavaScript from within the AppeX IDE.
• Development only, not run-time.
@cincomsmalltalk #ESUG17
Proprietary & Confidential
Evaluating JavaScript in Smalltalk (sort of)
• Start the JSEvaluator Server
• Here are a few expressions that you might try in a workspace,
and comparing with the result when the JavaScript is evaluated in
a web browser console:
JSEvaluator evaluateJavaScript: '"a" + "c"'. "ac"
JSEvaluator evaluateJavaScript: ' 1 2 '. "Error"
JSEvaluator evaluateJavaScript:‘JSON.stringify(window.location);'.
@cincomsmalltalk #ESUG17
Proprietary & Confidential
A More Practical Example, the Beautifier
• To try out JavaScript formatting using the open source
library jsbeautifier (http://jsbeautifier.org/):
a) Make a change to a JavaScript method in the 

refactoring browser
b)Try Menu...Edit...Format to observe the results.
• Conclusion:We have some ideas for useful external
JavaScript libraries, perhaps you have others.
@cincomsmalltalk #ESUG17
Proprietary & Confidential
Before Beautifying
@cincomsmalltalk #ESUG17
Proprietary & Confidential
After Beautifying
@cincomsmalltalk #ESUG17
Proprietary & Confidential
Website Automation
• We have a lot of web application examples that we want to retest,
naturally, during internal releases.
• We created the JSAutomator, build upon the JSEvaluator.
• A test (or automation) script is injected into the application to be
tested.
• The injected JavaScript exercises the web application's functionality
and sends results back to the Smalltalk server.
@cincomsmalltalk #ESUG17
Proprietary & Confidential
Non-Intrusive Testing
• One goal was to have a completely non-intrusive testing mechanism
that does not require one modify the “tested” application in any way,
whether the application is external or internal.
• The JSAutomator uses a couple of techniques to achieve this goal.
@cincomsmalltalk #ESUG17
Proprietary & Confidential
Injecting Code
• Ideally the JSAutomator just adds its own code libraries 

(very easy when dealing with AppeX applications).
• Or:The Hammer
Inserting script tags at the end of the initial HTML document, and
then including the JSAutomator libraries.
• The downloaded code uses a couple of techniques to manipulate
the client browser, such as function wrapping and setTimeout.
@cincomsmalltalk #ESUG17
Proprietary & Confidential
Waiting for Results
• Ultimately, Smalltalk waits upon the “promise” or expected
results from the client browser.
• Internally, we’ve created a bunch of SUnit tests for our
examples. I’d like to show you a couple of those now.
@cincomsmalltalk #ESUG17
Proprietary & Confidential
Demos
Order of display:
• First an AppeX example opened and exercised manually:
HelloLocalized.
• Then automated.
• Finally, all of them automated.
@cincomsmalltalk #ESUG17
Proprietary & Confidential
Conclusions
• GenericJavascript increases flexibility of coding different types of
applications in AppeX while leveraging the Smalltalk IDE.
• GenericJavascript is used in the JSEvaluator, and hence the
JSAutomator.
• The JSAutomator framework has already proven useful to us for
regression testing of web applications.
• We hope you have fun with these new AppeX tools and capabilities.
@cincomsmalltalk #ESUG17
Proprietary & Confidential
Contact Us
Suzanne Fortman 

Director of Smalltalk Global Operations

sfortman@cincom.com

@SuzCST (Twitter)
Arden Thomas 

Product Manager

athomas@cincom.com

@ArdenTCST (Twitter)
Vladimir Degen

vdegen@cincom.com
@cincomsmalltalk #ESUG17
ThankYou!
Any questions?
Cincom, the Quadrant Logo, Cincom Smalltalk, Cincom ObjectStudio and CincomVisualWorks
are trademarks or registered trademarks of Cincom Systems, Inc.
©2017 Cincom Systems, Inc.
All Rights Reserved

More Related Content

PDF
TRAX technical highlights
PDF
Towards Modularity in Live Visual Modeling: A case-study with OpenPonk and Ke...
PPTX
Do Visualizations help during development? Using Moose while coding.
PDF
Mini-Training: NDepend
PPTX
What's new in Visual Studio 2013 & TFS 2013
PPTX
Back to the ng2 Future
PPTX
Advanced AngularJS Tips and Tricks
PPTX
Vue micro frontend implementation patterns
TRAX technical highlights
Towards Modularity in Live Visual Modeling: A case-study with OpenPonk and Ke...
Do Visualizations help during development? Using Moose while coding.
Mini-Training: NDepend
What's new in Visual Studio 2013 & TFS 2013
Back to the ng2 Future
Advanced AngularJS Tips and Tricks
Vue micro frontend implementation patterns

What's hot (20)

PPTX
PDF
Infrastructure as Data with Ansible for easier Continuous Delivery
PPTX
OSGi with the Spring Framework
PPTX
Hands on react native
PPTX
Building Cross Platform Mobile Apps
PPTX
MWLUG - Universal Java
PPTX
Jimmie Lindstrom, Braintree_ePayment Workshop @ Open Commerce Conference 2016
PDF
Introduction to React Native
PPTX
Discuss About ASP.NET MVC 6 and ASP.NET MVC 5
PDF
Introduction to ASP.NET MVC
PDF
Introduction to Development for the Internet
PDF
Angular js Fundamentals
PPTX
Moving to the Client - JavaFX and HTML5
PPTX
Angular vs. React
PDF
ReactJS or Angular
PDF
What I learned teaching programming to 150 beginners
PDF
Introduction to React Native
PPTX
Architecture & Workflow of Modern Web Apps
PPTX
Razor and the Art of Templating
PPTX
AngularJS
Infrastructure as Data with Ansible for easier Continuous Delivery
OSGi with the Spring Framework
Hands on react native
Building Cross Platform Mobile Apps
MWLUG - Universal Java
Jimmie Lindstrom, Braintree_ePayment Workshop @ Open Commerce Conference 2016
Introduction to React Native
Discuss About ASP.NET MVC 6 and ASP.NET MVC 5
Introduction to ASP.NET MVC
Introduction to Development for the Internet
Angular js Fundamentals
Moving to the Client - JavaFX and HTML5
Angular vs. React
ReactJS or Angular
What I learned teaching programming to 150 beginners
Introduction to React Native
Architecture & Workflow of Modern Web Apps
Razor and the Art of Templating
AngularJS
Ad

Similar to AppeX and JavaScript Support Enhancements in Cincom Smalltalk (20)

PPTX
IP Unit 2.pptx
PPTX
JavaScript New Tutorial Class XI and XII.pptx
PDF
How to Build Single Page HTML5 Apps that Scale
PDF
CS8651- Unit 2 - JS.internet programming paper anna university -2017 regulation
PDF
Quo vadis, JavaScript? Devday.pl keynote
PPTX
Angular js
PPT
Java script
PPT
Java script
PPTX
Unit 4 Java script.pptx
PDF
Integrating AngularJS into the Campus CMS
PPTX
Java script
PPTX
WT Module-3.pptx
PDF
Apache Drill (ver. 0.2)
PPTX
concept of server-side JavaScript / JS Framework: NODEJS
PDF
WEB MODULE 3.pdf
DOCX
Javascript tutorial
PPTX
4 Anguadasdfasdasdfasdfsdfasdfaslar (1).pptx
PDF
Embedding V8 in Android apps with Ejecta-V8
PDF
How I learned to stop worrying and love embedding JavaScript
IP Unit 2.pptx
JavaScript New Tutorial Class XI and XII.pptx
How to Build Single Page HTML5 Apps that Scale
CS8651- Unit 2 - JS.internet programming paper anna university -2017 regulation
Quo vadis, JavaScript? Devday.pl keynote
Angular js
Java script
Java script
Unit 4 Java script.pptx
Integrating AngularJS into the Campus CMS
Java script
WT Module-3.pptx
Apache Drill (ver. 0.2)
concept of server-side JavaScript / JS Framework: NODEJS
WEB MODULE 3.pdf
Javascript tutorial
4 Anguadasdfasdasdfasdfsdfasdfaslar (1).pptx
Embedding V8 in Android apps with Ejecta-V8
How I learned to stop worrying and love embedding JavaScript
Ad

More from ESUG (20)

PDF
ShowUs: Pharo Stream Deck (ESUG 2025, Gdansk)
PDF
Micromaid: A simple Mermaid-like chart generator for Pharo
PDF
Directing Generative AI for Pharo Documentation
PDF
Even Lighter Than Lightweiht: Augmenting Type Inference with Primitive Heuris...
PDF
Composing and Performing Electronic Music on-the-Fly with Pharo and Coypu
PDF
Gamifying Agent-Based Models in Cormas: Towards the Playable Architecture for...
PDF
Analysing Python Machine Learning Notebooks with Moose
PDF
FASTTypeScript metamodel generation using FAST traits and TreeSitter project
PDF
Migrating Katalon Studio Tests to Playwright with Model Driven Engineering
PDF
Package-Aware Approach for Repository-Level Code Completion in Pharo
PDF
Evaluating Benchmark Quality: a Mutation-Testing- Based Methodology
PDF
An Analysis of Inline Method Refactoring
PDF
Identification of unnecessary object allocations using static escape analysis
PDF
Control flow-sensitive optimizations In the Druid Meta-Compiler
PDF
Clean Blocks (IWST 2025, Gdansk, Poland)
PDF
Encoding for Objects Matters (IWST 2025)
PDF
Challenges of Transpiling Smalltalk to JavaScript
PDF
Immersive experiences: what Pharo users do!
PDF
ChatPharo: an Open Architecture for Understanding How to Talk Live to LLMs
PDF
Cavrois - an Organic Window Management (ESUG 2025)
ShowUs: Pharo Stream Deck (ESUG 2025, Gdansk)
Micromaid: A simple Mermaid-like chart generator for Pharo
Directing Generative AI for Pharo Documentation
Even Lighter Than Lightweiht: Augmenting Type Inference with Primitive Heuris...
Composing and Performing Electronic Music on-the-Fly with Pharo and Coypu
Gamifying Agent-Based Models in Cormas: Towards the Playable Architecture for...
Analysing Python Machine Learning Notebooks with Moose
FASTTypeScript metamodel generation using FAST traits and TreeSitter project
Migrating Katalon Studio Tests to Playwright with Model Driven Engineering
Package-Aware Approach for Repository-Level Code Completion in Pharo
Evaluating Benchmark Quality: a Mutation-Testing- Based Methodology
An Analysis of Inline Method Refactoring
Identification of unnecessary object allocations using static escape analysis
Control flow-sensitive optimizations In the Druid Meta-Compiler
Clean Blocks (IWST 2025, Gdansk, Poland)
Encoding for Objects Matters (IWST 2025)
Challenges of Transpiling Smalltalk to JavaScript
Immersive experiences: what Pharo users do!
ChatPharo: an Open Architecture for Understanding How to Talk Live to LLMs
Cavrois - an Organic Window Management (ESUG 2025)

Recently uploaded (20)

PDF
Flood Susceptibility Mapping Using Image-Based 2D-CNN Deep Learnin. Overview ...
PDF
System and Network Administration Chapter 2
PDF
Addressing The Cult of Project Management Tools-Why Disconnected Work is Hold...
PDF
medical staffing services at VALiNTRY
PPTX
ISO 45001 Occupational Health and Safety Management System
PDF
Upgrade and Innovation Strategies for SAP ERP Customers
PDF
Audit Checklist Design Aligning with ISO, IATF, and Industry Standards — Omne...
PDF
Understanding Forklifts - TECH EHS Solution
PPTX
Odoo POS Development Services by CandidRoot Solutions
PDF
AI in Product Development-omnex systems
PDF
Design an Analysis of Algorithms I-SECS-1021-03
PDF
Internet Downloader Manager (IDM) Crack 6.42 Build 41
PPTX
L1 - Introduction to python Backend.pptx
PPT
Introduction Database Management System for Course Database
PPTX
Operating system designcfffgfgggggggvggggggggg
PPTX
ManageIQ - Sprint 268 Review - Slide Deck
PDF
SAP S4 Hana Brochure 3 (PTS SYSTEMS AND SOLUTIONS)
PDF
Raksha Bandhan Grocery Pricing Trends in India 2025.pdf
PPTX
Agentic AI Use Case- Contract Lifecycle Management (CLM).pptx
PPTX
Introduction to Artificial Intelligence
Flood Susceptibility Mapping Using Image-Based 2D-CNN Deep Learnin. Overview ...
System and Network Administration Chapter 2
Addressing The Cult of Project Management Tools-Why Disconnected Work is Hold...
medical staffing services at VALiNTRY
ISO 45001 Occupational Health and Safety Management System
Upgrade and Innovation Strategies for SAP ERP Customers
Audit Checklist Design Aligning with ISO, IATF, and Industry Standards — Omne...
Understanding Forklifts - TECH EHS Solution
Odoo POS Development Services by CandidRoot Solutions
AI in Product Development-omnex systems
Design an Analysis of Algorithms I-SECS-1021-03
Internet Downloader Manager (IDM) Crack 6.42 Build 41
L1 - Introduction to python Backend.pptx
Introduction Database Management System for Course Database
Operating system designcfffgfgggggggvggggggggg
ManageIQ - Sprint 268 Review - Slide Deck
SAP S4 Hana Brochure 3 (PTS SYSTEMS AND SOLUTIONS)
Raksha Bandhan Grocery Pricing Trends in India 2025.pdf
Agentic AI Use Case- Contract Lifecycle Management (CLM).pptx
Introduction to Artificial Intelligence

AppeX and JavaScript Support Enhancements in Cincom Smalltalk

  • 1. The 25th Annual European Smalltalk User Group ConferenceSeptember 4, 2017 AppeX and JavaScript Support Enhancements in Cincom Smalltalk™ Speaker: Vladimir K. Degen
  • 2. Proprietary & Confidential A Bargain Two talks in one! • Generic JavaScript code management in Smalltalk, (a segue) • JavaScript evaluation and web automation from within Smalltalk. @cincomsmalltalk #ESUG17
  • 3. Proprietary & Confidential A Misconception • Lots of developers, Smalltalkers included, want to get involved in web development. • They might think that Smalltalk and JavaScript don’t go together well, or that the mindsets are incompatible. • Nothing could be further from the truth! @cincomsmalltalk #ESUG17
  • 4. Proprietary & Confidential Actually,
 Smalltalk and JavaScript
 go together like… Beer and Bratwurst Lox and Cream Cheese Chocolate and Peanut Butter
  • 5. Proprietary & Confidential A Little Recap of AppeX • AppeX manages your JavaScript code versioning • It allows you to build client-side JavaScript in an Object Oriented manner. • In practical terms, this means defining JavaScript “classes”, and creating “instance” methods on them. • Take a quick look at the IDE to give a baseline for this presentation @cincomsmalltalk #ESUG17
  • 6. Proprietary & Confidential More Recap of AppeX [Open the IDE, show senders/implementers etc.] • What you write in the JavaScript function template is the JavaScript 
 you get in the web browser! • Developing in AppeX is good way to hone your JavaScript skills while leveraging the Smalltalk IDE. • See 3 previous ESUG presentations on AppeX, including https://www.slideshare.net/esug/2014-0817esug2014appe-x @cincomsmalltalk #ESUG17
  • 7. Proprietary & Confidential Some Subtleties, but only Briefly • Up until EcmaScript6, JavaScript did not have a standard for class hierarchies and method inheritance. • Thus many products, including AppeX have implemented their own class hierarchy inheritance frameworks. • AppeX emphasizes the ApplicationClient as a delivery mechanism of the JavaScript to the web client, with other JavaScript delivered as external libraries. • However the external libraries lose out on the code management tools of AppeX. @cincomsmalltalk #ESUG17
  • 8. Proprietary & Confidential Ok, a Bit of the Inheritance Hierarchy JavascriptCode JavascriptObject GenericJavascript JavascriptArray,etc ApplicationClient JavascriptClosure This talk @cincomsmalltalk #ESUG17
  • 9. Proprietary & Confidential And a Couple More Subtleties • With GenericJavascript, we are easing the process of delivering JavaScript in any form. • And this JavaScript can be completely managed within AppeX. • This opens up further the possibility of easily porting sophisticated web application code to and from AppeX, 
 and also to use AppeX to produce applications in any
 software design style that you wish. @cincomsmalltalk #ESUG17
  • 10. Proprietary & Confidential GenericJavascript • GenericJavascript just means code that will be displayed and executed as written. • The code in “initialize” will be delivered to the client as is and executed immediately. • The functions will appear as global functions on the client. • Since the code is in the IDE , you get syntax highlighting, senders and implementers and code version management. • The markup in the comments below is so Smalltalk can parse it. @cincomsmalltalk #ESUG17
  • 11. Proprietary & Confidential GenericJavascript – Code1 // <startContents: #{AppeX.HelloScript}> function say(aString) { var myDiv; myDiv = document.createElement("div"); myDiv.innerHTML = aString; document.body.appendChild(myDiv); } function sayHello(){ say('Hello from sayHello'); } @cincomsmalltalk #ESUG17
  • 12. Proprietary & Confidential GenericJavascript – Code 2 // <startInitialize: #{AppeX.HelloScript}> document.body = document.body || document.createElement("body"); sayHello(); // <endContents: #{AppeX.HelloScript}> @cincomsmalltalk #ESUG17
  • 14. Proprietary & Confidential JavascriptClosure • A subclass of GenericJavascript which avoids creating globals. • With JavascriptClosure, you get in addition that your code is encapsulated in functions. • That is, you get method and data encapsulation. • You can also make private methods, though this is still work in progress. • You do *not* get class hierarchy inheritance @cincomsmalltalk #ESUG17
  • 15. Proprietary & Confidential JavascriptClosure – Code 1 This is how it looks like in JavaScript: Object.defineProperty(AppeX.PersonClosure.prototype,'say Goodbye', {value: function sayGoodbye(){ this.say('Goodbye', this.getIsWhispering()); }, enumerable: false, writable: true }); @cincomsmalltalk #ESUG17
  • 16. Proprietary & Confidential JavascriptClosure - Function @cincomsmalltalk #ESUG17
  • 17. Proprietary & Confidential JavascriptClosure - Initialization @cincomsmalltalk #ESUG17
  • 18. Proprietary & Confidential Application on the Server for the JavascriptClosure @cincomsmalltalk #ESUG17
  • 19. Proprietary & Confidential JavaScript Closures and Generic JavaScript Scripts • Note that the file based serving still works for these. • However, cannot just parse and file in random JavaScript. • We produce the code in a certain format (i.e. annotated with comments) and file it in and parse it using the same format. @cincomsmalltalk #ESUG17
  • 20. Proprietary & Confidential JavascriptClosure and GenericJavascript - 1 • One advantage comes in how you can more naturally view and perhaps reuse your code when the view is restricted to the single method, but the methods are listed and grouped. • The Smalltalk tools based browsers and code separation aids in understandability of JavaScript as well as it does for Smalltalk.   • Suppose that you had a bunch of JavaScript Code that was kind of complex and maybe not optimally written. Obviously not your own code. Might’ve been your coworkers or just something you got from the web. @cincomsmalltalk #ESUG17
  • 21. Proprietary & Confidential JavaScript Closure and Generic JavaScript - 2 • Putting your JavaScript into AppeX helps you to rationalize it. 
 You are strongly encouraged by the tools to at least identify your functions, the scopes of your variables, your objects, in order to get the benefit of the tools.   • You could dump all your code into a big GenericJavascript, 
 but that might not buy you much. So you can do this to get 
 your application working then refactor from there. • AppeX encourages an iterative development style. @cincomsmalltalk #ESUG17
  • 22. Proprietary & Confidential On to the JSAutomator/JSEvaluator • JSEvaluator uses whatever web browser is available on the server to evaluate JavaScript from within the AppeX IDE. • Development only, not run-time. @cincomsmalltalk #ESUG17
  • 23. Proprietary & Confidential Evaluating JavaScript in Smalltalk (sort of) • Start the JSEvaluator Server • Here are a few expressions that you might try in a workspace, and comparing with the result when the JavaScript is evaluated in a web browser console: JSEvaluator evaluateJavaScript: '"a" + "c"'. "ac" JSEvaluator evaluateJavaScript: ' 1 2 '. "Error" JSEvaluator evaluateJavaScript:‘JSON.stringify(window.location);'. @cincomsmalltalk #ESUG17
  • 24. Proprietary & Confidential A More Practical Example, the Beautifier • To try out JavaScript formatting using the open source library jsbeautifier (http://jsbeautifier.org/): a) Make a change to a JavaScript method in the 
 refactoring browser b)Try Menu...Edit...Format to observe the results. • Conclusion:We have some ideas for useful external JavaScript libraries, perhaps you have others. @cincomsmalltalk #ESUG17
  • 25. Proprietary & Confidential Before Beautifying @cincomsmalltalk #ESUG17
  • 26. Proprietary & Confidential After Beautifying @cincomsmalltalk #ESUG17
  • 27. Proprietary & Confidential Website Automation • We have a lot of web application examples that we want to retest, naturally, during internal releases. • We created the JSAutomator, build upon the JSEvaluator. • A test (or automation) script is injected into the application to be tested. • The injected JavaScript exercises the web application's functionality and sends results back to the Smalltalk server. @cincomsmalltalk #ESUG17
  • 28. Proprietary & Confidential Non-Intrusive Testing • One goal was to have a completely non-intrusive testing mechanism that does not require one modify the “tested” application in any way, whether the application is external or internal. • The JSAutomator uses a couple of techniques to achieve this goal. @cincomsmalltalk #ESUG17
  • 29. Proprietary & Confidential Injecting Code • Ideally the JSAutomator just adds its own code libraries 
 (very easy when dealing with AppeX applications). • Or:The Hammer Inserting script tags at the end of the initial HTML document, and then including the JSAutomator libraries. • The downloaded code uses a couple of techniques to manipulate the client browser, such as function wrapping and setTimeout. @cincomsmalltalk #ESUG17
  • 30. Proprietary & Confidential Waiting for Results • Ultimately, Smalltalk waits upon the “promise” or expected results from the client browser. • Internally, we’ve created a bunch of SUnit tests for our examples. I’d like to show you a couple of those now. @cincomsmalltalk #ESUG17
  • 31. Proprietary & Confidential Demos Order of display: • First an AppeX example opened and exercised manually: HelloLocalized. • Then automated. • Finally, all of them automated. @cincomsmalltalk #ESUG17
  • 32. Proprietary & Confidential Conclusions • GenericJavascript increases flexibility of coding different types of applications in AppeX while leveraging the Smalltalk IDE. • GenericJavascript is used in the JSEvaluator, and hence the JSAutomator. • The JSAutomator framework has already proven useful to us for regression testing of web applications. • We hope you have fun with these new AppeX tools and capabilities. @cincomsmalltalk #ESUG17
  • 33. Proprietary & Confidential Contact Us Suzanne Fortman 
 Director of Smalltalk Global Operations
 sfortman@cincom.com
 @SuzCST (Twitter) Arden Thomas 
 Product Manager
 athomas@cincom.com
 @ArdenTCST (Twitter) Vladimir Degen
 vdegen@cincom.com @cincomsmalltalk #ESUG17
  • 35. Cincom, the Quadrant Logo, Cincom Smalltalk, Cincom ObjectStudio and CincomVisualWorks are trademarks or registered trademarks of Cincom Systems, Inc. ©2017 Cincom Systems, Inc. All Rights Reserved