@@ -18,6 +18,22 @@ person.fullName`;
1818 expect ( parser . testDataRules . rules [ 0 ] . ruleSpec ) . toBe ( 'person.fullName' ) ;
1919 } ) ;
2020
21+ test ( 'can parse inline pict-style column definitions into rules' , ( ) => {
22+ const inputText = `Browser: Chrome,Firefox,Safari
23+ Status: enum("Open","Closed")
24+ Name: person.fullName` ;
25+
26+ const parser = new RulesParser ( faker , RandExp ) ;
27+ parser . parseText ( inputText ) ;
28+
29+ expect ( parser . isValid ( ) ) . toBe ( true ) ;
30+ expect ( parser . testDataRules . rules ) . toHaveLength ( 3 ) ;
31+ expect ( parser . testDataRules . rules [ 0 ] ) . toMatchObject ( { name : 'Browser' , ruleSpec : 'Chrome,Firefox,Safari' } ) ;
32+ expect ( parser . testDataRules . rules [ 1 ] ) . toMatchObject ( { name : 'Status' , ruleSpec : 'enum("Open","Closed")' } ) ;
33+ expect ( parser . testDataRules . rules [ 2 ] ) . toMatchObject ( { name : 'Name' , ruleSpec : 'person.fullName' } ) ;
34+ expect ( parser . getSchemaTokens ( ) . every ( ( token ) => token . kind !== 'rule' || token . inline === true ) ) . toBe ( true ) ;
35+ } ) ;
36+
2137 test ( 'flags an empty rule definition line' , ( ) => {
2238 const inputText = `Name
2339` ;
@@ -113,6 +129,17 @@ enum(active,inactive,pending)`;
113129 expect ( output ) . toBe ( inputText ) ;
114130 } ) ;
115131
132+ test ( 'preserves inline pict-style rules when rebuilding from parsed tokens' , ( ) => {
133+ const inputText = `# compact
134+ Priority: enum(high,medium,low)
135+ Status: person.jobTitle` ;
136+
137+ const parser = new RulesParser ( faker , RandExp ) ;
138+ parser . parseText ( inputText ) ;
139+
140+ expect ( parser . renderSpecFromRulesWithTokens ( parser . testDataRules . rules ) ) . toBe ( inputText ) ;
141+ } ) ;
142+
116143 test ( 'preserves comments and blank lines when rebuilding from rule comments' , ( ) => {
117144 const inputText = `# one
118145
@@ -167,6 +194,21 @@ enum(open,closed)`;
167194 expect ( parser . testDataRules . constraints ) . toHaveLength ( 0 ) ;
168195 } ) ;
169196
197+ test ( 'does not treat non-rule colon lines as inline pict definitions' , ( ) => {
198+ const inputText = `Environment: Browser
199+ enum(chrome,firefox)` ;
200+
201+ const parser = new RulesParser ( faker , RandExp ) ;
202+ parser . parseText ( inputText ) ;
203+
204+ expect ( parser . isValid ( ) ) . toBe ( true ) ;
205+ expect ( parser . testDataRules . rules ) . toHaveLength ( 1 ) ;
206+ expect ( parser . testDataRules . rules [ 0 ] ) . toMatchObject ( {
207+ name : 'Environment: Browser' ,
208+ ruleSpec : 'enum(chrome,firefox)' ,
209+ } ) ;
210+ } ) ;
211+
170212 test ( 'does not treat ENDIF inside a parameter reference as the constraint terminator' , ( ) => {
171213 const inputText = `ENDIF
172214enum(yes,no)
0 commit comments