use strict ;
use Test ;

use Inline Config => 
           DIRECTORY => './_Inline_test';

use Inline(
	Java => 'DATA'
) ;


BEGIN {
	plan(tests => 10) ;
}


# Methods
ok(p06::types6->get("key"), undef) ;
my $t = new p06::types6("key", "value") ;

{
	ok($t->get("key"), "value") ;
	
	# Members
	ok($p06::types6::i == 5) ;
	$p06::types6::i = 7 ;
	ok($t->{i} == 7) ;
	
	my $t2 = new p06::types6("key2", "value2") ;
	my $hm = $p06::types6::hm ;
	$p06::types6::hm = undef ;
	ok(p06::types6->get($hm, "key2"), "value2") ;
	
	$p06::types6::hm = $hm ;
	ok($t2->get("key2"), "value2") ;
	
	# Calling an instance method without an object reference
	eval {p06::types6->set()} ; ok($@, qr/must be called from an object reference/) ;

	# Put in back like before...
	$p06::types6::i = 5 ;
	ok($p06::types6::i == 5) ;
	my $tt = new p06::types6("key", undef) ;
	ok($tt->get("key"), undef) ;
}

# Since $types::hm was returned to the Perl space, it was registered in the object 
# HashMap.
ok($t->__get_private()->{proto}->ObjectCount(), 2) ;


__END__

__Java__


// package test 
package p06 ;


import java.util.* ;


public class types6 {
	public static int i = 5 ;
	public static HashMap hm = new HashMap() ;

	public types6(String k, String v){
		hm.put(k, v) ;
	}

	public static String get(String k){
		return (String)hm.get(k) ; 
	}

	public static String get(HashMap h, String k){
		return (String)h.get(k) ; 
	}

	public String set(){
		return "set" ;
	}
}

