2 require_once 'include/SugarObjects/SugarConfig.php';
4 class SugarConfigTest extends Sugar_PHPUnit_Framework_TestCase
6 private $_old_sugar_config = null;
8 public function setUp()
10 $this->_old_sugar_config = $GLOBALS['sugar_config'];
11 $GLOBALS['sugar_config'] = array();
14 public function tearDown()
16 $config = SugarConfig::getInstance();
17 $config->clearCache();
18 $GLOBALS['sugar_config'] = $this->_old_sugar_config;
22 * Stores a key/value pair in the config
24 * @internal override this in sub-classes if you are testing with the
25 * config data stored somewhere other than the $sugar_config
28 * @param string $value
30 private function _addKeyValueToConfig(
35 $GLOBALS['sugar_config'][$key] = $value;
38 private function _generateRandomValue()
40 $this->_random = 'Some Random Foobar: ' . rand(10000, 20000);
41 return $this->_getLastRandomValue();
44 private function _getLastRandomValue()
46 return $this->_random;
49 public function testGetInstanceReturnsASugarConfigObject()
51 $this->assertTrue(SugarConfig::getInstance() instanceOf SugarConfig, 'Returned object is not a SugarConfig object');
54 public function testGetInstanceReturnsASingleton()
56 $one = SugarConfig::getInstance();
57 $two = SugarConfig::getInstance();
58 $this->assertSame($one, $two);
61 public function testReadsGlobalSugarConfigArray()
63 for ($i = 0; $i < 10; $i++) {
64 $anonymous_key = 'key-' . $i;
65 $random_value = rand(10000, 20000);
66 $rawConfigArray[$anonymous_key] = $random_value;
67 $this->_addKeyValueToConfig($anonymous_key, $random_value);
70 $config = SugarConfig::getInstance();
71 foreach ($rawConfigArray as $key => $value) {
73 $config->get($key), $value,
74 "SugarConfig::get({$key}) should be equal to {$value}, got " . $config->get($key)
79 public function testAllowDotNotationForSubValuesWithinTheConfig()
81 $random_value = 'Some Random Integer: ' . rand(1000, 2000);
82 $this->_addKeyValueToConfig('grandparent', array(
84 'child' => $random_value,
88 $config = SugarConfig::getInstance();
89 $this->assertEquals($random_value, $config->get('grandparent.parent.child'));
92 public function testReturnsNullOnUnknownKey()
94 $config = SugarConfig::getInstance();
95 $this->assertNull($config->get('unknown-and-unknowable'));
98 public function testReturnsNullOnUnknownKeyWithinAHeirarchy()
100 $this->_addKeyValueToConfig('grandparent', array(
105 $config= SugarConfig::getInstance();
107 $this->assertNull($config->get('some-unknown-grandparent.parent.child'));
108 $this->assertNull($config->get('grandparent.some-unknown-parent.child'));
109 $this->assertNull($config->get('grandparent.parent.some-unknown-child'));
112 public function testAllowSpecifyingDefault()
114 $config = SugarConfig::getInstance();
116 $random = rand(10000, 20000);
117 $this->assertSame($random, $config->get('unknown-and-unknowable', $random));
120 public function testAllowSpecifyingDefaultForSubValues()
122 $this->_addKeyValueToConfig('grandparent', array(
127 $config = SugarConfig::getInstance();
130 $this->_generateRandomValue(),
132 'some-unknown-grandparent.parent.child',
133 $this->_getLastRandomValue()
137 $this->_generateRandomValue(),
139 'grandparent.some-unknown-parent.child',
140 $this->_getLastRandomValue()
144 $this->_generateRandomValue(),
146 'grandparent.parent.some-unknown-child',
147 $this->_getLastRandomValue()
152 public function testStoresValuesInMemoryAfterFirstLookup()
154 $this->_addKeyValueToConfig('foobar', 'barfoo');
156 $config = SugarConfig::getInstance();
157 $this->assertEquals($config->get('foobar'), 'barfoo');
159 $this->_addKeyValueToConfig('foobar', 'foobar');
160 $this->assertEquals($config->get('foobar'), 'barfoo', 'should still be equal "barfoo": got ' . $config->get('foobar'));
163 public function testCanClearsCachedValues()
165 $this->_addKeyValueToConfig('foobar', 'barfoo');
167 $config = SugarConfig::getInstance();
168 $this->assertEquals($config->get('foobar'), 'barfoo', 'sanity check');
169 $this->_addKeyValueToConfig('foobar', 'foobar');
170 $this->assertEquals($config->get('foobar'), 'barfoo', 'sanity check');
172 $config->clearCache();
173 $this->assertEquals($config->get('foobar'), 'foobar', 'after clearCache() call, new value should be used');
176 public function testCanCherryPickKeyToClear()
178 $this->_addKeyValueToConfig('foobar', 'barfoo');
179 $this->_addKeyValueToConfig('barfoo', 'barfoo');
181 $config = SugarConfig::getInstance();
182 $this->assertEquals($config->get('foobar'), 'barfoo', 'sanity check, got: ' . $config->get('foobar'));
183 $this->assertEquals($config->get('barfoo'), 'barfoo', 'sanity check');
185 $this->_addKeyValueToConfig('foobar', 'foobar');
186 $this->_addKeyValueToConfig('barfoo', 'foobar');
187 $this->assertEquals($config->get('foobar'), 'barfoo', 'should still be equal to "barfoo", got: ' . $config->get('barfoo'));
188 $this->assertEquals($config->get('barfoo'), 'barfoo', 'should still be equal to "barfoo", got: ' . $config->get('barfoo'));
190 $config->clearCache('barfoo');
191 $this->assertEquals($config->get('barfoo'), 'foobar', 'should be equal to "foobar" after cherry picked for clearing');
192 $this->assertEquals($config->get('foobar'), 'barfoo', 'should not be effected by cherry picked clearCache() call');
195 public function testDemonstrateGrabbingSiblingNodes()
197 $this->_addKeyValueToConfig('foobar', array(
208 $config = SugarConfig::getInstance();
209 $this->assertEquals($config->get('foobar.foo.0.first'), 'one');
210 $this->assertEquals($config->get('foobar.foo.1.first'), 'uno');