Index: tools/telemetry/third_party/mox3/mox3/stubout.py |
diff --git a/tools/telemetry/third_party/mox3/mox3/stubout.py b/tools/telemetry/third_party/mox3/mox3/stubout.py |
deleted file mode 100644 |
index a02ed400aea86c95c4a5cb90e5a761df906f93be..0000000000000000000000000000000000000000 |
--- a/tools/telemetry/third_party/mox3/mox3/stubout.py |
+++ /dev/null |
@@ -1,152 +0,0 @@ |
-# Copyright 2008 Google Inc. |
-# |
-# Licensed under the Apache License, Version 2.0 (the "License"); |
-# you may not use this file except in compliance with the License. |
-# You may obtain a copy of the License at |
-# |
-# http://www.apache.org/licenses/LICENSE-2.0 |
-# |
-# Unless required by applicable law or agreed to in writing, software |
-# distributed under the License is distributed on an "AS IS" BASIS, |
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
-# See the License for the specific language governing permissions and |
-# limitations under the License. |
-# |
-# This is a fork of the pymox library intended to work with Python 3. |
-# The file was modified by quermit@gmail.com and dawid.fatyga@gmail.com |
- |
-import inspect |
- |
- |
-class StubOutForTesting(object): |
- """Sample Usage: |
- |
- You want os.path.exists() to always return true during testing. |
- |
- stubs = StubOutForTesting() |
- stubs.Set(os.path, 'exists', lambda x: 1) |
- ... |
- stubs.UnsetAll() |
- |
- The above changes os.path.exists into a lambda that returns 1. Once |
- the ... part of the code finishes, the UnsetAll() looks up the old value |
- of os.path.exists and restores it. |
- |
- """ |
- def __init__(self): |
- self.cache = [] |
- self.stubs = [] |
- |
- def __del__(self): |
- self.SmartUnsetAll() |
- self.UnsetAll() |
- |
- def SmartSet(self, obj, attr_name, new_attr): |
- """Replace obj.attr_name with new_attr. |
- |
- This method is smart and works at the module, class, and instance level |
- while preserving proper inheritance. It will not stub out C types |
- however unless that has been explicitly allowed by the type. |
- |
- This method supports the case where attr_name is a staticmethod or a |
- classmethod of obj. |
- |
- Notes: |
- - If obj is an instance, then it is its class that will actually be |
- stubbed. Note that the method Set() does not do that: if obj is |
- an instance, it (and not its class) will be stubbed. |
- - The stubbing is using the builtin getattr and setattr. So, the |
- __get__ and __set__ will be called when stubbing (TODO: A better |
- idea would probably be to manipulate obj.__dict__ instead of |
- getattr() and setattr()). |
- |
- Raises AttributeError if the attribute cannot be found. |
- """ |
- if (inspect.ismodule(obj) or |
- (not inspect.isclass(obj) and attr_name in obj.__dict__)): |
- orig_obj = obj |
- orig_attr = getattr(obj, attr_name) |
- |
- else: |
- if not inspect.isclass(obj): |
- mro = list(inspect.getmro(obj.__class__)) |
- else: |
- mro = list(inspect.getmro(obj)) |
- |
- mro.reverse() |
- |
- orig_attr = None |
- |
- for cls in mro: |
- try: |
- orig_obj = cls |
- orig_attr = getattr(obj, attr_name) |
- except AttributeError: |
- continue |
- |
- if orig_attr is None: |
- raise AttributeError("Attribute not found.") |
- |
- # Calling getattr() on a staticmethod transforms it to a 'normal' |
- # function. We need to ensure that we put it back as a staticmethod. |
- old_attribute = obj.__dict__.get(attr_name) |
- if (old_attribute is not None |
- and isinstance(old_attribute, staticmethod)): |
- orig_attr = staticmethod(orig_attr) |
- |
- self.stubs.append((orig_obj, attr_name, orig_attr)) |
- setattr(orig_obj, attr_name, new_attr) |
- |
- def SmartUnsetAll(self): |
- """Reverses all the SmartSet() calls. |
- |
- Restores things to their original definition. Its okay to call |
- SmartUnsetAll() repeatedly, as later calls have no effect if no |
- SmartSet() calls have been made. |
- """ |
- self.stubs.reverse() |
- |
- for args in self.stubs: |
- setattr(*args) |
- |
- self.stubs = [] |
- |
- def Set(self, parent, child_name, new_child): |
- """Replace child_name's old definition with new_child. |
- |
- Replace definiion in the context of the given parent. The parent could |
- be a module when the child is a function at module scope. Or the parent |
- could be a class when a class' method is being replaced. The named |
- child is set to new_child, while the prior definition is saved away |
- for later, when UnsetAll() is called. |
- |
- This method supports the case where child_name is a staticmethod or a |
- classmethod of parent. |
- """ |
- old_child = getattr(parent, child_name) |
- |
- old_attribute = parent.__dict__.get(child_name) |
- if old_attribute is not None: |
- if isinstance(old_attribute, staticmethod): |
- old_child = staticmethod(old_child) |
- elif isinstance(old_attribute, classmethod): |
- old_child = classmethod(old_child.__func__) |
- |
- self.cache.append((parent, old_child, child_name)) |
- setattr(parent, child_name, new_child) |
- |
- def UnsetAll(self): |
- """Reverses all the Set() calls. |
- |
- Restores things to their original definition. Its okay to call |
- UnsetAll() repeatedly, as later calls have no effect if no Set() |
- calls have been made. |
- """ |
- # Undo calls to Set() in reverse order, in case Set() was called on the |
- # same arguments repeatedly (want the original call to be last one |
- # undone) |
- self.cache.reverse() |
- |
- for (parent, old_child, child_name) in self.cache: |
- setattr(parent, child_name, old_child) |
- self.cache = [] |