[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