Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
ExecutableSpecifications  for Xtext   Moritz Eysholdt
You’re Developing a Language
Three Roles• Language Designer (You)• The Domain Expert• Language Users• yes, I simplify
Three Roles (1/3)          • You know something            about Xtext          • You have some idea aboutYou         Lang...
Three Roles (2/3)           • Deep conceptual knowledge             about the domain           • Defines requirements for  ...
Three Roles (3/3)           • Need to understand language           • Will use language regularlyLanguage  Users
Challenge The single most important  task during the project:communicate how to use the language
Examples to the Rescue• create example documents• and talk about them
Four Important Use Cases• Specify the Language• Develop IDE (smart editor, code gen, ...)• Pass Acceptance Test• Teach Lan...
Use Case #1• Specify the language • Discuss examples with customer • You guide and prototype • Customer knows use cases • ...
Use Case #2• Develop IDE: Needs automated tests  • Use Examples as Test Data  • Extend examples with corner cases  • Enhan...
Use Case #3• Acceptance Testing: Customer wants to know... • ...if and how a uses case is implemented   • Prove by Example...
Use Case #4• Teach The Language  • Explain language by Examples• Learning a Language is a Challenge. Help the Users.• User...
DemoXpect
How does this work?• Tests are JUnit tests (with custom runner)• Tests can be configured with setups• Tests can have parame...
JUnit// XPECT myXpectTest --> expectedimport org.junit.runner.RunWith;import org.xpect.runner.XpectRunner;import org.xpect...
Test Setup & Config/* XPECT_SETUP MyTest	 ResourceSet {	 	 ThisFile {}	 	 File "test2.dmodel" {}	 }END_SETUP */import org....
Test Parameters// XPECT evaludated --> 313 + 4 * 7;@RunWith(XpectRunner.class)@XpectSetup(XtextStandaloneSetup.class)publi...
Annotations define          Parameter Source• From Setup  @ThisModel // access to the root EObject  @ThisResource // acces...
Comparison                                                Plain                                        Xpect              ...
Thank Youhttp://www.xpect-tests.org    fork me at github :)
Upcoming SlideShare
Loading in …5
×

Executable specifications for xtext

10,048 views

Published on

Published in: Technology, Education
  • Be the first to comment

Executable specifications for xtext

  1. 1. ExecutableSpecifications for Xtext Moritz Eysholdt
  2. 2. You’re Developing a Language
  3. 3. Three Roles• Language Designer (You)• The Domain Expert• Language Users• yes, I simplify
  4. 4. Three Roles (1/3) • You know something about Xtext • You have some idea aboutYou Language Design
  5. 5. Three Roles (2/3) • Deep conceptual knowledge about the domain • Defines requirements for language • Has design ideas/expectations?DomainExpert • Needs to be satisfied with the language
  6. 6. Three Roles (3/3) • Need to understand language • Will use language regularlyLanguage Users
  7. 7. Challenge The single most important task during the project:communicate how to use the language
  8. 8. Examples to the Rescue• create example documents• and talk about them
  9. 9. Four Important Use Cases• Specify the Language• Develop IDE (smart editor, code gen, ...)• Pass Acceptance Test• Teach Language
  10. 10. Use Case #1• Specify the language • Discuss examples with customer • You guide and prototype • Customer knows use cases • You or both design• Result: Specification by Examples
  11. 11. Use Case #2• Develop IDE: Needs automated tests • Use Examples as Test Data • Extend examples with corner cases • Enhance examples with test expectations• not having automated tests... • ...is like not using a seat belt in a roller coaster • ...will degenerate your code, ‘cause you fear change
  12. 12. Use Case #3• Acceptance Testing: Customer wants to know... • ...if and how a uses case is implemented • Prove by Example • ...if the IDE (editor, code generator) works • Prove by Passed Test Case
  13. 13. Use Case #4• Teach The Language • Explain language by Examples• Learning a Language is a Challenge. Help the Users.• Users won’t accept a language if they don’t understand it• More Users -> better Return Of Investment
  14. 14. DemoXpect
  15. 15. How does this work?• Tests are JUnit tests (with custom runner)• Tests can be configured with setups• Tests can have parameters
  16. 16. JUnit// XPECT myXpectTest --> expectedimport org.junit.runner.RunWith;import org.xpect.runner.XpectRunner;import org.xpect.runner.Xpect;@RunWith(XpectRunner.class)public class MyTest { @Xpect public void myXpectTest(IStringExpectation expectation) { expectation.assertEquals("actual"); } @Test public void myJUnitTest() { Assert.assertEquals("expected", "actual"); }}
  17. 17. Test Setup & Config/* XPECT_SETUP MyTest ResourceSet { ThisFile {} File "test2.dmodel" {} }END_SETUP */import org.xpect.xtext.lib.setup.XtextStandaloneSetup;import org.xpect.xtext.lib.setup.XtextWorkspaceSetup;@RunWith(XpectRunner.class)@XpectSetup(XtextStandaloneSetup.class)public class MyTest {}
  18. 18. Test Parameters// XPECT evaludated --> 313 + 4 * 7;@RunWith(XpectRunner.class)@XpectSetup(XtextStandaloneSetup.class)public class InterpreterTest { @Xpect public void evaludated( @StringExpectation IStringExpectation expectation, @ThisOffset Expression expression) { BigDecimal actual = new Calculator().evaluate(expression); expectation.assertEquals(actual); }}
  19. 19. Annotations define Parameter Source• From Setup @ThisModel // access to the root EObject @ThisResource // access to the EMF Resource @ThisOffset // access to the offset or current EObject• From XPECT myTest <parsedParameter> --> ... @ParameterParser(syntax="arg0=INT ‘x’ arg1=STRING+ arg2=OFFSET")• Expectations @StringExpectation // string @LinesExpectation // list of strings, one item per line @CommaSeparatedValuesExpectation // list, comma separated items
  20. 20. Comparison Plain Xpect Junit Specify Language yes no Integration Test yes yes Acceptance Test yes no Teach Language yes no IDE support for Test Data yes no Simple Evolution of Test Data yes noUnit Test (Without Parsing Test Data) no yes
  21. 21. Thank Youhttp://www.xpect-tests.org fork me at github :)

×