public inbox for frysk-cvs@sourceware.org
help / color / mirror / Atom feed
* [SCM]  master: Add test for Environ.
@ 2008-05-08 15:54 scox
  0 siblings, 0 replies; only message in thread
From: scox @ 2008-05-08 15:54 UTC (permalink / raw)
  To: frysk-cvs

The branch, master has been updated
       via  b43f15763a7f3a1a2582e3bb48e3e5e6d980e0ea (commit)
      from  877c48d4c0643b1841a1f9a962389807d793018f (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email.

- Log -----------------------------------------------------------------
commit b43f15763a7f3a1a2582e3bb48e3e5e6d980e0ea
Author: Stan Cox <scox@redhat.com>
Date:   Thu May 8 11:52:01 2008 -0400

    Add test for Environ.
    
    * Environ.java (Environ(long)): New.
    (getEnvHash): New.
    * cni/Environ.cxx (getEnvironment(long)): New.
    (putEnvironment): Fix off by one error.
    * TestEnviron.java: New.

-----------------------------------------------------------------------

Summary of changes:
 frysk-sys/frysk/sys/ChangeLog                      |    8 +++
 frysk-sys/frysk/sys/Environ.java                   |   20 +++++++-
 .../sys/{cni/Environ.cxx => TestEnviron.java}      |   55 ++++++++++----------
 frysk-sys/frysk/sys/cni/Environ.cxx                |   12 ++++-
 4 files changed, 65 insertions(+), 30 deletions(-)
 copy frysk-sys/frysk/sys/{cni/Environ.cxx => TestEnviron.java} (68%)

First 500 lines of diff:
diff --git a/frysk-sys/frysk/sys/ChangeLog b/frysk-sys/frysk/sys/ChangeLog
index 7478218..8de64b6 100644
--- a/frysk-sys/frysk/sys/ChangeLog
+++ b/frysk-sys/frysk/sys/ChangeLog
@@ -1,3 +1,11 @@
+2008-05-08  Stan Cox  <scox@redhat.com>
+
+	* Environ.java (Environ(long)): New.
+	(getEnvHash): New.
+	* cni/Environ.cxx (getEnvironment(long)): New.
+	(putEnvironment): Fix off by one error.
+	* TestEnviron.java: New.
+
 2008-05-07  Andrew Cagney  <cagney@redhat.com>
 
 	* jni/AuditLibs.cxx: Include jni.hxx; fully qualify jnixx::env.
diff --git a/frysk-sys/frysk/sys/Environ.java b/frysk-sys/frysk/sys/Environ.java
index 328eab1..ffbec15 100644
--- a/frysk-sys/frysk/sys/Environ.java
+++ b/frysk-sys/frysk/sys/Environ.java
@@ -1,6 +1,6 @@
 // This file is part of the program FRYSK.
 //
-// Copyright 2007 Red Hat Inc.
+// Copyright 2008 Red Hat Inc.
 //
 // FRYSK is free software; you can redistribute it and/or modify it
 // under the terms of the GNU General Public License as published by
@@ -58,6 +58,23 @@ public class Environ
     }
     
     /**
+     * Construct an environment hash given an existing environ.  Used for testing
+     */
+    Environ (long environ)
+    {
+	env = new HashMap();   
+	getEnvironment(environ);
+    }
+    
+    /**
+     * Get the environment hash.  Used for testing
+     * @return the array of environment values.
+     */
+    HashMap getEnvHash() {
+	return env;
+    }
+    
+    /**
      * Get an environment variable.
      * @param name is the environment variable name.
      * @return the value of the variable.
@@ -106,5 +123,6 @@ public class Environ
     }
 
     native void getEnvironment();
+    native void getEnvironment(long environ);
     native long putEnvironment(Object[] envs);
 }
diff --git a/frysk-sys/frysk/sys/cni/Environ.cxx b/frysk-sys/frysk/sys/TestEnviron.java
similarity index 68%
copy from frysk-sys/frysk/sys/cni/Environ.cxx
copy to frysk-sys/frysk/sys/TestEnviron.java
index 9772dfd..4a5e050 100644
--- a/frysk-sys/frysk/sys/cni/Environ.cxx
+++ b/frysk-sys/frysk/sys/TestEnviron.java
@@ -37,37 +37,36 @@
 // version and license this file solely under the GPL without
 // exception.
 
-#include <gcj/cni.h>
+package frysk.sys;
 
-#include "frysk/sys/Environ.h"
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Set;
 
+import frysk.junit.TestCase;
 
-void
-frysk::sys::Environ::getEnvironment()
-{
-  extern char **environ;
-  int env_idx;
+/**
+ * Test environ support
+ */
+public class TestEnviron extends TestCase {
 
-  for (env_idx = 0; environ[env_idx]; env_idx++) 
-    frysk::sys::Environ::addEnviron (JvNewStringUTF (environ[env_idx]));
-}
-
-char **new_environ;
-
-jlong
-frysk::sys::Environ::putEnvironment(jobjectArray envs)
-{
-  jstring* env_member = (jstring*)elements(envs);
-  int envs_length = JvGetArrayLength(envs);
-  new_environ = (char**)JvMalloc(sizeof(void*) * envs_length);
-  for (int i = 0; i < envs_length; i++) 
-    {
-      int sym_len = env_member[i]->length ();
-      char *sym = (char*)JvMalloc(sym_len + 1);
-      JvGetStringUTFRegion (env_member[i], 0, sym_len, sym);
-      sym[sym_len] = '\0';
-      new_environ[i] = sym;
+    public void testEnviron() {
+        Environ env1 = new Environ();
+        // Grab the environment hash table
+	HashMap env1Hash = env1.getEnvHash();
+	Set env1Keys = env1Hash.keySet();
+	// Load the environment from the environment hash table
+	long environ = env1.putEnviron();
+	// Create a new environment hash table from that environment
+	Environ env2 = new Environ(environ);
+	HashMap env2Hash = env2.getEnvHash();
+	
+	// Ensure that both environment hash tables match
+        Iterator iterator = env1Keys.iterator();
+        while(iterator.hasNext()){
+            String key = (String) iterator.next();
+            assertTrue ("env value test fails for key=" + key, 
+        	    ((String)env1Hash.get(key)).compareTo((String)env2Hash.get(key)) == 0);
+        }
     }
-  new_environ[envs_length] = NULL;
-  return (jlong)new_environ;
 }
diff --git a/frysk-sys/frysk/sys/cni/Environ.cxx b/frysk-sys/frysk/sys/cni/Environ.cxx
index 9772dfd..839a861 100644
--- a/frysk-sys/frysk/sys/cni/Environ.cxx
+++ b/frysk-sys/frysk/sys/cni/Environ.cxx
@@ -52,6 +52,16 @@ frysk::sys::Environ::getEnvironment()
     frysk::sys::Environ::addEnviron (JvNewStringUTF (environ[env_idx]));
 }
 
+void
+frysk::sys::Environ::getEnvironment(jlong environ_p)
+{
+  int env_idx;
+  char ** environ = (char **) environ_p;
+
+  for (env_idx = 0; environ[env_idx]; env_idx++) 
+    frysk::sys::Environ::addEnviron (JvNewStringUTF (environ[env_idx]));
+}
+
 char **new_environ;
 
 jlong
@@ -59,7 +69,7 @@ frysk::sys::Environ::putEnvironment(jobjectArray envs)
 {
   jstring* env_member = (jstring*)elements(envs);
   int envs_length = JvGetArrayLength(envs);
-  new_environ = (char**)JvMalloc(sizeof(void*) * envs_length);
+  new_environ = (char**)JvMalloc(sizeof(void*) * (envs_length + 1));
   for (int i = 0; i < envs_length; i++) 
     {
       int sym_len = env_member[i]->length ();


hooks/post-receive
--
frysk system monitor/debugger


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2008-05-08 15:54 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-05-08 15:54 [SCM] master: Add test for Environ scox

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).