text: #*****************************************************************************
  #   Copyright 2004-2008 Steve Menard
  #
  #   Licensed under the Apache License, Version 2.0 (the "License");
  #   you may not use this file except in compliance with the License.
  #   You may obtain a copy of the License at
  #
  #	   http://www.apache.org/licenses/LICENSE-2.0
  #
  #   Unless required by applicable law or agreed to in writing, software
  #   distributed under the License is distributed on an "AS IS" BASIS,
  #   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  #   See the License for the specific language governing permissions and
  #   limitations under the License.
  #   
  #*****************************************************************************
  import jpype
  from jpype import JString, java, JArray
  import unittest
  import common
  import time
  
  def suite() :
  	return unittest.makeSuite(AttributeTestCase)
  
  class AttributeTestCase(common.JPypeTestCase) :
  	def setUp(self) :
  		common.JPypeTestCase.setUp(self)
  		self.__jp = self.jpype.attr
  		
  	def testWithBufferStrategy(self):
  		j = jpype.JPackage("jpype").attr.ClassWithBuffer
  		print j
  		
  	def testCallOverloadedMethodWithCovariance(self):
  		# This is a JDk5-specific problem.
  		
  		h = jpype.java.lang.StringBuffer()
  		h.delete(0, 0)
  		
   	def testCallStaticString(self) :
   		h = self.__jp.Test1()	
   		v = h.testString(JString("abcd"), JString("abcde"))
   		
   		assert v[0] == 'abcd'
   		assert v[1] == 'abcde'
   		
   	def testCallStaticUnicodeString(self) :
   		h = self.__jp.Test1()	
   		v = h.testString(JString(u"abcd"), JString(u"abcde"))
   		
   		assert v[0] == 'abcd'
   		assert v[1] == 'abcde'
   
   	def testCallString(self) :
   		v = self.__jp.Test1.testStaticString("a", "b")
   		assert v[0] == 'a'
   		assert v[1] == 'b'
   
   	def testCallUnicodeString(self) :
   		v = self.__jp.Test1.testStaticString(u"a", u"b")
   		assert v[0] == 'a'
   		assert v[1] == 'b'
   
   	def testCallStringWithNone(self) :
   		v = self.__jp.Test1.testStaticString("a", None)
   		assert v[0] == 'a'
   		assert v[1] == None
   
   	def testWithHolder(self) :
   		print 'testWithHolder'
   		holder = self.__jp.Holder()
   		holder.f = "ffff"
   		assert holder.f == "ffff"
   		self.__jp.Test1.testStaticHolder(holder)
   	
   	def testWithSubHolder(self) :
   		h2 = self.__jp.SubHolder()
   		h2.f = "subholder"
   		self.__jp.Test1.testStaticHolder(h2)
   	
   	def testCallWithArray(self) :
   		h2 = self.__jp.Test1()
   		StringArray = JArray(JString)
   		v = StringArray(["Foo", "bar"])
   		t = self.__jp.Test1()
   		t.testStringArray(v)
   
   	def testGetStaticValue(self) :
   		assert str(self.__jp.Test1.objectValue) == "234"
   		
   	def testGetStaticByInstance(self) :
   		h = self.__jp.Test1()
   		assert str(h.objectValue) == "234"
   		
   	def testGetNonStatic(self) :
   		h = self.__jp.Test1()
   		assert h.stringValue == "Foo"
   
   	def testSetStaticValue(self) :
   		self.__jp.Test1.objectValue = java.lang.Integer(43)
   		assert str(self.__jp.Test1.objectValue) == "43"
   		self.__jp.Test1.reset()
   
   	def testSetNonStaticValue(self) :
   		h = self.__jp.Test1()
   		h.stringValue="bar"
   		assert h.stringValue == "bar"
   
   	def testReturnSubClass(self) :
   		h = self.__jp.Test1()
   		v = h.getSubClass()
   		assert isinstance(v, self.__jp.SubHolder)
   		
   	def testCallWithClass(self) :
   		h = self.__jp.Test1()
   		h.callWithClass(java.lang.Comparable)
   		
   	def testCallSuperclassMethod(self) :
   		h = self.__jp.Test2()
   		h.test2Method()
   		h.test1Method()		
   		
   	def testCallWithLong(self) :
   		h = self.__jp.Test1()
   		l = long(123)
   		
   		h.setByte(l)
   		h.setShort(l)
   		h.setInt(l)
   		
   	def testCharAttribute(self) :
   		h = self.__jp.Test1()
   		h.charValue = u'b'
   		
   		print h.charValue
   		print repr(h.charValue)
   		
   		assert h.charValue == u'b'
   		
   	def testGetPrimitiveType(self) :
   		Integer = jpype.JClass("java.lang.Integer")
   		intType = Integer.TYPE
   		
   	def testDifferentiateClassAndObject(self) :
   		h = self.__jp.Test1()
   		
   		assert h.callWithSomething(self.__jp.Test1) == u"Class"
   		assert h.callWithSomething(jpype.JObject(self.__jp.Test1, jpype.java.lang.Object)) == u"Object"
  
   	def testToString(self):
   		h = self.__jp.Test1()
   		assert str(h) == 'aaa'
   
   	def testSuperToString(self):
   		h = self.__jp.Test2()
   		print h
   		assert str(h) == 'aaa'
   		del h
  		
  #	def testStringToConversion(self):
  #		try :
  #			jpype.ConversionConfig.string = False
  #			for i in range(1) :
  #				h = self.__jp.Test1()
  #				
  #				start = time.time();
  #				for j in range(10):
  #					ts = h.getBigString()
  #				stop = time.time()
  #				print ts.__class__, (stop-start), 'ms'
  #				
  #				# for comparison ... convert a string to JStrng and back
  #				s = "".join([" "]*1024*1024*5)
  #				start = time.time()
  #				js = JString(s)
  #				stop = time.time()
  #				print "converted to JString in", (stop-start), 'ms', len(s)
  #				
  #				start = time.time()
  #				cs = str(JString(s))
  #				print cs
  #				print "converted to String in", (stop-start), 'ms', len(cs), cs
  #		finally :
  #			jpype.ConversionConfig.string = True
  		
  		
  		