Hi Jarek!

I tested your code. Good!

Only thing I found is type incompatibility in expressions e.g.
   <ifnot test="true>1">
or
   <ifnot test="endswith(true,false)">

throws
INTERNAL ERROR

System.ArgumentException: Object must be of type Boolean.
   at System.Boolean.CompareTo(Object obj)
   at
NAnt.Core.ExpressionEval.ExpressionEvalBase.ParseRelationalExpression() in
 e:\src\extern\nant\src\NAnt.Core\ExpressionEval\ExpressionEvalBase.cs:line
195

All exceptions during function call or operator evaluation should be user
BuildExceptions.

Martin

----- Original Message ----- 
From: "Jaroslaw Kowalski" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>;
<[EMAIL PROTECTED]>
Sent: Tuesday, December 02, 2003 11:09 PM
Subject: [nant-dev] Expression Evaluator for NAnt - test1


>
> Hi!
>
> Here's the first test release of the expression evaluator I'm developing
for
> NAnt.
> I encourage everyone to try it. I'd like to get as much feedback as
possible
> on it.
>
> Please report:
>
> 1. Does it work for you? Bug reports are welcome.
> 2. Is it useful?
> 3. Do you find the syntax simple enough? Are the build files more/less
> readable?
> 4. Does it break your existing build files? (it shouldn't!)
> 5. What functions/data types/conversions/operators/conversions should be
> added/removed?
> 6. What other features would you like to see?
>
> Pre-compiled binaries along with patches to current CVS code can be found
> at:
> http://jaak.sav.net/nant-ee/nant-ee-test1.zip
>
> Changes:
>
> * new attribute "test" for <if> and <ifnot> which lets you write:
>
> =====================================================
> <if test="property1 = property2 + '.txt'">
> ...
> </if>
> =====================================================
>
> * support for expressions in (hopefully) all places where ${propertyname}
> syntax could be used:
>
> =====================================================
>  <property name="prop1" value="${'aaa' + 'bbb'}" />
>  <echo message="length of prop1 is: ${length(prop1)}" if="${1+2=3}" />
> =====================================================
>
> Jarek
>
> Full list of features:
> ======================
>
> Data types:
>     integer, double, string, boolean and date
>
> Operators:
>     and, or, not
>     =, <>, <, >, <=, >= (because NAnt is XML I'm considering renaming them
> to lt, gt, le, ge)
>     unary minus,
>     +,-,*,/,%(modulo) with natural precedence, braces (), properties can
be
> accessed just by providing their name
>
> Functions:
>     propertyexists(name) - returns true when the property exists, false
> otherwise
>     propertyvalue(name) - returns the value of the named property, fails
> when it's not present
>
> Conversion operators:
>     int(a) - converts a to integer (if possible) and returns the value
>     double(a) - converts a to double (if possible) and returns the value
>     string(a) - converts a to string and returns the value
>     date(a) - converts a to date
>     bool(a) - converts a to boolean
>
> String functions:
>
>     length(a) - returns the length of the string
>     substring(a,b,c) - equivalent to a.Substring(b,c) in .NET
>     tolower(s) - returns s converted to lower-case
>     toupper(s) - returns s converted to upper-case
>     contains(str,subs) - returns true when subs is a substring of str
>     indexof(a,b) - equivalent to a.IndexOf(b) in .NET
>     padleft(a,b,c) - equivalent to a.PadStart(a,b,c) in .NET
>     padright(a,b,c) - equivalent to a.PadEnd(a,b,c) in .NET
>     trim(a) - equivalent to a.Trim() in .NET
>     trimstart(a) - equivalent to a.TrimStart() in .NET
>     trimend(a) - equivalent to a.TrimEnd() in .NET
>     startswith(a,b) - equivalent to a.StartsWith(b) in .NET
>     endswith(a,b) - equivalent to a.EndsWith(b) in .NET
>
> Math functions:
>
>     round(v)
>     floor(v)
>     ceiling(v)
>     abs(v)
>
> File functions:
>
>     getcreationtime(filename)
>     getlastwritetime(file)
>     getlastaccesstime(file)
>     fileexists(file)
>     filesize(file)
>
> Date functions:
>
>     now()
>     datediff(d1,d2) - returns date difference in seconds
>     dateadd(d1,seconds) - returns d1 + seconds
>
> Here are some examples of things that are known to work, taken from my
unit
> tests:
>
> Assert("1+2", 3);
> Assert("1+2+3", 6);
> Assert("1+2*3", 7);
> Assert("2*1*3", 6);
> Assert("1/2+3", 3);
> Assert("5.0/(2+8)", 0.5);
> Assert("double(5)/(2+8)", 0.5);
> Assert("double(1)/2+3", 3.5);
> Assert("((((1))))", 1);
> Assert("((((1+2))))", 3);
> Assert("((((1+2)+(2+1))))", 6);
> Assert("((((1+2)/(2+1))))", 1);
> Assert("length('')", 0);
> Assert("length('')=0", true);
> Assert("length('')=1", false);
> Assert("length('test')", 4);
> Assert("length('test')=4", true);
> Assert("length('test')=5", false);
> Assert("length('d''Artagnan')", 10);
> Assert("length('d''Artagnan')=10", true);
> Assert("length('d''Artagnan')=11", false);
> Assert("-1", -1);
> Assert("--1", 1);
> Assert("'a' = 'a'", true);
> Assert("'a' = 'b'", false);
> Assert("'a' <> 'a'", false);
> Assert("'a' <> 'b'", true);
> Assert("1 = 1", true);
> Assert("1 <> 1", false);
> Assert("1 = 2", false);
> Assert("1 <> 2", true);
> Assert("1.0 = 1.0", true);
> Assert("1.0 <> 1.0", false);
> Assert("1.0 = 2.0", false);
> Assert("1.0 <> 2.0", true);
> Assert("true", true);
> Assert("false", false);
> Assert("true==true", true);
> Assert("true==false", false);
> Assert("true<>false", true);
> Assert("true<>true", false);
> Assert("!true", false);
> Assert("!false", true);
> Assert("!(1=1)", false);
> Assert("substring('abcde',1,2)='bc'", true);
> Assert("trim('  ab  ')='ab'", true);
> Assert("trimstart('  ab  ')='ab  '", true);
> Assert("trimend('  ab  ')='  ab'", true);
> Assert("padleft('ab',5,'.')='...ab'", true);
> Assert("padright('ab',5,'.')='ab...'", true);
> Assert("indexof('abc','c')=2", true);
> Assert("indexof('abc','d')=-1", true);
> Assert("indexof('abc','d')=-1", true);
> Assert("round(0.1)", 0.0);
> Assert("round(0.7)", 1.0);
> Assert("floor(0.1)", 0.0);
> Assert("floor(0.7)", 0.0);
> Assert("ceiling(0.1)", 1.0);
> Assert("ceiling(0.7)", 1.0);
> Assert("if(true,1,2)", 1);
> Assert("if(true,'a','b')", "a");
> Assert("if(false,'a','b')", "b");
> Assert("abs(1)", 1.0);
> Assert("abs(-1)", 1.0);
> Assert("fileexists('c:\\notthere.txt')", false);
> Assert("dateadd(somedate,3600) = someotherdate", true);
> Assert("'a' + 'b' = 'ab'", true);
>
>
>
> -------------------------------------------------------
> This SF.net email is sponsored by: SF.net Giveback Program.
> Does SourceForge.net help you be more productive?  Does it
> help you create better code?  SHARE THE LOVE, and help us help
> YOU!  Click Here: http://sourceforge.net/donate/
> _______________________________________________
> nant-developers mailing list
> [EMAIL PROTECTED]
> https://lists.sourceforge.net/lists/listinfo/nant-developers
>



-------------------------------------------------------
This SF.net email is sponsored by: SF.net Giveback Program.
Does SourceForge.net help you be more productive?  Does it
help you create better code?  SHARE THE LOVE, and help us help
YOU!  Click Here: http://sourceforge.net/donate/
_______________________________________________
nant-developers mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/nant-developers

Reply via email to