diff --git a/org.springframework.beans/src/test/java/org/springframework/beans/factory/config/PropertyPlaceholderConfigurerTests.java b/org.springframework.beans/src/test/java/org/springframework/beans/factory/config/PropertyPlaceholderConfigurerTests.java index 76743d58450..c0c65711bc2 100644 --- a/org.springframework.beans/src/test/java/org/springframework/beans/factory/config/PropertyPlaceholderConfigurerTests.java +++ b/org.springframework.beans/src/test/java/org/springframework/beans/factory/config/PropertyPlaceholderConfigurerTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2010 the original author or authors. + * Copyright 2002-2011 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -31,7 +31,6 @@ import java.util.Properties; import org.junit.After; import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; import org.springframework.beans.factory.support.AbstractBeanDefinition; import org.springframework.beans.factory.support.DefaultListableBeanFactory; @@ -229,7 +228,6 @@ public class PropertyPlaceholderConfigurerTests { assertThat(bf.getBean(TestBean.class).getSex(), is("${key2}")); } - @Ignore // fails on windows @Test public void nullValueIsPreserved() { PropertyPlaceholderConfigurer ppc = new PropertyPlaceholderConfigurer(); @@ -247,6 +245,7 @@ public class PropertyPlaceholderConfigurerTests { @SuppressWarnings("unchecked") private static Map getModifiableSystemEnvironment() { + // for os x / linux Class[] classes = Collections.class.getDeclaredClasses(); Map env = System.getenv(); for (Class cl : classes) { @@ -255,12 +254,45 @@ public class PropertyPlaceholderConfigurerTests { Field field = cl.getDeclaredField("m"); field.setAccessible(true); Object obj = field.get(env); - return (Map) obj; + if (obj != null && obj.getClass().getName().equals("java.lang.ProcessEnvironment$StringEnvironment")) { + return (Map) obj; + } } catch (Exception ex) { throw new RuntimeException(ex); } } } + + // for windows + Class processEnvironmentClass; + try { + processEnvironmentClass = Class.forName("java.lang.ProcessEnvironment"); + } catch (Exception e) { + throw new RuntimeException(e); + } + + try { + Field theCaseInsensitiveEnvironmentField = processEnvironmentClass.getDeclaredField("theCaseInsensitiveEnvironment"); + theCaseInsensitiveEnvironmentField.setAccessible(true); + Object obj = theCaseInsensitiveEnvironmentField.get(null); + return (Map) obj; + } catch (NoSuchFieldException e) { + // do nothing + } catch (Exception e) { + throw new RuntimeException(e); + } + + try { + Field theEnvironmentField = processEnvironmentClass.getDeclaredField("theEnvironment"); + theEnvironmentField.setAccessible(true); + Object obj = theEnvironmentField.get(null); + return (Map) obj; + } catch (NoSuchFieldException e) { + // do nothing + } catch (Exception e) { + throw new RuntimeException(e); + } + throw new IllegalStateException(); } } diff --git a/org.springframework.core/src/test/java/org/springframework/core/env/EnvironmentTests.java b/org.springframework.core/src/test/java/org/springframework/core/env/EnvironmentTests.java index e6be258a6f0..cf386c641f1 100644 --- a/org.springframework.core/src/test/java/org/springframework/core/env/EnvironmentTests.java +++ b/org.springframework.core/src/test/java/org/springframework/core/env/EnvironmentTests.java @@ -39,7 +39,6 @@ import java.util.Arrays; import java.util.Collections; import java.util.Map; -import org.junit.Ignore; import org.junit.Test; import org.springframework.mock.env.MockPropertySource; @@ -175,7 +174,6 @@ public class EnvironmentTests { assertThat(environment.acceptsProfiles("p1"), is(true)); } - @Ignore // fails on windows @Test public void getSystemProperties_withAndWithoutSecurityManager() { System.setProperty(ALLOWED_PROPERTY_NAME, ALLOWED_PROPERTY_VALUE); @@ -293,6 +291,7 @@ public class EnvironmentTests { @SuppressWarnings("unchecked") private static Map getModifiableSystemEnvironment() { + // for os x / linux Class[] classes = Collections.class.getDeclaredClasses(); Map env = System.getenv(); for (Class cl : classes) { @@ -301,12 +300,45 @@ public class EnvironmentTests { Field field = cl.getDeclaredField("m"); field.setAccessible(true); Object obj = field.get(env); - return (Map) obj; + if (obj != null && obj.getClass().getName().equals("java.lang.ProcessEnvironment$StringEnvironment")) { + return (Map) obj; + } } catch (Exception ex) { throw new RuntimeException(ex); } } } + + // for windows + Class processEnvironmentClass; + try { + processEnvironmentClass = Class.forName("java.lang.ProcessEnvironment"); + } catch (Exception e) { + throw new RuntimeException(e); + } + + try { + Field theCaseInsensitiveEnvironmentField = processEnvironmentClass.getDeclaredField("theCaseInsensitiveEnvironment"); + theCaseInsensitiveEnvironmentField.setAccessible(true); + Object obj = theCaseInsensitiveEnvironmentField.get(null); + return (Map) obj; + } catch (NoSuchFieldException e) { + // do nothing + } catch (Exception e) { + throw new RuntimeException(e); + } + + try { + Field theEnvironmentField = processEnvironmentClass.getDeclaredField("theEnvironment"); + theEnvironmentField.setAccessible(true); + Object obj = theEnvironmentField.get(null); + return (Map) obj; + } catch (NoSuchFieldException e) { + // do nothing + } catch (Exception e) { + throw new RuntimeException(e); + } + throw new IllegalStateException(); } }