10 More Discussions You Might Find Interesting
1. Shell Programming and Scripting
Hi,
I couldn't find any thing on google about it and have been trying to figure this out but am not getting anywhere. I want to know if its possible through a script. I have a file with columns start time and end time separated by a comma, basically there are some other columns which I need to... (30 Replies)
Discussion started by: dsid
30 Replies
2. Homework & Coursework Questions
THIS IS A SAMPLE PRACTICAL EXAM QUESTION, COMPLETE FILE HAS BEEN ATTACHED AS WELL.
Hi All,
I'm a bit confused about assigning IP address from IP Ranges.
I am using this scenario below to understand.
Scenario
Adatum.com an international IT solutions company, is launching 12 new branches in a... (10 Replies)
Discussion started by: TryllZ
10 Replies
3. Shell Programming and Scripting
Unable to get the value to a variable.
set -x
cd $HOME
echo "Enter the server name"
read a
echo $a
i=4
j=1
k = ps -ef | awk '/server1/{ print $4 }' | tail -$i | head -$j`
echo $k
When I do the same in command line it works, however the same does not work when I provide that in the... (1 Reply)
Discussion started by: venkidhadha
1 Replies
4. AIX
Hi admins
i want to assign new ip adress to my aix 5.3 machine which is in LPAR
ent3 Available Virtual I/O Ethernet Adapter (l-lan)
ent0 Available 05-08 2-Port 10/100/1000 Base-TX PCI-X Adapter (14108902)
ent1 Available 05-09 2-Port 10/100/1000 Base-TX PCI-X Adapter (14108902)
ent2... (0 Replies)
Discussion started by: newaix
0 Replies
5. Shell Programming and Scripting
I want to print between the range two patterns if a particular pattern is present in between the two patterns. I am new to Unix. Any help would be greatly appreciated.
e.g.
Pattern1
Bombay
Calcutta
Delhi
Pattern2
Pattern1
Patna
Madras
Gwalior
Delhi
Pattern2
Pattern1... (2 Replies)
Discussion started by: joyan321
2 Replies
6. Shell Programming and Scripting
can we make a global variable and store character values and add other values to that variable ?? for example
a="hello, John"
and can we add value ". How are you? so
a can have
"hello, John. How are you?"
can someone help me?? (2 Replies)
Discussion started by: bonosungho
2 Replies
7. Shell Programming and Scripting
hi all,
in ksh, how do i assign the output of a find command to a variable, e.g
am trying something like this :
totalNoFiles=$(print find ./ -name "SystemOut*.log");
but when i echo $totalNoFiles it displays
find ./ -name "SystemOut*.log"
instead of the total number of... (2 Replies)
Discussion started by: cesarNZ
2 Replies
8. HP-UX
hi all,
i want to know where i can add and IP address so when i do a "w", i can see what IP is assigned to which tty? i know in tru64 you just added an entry to /etc/hosts. this does not seem to be the case with hpux.
thanks (12 Replies)
Discussion started by: macgre_r
12 Replies
9. Shell Programming and Scripting
Hi
In my shell script, I'm trying to find the line count of a file and assign it to a variable.
LINE_COUNT=$(wc -l $FILE_NAME)
But when i display LINE_COUNT, i'm getting the linecount concatenated with the file name. I want only the number. How can i get the line count alone ? Someone... (2 Replies)
Discussion started by: janemary.a
2 Replies
10. UNIX for Dummies Questions & Answers
Before I even attempt this, is it possible to grep for a pattern, maybe a partial sentence like "go to page 3", assign that to a variable and then use awk or something to pull out the 3 and assign it to a variable? So first I would have
Gotopg = "go to page 3"
then
page = 3 (9 Replies)
Discussion started by: k@ssidy
9 Replies
Test::BDD::Cucumber::Manual::Tutorial(3pm) User Contributed Perl Documentation Test::BDD::Cucumber::Manual::Tutorial(3pm)
NAME
Test::BDD::Cucumber::Manual::Tutorial - Quick Start Guide
VERSION
version 0.11
Introduction
In this article we're going to jump straight in to using Test::BDD::Cucumber to build some simple tests for Digest, a core Perl module
which provides message digests.
We'll create a "features/" directory, and put our first test case in it, "features/basic.feature" in it. The contents of it are, in their
entirity:
# Somehow I don't see this replacing the other tests this module has...
Feature: Simple tests of Digest.pm
As a developer planning to use Digest.pm
I want to test the basic functionality of Digest.pm
In order to have confidence in it
Background:
Given a usable Digest class
Scenario: Check MD5
Given a Digest MD5 object
When I've added "foo bar baz" to the object
And I've added "bat ban shan" to the object
Then the hex output is "bcb56b3dd4674d5d7459c95e4c8a41d5"
Then the base64 output is "1B2M2Y8AsgTpgAmY7PhCfg"
Scenario: Check SHA-1
Given a Digest SHA-1 object
When I've added "<data>" to the object
Then the hex output is "<output>"
Examples:
| data | output |
| foo | 0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33 |
| bar | 62cdb7020ff920e5aa642c3d4066950dd1f01f4d |
| baz | bbe960a25ea311d21d40669e93df2003ba9b90a2 |
Scenario: MD5 longer data
Given a Digest MD5 object
When I've added the following to the object
"""
Here is a chunk of text that works a bit like a HereDoc. We'll split
off indenting space from the lines in it up to the indentation of the
first """
"""
Then the hex output is "75ad9f578e43b863590fae52d5d19ce6"
This is a complete test, and if you run pherkin against it, you will get sane output! It just doesn't do anything ... yet.
In the "features/" we'll add a "step_definitions/" directory, and add our first (and again, only) step definitions
"features/step_definitions/basic_steps.pl" file in it:
#!perl
use strict;
use warnings;
use Test::More;
use Test::BDD::Cucumber::StepFile;
use Method::Signatures;
Given qr/a usable (S+) class/, func ($c) { use_ok( $1 ); };
Given qr/a Digest (S+) object/, func ($c) {
my $object = Digest->new($1);
ok( $object, "Object created" );
$c->stash->{'scenario'}->{'object'} = $object;
};
When qr/I've added "(.+)" to the object/, func ($c) {
$c->stash->{'scenario'}->{'object'}->add( $1 );
};
When "I've added the following to the object", func ($c) {
$c->stash->{'scenario'}->{'object'}->add( $c->data );
};
Then qr/the (.+) output is "(.+)"/, func ($c) {
my $method = {base64 => 'b64digest', 'hex' => 'hexdigest' }->{ $1 } ||
do { fail("Unknown output type $1"); return };
is( $c->stash->{'scenario'}->{'object'}->$method, $2 );
};
When you run pherkin or the Test::Builder-based test which does the same thing
("900_run_features.thttps://github.com/sheriff/test-bdd-cucumber-perl/blob/master/t/900_run_features.t" in t), we look for a "features/"
directory, and search for step definitions files (matched by "*_steps.pl") and feature files (matched by "*.feature").
The step matchers (the code that starts with "Given", "When" and "Then") are all loaded, and then we execture the feature files one by one.
Let's step through the feature file, and look at how it matches up to the step definitions file.
Name and conditions of satisfaction
Feature: Simple tests of Digest.pm
As a developer planning to use Digest.pm
I want to test the basic functionality of Digest.pm
In order to have confidence in it
The first non-comment line of your feature file is a description of what you intend to do. You need to start the name itself with the
string "Feature:", and that should be the first line of your file, save comments (denoted by #).
Anything after that before the next new-line are your conditions of satisfaction. These aren't parsed, they're treated as human-readable
text, and by convention, they're a user story <http://en.wikipedia.org/wiki/User_story>.
Background
Background:
Given a usable Digest class
Next up, we have the Background section. The Background is a special kind of Scenario that doesn't have an explicit name, and should occur
only once in your feature file. Its steps are run before the steps of every other scenario - the harnesses distributed with this distro
won't display the Background section separately, they'll just subsume the steps in to the other scenarios.
This is matched by:
Given qr/a usable (S+) class/, func ($c) { use_ok( $1 ); };
"Given()" is a function exported by Test::BDD::Cucumber::StepFile that accepts two arguments: a regular expression (or a string when you
don't need to do any smart matching) and a coderef. We use Method::Signatures to save some typing here, so note that written longer hand,
the above might be written:
Given(
qr/a usable (S+) class/,
sub {
my $c = shift;
use_ok( $1 );
};
);
If you're paying attention, you might notice that "use_ok" comes from Test::More. Each step is run, from a Test::Builder perspective, as
its own distinct test file. This happens seamlessly, so you can use any Test::Builder-based testing tools in your step definitions without
really worrying about it. There's some more detail in Test::BDD::Cucumber::Manual::Steps.
The First Scenario...
Scenario: Check MD5
Given a Digest MD5 object
When I've added "foo bar baz" to the object
And I've added "bat ban shan" to the object
Then the hex output is "bcb56b3dd4674d5d7459c95e4c8a41d5"
Then the base64 output is "1B2M2Y8AsgTpgAmY7PhCfg"
The first scenario is delimited from the previous steps by a blank line, and it's called Check MD5. Scenarios are marked out using the
"Scenario:" keyword, and just like the Background section before, it's a series of steps. These steps rely on the step before, which means
we can examine the Test::Builder::StepContext object $c a little more closely.
Given qr/a Digest (S+) object/, func ($c) {
my $object = Digest->new($1);
ok( $object, "Object created" );
$c->stash->{'scenario'}->{'object'} = $object;
};
Creates a step definition. We create a new Digest object, and then use Test::More's "ok()" function to check that worked. We then put it in
the stash for other steps to use. There are three stashes documented in Test::Builder::StepContext, "feature", "scenario" and "step". As
you might expect, "feature" is available to all step definitions that are being executed as part of a feature, and "scenario" is available
to all steps that are being executed as part of a feature.
The context is the single argument that gets passed to each step, and it contains evertything that step should need to execute. We'll be
looking at some of the methods you can call against it as we look at other steps, and you can find complete documentation for it here:
Test::Builder::StepContext.
This scenario also introduce several ways of starting a step, Given, When, and Then, as well as And. These are used to organize steps by
type, with Given tending to describe setup steps, When describing the key actions that you're testing, and Then describing the outputs
you're looking for. You can find more on this here: https://github.com/cucumber/cucumber/wiki/Given-When-Then
<https://github.com/cucumber/cucumber/wiki/Given-When-Then>.
A step definition you've declared with Given will not match a step starting with Then. You can use the keyword Step to declare general
matching steps in your step definition files, although it's considered bad practice.
Finally, the keywords And and But are simply replaced with the verb on the line before them.
Scenario Outlines
Scenario: Check SHA-1
Given a Digest SHA-1 object
When I've added "<data>" to the object
Then the hex output is "<output>"
Examples:
| data | output |
| foo | 0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33 |
| bar | 62cdb7020ff920e5aa642c3d4066950dd1f01f4d |
| baz | bbe960a25ea311d21d40669e93df2003ba9b90a2 |
The next scenario adds one of the three ways you can provide structured data to your steps, using placeholders and a table. This scenario
is run three times, one for each table row, and with the " <placeholders" > being replaced by the appropriate row's column. These are
called Scenario Outlines <https://github.com/cucumber/cucumber/wiki/Scenario-outlines>.
Multiline Step Arguments
Scenario: MD5 longer data
Given a Digest MD5 object
When I've added the following to the object
"""
Here is a chunk of text that works a bit like a HereDoc. We'll split
off indenting space from the lines in it up to the indentation of the
first """
"""
Then the hex output is "75ad9f578e43b863590fae52d5d19ce6"
While before we were looking at structured data on a Scenario level, we can also provide it on a Step level, in two ways. Firstly, we can
provide multi-line strings, as above, using a feature that is syntactically similar to "pystring"s, and conceptually similar to HEREDOCs.
The contents of the string will be available to the step definition via the "data()" method of the context:
When "I've added the following to the object", func ($c) {
$c->stash->{'scenario'}->{'object'}->add( $c->data );
};
While we don't have an example of it here, you can also provide tables to your steps, which will also be available via "data()":
Scenario: Sort Employees
Given a set of employees
| name | wage | hair color |
| Peter | 10,000 | brown |
| John | 20,000 | blond |
| Joan | 30,000 | green |
You can find out more about these features in the Cucumber documentation here:
https://github.com/cucumber/cucumber/wiki/Multiline-Step-Arguments <https://github.com/cucumber/cucumber/wiki/Multiline-Step-Arguments>.
Next Steps...
That's the tutorial done! You can find out more about writing steps in Test::BDD::Cucumber::Manual::Steps, the documentation for our simple
command-line tool in App::pherkin, and how to integrate with Test::Builder in Test::BDD::Cucumber::Manual::Integration.
AUTHOR
Peter Sergeant "pete@clueball.com"
LICENSE
Copyright 2011, Peter Sergeant; Licensed under the same terms as Perl
perl v5.14.2 2012-05-20 Test::BDD::Cucumber::Manual::Tutorial(3pm)