[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: koffice/kspread
From: Stefan Nikolaus <stefan.nikolaus () kdemail ! net>
Date: 2007-01-14 14:43:54
Message-ID: 1168785834.949362.10624.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 623325 by nikolaus:
Value Values created with Value( Type = { String, Error, Array } ) are empty
in a special way: Their data pointer is zero, which leads to crashes
on comparison.
Fixed and test cases added.
M +3 -3 Value.cpp
M +36 -0 tests/TestValue.cpp
--- trunk/koffice/kspread/Value.cpp #623324:623325
@@ -194,9 +194,9 @@
case Boolean: return o.d->b == d->b;
case Integer: return o.d->i == d->i;
case Float: return compare( o.d->f, d->f ) == 0;
- case String: return *o.d->ps == *d->ps;
- case Array: return *o.d->pa == *d->pa;
- case Error: return *o.d->ps == *d->ps;
+ case String: return ( !d->ps && !o.d->ps ) || ( ( d->ps && o.d->ps ) && ( *o.d->ps == *d->ps ) );
+ case Array: return ( !d->pa && !o.d->pa ) || ( ( d->pa && o.d->pa ) && ( *o.d->pa == *d->pa ) );
+ case Error: return ( !d->ps && !o.d->ps ) || ( ( d->ps && o.d->ps ) && ( *o.d->ps == *d->ps ) );
default: break;
}
kWarning() << "Unhandled type in Value::operator==: " << d->type << endl;
--- trunk/koffice/kspread/tests/TestValue.cpp #623324:623325
@@ -105,6 +105,7 @@
void TestValue::testString()
{
Value* v1;
+ Value* v2;
// string value
v1 = new Value( QString("Ailinon" ) );
@@ -119,6 +120,16 @@
QCOMPARE( v1->isNumber(), false );
QCOMPARE( v1->asString(), QString("spreadsheet" ) );
delete v1;
+
+ // equality
+ v1 = new Value( Value::String );
+ v2 = new Value( Value::String );
+ QCOMPARE( *v1, *v2 );
+ v1->setValue( QString( "spreadsheet" ) );
+ v2->setValue( QString( "spreadsheet" ) );
+ QCOMPARE( *v1, *v2 );
+ delete v1;
+ delete v2;
}
void TestValue::testDate()
@@ -187,11 +198,24 @@
void TestValue::testError()
{
+ Value* v1;
+ Value* v2;
+
// TODO error values
// TODO compare values
// TODO add, sub, mul, div values
// TODO pow
+
+ // equality
+ v1 = new Value( Value::Error );
+ v2 = new Value( Value::Error );
+ QCOMPARE( *v1, *v2 );
+ v1->setValue( Value::errorVALUE() );
+ v2->setValue( Value::errorVALUE() );
+ QCOMPARE( *v1, *v2 );
+ delete v1;
+ delete v2;
}
void TestValue::testArray()
@@ -261,6 +285,18 @@
QCOMPARE( v1->asFloat(), 14.3 );
delete v1;
delete v2;
+
+ // equality
+ v1 = new Value( Value::Array );
+ v2 = new Value( Value::Array );
+ QCOMPARE( *v1, *v2 );
+ v1->setElement( 0, 0, Value(1) );
+ v1->setElement( 0, 1, Value(2) );
+ v2->setElement( 0, 0, Value(1) );
+ v2->setElement( 0, 1, Value(2) );
+ QCOMPARE( *v1, *v2 );
+ delete v1;
+ delete v2;
}
void TestValue::testCopy()
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic