# Copyright 2018 The TensorFlow Hub Authors. All Rights Reserved.
#
# 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.
# ==============================================================================
"""Tests for tensorflow_hub.registry."""

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

import tensorflow as tf
from tensorflow_hub import registry


class TestImpl(object):

  def __init__(self, is_supported, execute):
    self._is_supported = is_supported
    self._execute = execute

  def is_supported(self, *args, **kwargs):
    return self._is_supported(*args, **kwargs)

  def __call__(self, *args, **kwargs):
    return self._execute(*args, **kwargs)


class RegistryTest(tf.test.TestCase):

  def testResolveInReverseOrder(self):
    def fail(_):
      raise AssertionError("should not be called")

    r = registry.MultiImplRegister("test")
    r.add_implementation(TestImpl(lambda _: True, lambda _: 0))
    r.add_implementation(TestImpl(lambda x: x == 1, lambda _: 100))
    r.add_implementation(TestImpl(lambda x: x == 2, fail))
    r.add_implementation(TestImpl(lambda x: x == 2, lambda _: 200))

    self.assertEqual(r(0), 0)
    self.assertEqual(r(1), 100)
    self.assertEqual(r(2), 200)


if __name__ == "__main__":
  tf.test.main()

@@ -1215,260 +1215,443 @@
 )%0A%0A%0A
-class RegistryTest(tf.test.TestCase):%0A%0A  def testResolveInReverseOrder(self):%0A    def fail(_):%0A      raise AssertionError(%22should not be called%22)%0A%0A    r = registry.MultiImplRegister(%22test%22)%0A    r.add_implementation(TestImpl(lambda _: True, lambda _: 0)
+def fail_fn(_):%0A  raise AssertionError(%22fail_fn should not be called%22)%0A%0A%0Aclass RegistryTest(tf.test.TestCase):%0A%0A  def testResolveAlwaysSupported(self):%0A    r = registry.MultiImplRegister(%22test%22)%0A    r.add_implementation(TestImpl(lambda _: True, lambda _: 100))%0A    r.add_implementation(TestImpl(lambda _: False, fail_fn))%0A%0A    self.assertEqual(r(1), 100)%0A%0A  def testResolveWhenSupported(self):%0A    r = registry.MultiImplRegister(%22test%22
 )%0A  
@@ -1720,67 +1720,8 @@
 0))%0A
-    r.add_implementation(TestImpl(lambda x: x == 2, fail))%0A
     
@@ -1783,16 +1783,77 @@
 _: 200))
+%0A    r.add_implementation(TestImpl(lambda _: False, fail_fn))
 %0A%0A    se
@@ -1873,12 +1873,14 @@
 l(r(
-0
+1
 ), 
+10
 0)%0A 
@@ -1897,32 +1897,242 @@
 sertEqual(r(
-1
+2
 ),
+ 200)%0A%0A  def testResolveInReverseOrder(self):%0A    r = registry.MultiImplRegister(%22test%22)%0A    r.add_implementation(TestImpl(lambda _: True, fail_fn))%0A    r.add_implementation(TestImpl(lambda _: True, lambda _:
  100)
+)%0A
 %0A    self.as
@@ -2143,23 +2143,321 @@
 Equal(r(
-2), 200
+1), 100)%0A%0A  def testResolveThrowsNoSupportedImplementation(self):%0A    r = registry.MultiImplRegister(%22test%22)%0A    r.add_implementation(TestImpl(lambda _: False, lambda _: 100))%0A%0A    self.assertRaisesRegex(%0A        RuntimeError,%0A        %22Missing implementation that supports: test%5C(%5C*%5C(1,%5C), %5C*%5C*%7B%7D%5C)%22, r, 1
 )%0A%0A%0Aif _

Refactor registry_test.py