svgtopt/SVG/SVGImpl/src/SVGTestsImpl.cpp
changeset 0 d46562c3d99d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtopt/SVG/SVGImpl/src/SVGTestsImpl.cpp	Thu Jan 07 16:19:02 2010 +0200
@@ -0,0 +1,473 @@
+/*
+* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  SVG Implementation source file
+ *
+*/
+
+
+#include "SVGTestsImpl.h"
+
+
+// ---------------------------------------------------------------------------
+// Two phase construction:
+// - Implements the SVGTests DOM interface.
+// - Partially implemented, only those required
+//   for passing SVG Test Suite.
+// ---------------------------------------------------------------------------
+CSvgTestsImpl* CSvgTestsImpl::NewL()
+    {
+    CSvgTestsImpl* self = new ( ELeave ) CSvgTestsImpl();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop();
+
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+CSvgTestsImpl* CSvgTestsImpl::NewLC()
+    {
+    CSvgTestsImpl* self = new ( ELeave ) CSvgTestsImpl();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+CSvgTestsImpl::~CSvgTestsImpl()
+    {
+    if ( iRequiredFeatures )
+		{
+        delete iRequiredFeatures;
+		iRequiredFeatures = NULL;
+		}
+    if ( iRequiredExtensions )
+		{
+        delete iRequiredExtensions;
+		iRequiredExtensions = NULL;
+		}
+    if ( iSystemLanguage )
+		{
+        delete iSystemLanguage;
+		iSystemLanguage = NULL;
+		}
+    }
+
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+void CSvgTestsImpl::ConstructL()
+    {
+    iRequiredFeatures = new ( ELeave ) CDesCArrayFlat( 1 );
+    iRequiredFeatures->Reset();
+    iRequiredExtensions = new ( ELeave ) CDesCArrayFlat( 1 );
+    iRequiredExtensions->Reset();
+    iSystemLanguage = new ( ELeave ) CDesCArrayFlat( 1 );
+    iSystemLanguage->Reset();
+
+    iSystemLanguageEmpty = EFalse;
+    }
+
+
+// From MSvgTests
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+void CSvgTestsImpl::GetRequiredFeatures( const CDesCArrayFlat*& aRequiredFeatures )
+    {
+    aRequiredFeatures = iRequiredFeatures;
+    }
+
+// ---------------------------------------------------------------------------
+// function for decoding
+// ---------------------------------------------------------------------------
+void CSvgTestsImpl::SetRequiredFeatures(  CDesCArrayFlat*& aRequiredFeatures )
+    {
+	if(iRequiredFeatures)
+		{
+		iRequiredFeatures->Reset();
+		delete iRequiredFeatures;
+		iRequiredFeatures= NULL;
+		}
+    iRequiredFeatures= aRequiredFeatures;
+    }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+void CSvgTestsImpl::GetRequiredExtensions( const CDesCArrayFlat*& aRequiredExtensions )
+    {
+    aRequiredExtensions = iRequiredExtensions;
+    }
+
+// ---------------------------------------------------------------------------
+// function for decoding
+// ---------------------------------------------------------------------------
+void CSvgTestsImpl::SetRequiredExtensions(  CDesCArrayFlat*& aRequiredExtensions )
+    {
+	if(iRequiredExtensions)
+		{
+		iRequiredExtensions->Reset();
+		delete iRequiredExtensions;
+		iRequiredExtensions= NULL;
+		}
+    iRequiredExtensions= aRequiredExtensions;
+    }
+
+// ---------------------------------------------------------------------------
+// returns false if there was an empty string system language true otherwise
+// ---------------------------------------------------------------------------
+TBool CSvgTestsImpl::GetSystemLanguage( const CDesCArrayFlat*& aSystemLanguage )
+    {
+    aSystemLanguage = iSystemLanguage;
+
+    if (iSystemLanguageEmpty)
+    	{
+    		return EFalse;
+    	}
+
+    return ETrue;
+
+    }
+
+// ---------------------------------------------------------------------------
+// function for decoding
+// ---------------------------------------------------------------------------
+void CSvgTestsImpl::SetSystemLanguage(  CDesCArrayFlat*& aSystemLanguage )
+    {
+	if(iSystemLanguage)
+		{
+		iSystemLanguage->Reset();
+		delete iSystemLanguage;
+		iSystemLanguage= NULL;
+		}
+    iSystemLanguage= aSystemLanguage;
+    }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+TBool CSvgTestsImpl::HasExtension( const TDesC& /* aExtension */ )
+    {
+    return EFalse;
+    }
+
+// For use in requiredFeatures
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+TBool CSvgTestsImpl::HasFeature( const TDesC& aFeature )
+    {
+    // SVG Tiny Feature List
+    _LIT( KTiny, "http://www.w3.org/TR/SVGMobile/Tiny/feature#" );
+    _LIT( KBase, "base" );
+    _LIT( KInteractivity, "interactivity" );
+    _LIT( KAll, "all" );
+
+    // SVG 1.1 Feature List
+    _LIT( KSVG11, "http://www.w3.org/TR/SVG11/feature#" );
+    _LIT( KCoreAttr, "CoreAttribute" );
+    _LIT( KBasicStr, "BasicStructure" );
+    _LIT( KStyle, "Style" );
+    _LIT( KPaintAttr, "PaintAttribute" );
+    _LIT( KGraphicsAttr, "BasicGraphicsAttribute" );
+    _LIT( KHyperlink, "Hyperlinking" );
+    _LIT( KXlinkAttr, "XlinkAttribute" );
+    _LIT( KCond, "ConditionalProcessing" );
+    _LIT( KShape, "Shape" );
+    _LIT( KImage, "Image" );
+    _LIT( KBasicTest, "BasicText" );
+    _LIT( KBasicFont, "BasicFont" );
+    _LIT( KDocAttr,"DocumentEventsAttribute" );
+    _LIT( KGraphEvt,"GraphicalEventsAttribute" );
+    _LIT( KAnimEvt,"AnimationEventsAttribute" );
+    _LIT( KScript, "Scripting" );
+    _LIT( KView, "View" );
+    _LIT( KAnim, "SVG-animation" );
+    _LIT( KExt, "Extensibility" );
+
+    _LIT( KSVG12, "http://www.w3.org/TR/SVG12/feature#" );
+    _LIT( KAudio, "Audio");
+
+    // SVG 1.2 Feature List
+    // SVG Feature List
+    _LIT( KStatic, "org.w3c.svg.static" );
+    _LIT( KDynamic, "org.w3c.svg.dynamic" );
+
+    TPtrC tinybase( KTiny );
+    if( (aFeature.Length()-tinybase.Length()) > 1 )
+        {
+        TPtrC rightTiny= aFeature.Right(aFeature.Length()-tinybase.Length() );
+        if ( rightTiny.Match(KBase) != KErrNotFound)
+        return ETrue;
+        if ( rightTiny.Match(KInteractivity) != KErrNotFound)
+        return ETrue;
+        if ( rightTiny.Match(KAll) != KErrNotFound )
+        return ETrue;
+        }
+
+    TPtrC svg11base( KSVG11 );
+    if( (aFeature.Length()-svg11base.Length()) > 1 )
+        {
+        TPtrC rightSvg11= aFeature.Right(aFeature.Length()-svg11base.Length() );
+    if ( rightSvg11.Match(KAnim) != KErrNotFound )
+        return ETrue;
+    if ( rightSvg11.Match(KCoreAttr) != KErrNotFound )
+        return ETrue;
+    if ( rightSvg11.Match(KBasicStr) != KErrNotFound )
+        return ETrue;
+    if ( rightSvg11.Match(KStyle) != KErrNotFound )
+        return ETrue;
+    if ( rightSvg11.Match(KPaintAttr) != KErrNotFound )
+        return ETrue;
+    if ( rightSvg11.Match(KGraphicsAttr) != KErrNotFound )
+        return ETrue;
+    if ( rightSvg11.Match(KHyperlink) != KErrNotFound )
+        return ETrue;
+    if ( rightSvg11.Match(KXlinkAttr) != KErrNotFound )
+        return ETrue;
+    if (rightSvg11.Match(KCond) != KErrNotFound )
+        return ETrue;
+    if ( rightSvg11.Match(KShape) != KErrNotFound )
+        return ETrue;
+    if ( rightSvg11.Match(KImage) != KErrNotFound )
+        return ETrue;
+    if ( rightSvg11.Match(KBasicTest) != KErrNotFound )
+        return ETrue;
+    if (rightSvg11.Match(KBasicFont) != KErrNotFound )
+        return ETrue;
+    if ( rightSvg11.Match(KDocAttr) != KErrNotFound )
+        return ETrue;
+    if ( rightSvg11.Match(KGraphEvt) != KErrNotFound )
+        return ETrue;
+    if ( rightSvg11.Match(KAnimEvt) != KErrNotFound )
+        return ETrue;
+    if ( rightSvg11.Match(KScript)!= KErrNotFound )
+        return EFalse;          // Scripting is not supported.
+    if ( rightSvg11.Match(KView) != KErrNotFound )
+        return ETrue;
+    if ( rightSvg11.Match(KAnim) != KErrNotFound )
+        return ETrue;
+    if ( rightSvg11.Match(KExt) != KErrNotFound )
+        return ETrue;
+        }
+
+    TPtrC svg12base( KSVG12 );
+    if( (aFeature.Length()-svg12base.Length()) > 1 )
+        {
+        TPtrC rightSvg12= aFeature.Right(aFeature.Length()-svg12base.Length() );
+        if ( rightSvg12.Match(KAudio) != KErrNotFound )
+            {
+            return ETrue;
+            }
+        }
+
+    if ( aFeature == KStatic )
+        return ETrue;
+    if ( aFeature == KDynamic )
+        return EFalse;
+    else
+        return FALSE;
+    }
+
+TBool CSvgTestsImpl::HasAnyTests()
+{
+	const CDesCArrayFlat* tempTestArray = NULL;
+
+	GetRequiredFeatures(tempTestArray);
+	if (tempTestArray && tempTestArray->Count() > 0)
+	{
+		return ETrue;
+	}
+
+	GetSystemLanguage(tempTestArray);
+	if (tempTestArray && tempTestArray->Count() > 0)
+	{
+		return ETrue;
+	}
+
+	GetRequiredExtensions(tempTestArray);
+	if (tempTestArray && tempTestArray->Count() > 0)
+	{
+		return ETrue;
+	}
+
+	if (iSystemLanguageEmpty)
+	{
+		return ETrue;
+	}
+
+	return EFalse;
+}
+
+// Implementation
+
+TBool CSvgTestsImpl::SetRequiredFeatureAttribute( const TDesC& aValue )
+{
+	TLex input( aValue );
+
+    while ( !( input.Eos() ) )
+    {
+    	input.SkipSpace();
+        input.Mark();
+        input.SkipCharacters();
+        TPtrC token = input.MarkedToken();    // then extract token
+        TRAPD(error,iRequiredFeatures->AppendL( token ));
+
+        if (error != KErrNone)
+        {
+        	//Error Processing
+        	return EFalse;
+        }
+    }
+
+    return ETrue;
+}
+
+TBool CSvgTestsImpl::SetRequiredExtensionAttribute( const TDesC& aValue )
+{
+	TLex input( aValue );
+
+    if ( aValue.Length() == 0 )
+    {
+	    TRAPD(error1,iRequiredExtensions->AppendL( aValue ));
+
+	    if (error1 != KErrNone)
+	    {
+        	//Error Processing
+        	return EFalse;
+	  	}
+    }
+    else
+    {
+    	while ( !( input.Eos() ) )
+        {
+        	input.SkipSpace();
+            input.Mark();
+            input.SkipCharacters();
+            TPtrC token = input.MarkedToken();    // then extract token
+            TRAPD(error,iRequiredExtensions->AppendL( token ));
+
+            if (error != KErrNone)
+            {
+							//Error Processing
+							return EFalse;
+            }
+        }
+    }
+    return ETrue;
+}
+
+TBool CSvgTestsImpl::SetSystemLanguageAttribute( const TDesC& aValue  )
+{
+	TLex input( aValue );
+
+	iSystemLanguageEmpty = EFalse;
+
+ 	if ( input.Eos() )
+    {
+		iSystemLanguageEmpty = ETrue;
+    }
+    else
+    {
+    	while ( !( input.Eos() ) )
+        {
+        	input.SkipSpace();
+            input.Mark();
+            input.SkipCharacters();
+            TPtrC token = input.MarkedToken();    // then extract token
+            TRAPD(error,iSystemLanguage->AppendL( token ));
+
+            if (error != KErrNone)
+            {
+							//Error Processing
+							return EFalse;
+          	}
+        }
+    }
+
+    return ETrue;
+
+}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+TBool CSvgTestsImpl::SetTestAttributeL( const TDesC& aPropertyName,
+                                        const TDesC& aValue )
+{
+
+    _LIT( KRequiredFeatures, "requiredFeatures" );
+    _LIT( KRequiredExtensions, "requiredExtensions" );
+    _LIT( KSystemLanguage, "systemLanguage" );
+
+    if (aPropertyName == KRequiredFeatures)
+    {
+    	return SetRequiredFeatureAttribute(aValue);
+    }
+    else if (aPropertyName == KRequiredExtensions)
+    {
+    	return SetRequiredExtensionAttribute(aValue);
+    }
+    else if (aPropertyName == KSystemLanguage)
+    {
+    	return SetSystemLanguageAttribute(aValue);
+    }
+	else
+	{
+		return EFalse;
+	}
+}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+CSvgTestsImpl* CSvgTestsImpl::CloneL()
+    {
+    CSvgTestsImpl* retValue = CSvgTestsImpl::NewL();
+
+	CleanupStack::PushL(retValue);
+    // no need to call Reset() on any of these arrays because
+    // that already happened in the call to NewL above
+    int i;
+
+    // *** copy required features
+    TInt requiredFeaturesCnt = this->iRequiredFeatures->Count();
+    for (i=0; i< requiredFeaturesCnt; i++)
+        {
+        retValue->iRequiredFeatures->AppendL(this->iRequiredFeatures->operator[](i));
+        }
+
+    // *** copy required extensions
+    TInt requiredExtensionsCnt = this->iRequiredExtensions->Count();
+    for (i=0; i< requiredExtensionsCnt; i++)
+        {
+        retValue->iRequiredExtensions->AppendL(this->iRequiredExtensions->operator[](i));
+        }
+
+    // *** copy system language
+    TInt systemLanguageCnt = this->iSystemLanguage->Count();
+    for (i=0; i< systemLanguageCnt; i++)
+        {
+        retValue->iSystemLanguage->AppendL(this->iSystemLanguage->operator[](i));
+        }
+	CleanupStack::Pop();
+    return retValue;
+    }