fix fnmatch.filter in non-posix system

filter should return original elements instead of modified normal
case elements.

Change-Id: I2c190f0b9a56738f7cdcd9ed06ef04b24f6c30c3
This commit is contained in:
ZhiQiang Fan 2015-12-14 22:52:49 +08:00
parent e46a46ba90
commit 95f3b068ee
2 changed files with 37 additions and 6 deletions

View File

@ -69,8 +69,8 @@ else:
filtered_filenames.append(filename)
else:
for filename in filenames:
filename = os.path.normcase(filename)
if cached_pattern.match(filename):
norm_name = os.path.normcase(filename)
if cached_pattern.match(norm_name):
filtered_filenames.append(filename)
return filtered_filenames

View File

@ -10,21 +10,52 @@
# License for the specific language governing permissions and limitations
# under the License.
from __future__ import absolute_import
import fnmatch as standard_fnmatch
import ntpath
import posixpath
import sys
import mock
from oslotest import base
from six.moves import reload_module
from oslo_utils import fnmatch
fnmatch = None
class TestFnmatch(base.BaseTestCase):
@mock.patch.object(sys, 'version_info', new=(2, 7, 0))
def test_fnmatch(self):
def _test_fnmatch(self):
self.assertFalse(fnmatch.fnmatch("tesX", "Test"))
self.assertTrue(fnmatch.fnmatch("test", "test"))
self.assertFalse(fnmatch.fnmatchcase("test", "Test"))
self.assertTrue(fnmatch.fnmatchcase("test", "test"))
self.assertTrue(fnmatch.fnmatch("testX", "test*"))
self.assertEqual(["test"], fnmatch.filter(["test", "testX"], "test"))
self.assertEqual(["Test"], fnmatch.filter(["Test", "TestX"], "Test"))
def _test_fnmatch_posix_nt(self):
with mock.patch("os.path", new=posixpath):
self.assertFalse(fnmatch.fnmatch("test", "Test"))
self._test_fnmatch()
with mock.patch("os.path", new=ntpath):
self._test_fnmatch()
self.assertTrue(fnmatch.fnmatch("test", "Test"))
self.assertEqual(["Test"],
fnmatch.filter(["Test", "TestX"], "test"))
def test_fnmatch(self):
global fnmatch
fnmatch = standard_fnmatch
self._test_fnmatch_posix_nt()
with mock.patch.object(sys, 'version_info', new=(2, 7, 11)):
from oslo_utils import fnmatch as oslo_fnmatch
fnmatch = oslo_fnmatch
self._test_fnmatch_posix_nt()
with mock.patch.object(sys, 'version_info', new=(2, 7, 0)):
reload_module(oslo_fnmatch)
self._test_fnmatch_posix_nt()