Update of /cvsroot/archetypes/Archetypes/tests
In directory sc8-pr-cvs1:/tmp/cvs-serv4181
Modified Files:
test_baseschema.py test_baseunit.py test_classgen.py
test_contenttype.py test_fields.py test_i18n_fields.py
test_rename.py test_sitepolicy.py test_storage.py
Log Message:
tests come back :)
Index: test_baseschema.py
===================================================================
RCS file: /cvsroot/archetypes/Archetypes/tests/test_baseschema.py,v
retrieving revision 1.11
retrieving revision 1.12
diff -C2 -d -r1.11 -r1.12
*** test_baseschema.py 26 Apr 2003 12:51:17 -0000 1.11
--- test_baseschema.py 8 Aug 2003 11:26:41 -0000 1.12
***************
*** 1,10 ****
import unittest
! import Zope # Sigh, make product initialization happen
!
! try:
! Zope.startup()
! except: # Zope > 2.6
! pass
from Products.Archetypes.public import *
--- 1,6 ----
import unittest
! # need this to initialize new BU for tests
! from test_classgen import Dummy
from Products.Archetypes.public import *
***************
*** 17,29 ****
from Products.Archetypes.utils import DisplayList
from Products.CMFCore import CMFCorePermissions
from DateTime import DateTime
import unittest
! schema = BaseSchema
!
! class Dummy(BaseContent):
! schema = schema
!
class BaseSchemaTest( unittest.TestCase ):
--- 13,23 ----
from Products.Archetypes.utils import DisplayList
from Products.CMFCore import CMFCorePermissions
+ from Products.Archetypes.ExtensibleMetadata import FLOOR_DATE,CEILING_DATE
from DateTime import DateTime
import unittest
! Dummy.schema = BaseSchema
!
class BaseSchemaTest( unittest.TestCase ):
***************
*** 111,115 ****
self.failUnless(field.generateMode == 'mVc')
self.failUnless(field.force == '')
! self.failUnless(field.type == 'object')
self.failUnless(isinstance(field.storage, MetadataStorage))
self.failUnless(field.getLayerImpl('storage') == MetadataStorage())
--- 105,109 ----
self.failUnless(field.generateMode == 'mVc')
self.failUnless(field.force == '')
! self.failUnless(field.type == 'string')
self.failUnless(isinstance(field.storage, MetadataStorage))
self.failUnless(field.getLayerImpl('storage') == MetadataStorage())
***************
*** 168,172 ****
self.failUnless(field.generateMode == 'mVc')
self.failUnless(field.force == '')
! self.failUnless(field.type == 'metadata')
self.failUnless(isinstance(field.storage, MetadataStorage))
self.failUnless(field.getLayerImpl('storage') == MetadataStorage())
--- 162,166 ----
self.failUnless(field.generateMode == 'mVc')
self.failUnless(field.force == '')
! self.failUnless(field.type == 'text')
self.failUnless(isinstance(field.storage, MetadataStorage))
self.failUnless(field.getLayerImpl('storage') == MetadataStorage())
***************
*** 207,242 ****
def test_effectivedate(self):
dummy = self._dummy
- field = dummy.getField('effective_date')
-
- self.failUnless(field.required == 0)
- self.failUnless(field.default is None)
- self.failUnless(field.searchable == 0)
- vocab = field.vocabulary
- self.failUnless(vocab == ())
- self.failUnless(field.enforceVocabulary == 0)
- self.failUnless(field.multiValued == 0)
- self.failUnless(field.isMetadata == 1)
- self.failUnless(field.accessor == 'EffectiveDate')
- self.failUnless(field.mutator == 'setEffectiveDate')
- self.failUnless(field.read_permission == CMFCorePermissions.View)
- self.failUnless(field.write_permission ==
CMFCorePermissions.ModifyPortalContent)
- self.failUnless(field.generateMode == 'mVc')
- self.failUnless(field.force == '')
- self.failUnless(field.type == 'lines')
- self.failUnless(isinstance(field.storage, MetadataStorage))
- self.failUnless(field.getLayerImpl('storage') == MetadataStorage())
- self.failUnless(field.validators == ())
- self.failUnless(isinstance(field.widget, CalendarWidget))
- vocab = field.Vocabulary(dummy)
- self.failUnless(isinstance(vocab, DisplayList))
- self.failUnless(tuple(vocab) == ())
-
- def test_effectivedate(self):
- dummy = self._dummy
field = dummy.getField('effectiveDate')
self.failUnless(ILayerContainer.isImplementedBy(field))
self.failUnless(field.required == 0)
! self.failUnless(field.default is None)
self.failUnless(field.searchable == 0)
vocab = field.vocabulary
--- 201,209 ----
def test_effectivedate(self):
dummy = self._dummy
field = dummy.getField('effectiveDate')
self.failUnless(ILayerContainer.isImplementedBy(field))
self.failUnless(field.required == 0)
! self.failUnlessEqual(field.default, FLOOR_DATE)
self.failUnless(field.searchable == 0)
vocab = field.vocabulary
***************
*** 266,270 ****
self.failUnless(ILayerContainer.isImplementedBy(field))
self.failUnless(field.required == 0)
! self.failUnless(field.default is None)
self.failUnless(field.searchable == 0)
vocab = field.vocabulary
--- 233,237 ----
self.failUnless(ILayerContainer.isImplementedBy(field))
self.failUnless(field.required == 0)
! self.failUnlessEqual(field.default, CEILING_DATE)
self.failUnless(field.searchable == 0)
vocab = field.vocabulary
***************
*** 307,311 ****
self.failUnless(field.generateMode == 'mVc')
self.failUnless(field.force == '')
! self.failUnless(field.type == 'metadata')
self.failUnless(isinstance(field.storage, MetadataStorage))
self.failUnless(field.getLayerImpl('storage') == MetadataStorage())
--- 274,278 ----
self.failUnless(field.generateMode == 'mVc')
self.failUnless(field.force == '')
! self.failUnless(field.type == 'string')
self.failUnless(isinstance(field.storage, MetadataStorage))
self.failUnless(field.getLayerImpl('storage') == MetadataStorage())
***************
*** 322,326 ****
self.failUnless(ILayerContainer.isImplementedBy(field))
self.failUnless(field.required == 0)
! self.failUnless(field.default is None)
self.failUnless(field.searchable == 0)
vocab = field.vocabulary
--- 289,293 ----
self.failUnless(ILayerContainer.isImplementedBy(field))
self.failUnless(field.required == 0)
! self.failUnless(field.default == '')
self.failUnless(field.searchable == 0)
vocab = field.vocabulary
***************
*** 335,339 ****
self.failUnless(field.generateMode == 'mVc')
self.failUnless(field.force == '')
! self.failUnless(field.type == 'metadata')
self.failUnless(isinstance(field.storage, MetadataStorage))
self.failUnless(field.getLayerImpl('storage') == MetadataStorage())
--- 302,306 ----
self.failUnless(field.generateMode == 'mVc')
self.failUnless(field.force == '')
! self.failUnless(field.type == 'string')
self.failUnless(isinstance(field.storage, MetadataStorage))
self.failUnless(field.getLayerImpl('storage') == MetadataStorage())
Index: test_baseunit.py
===================================================================
RCS file: /cvsroot/archetypes/Archetypes/tests/test_baseunit.py,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -d -r1.5 -r1.6
*** test_baseunit.py 3 Jul 2003 12:41:54 -0000 1.5
--- test_baseunit.py 8 Aug 2003 11:26:42 -0000 1.6
***************
*** 26,30 ****
else:
# Test was called by another test.
! _prefix = abspath(dirname(__file__))
class BaseUnitTest( unittest.TestCase ):
--- 26,30 ----
else:
# Test was called by another test.
! _prefix = abspath(dirname(__file__))
class BaseUnitTest( unittest.TestCase ):
Index: test_classgen.py
===================================================================
RCS file: /cvsroot/archetypes/Archetypes/tests/test_classgen.py,v
retrieving revision 1.11
retrieving revision 1.12
diff -C2 -d -r1.11 -r1.12
*** test_classgen.py 5 Jul 2003 15:14:26 -0000 1.11
--- test_classgen.py 8 Aug 2003 11:26:42 -0000 1.12
***************
*** 51,59 ****
! class Dummy(BaseContent):
def __init__(self, oid, init_transforms=0, **kwargs):
BaseContent.__init__(self, oid, **kwargs)
- self.mimetypes_registry = MimeTypesTool()
self.portal_transforms = TransformTool()
if init_transforms:
--- 51,68 ----
! class SiteProperties:
! default_charset = 'UTF-8'
! def getProperty(self, name, default=None):
! return getattr(self, name, default)
!
! class PortalProperties:
! site_properties = SiteProperties()
+ class Dummy(BaseContent):
+ portal_properties = PortalProperties()
+ mimetypes_registry = MimeTypesTool()
+
def __init__(self, oid, init_transforms=0, **kwargs):
BaseContent.__init__(self, oid, **kwargs)
self.portal_transforms = TransformTool()
if init_transforms:
***************
*** 61,64 ****
--- 70,76 ----
transforms.initialize(self.portal_transforms)
+ from Products.Archetypes.BaseUnit import BaseUnit
+ BaseUnit.portal_properties = PortalProperties()
+
def gen_dummy():
Dummy.schema = deepcopy(schema)
***************
*** 105,140 ****
def test_textfield(self):
obj = self._dummy
! obj.setAtextfield('Bla')
! self.failUnless(str(obj.getAtextfield()) == 'Bla')
def test_filefield(self):
obj = self._dummy
obj.setAfilefield('Bla')
! self.failUnless(str(obj.getAfilefield()) == 'Bla')
def test_linesfield(self):
obj = self._dummy
obj.setAlinesfield(['Bla', 'Ble', 'Bli'])
! self.failUnless(obj.getAlinesfield() == ['Bla', 'Ble', 'Bli'])
def test_datefield(self):
obj = self._dummy
obj.setAdatefield('2002/01/01')
! self.failUnless(obj.getAdatefield() == DateTime('2002/01/01'))
def test_objectfield(self):
obj = self._dummy
obj.setAnobjectfield('bla')
! self.failUnless(obj.getAnobjectfield() == 'bla')
def test_fixedpointfield(self):
obj = self._dummy
obj.setAfixedpointfield('26.05')
! self.failUnless(obj.getAfixedpointfield() == '26.05')
def test_writeonlyfield(self):
obj = self._dummy
obj.setAwriteonlyfield('bla')
! self.failUnless(obj.getRawAwriteonlyfield() == 'bla')
def tearDown( self ):
--- 117,152 ----
def test_textfield(self):
obj = self._dummy
! obj.setAtextfield('Bla', mimetype="text/plain")
! self.failUnlessEqual(str(obj.getAtextfield()), 'Bla')
def test_filefield(self):
obj = self._dummy
obj.setAfilefield('Bla')
! self.failUnlessEqual(str(obj.getAfilefield()), 'Bla')
def test_linesfield(self):
obj = self._dummy
obj.setAlinesfield(['Bla', 'Ble', 'Bli'])
! self.failUnlessEqual(obj.getAlinesfield(), ['Bla', 'Ble', 'Bli'])
def test_datefield(self):
obj = self._dummy
obj.setAdatefield('2002/01/01')
! self.failUnlessEqual(obj.getAdatefield(), DateTime('2002/01/01'))
def test_objectfield(self):
obj = self._dummy
obj.setAnobjectfield('bla')
! self.failUnlessEqual(obj.getAnobjectfield(), 'bla')
def test_fixedpointfield(self):
obj = self._dummy
obj.setAfixedpointfield('26.05')
! self.failUnlessEqual(obj.getAfixedpointfield(), '26.05')
def test_writeonlyfield(self):
obj = self._dummy
obj.setAwriteonlyfield('bla')
! self.failUnlessEqual(obj.getRawAwriteonlyfield(), 'bla')
def tearDown( self ):
Index: test_contenttype.py
===================================================================
RCS file: /cvsroot/archetypes/Archetypes/tests/test_contenttype.py,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** test_contenttype.py 23 Jun 2003 18:59:03 -0000 1.4
--- test_contenttype.py 8 Aug 2003 11:26:43 -0000 1.5
***************
*** 1,15 ****
- import Zope # Sigh, make product initialization happen
-
- try:
- Zope.startup()
- except: # Zope > 2.6
- pass
-
import unittest
from os import curdir
from os.path import join, abspath, dirname
! from Products.Archetypes.public import *
from test_classgen import Dummy, gen_dummy
try:
__file__
--- 1,11 ----
import unittest
from os import curdir
from os.path import join, abspath, dirname
!
! # this trigger zope imports
from test_classgen import Dummy, gen_dummy
+ from Products.Archetypes.public import *
+
try:
__file__
***************
*** 30,36 ****
def test_textfieldwithmime(self):
obj = self._dummy
! obj.setAtextfield('Bla', mimetype='text/restructured')
self.assertEqual(str(obj.getField('atextfield').getRaw(obj)), 'Bla')
! self.assertEqual(obj.getField('atextfield').getContentType(obj),
'text/restructured')
def test_textfieldwithmime2(self):
--- 26,32 ----
def test_textfieldwithmime(self):
obj = self._dummy
! obj.setAtextfield('Bla', mimetype='text/x-rst')
self.assertEqual(str(obj.getField('atextfield').getRaw(obj)), 'Bla')
! self.assertEqual(obj.getField('atextfield').getContentType(obj),
'text/x-rst')
def test_textfieldwithmime2(self):
***************
*** 55,61 ****
def test_filefieldwithmime(self):
obj = self._dummy
! obj.setAfilefield('Bla', mimetype='text/restructured')
self.assertEqual(str(obj.getAfilefield()), 'Bla')
! self.assertEqual(obj.getField('afilefield').getContentType(obj),
'text/restructured')
def test_filefieldwithmime2(self):
--- 51,57 ----
def test_filefieldwithmime(self):
obj = self._dummy
! obj.setAfilefield('Bla', mimetype='text/x-rst')
self.assertEqual(str(obj.getAfilefield()), 'Bla')
! self.assertEqual(obj.getField('afilefield').getContentType(obj),
'text/x-rst')
def test_filefieldwithmime2(self):
Index: test_fields.py
===================================================================
RCS file: /cvsroot/archetypes/Archetypes/tests/test_fields.py,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** test_fields.py 10 Jul 2003 21:19:14 -0000 1.2
--- test_fields.py 8 Aug 2003 11:26:43 -0000 1.3
***************
*** 1,10 ****
import unittest
!
! import Zope # Sigh, make product initialization happen
!
! try:
! Zope.startup()
! except: # Zope > 2.6
! pass
from Products.Archetypes.public import *
--- 1,5 ----
import unittest
! # trigger zope import
! from test_classgen import Dummy as BaseDummy
from Products.Archetypes.public import *
***************
*** 18,22 ****
import unittest
! fields = ['ObjectField', 'StringField', 'MetadataField',
'FileField', 'TextField', 'DateTimeField', 'LinesField',
'IntegerField', 'FloatField', 'FixedPointField',
--- 13,17 ----
import unittest
! fields = ['ObjectField', 'StringField',
'FileField', 'TextField', 'DateTimeField', 'LinesField',
'IntegerField', 'FloatField', 'FixedPointField',
***************
*** 54,58 ****
schema = Schema(tuple(field_instances))
! class Dummy(BaseContent):
schema = schema
--- 49,53 ----
schema = Schema(tuple(field_instances))
! class Dummy(BaseDummy):
schema = schema
***************
*** 90,93 ****
--- 85,89 ----
for k, v in expected_values.items():
got = dummy.Schema()[k].get(dummy)
+ print File, type(File)
if isinstance(got, File):
got = str(got)
Index: test_i18n_fields.py
===================================================================
RCS file: /cvsroot/archetypes/Archetypes/tests/test_i18n_fields.py,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** test_i18n_fields.py 3 Jul 2003 09:31:49 -0000 1.1
--- test_i18n_fields.py 8 Aug 2003 11:26:43 -0000 1.2
***************
*** 10,15 ****
--- 10,23 ----
from Products.Archetypes.Field import *
+ class SiteProperties:
+ default_charset = 'UTF-8'
+ def getProperty(self, name, default=None):
+ return getattr(self, name, default)
+
+ class PortalProperties:
+ site_properties = SiteProperties()
class Dummy:
+ portal_properties = PortalProperties()
def getContentLanguage(self, lang):
return lang or 'en'
***************
*** 22,29 ****
f = I18NStringField('test')
f.set(instance, 'english words', 'en')
! f.set(instance, 'mots français', 'fr')
self.assertEquals(f.get(instance), 'english words')
self.assertEquals(f.get(instance, 'en'), 'english words')
! self.assertEquals(f.get(instance, 'fr'), 'mots français')
--- 30,37 ----
f = I18NStringField('test')
f.set(instance, 'english words', 'en')
! f.set(instance, 'mots fran\xc3\xa7ais', 'fr')
self.assertEquals(f.get(instance), 'english words')
self.assertEquals(f.get(instance, 'en'), 'english words')
! self.assertEquals(f.get(instance, 'fr'), 'mots fran\xc3\xa7ais')
***************
*** 31,46 ****
f = I18NStringField('test')
f.set(instance, 'english words', 'en')
! f.set(instance, 'mots français', 'fr')
self.assertEquals(f.getRaw(instance), 'english words')
self.assertEquals(f.getRaw(instance, 'en'), 'english words')
! self.assertEquals(f.getRaw(instance, 'fr'), 'mots français')
def test_unset(self):
f = I18NStringField('test')
f.set(instance, 'english words', 'en')
! f.set(instance, 'mots français', 'fr')
f.unset(instance, 'en')
self.assertEquals(f.getRaw(instance, 'en'), '')
! self.assertEquals(f.getRaw(instance, 'fr'), 'mots français')
f.unset(instance, 'fr')
self.assertEquals(f.getRaw(instance, 'en'), '')
--- 39,54 ----
f = I18NStringField('test')
f.set(instance, 'english words', 'en')
! f.set(instance, 'mots fran\xc3\xa7ais', 'fr')
self.assertEquals(f.getRaw(instance), 'english words')
self.assertEquals(f.getRaw(instance, 'en'), 'english words')
! self.assertEquals(f.getRaw(instance, 'fr'), 'mots fran\xc3\xa7ais')
def test_unset(self):
f = I18NStringField('test')
f.set(instance, 'english words', 'en')
! f.set(instance, 'mots fran\xc3\xa7ais', 'fr')
f.unset(instance, 'en')
self.assertEquals(f.getRaw(instance, 'en'), '')
! self.assertEquals(f.getRaw(instance, 'fr'), 'mots fran\xc3\xa7ais')
f.unset(instance, 'fr')
self.assertEquals(f.getRaw(instance, 'en'), '')
Index: test_rename.py
===================================================================
RCS file: /cvsroot/archetypes/Archetypes/tests/test_rename.py,v
retrieving revision 1.7
retrieving revision 1.8
diff -C2 -d -r1.7 -r1.8
*** test_rename.py 10 Jul 2003 21:19:14 -0000 1.7
--- test_rename.py 8 Aug 2003 11:26:43 -0000 1.8
***************
*** 31,35 ****
doc = makeContent(site, portal_type='Fact', id=obj_id)
content = 'The book is on the table!'
! doc.setQuote(content)
self.failUnless(str(doc.getQuote()) == str(content))
#make sure we have _p_jar
--- 31,35 ----
doc = makeContent(site, portal_type='Fact', id=obj_id)
content = 'The book is on the table!'
! doc.setQuote(content, mimetype="text/plain")
self.failUnless(str(doc.getQuote()) == str(content))
#make sure we have _p_jar
Index: test_sitepolicy.py
===================================================================
RCS file: /cvsroot/archetypes/Archetypes/tests/test_sitepolicy.py,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** test_sitepolicy.py 10 Jul 2003 21:19:14 -0000 1.4
--- test_sitepolicy.py 8 Aug 2003 11:26:43 -0000 1.5
***************
*** 6,22 ****
import unittest
! import Zope
!
! try:
! Zope.startup()
! except: # Zope > 2.6
! pass
from Products.CMFCore.tests.base.testcase import SecurityRequestTest
from Products.CMFPlone.Portal import manage_addSite
from Acquisition import aq_base
def makeContent(site, portal_type, id='document', **kw ):
-
site.invokeFactory( type_name=portal_type, id=id )
content = getattr( site, id )
--- 6,18 ----
import unittest
! # trigger zope imports
! import test_classgen
from Products.CMFCore.tests.base.testcase import SecurityRequestTest
from Products.CMFPlone.Portal import manage_addSite
from Acquisition import aq_base
+ from Products.CMFDefault.DublinCore import DefaultDublinCoreImpl
def makeContent(site, portal_type, id='document', **kw ):
site.invokeFactory( type_name=portal_type, id=id )
content = getattr( site, id )
***************
*** 50,55 ****
demo_types = ['DDocument', 'SimpleType', 'Fact', 'ComplexType']
for t in demo_types:
! makeContent(site, portal_type=t, id=t)
self.failUnless(t in site.contentIds())
def test_suite():
--- 46,52 ----
demo_types = ['DDocument', 'SimpleType', 'Fact', 'ComplexType']
for t in demo_types:
! content = makeContent(site, portal_type=t, id=t)
self.failUnless(t in site.contentIds())
+ self.failUnless(not isinstance(content, DefaultDublinCoreImpl))
def test_suite():
Index: test_storage.py
===================================================================
RCS file: /cvsroot/archetypes/Archetypes/tests/test_storage.py,v
retrieving revision 1.9
retrieving revision 1.10
diff -C2 -d -r1.9 -r1.10
*** test_storage.py 3 Jun 2003 15:03:53 -0000 1.9
--- test_storage.py 8 Aug 2003 11:26:43 -0000 1.10
***************
*** 25,37 ****
def test_changestorage(self):
dummy = self._dummy
! dummy.setAtextfield('sometext')
dummy.setAdatefield('2003-01-01')
dummy.setAlinesfield(['bla','bla','bla'])
dummy.setAnobjectfield('someothertext')
! self.failUnless(str(dummy.getAtextfield()) == 'sometext')
! self.failUnless(dummy.getAdatefield() == DateTime('2003-01-01'))
! self.failUnless(dummy.getAlinesfield() == ['bla','bla','bla'])
! self.failUnless(dummy.getAnobjectfield() == 'someothertext')
for field in dummy.schema.fields():
--- 25,37 ----
def test_changestorage(self):
dummy = self._dummy
! dummy.setAtextfield('sometext', mimetype="text/plain")
dummy.setAdatefield('2003-01-01')
dummy.setAlinesfield(['bla','bla','bla'])
dummy.setAnobjectfield('someothertext')
! self.failUnlessEqual(str(dummy.getAtextfield()), 'sometext')
! self.failUnlessEqual(dummy.getAdatefield(), DateTime('2003-01-01'))
! self.failUnlessEqual(dummy.getAlinesfield(), ['bla','bla','bla'])
! self.failUnlessEqual(dummy.getAnobjectfield(), 'someothertext')
for field in dummy.schema.fields():
***************
*** 39,50 ****
self._old_storages[field.getName()] = field.getStorage()
field.setStorage(dummy, AttributeStorage())
! self.failUnless(field.getStorage().getName() ==
'AttributeStorage')
field.setStorage(dummy, MetadataStorage())
! self.failUnless(field.getStorage().getName() ==
'MetadataStorage')
! self.failUnless(str(dummy.getAtextfield()) == 'sometext')
! self.failUnless(dummy.getAdatefield() == DateTime('2003-01-01'))
! self.failUnless(dummy.getAlinesfield() == ['bla','bla','bla'])
! self.failUnless(dummy.getAnobjectfield() == 'someothertext')
def test_unset(self):
--- 39,50 ----
self._old_storages[field.getName()] = field.getStorage()
field.setStorage(dummy, AttributeStorage())
! self.failUnlessEqual(field.getStorage().getName(),
'AttributeStorage')
field.setStorage(dummy, MetadataStorage())
! self.failUnlessEqual(field.getStorage().getName(),
'MetadataStorage')
! self.failUnlessEqual(str(dummy.getAtextfield()), 'sometext')
! self.failUnlessEqual(dummy.getAdatefield(), DateTime('2003-01-01'))
! self.failUnlessEqual(dummy.getAlinesfield(), ['bla','bla','bla'])
! self.failUnlessEqual(dummy.getAnobjectfield(), 'someothertext')
def test_unset(self):
-------------------------------------------------------
This SF.Net email sponsored by: Free pre-built ASP.NET sites including
Data Reports, E-commerce, Portals, and Forums are available now.
Download today and enter to win an XBOX or Visual Studio .NET.
http://aspnet.click-url.com/go/psa00100003ave/direct;at.aspnet_072303_01/01
|