Produkt prisen 2009
- Winner in the IT category

0.52

Released April 16., 2009

The primary focus of this release is the way SeqZap integrates with ZapTools, and expansion of the data types supported by SeqZap. Of course we also found time to add a new tool and fix several bugs.

Array Data

A two dimensional array of string values

One of the most often requested features missing in SeqZap is support for arrays. Although SeqZap is not a general purpose programming environment you still encounter situations where using an array is a great way to accomplish a particular task.

A procedure returning a string array

The new array support in SeqZap can be used with all the existing SeqZap types so you can make arrays of integers, strings, enums and so on. This means that you can use array types wherever normal types are used, for instance as parameters to a procedure.

Invocation Data

One of the things that we take very seriously is how SeqZap's interface to the rest of the world looks like. This is the interface you use when you extend SeqZap by writing your own tools, or when you modify one of the existing ones.

In release 0.52 we have changed the interface quite dramatically, this means that much of the tedious and error prone parts of writing ZapTools are now removed.

To give you an example of the simplifications involved, please consider the following example of pre 0.52 invocation data (invocation data is the data passed to ZapTool methods):

Old version:

         namespace SeleniumTool.Data
         {
            public class DataEnsureTextVisible : StepDataSimpleBase
            {
               [Field( VariableType.String, DefaultValue = "" )]
               [ParameterInfo( "text" )]
               [AllowedReferenceTypes( ValueReferenceTypeChoises.Constant | ValueReferenceTypeChoises.Parameter )]
               public ValueReference Text;
              
               [Field( VariableType.Bool, DefaultValue = true )]
               [ParameterInfo( "failIfNotFound" )]
               [AllowedReferenceTypes( ValueReferenceTypeChoises.Constant | ValueReferenceTypeChoises.Parameter )]
               public ValueReference FailIfNotFound;
         
               [Field( VariableType.Bool )]
               [ParameterInfo( "textFound", ParameterPropertyFlags.Return )]
               [AllowedReferenceTypes( ValueReferenceTypeChoises.Parameter )]
               public ValueReference TextFound;
         
               public DataEnsureTextVisible()
                  : base( 0 )
               {
                  Text = ValueReference.CreateAsConstant();
                  Text.Data = "";
                  FailIfNotFound = ValueReference.CreateAsConstant();
                  FailIfNotFound.Data = true;
                  TextFound = ValueReference.CreateAsParameter();
         
                  Initialize();
               }
         
               public DataEnsureTextVisible( DataEnsureTextVisible _rhs )
                  : base( 0 )
               {
                  Text = _rhs.Text.Clone();
                  FailIfNotFound = _rhs.FailIfNotFound.Clone();
                  TextFound = _rhs.TextFound.Clone();
         
                  Initialize();
               }
         
               protected override StepDataSimpleBase MakeClone()
               {
                  return new DataEnsureTextVisible( this );
               }
            }
         }
      

As you can see much of this code is just copy-paste code, the constructors are just initialising/cloning the fields. This led us to the realisation that all of the code above could be reduced to a simple listing of the defined fields, SeqZap can then deal with providing saving/loading/cloning/notification and all the other tedious work.

The new version of the data defined above is the following:

New version:

        namespace SeleniumTool.Data
        {
           public class DataEnsureTextVisible : StandardData
           {
              public Field<string> Text = new Field<string>();
              [Field( DefaultValue = true )]
              public Field<bool> FailIfNotFound = new Field<bool>();
              public ReturnParameter<bool> TextFound = new ReturnParameter<bool>();
           }
        }
      

We are sure that you will agree that the latter example is much simpler, actually it is so simple that we now recommend moving the definition of invocation data inside the class defining the method that use the data. This makes finding the data related to a given method easier and also keeps the number of files needed to implement a method at a minimum.

Digital IO

Digital IO Devices and Aliases panels

In our ever growing arsenal of standard tools we have now added support for digital IO devices. So far we support National Instruments and BMC MessSysteme devices out of the box, but new devices are easy to add by writing a thin plug-in.

We do not intend for SeqZap to involve into a low-level programming interface for generating digital signals, since digital IO are often needed in system testing.

A tool for interfacing with Analog IO is logically also on the drawing board and should be ready around the time of our next release.

Bugfixes/improvements

#364Unit and description in measurements are copied verbatim to ExecutionCode.
#371Ensure test report is always created / finished - even if the execution is stopped by the user.
#392Parameter assignments are lost when tool is changing number of parameters.
#590When adding a workbench tool without filling in the name the workbench tool is not created.
#591Report errors when trying to create a workbench tool, but the CreateInstance is not implemented.
#593Allow null as input parameter for Workbench ZapTools.
#597NullReferenceException thrown in EventManager when running minesweeper demo through console.
#598Remove errors and warnings from their view immediately after an action has been run.
#629Loop with a Continue step creates overflows Execution State.
#630Right clicking a line in the Active Tools view does not select the line.
#651The seqzap.com and sequanto.com links in the about box does not work.
#652The measurement value expression editor in the measurement step setup dialog should be marked as "single line".
#653Workbench parameter assignment expression editor does not show other workbench items as possible completions.
#655When opening parameter editor the new expression editor does not have focus.
#658Progress Overview does not use already shown list when running execution.
#668Enter should close the parameter editing dialog.
#676Remove runtimeStepData paremeter on IZapToolMethod.Invoke method.
#678It's not possible to paste on empty line at the end of procedure.
#697Expect step setup page's expression editor does not auto-complete local variable names.