Forum: RSpec [Cucumber] How can I pass an XML block as a parameter?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
5a60d6c66b7737ba71cecc4c46fc6fd5?d=identicon&s=25 Wolfram Arnold (wolframarnold)
on 2009-04-15 01:39
We're trying to verify XML REST API's and would like to write Cucumber
specs of the following type:

  Scenario: Create a phrase
    Given I have an authenticated session for user with login "steve"
    When I send a POST to /phrases with parameters: locale=ca and post
body
      "<?xml version="1.0" encoding="UTF-8"?>
        <phrase>
            <uuid>060e985b-0307-4c8f-b43f-c16f0e45196d</uuid>
            <text>Fake Catalan Source</text>
            <source_language>ca</source_language>
        </phrase>"
    Then I get a 201 (created) status result
    And I a phrase object with UUID=060e985b-0307-4c8f-b43f-c16f0e45196d
exists on the server

In other words, we're trying to pass a multi-line value to the parser.
We've found this reference:
https://rspec.lighthouseapp.com/projects/16211/tic...
It's marked as resolved, but we can't seem to get it to work with the
"..." syntax.

The parser statement is:

When /^I send a (GET|POST|PUT|DELETE) to ([\/\w]+)(?: with parameters:
)?(.*) and post body (.*)$/m do |method, path, params, body|
  send(method.downcase.to_sym, path, params)
end

The error:

$ cucumber features/phrases_xml.feature -n
/usr/lib/ruby/gems/1.8/gems/cucumber-0.2.3/bin/../lib/cucumber/parser/treetop_ext.rb:42:in
`parse_or_fail': features/phrases_xml.feature:9:6: Parse error, expected
one of "|", "\n", "\r", "\"\"\"", "#", "Given", "When", "Then", "And",
"But", "@", "Scenario", "Scenario Outline".
(Cucumber::Parser::SyntaxError)
  from
/usr/lib/ruby/gems/1.8/gems/cucumber-0.2.3/bin/../lib/cucumber/parser/treetop_ext.rb:28:in
`parse_file'
  from
/usr/lib/ruby/gems/1.8/gems/cucumber-0.2.3/bin/../lib/cucumber/parser/treetop_ext.rb:33:in
`open'
  from
/usr/lib/ruby/gems/1.8/gems/cucumber-0.2.3/bin/../lib/cucumber/parser/treetop_ext.rb:33:in
`parse_file'
  from
/usr/lib/ruby/gems/1.8/gems/cucumber-0.2.3/bin/../lib/cucumber/cli/main.rb:55:in
`load_plain_text_features'
  from
/usr/lib/ruby/gems/1.8/gems/cucumber-0.2.3/bin/../lib/cucumber/cli/main.rb:54:in
`each'
  from
/usr/lib/ruby/gems/1.8/gems/cucumber-0.2.3/bin/../lib/cucumber/cli/main.rb:54:in
`load_plain_text_features'
  from
/usr/lib/ruby/gems/1.8/gems/cucumber-0.2.3/bin/../lib/cucumber/cli/main.rb:37:in
`execute!'
  from
/usr/lib/ruby/gems/1.8/gems/cucumber-0.2.3/bin/../lib/cucumber/cli/main.rb:20:in
`execute'
  from /usr/lib/ruby/gems/1.8/gems/cucumber-0.2.3/bin/cucumber:6
  from /usr/bin/cucumber:19:in `load'
  from /usr/bin/cucumber:19
5a60d6c66b7737ba71cecc4c46fc6fd5?d=identicon&s=25 Wolfram Arnold (wolframarnold)
on 2009-04-15 01:40
Copy &  paste mistake: We did escape the quotes inside the XML stanza,
result is the same.
C694a032be7518a0d704318895f8fe1d?d=identicon&s=25 Ben Mabey (mabes)
on 2009-04-15 02:49
(Received via mailing list)
On Apr 14, 2009, at 5:39 PM, Wolfram Arnold wrote:

>            <text>Fake Catalan Source</text>
>            <source_language>ca</source_language>
>        </phrase>"
>    Then I get a 201 (created) status result
>    And I a phrase object with UUID=060e985b-0307-4c8f-b43f-
> c16f0e45196d
> exists on the server
>
> In other words, we're trying to pass a multi-line value to the parser.

Have you tried the pystring syntax?

Given I want to have multiple lines
"""
I can pass them
in with three quotes...
"""


-Ben
994e42bda994be2cd1d791f18ee6d561?d=identicon&s=25 Stephen Eley (Guest)
on 2009-04-15 04:46
(Received via mailing list)
On Tue, Apr 14, 2009 at 8:37 PM, Ben Mabey <ben@benmabey.com> wrote:
>
> Have you tried the pystring syntax?
>
> Given I want to have multiple lines
> """
> I can pass them
> in with three quotes...
> """

How does that parse into a step definition?  Would it be:

Given /^I want to have multiple lines\n(.*)$/m do |text|

...or would it be something else?  Is the newline character necessary?
 Are the quotes included?  And does this imply that multiline text
must always be separated from from steps in lines of its own?

Sorry if I'm asking dumb questions, but I was trying to look this up a
few weeks ago myself to represent some example Markdown data, and
eventually gave up.  This isn't documented anywhere that I could find.
 I've also never heard of pystring syntax -- I just tried to Google
that too, but all I got were references to Java libraries and no
simple syntax reference.


--
Have Fun,
   Steve Eley (sfeley@gmail.com)
   ESCAPE POD - The Science Fiction Podcast Magazine
   http://www.escapepod.org
F86901feca747abbb5c6c020362ef2e7?d=identicon&s=25 Zach Dennis (zdennis)
on 2009-04-15 05:00
(Received via mailing list)
On Tue, Apr 14, 2009 at 10:37 PM, Stephen Eley <sfeley@gmail.com> wrote:
> How does that parse into a step definition?  Would it be:
>
> Given /^I want to have multiple lines\n(.*)$/m do |text|

    Given /^I want to have multiple lines$/m do |text|

Cucumber parses it and appends it to the blocks argument list---so it
will always be the last argument. e.g.

    Given /^(\w+) want to have multiple lines$/m do |who, text|

It is a cucumber PyString object, but you can treat it like a normal
string.

> simple syntax reference.
> http://rubyforge.org/mailman/listinfo/rspec-users
>



--
Zach Dennis
http://www.continuousthinking.com
http://www.mutuallyhuman.com
994e42bda994be2cd1d791f18ee6d561?d=identicon&s=25 Stephen Eley (Guest)
on 2009-04-15 05:19
(Received via mailing list)
On Tue, Apr 14, 2009 at 10:37 PM, Stephen Eley <sfeley@gmail.com> wrote:
>
> Sorry if I'm asking dumb questions, but I was trying to look this up a
> few weeks ago myself to represent some example Markdown data, and
> eventually gave up.  This isn't documented anywhere that I could find.
>  I've also never heard of pystring syntax -- I just tried to Google
> that too, but all I got were references to Java libraries and no
> simple syntax reference.

All right, never mind.  Having been given enough clues that the
feature exists and what it generally might look like, I prowled
through Cucumber's specs and examples until I got a clearer picture.
Then, to keep my 'There ain't no documentation!' whining privileges, I
went and added what I learned to the wiki:

http://wiki.github.com/aslakhellesoy/cucumber/mult...

I'd call it my minor good deed for the day, but really I was using it
to procrastinate on my podcasting work for another half hour, so
overall it was morally neutral.


--
Have Fun,
   Steve Eley (sfeley@gmail.com)
   ESCAPE POD - The Science Fiction Podcast Magazine
   http://www.escapepod.org
C694a032be7518a0d704318895f8fe1d?d=identicon&s=25 Ben Mabey (mabes)
on 2009-04-15 06:45
(Received via mailing list)
Stephen Eley wrote:
> All right, never mind.  Having been given enough clues that the
>
>
>
lol.. Sorry for not explaining the syntax better... What you wrote on
the wiki is great and doesn't really need further explanation by Ben
Mabey or anyone else IMO. ;)

I'll go ahead and elaborate on it though.  Thanks for adding the page.

-Ben
0be0e4aa42aacd9a8a95c792de273ca7?d=identicon&s=25 Aslak Hellesøy (aslakhellesoy)
on 2009-04-15 07:15
(Received via mailing list)
>> simple syntax reference.
> to procrastinate on my podcasting work for another half hour, so
> overall it was morally neutral.
>

Allright allright. You *will* be allowed into Cucumber heaven :-)

Aslak
994e42bda994be2cd1d791f18ee6d561?d=identicon&s=25 Stephen Eley (Guest)
on 2009-04-15 07:41
(Received via mailing list)
On Wed, Apr 15, 2009 at 1:12 AM, Aslak
Hellesøy<aslak.hellesoy@gmail.com> wrote:
>
> Allright allright. You *will* be allowed into Cucumber heaven :-)

Woohoo!  That makes me so happy that I won't share any of the dirty
jokes that sentence evokes.  >8->


--
Have Fun,
   Steve Eley (sfeley@gmail.com)
   ESCAPE POD - The Science Fiction Podcast Magazine
   http://www.escapepod.org
0be0e4aa42aacd9a8a95c792de273ca7?d=identicon&s=25 Aslak Hellesøy (aslakhellesoy)
on 2009-04-15 09:18
(Received via mailing list)
On Wed, Apr 15, 2009 at 6:34 AM, Ben Mabey <ben@benmabey.com> wrote:

>>> simple syntax reference.
>>
>
> I'll go ahead and elaborate on it though.  Thanks for adding the page.
>

Not sure if you have already, but I have done some serious wiki
refactoring
around this this morning:

* Moved some stuff from the "Using tabular data in features" into the
new
"multiline-step-arguments" page
* Deleted the "Using tabular data in features" page (it was now
obsolete)

I also cleared up a little misunderstanding around PyString (you'll
never
see that in your step definitions - just String).

Aslak
5a60d6c66b7737ba71cecc4c46fc6fd5?d=identicon&s=25 Wolfram Arnold (wolframarnold)
on 2009-04-15 20:24
Thanks to all for the prompt answer and new docs!!!
This topic is locked and can not be replied to.