def setUp(self): package_options = PackageOptions.loads("""{static: [True, False], optimized: [2, 3, 4], path: ANY}""") package_options.values = Values.loads( "static=True\noptimized=3\npath=NOTDEF") self.sut = Options(package_options)
def setUp(self): package_options = PackageOptions.loads("""{static: [True, False], optimized: [2, 3, 4], path: ANY}""") values = PackageOptionValues() values.add_option("static", True) values.add_option("optimized", 3) values.add_option("path", "NOTDEF") package_options.values = values self.sut = Options(package_options)
def test_propagate_in_options(self): package_options = PackageOptions.loads("""{opt: [None, "a", "b"],}""") values = PackageOptionValues() values.add_option("opt", "a") package_options.values = values sut = Options(package_options) other_options = PackageOptionValues() other_options.add_option("opt", None) options = {"whatever.*": other_options} down_ref = ConanFileReference.loads("Boost.Assert/0.1@diego/testing") own_ref = ConanFileReference.loads("Boost.Assert/0.1@diego/testing") sut.propagate_upstream(options, down_ref, own_ref) self.assertEqual(sut.values.as_list(), [("opt", "a"), ("whatever.*:opt", "None"), ])
def test_in(self): package_options = PackageOptions.loads("{static: [True, False]}") sut = Options(package_options) self.assertTrue("static" in sut) self.assertFalse("shared" in sut) self.assertTrue("shared" not in sut) self.assertFalse("static" not in sut)
def setUp(self): self.test_folder = temp_folder() self.layout_filepath = os.path.join(self.test_folder, "layout") self.editable_cpp_info = EditableLayout(self.layout_filepath) self.settings = Settings.loads(get_default_settings_yml()) self.options = Options(PackageOptions({"shared": [True, False]}))
def create_options(conanfile): try: package_options = PackageOptions(getattr(conanfile, "options", None)) options = Options(package_options) default_options = getattr(conanfile, "default_options", None) if default_options: if isinstance(default_options, (list, tuple)): default_values = OptionsValues(default_options) elif isinstance(default_options, str): default_values = OptionsValues.loads(default_options) else: raise ConanException("Please define your default_options as list or " "multiline string") options.values = default_values return options except Exception as e: raise ConanException("Error while initializing options. %s" % str(e))
def create_options(conanfile): try: package_options = PackageOptions(getattr(conanfile, "options", None)) options = Options(package_options) default_options = getattr(conanfile, "default_options", None) if default_options: if isinstance(default_options, (list, tuple, dict)): default_values = OptionsValues(default_options) elif isinstance(default_options, str): default_values = OptionsValues.loads(default_options) else: raise ConanException("Please define your default_options as list, " "multiline string or dictionary") options.values = default_values return options except Exception as e: raise ConanException("Error while initializing options. %s" % str(e))
def setUp(self): package_options = PackageOptions.loads("""{static: [True, False], optimized: [2, 3, 4], path: ANY}""") values = PackageOptionValues() values.add_option("static", True) values.add_option("optimized", 3) values.add_option("path", "NOTDEF") package_options.values = values self.sut = Options(package_options)
def __init__(self, shared=None): self.command = None self.path = None self.conanfile_directory = "." self.source_folder = self.build_folder = "." self.settings = None self.options = Options(PackageOptions.loads("")) self.deps_cpp_info = namedtuple("deps_cpp_info", "sysroot")("/path/to/sysroot") self.output = TestBufferConanOutput() if shared is not None: self.options = namedtuple("options", "shared")(shared)
def __init__(self, shared=None): self.command = None self.path = None self.source_folder = self.build_folder = "." self.settings = None self.options = Options(PackageOptions.loads("")) self.deps_cpp_info = namedtuple("deps_cpp_info", "sysroot")("/path/to/sysroot") self.output = TestBufferConanOutput() self.in_local_cache = False self.install_folder = "myinstallfolder" if shared is not None: self.options = namedtuple("options", "shared")(shared)
def create_options(conanfile): try: package_options = PackageOptions(getattr(conanfile, "options", None)) options = Options(package_options) default_options = getattr(conanfile, "default_options", None) if default_options: if isinstance(default_options, tuple): default_values = OptionsValues.loads( "\n".join(default_options)) elif isinstance(default_options, list): default_values = OptionsValues.from_list(default_options) elif isinstance(default_options, basestring): default_values = OptionsValues.loads(default_options) else: raise ConanException( "Please define your default_options as list or " "multiline string") options.values = default_values return options except Exception as e: raise ConanException("Error while initializing options. %s" % str(e))
def __init__(self, shared=None, options=None, options_values=None): options = options or "" self.command = None self.path = None self.source_folder = self.build_folder = "." self.settings = None self.options = Options(PackageOptions.loads(options)) if options_values: for var, value in options_values.items(): self.options._data[var] = value self.deps_cpp_info = namedtuple("deps_cpp_info", "sysroot")("/path/to/sysroot") self.output = TestBufferConanOutput() self.in_local_cache = False self.install_folder = "myinstallfolder" if shared is not None: self.options = namedtuple("options", "shared")(shared) self.should_configure = True self.should_build = True self.should_install = True
class OptionsTest(unittest.TestCase): def setUp(self): package_options = PackageOptions.loads("""{static: [True, False], optimized: [2, 3, 4], path: ANY}""") package_options.values = Values.loads( "static=True\noptimized=3\npath=NOTDEF") self.sut = Options(package_options) def items_test(self): self.assertEqual(self.sut.items(), [("optimized", "3"), ("path", "NOTDEF"), ("static", "True")]) self.assertEqual(self.sut.items(), [("optimized", "3"), ("path", "NOTDEF"), ("static", "True")]) def change_test(self): self.sut.path = "C:/MyPath" self.assertEqual(self.sut.items(), [("optimized", "3"), ("path", "C:/MyPath"), ("static", "True")]) self.assertEqual(self.sut.items(), [("optimized", "3"), ("path", "C:/MyPath"), ("static", "True")]) with self.assertRaisesRegexp( ConanException, "'5' is not a valid 'options.optimized' value"): self.sut.optimized = 5 def boolean_test(self): self.sut.static = False self.assertFalse(self.sut.static) self.assertTrue(not self.sut.static) self.assertTrue(self.sut.static == False) self.assertFalse(self.sut.static == True) self.assertFalse(self.sut.static != False) self.assertTrue(self.sut.static != True) self.assertTrue(self.sut.static == "False") self.assertTrue(self.sut.static != "True") def basic_test(self): options = OptionsValues.loads("""other_option=True optimized_var=3 Poco:deps_bundled=True Boost:static=False Boost:thread=True Boost:thread.multi=off Hello1:static=False Hello1:optimized=4 """) down_ref = ConanFileReference.loads("Hello0/0.1@diego/testing") own_ref = ConanFileReference.loads("Hello1/0.1@diego/testing") output = TestBufferConanOutput() self.sut.propagate_upstream(options, down_ref, own_ref, output) self.assertEqual(self.sut.values.as_list(), [("optimized", "4"), ("path", "NOTDEF"), ("static", "False"), ("Boost:static", "False"), ("Boost:thread", "True"), ("Boost:thread.multi", "off"), ("Poco:deps_bundled", "True")]) options2 = OptionsValues.loads("""other_option=True optimized_var=3 Poco:deps_bundled=What Boost:static=2 Boost:thread=Any Boost:thread.multi=on Hello1:static=True Hello1:optimized=2 """) down_ref = ConanFileReference.loads("Hello2/0.1@diego/testing") self.sut.propagate_upstream(options2, down_ref, own_ref, output) self.assertIn( """WARN: Hello2/0.1@diego/testing tried to change Hello1/0.1@diego/testing option optimized to 2 but it was already assigned to 4 by Hello0/0.1@diego/testing WARN: Hello2/0.1@diego/testing tried to change Hello1/0.1@diego/testing option static to True but it was already assigned to False by Hello0/0.1@diego/testing WARN: Hello2/0.1@diego/testing tried to change Hello1/0.1@diego/testing option Boost:static to 2 but it was already assigned to False by Hello0/0.1@diego/testing WARN: Hello2/0.1@diego/testing tried to change Hello1/0.1@diego/testing option Boost:thread to Any but it was already assigned to True by Hello0/0.1@diego/testing WARN: Hello2/0.1@diego/testing tried to change Hello1/0.1@diego/testing option Boost:thread.multi to on but it was already assigned to off by Hello0/0.1@diego/testing WARN: Hello2/0.1@diego/testing tried to change Hello1/0.1@diego/testing option Poco:deps_bundled to What but it was already assigned to True by Hello0/0.1@diego/testing""", str(output)) self.assertEqual( self.sut.values.dumps(), """optimized=4 path=NOTDEF static=False Boost:static=False Boost:thread=True Boost:thread.multi=off Poco:deps_bundled=True""")
class OptionsTest(unittest.TestCase): def setUp(self): package_options = PackageOptions.loads("""{static: [True, False], optimized: [2, 3, 4], path: ANY}""") values = PackageOptionValues() values.add_option("static", True) values.add_option("optimized", 3) values.add_option("path", "NOTDEF") package_options.values = values self.sut = Options(package_options) def undefined_value_test(self): """ Not assigning a value to options will raise an error at validate() step """ package_options = PackageOptions.loads("""{ path: ANY}""") with self.assertRaisesRegexp(ConanException, option_undefined_msg("path")): package_options.validate() package_options.path = "Something" package_options.validate() def undefined_value_none_test(self): """ The value None is allowed as default, not necessary to default to it """ package_options = PackageOptions.loads('{path: [None, "Other"]}') package_options.validate() package_options = PackageOptions.loads('{path: ["None", "Other"]}') package_options.validate() def items_test(self): self.assertEqual(self.sut.items(), [("optimized", "3"), ("path", "NOTDEF"), ("static", "True")]) self.assertEqual(self.sut.items(), [("optimized", "3"), ("path", "NOTDEF"), ("static", "True")]) def change_test(self): self.sut.path = "C:/MyPath" self.assertEqual(self.sut.items(), [("optimized", "3"), ("path", "C:/MyPath"), ("static", "True")]) self.assertEqual(self.sut.items(), [("optimized", "3"), ("path", "C:/MyPath"), ("static", "True")]) with self.assertRaisesRegexp( ConanException, "'5' is not a valid 'options.optimized' value"): self.sut.optimized = 5 def boolean_test(self): self.sut.static = False self.assertFalse(self.sut.static) self.assertTrue(not self.sut.static) self.assertTrue(self.sut.static == False) self.assertFalse(self.sut.static == True) self.assertFalse(self.sut.static != False) self.assertTrue(self.sut.static != True) self.assertTrue(self.sut.static == "False") self.assertTrue(self.sut.static != "True") def basic_test(self): boost_values = PackageOptionValues() boost_values.add_option("static", False) boost_values.add_option("thread", True) boost_values.add_option("thread.multi", "off") poco_values = PackageOptionValues() poco_values.add_option("deps_bundled", True) hello1_values = PackageOptionValues() hello1_values.add_option("static", False) hello1_values.add_option("optimized", 4) options = { "Boost": boost_values, "Poco": poco_values, "Hello1": hello1_values } down_ref = ConanFileReference.loads("Hello0/0.1@diego/testing") own_ref = ConanFileReference.loads("Hello1/0.1@diego/testing") output = TestBufferConanOutput() self.sut.propagate_upstream(options, down_ref, own_ref, output) self.assertEqual(self.sut.values.as_list(), [("optimized", "4"), ("path", "NOTDEF"), ("static", "False"), ("Boost:static", "False"), ("Boost:thread", "True"), ("Boost:thread.multi", "off"), ("Poco:deps_bundled", "True")]) boost_values = PackageOptionValues() boost_values.add_option("static", 2) boost_values.add_option("thread", "Any") boost_values.add_option("thread.multi", "on") poco_values = PackageOptionValues() poco_values.add_option("deps_bundled", "What") hello1_values = PackageOptionValues() hello1_values.add_option("static", True) hello1_values.add_option("optimized", "2") options2 = { "Boost": boost_values, "Poco": poco_values, "Hello1": hello1_values } down_ref = ConanFileReference.loads("Hello2/0.1@diego/testing") self.sut.propagate_upstream(options2, down_ref, own_ref, output) self.assertIn( """WARN: Hello2/0.1@diego/testing tried to change Hello1/0.1@diego/testing option optimized to 2 but it was already assigned to 4 by Hello0/0.1@diego/testing WARN: Hello2/0.1@diego/testing tried to change Hello1/0.1@diego/testing option static to True but it was already assigned to False by Hello0/0.1@diego/testing WARN: Hello2/0.1@diego/testing tried to change Hello1/0.1@diego/testing option Boost:static to 2 but it was already assigned to False by Hello0/0.1@diego/testing WARN: Hello2/0.1@diego/testing tried to change Hello1/0.1@diego/testing option Boost:thread to Any but it was already assigned to True by Hello0/0.1@diego/testing WARN: Hello2/0.1@diego/testing tried to change Hello1/0.1@diego/testing option Boost:thread.multi to on but it was already assigned to off by Hello0/0.1@diego/testing WARN: Hello2/0.1@diego/testing tried to change Hello1/0.1@diego/testing option Poco:deps_bundled to What but it was already assigned to True by Hello0/0.1@diego/testing""", str(output)) self.assertEqual( self.sut.values.dumps(), """optimized=4 path=NOTDEF static=False Boost:static=False Boost:thread=True Boost:thread.multi=off Poco:deps_bundled=True""")
class OptionsTest(unittest.TestCase): def setUp(self): package_options = PackageOptions.loads("""{static: [True, False], optimized: [2, 3, 4], path: ANY}""") package_options.values = Values.loads("static=True\noptimized=3\npath=NOTDEF") self.sut = Options(package_options) def items_test(self): self.assertEqual(self.sut.items(), [("optimized", "3"), ("path", "NOTDEF"), ("static", "True")]) self.assertEqual(self.sut.items(), [("optimized", "3"), ("path", "NOTDEF"), ("static", "True")]) def change_test(self): self.sut.path = "C:/MyPath" self.assertEqual(self.sut.items(), [("optimized", "3"), ("path", "C:/MyPath"), ("static", "True")]) self.assertEqual(self.sut.items(), [("optimized", "3"), ("path", "C:/MyPath"), ("static", "True")]) with self.assertRaisesRegexp(ConanException, "'5' is not a valid 'options.optimized' value"): self.sut.optimized = 5 def boolean_test(self): self.sut.static = False self.assertFalse(self.sut.static) self.assertTrue(not self.sut.static) self.assertTrue(self.sut.static == False) self.assertFalse(self.sut.static == True) self.assertFalse(self.sut.static != False) self.assertTrue(self.sut.static != True) self.assertTrue(self.sut.static == "False") self.assertTrue(self.sut.static != "True") def basic_test(self): options = OptionsValues.loads("""other_option=True optimized_var=3 Poco:deps_bundled=True Boost:static=False Boost:thread=True Boost:thread.multi=off Hello1:static=False Hello1:optimized=4 """) down_ref = ConanFileReference.loads("Hello0/0.1@diego/testing") own_ref = ConanFileReference.loads("Hello1/0.1@diego/testing") output = TestBufferConanOutput() self.sut.propagate_upstream(options, down_ref, own_ref, output) self.assertEqual(self.sut.values.as_list(), [("optimized", "4"), ("path", "NOTDEF"), ("static", "False"), ("Boost:static", "False"), ("Boost:thread", "True"), ("Boost:thread.multi", "off"), ("Poco:deps_bundled", "True")]) options2 = OptionsValues.loads("""other_option=True optimized_var=3 Poco:deps_bundled=What Boost:static=2 Boost:thread=Any Boost:thread.multi=on Hello1:static=True Hello1:optimized=2 """) down_ref = ConanFileReference.loads("Hello2/0.1@diego/testing") self.sut.propagate_upstream(options2, down_ref, own_ref, output) self.assertIn("""WARN: Hello2/0.1@diego/testing tried to change Hello1/0.1@diego/testing option optimized to 2 but it was already assigned to 4 by Hello0/0.1@diego/testing WARN: Hello2/0.1@diego/testing tried to change Hello1/0.1@diego/testing option static to True but it was already assigned to False by Hello0/0.1@diego/testing WARN: Hello2/0.1@diego/testing tried to change Hello1/0.1@diego/testing option Boost:static to 2 but it was already assigned to False by Hello0/0.1@diego/testing WARN: Hello2/0.1@diego/testing tried to change Hello1/0.1@diego/testing option Boost:thread to Any but it was already assigned to True by Hello0/0.1@diego/testing WARN: Hello2/0.1@diego/testing tried to change Hello1/0.1@diego/testing option Boost:thread.multi to on but it was already assigned to off by Hello0/0.1@diego/testing WARN: Hello2/0.1@diego/testing tried to change Hello1/0.1@diego/testing option Poco:deps_bundled to What but it was already assigned to True by Hello0/0.1@diego/testing""", str(output)) self.assertEqual(self.sut.values.dumps(), """optimized=4 path=NOTDEF static=False Boost:static=False Boost:thread=True Boost:thread.multi=off Poco:deps_bundled=True""")
def setUp(self): package_options = PackageOptions.loads("""{static: [True, False], optimized: [2, 3, 4], path: ANY}""") package_options.values = Values.loads("static=True\noptimized=3\npath=NOTDEF") self.sut = Options(package_options)
class OptionsTest(unittest.TestCase): def setUp(self): package_options = PackageOptions.loads("""{static: [True, False], optimized: [2, 3, 4], path: ANY}""") values = PackageOptionValues() values.add_option("static", True) values.add_option("optimized", 3) values.add_option("path", "NOTDEF") package_options.values = values self.sut = Options(package_options) def undefined_value_test(self): """ Not assigning a value to options will raise an error at validate() step """ package_options = PackageOptions.loads("""{ path: ANY}""") with self.assertRaisesRegexp(ConanException, option_undefined_msg("path")): package_options.validate() package_options.path = "Something" package_options.validate() def undefined_value_none_test(self): """ The value None is allowed as default, not necessary to default to it """ package_options = PackageOptions.loads('{path: [None, "Other"]}') package_options.validate() package_options = PackageOptions.loads('{path: ["None", "Other"]}') package_options.validate() def items_test(self): self.assertEqual(self.sut.items(), [("optimized", "3"), ("path", "NOTDEF"), ("static", "True")]) self.assertEqual(self.sut.items(), [("optimized", "3"), ("path", "NOTDEF"), ("static", "True")]) def change_test(self): self.sut.path = "C:/MyPath" self.assertEqual(self.sut.items(), [("optimized", "3"), ("path", "C:/MyPath"), ("static", "True")]) self.assertEqual(self.sut.items(), [("optimized", "3"), ("path", "C:/MyPath"), ("static", "True")]) with self.assertRaisesRegexp(ConanException, "'5' is not a valid 'options.optimized' value"): self.sut.optimized = 5 def boolean_test(self): self.sut.static = False self.assertFalse(self.sut.static) self.assertTrue(not self.sut.static) self.assertTrue(self.sut.static == False) self.assertFalse(self.sut.static == True) self.assertFalse(self.sut.static != False) self.assertTrue(self.sut.static != True) self.assertTrue(self.sut.static == "False") self.assertTrue(self.sut.static != "True") def basic_test(self): boost_values = PackageOptionValues() boost_values.add_option("static", False) boost_values.add_option("thread", True) boost_values.add_option("thread.multi", "off") poco_values = PackageOptionValues() poco_values.add_option("deps_bundled", True) hello1_values = PackageOptionValues() hello1_values.add_option("static", False) hello1_values.add_option("optimized", 4) options = {"Boost": boost_values, "Poco": poco_values, "Hello1": hello1_values} down_ref = ConanFileReference.loads("Hello0/0.1@diego/testing") own_ref = ConanFileReference.loads("Hello1/0.1@diego/testing") output = TestBufferConanOutput() self.sut.propagate_upstream(options, down_ref, own_ref, output) self.assertEqual(self.sut.values.as_list(), [("optimized", "4"), ("path", "NOTDEF"), ("static", "False"), ("Boost:static", "False"), ("Boost:thread", "True"), ("Boost:thread.multi", "off"), ("Poco:deps_bundled", "True")]) boost_values = PackageOptionValues() boost_values.add_option("static", 2) boost_values.add_option("thread", "Any") boost_values.add_option("thread.multi", "on") poco_values = PackageOptionValues() poco_values.add_option("deps_bundled", "What") hello1_values = PackageOptionValues() hello1_values.add_option("static", True) hello1_values.add_option("optimized", "2") options2 = {"Boost": boost_values, "Poco": poco_values, "Hello1": hello1_values} down_ref = ConanFileReference.loads("Hello2/0.1@diego/testing") self.sut.propagate_upstream(options2, down_ref, own_ref, output) self.assertIn("""WARN: Hello2/0.1@diego/testing tried to change Hello1/0.1@diego/testing option optimized to 2 but it was already assigned to 4 by Hello0/0.1@diego/testing WARN: Hello2/0.1@diego/testing tried to change Hello1/0.1@diego/testing option static to True but it was already assigned to False by Hello0/0.1@diego/testing WARN: Hello2/0.1@diego/testing tried to change Hello1/0.1@diego/testing option Boost:static to 2 but it was already assigned to False by Hello0/0.1@diego/testing WARN: Hello2/0.1@diego/testing tried to change Hello1/0.1@diego/testing option Boost:thread to Any but it was already assigned to True by Hello0/0.1@diego/testing WARN: Hello2/0.1@diego/testing tried to change Hello1/0.1@diego/testing option Boost:thread.multi to on but it was already assigned to off by Hello0/0.1@diego/testing WARN: Hello2/0.1@diego/testing tried to change Hello1/0.1@diego/testing option Poco:deps_bundled to What but it was already assigned to True by Hello0/0.1@diego/testing""", str(output)) self.assertEqual(self.sut.values.dumps(), """optimized=4 path=NOTDEF static=False Boost:static=False Boost:thread=True Boost:thread.multi=off Poco:deps_bundled=True""")
class OptionsTest(unittest.TestCase): def setUp(self): package_options = PackageOptions.loads("""{static: [True, False], optimized: [2, 3, 4], path: ANY}""") values = PackageOptionValues() values.add_option("static", True) values.add_option("optimized", 3) values.add_option("path", "NOTDEF") package_options.values = values self.sut = Options(package_options) def test_int(self): self.assertEqual(3, int(self.sut.optimized)) def test_in(self): package_options = PackageOptions.loads("{static: [True, False]}") sut = Options(package_options) self.assertTrue("static" in sut) self.assertFalse("shared" in sut) self.assertTrue("shared" not in sut) self.assertFalse("static" not in sut) def undefined_value_test(self): """ Not assigning a value to options will raise an error at validate() step """ package_options = PackageOptions.loads("""{ path: ANY}""") with self.assertRaisesRegexp(ConanException, option_undefined_msg("path")): package_options.validate() package_options.path = "Something" package_options.validate() def undefined_value_none_test(self): """ The value None is allowed as default, not necessary to default to it """ package_options = PackageOptions.loads('{path: [None, "Other"]}') package_options.validate() package_options = PackageOptions.loads('{path: ["None", "Other"]}') package_options.validate() def items_test(self): self.assertEqual(self.sut.items(), [("optimized", "3"), ("path", "NOTDEF"), ("static", "True")]) self.assertEqual(self.sut.items(), [("optimized", "3"), ("path", "NOTDEF"), ("static", "True")]) def change_test(self): self.sut.path = "C:/MyPath" self.assertEqual(self.sut.items(), [("optimized", "3"), ("path", "C:/MyPath"), ("static", "True")]) self.assertEqual(self.sut.items(), [("optimized", "3"), ("path", "C:/MyPath"), ("static", "True")]) with self.assertRaisesRegexp(ConanException, "'5' is not a valid 'options.optimized' value"): self.sut.optimized = 5 def boolean_test(self): self.sut.static = False self.assertFalse(self.sut.static) self.assertTrue(not self.sut.static) self.assertTrue(self.sut.static == False) self.assertFalse(self.sut.static == True) self.assertFalse(self.sut.static != False) self.assertTrue(self.sut.static != True) self.assertTrue(self.sut.static == "False") self.assertTrue(self.sut.static != "True") def basic_test(self): boost_values = PackageOptionValues() boost_values.add_option("static", False) boost_values.add_option("thread", True) boost_values.add_option("thread.multi", "off") poco_values = PackageOptionValues() poco_values.add_option("deps_bundled", True) hello1_values = PackageOptionValues() hello1_values.add_option("static", False) hello1_values.add_option("optimized", 4) options = {"Boost": boost_values, "Poco": poco_values, "Hello1": hello1_values} down_ref = ConanFileReference.loads("Hello0/0.1@diego/testing") own_ref = ConanFileReference.loads("Hello1/0.1@diego/testing") self.sut.propagate_upstream(options, down_ref, own_ref) self.assertEqual(self.sut.values.as_list(), [("optimized", "4"), ("path", "NOTDEF"), ("static", "False"), ("Boost:static", "False"), ("Boost:thread", "True"), ("Boost:thread.multi", "off"), ("Poco:deps_bundled", "True")]) boost_values = PackageOptionValues() boost_values.add_option("static", 2) boost_values.add_option("thread", "Any") boost_values.add_option("thread.multi", "on") poco_values = PackageOptionValues() poco_values.add_option("deps_bundled", "What") hello1_values = PackageOptionValues() hello1_values.add_option("static", True) hello1_values.add_option("optimized", "2") options2 = {"Boost": boost_values, "Poco": poco_values, "Hello1": hello1_values} down_ref = ConanFileReference.loads("Hello2/0.1@diego/testing") with self.assertRaisesRegexp(ConanException, "Hello2/0.1@diego/testing tried to change " "Hello1/0.1@diego/testing option optimized to 2"): self.sut.propagate_upstream(options2, down_ref, own_ref) self.assertEqual(self.sut.values.dumps(), """optimized=4 path=NOTDEF static=False Boost:static=False Boost:thread=True Boost:thread.multi=off Poco:deps_bundled=True""") def pattern_positive_test(self): boost_values = PackageOptionValues() boost_values.add_option("static", False) boost_values.add_option("path", "FuzzBuzz") options = {"Boost.*": boost_values} own_ref = ConanFileReference.loads("Boost.Assert/0.1@diego/testing") down_ref = ConanFileReference.loads("Consumer/0.1@diego/testing") self.sut.propagate_upstream(options, down_ref, own_ref) self.assertEqual(self.sut.values.as_list(), [("optimized", "3"), ("path", "FuzzBuzz"), ("static", "False"), ("Boost.*:path", "FuzzBuzz"), ("Boost.*:static", "False"), ]) def multi_pattern_test(self): boost_values = PackageOptionValues() boost_values.add_option("static", False) boost_values.add_option("path", "FuzzBuzz") boost_values2 = PackageOptionValues() boost_values2.add_option("optimized", 2) options = {"Boost.*": boost_values, "*": boost_values2} own_ref = ConanFileReference.loads("Boost.Assert/0.1@diego/testing") down_ref = ConanFileReference.loads("Consumer/0.1@diego/testing") self.sut.propagate_upstream(options, down_ref, own_ref) self.assertEqual(self.sut.values.as_list(), [("optimized", "2"), ("path", "FuzzBuzz"), ("static", "False"), ('*:optimized', '2'), ("Boost.*:path", "FuzzBuzz"), ("Boost.*:static", "False"), ]) def multi_pattern_error_test(self): boost_values = PackageOptionValues() boost_values.add_option("optimized", 4) boost_values2 = PackageOptionValues() boost_values2.add_option("optimized", 2) options = {"Boost.*": boost_values, "*": boost_values2} own_ref = ConanFileReference.loads("Boost.Assert/0.1@diego/testing") down_ref = ConanFileReference.loads("Consumer/0.1@diego/testing") self.sut.propagate_upstream(options, down_ref, own_ref) self.assertEqual(self.sut.values.as_list(), [('optimized', '4'), ('path', 'NOTDEF'), ('static', 'True'), ('*:optimized', '2'), ('Boost.*:optimized', '4')]) def all_positive_test(self): boost_values = PackageOptionValues() boost_values.add_option("static", False) boost_values.add_option("path", "FuzzBuzz") options = {"*": boost_values} own_ref = ConanFileReference.loads("Boost.Assert/0.1@diego/testing") down_ref = ConanFileReference.loads("Consumer/0.1@diego/testing") self.sut.propagate_upstream(options, down_ref, own_ref) self.assertEqual(self.sut.values.as_list(), [("optimized", "3"), ("path", "FuzzBuzz"), ("static", "False"), ("*:path", "FuzzBuzz"), ("*:static", "False"), ]) def pattern_ignore_test(self): boost_values = PackageOptionValues() boost_values.add_option("fake_option", "FuzzBuzz") options = {"Boost.*": boost_values} down_ref = ConanFileReference.loads("Consumer/0.1@diego/testing") own_ref = ConanFileReference.loads("Boost.Assert/0.1@diego/testing") self.sut.propagate_upstream(options, down_ref, own_ref) self.assertEqual(self.sut.values.as_list(), [("optimized", "3"), ("path", "NOTDEF"), ("static", "True"), ("Boost.*:fake_option", "FuzzBuzz"), ]) def pattern_unmatch_test(self): boost_values = PackageOptionValues() boost_values.add_option("fake_option", "FuzzBuzz") options = {"OpenSSL.*": boost_values} down_ref = ConanFileReference.loads("Boost.Assert/0.1@diego/testing") own_ref = ConanFileReference.loads("Boost.Assert/0.1@diego/testing") self.sut.propagate_upstream(options, down_ref, own_ref) self.assertEqual(self.sut.values.as_list(), [("optimized", "3"), ("path", "NOTDEF"), ("static", "True"), ("OpenSSL.*:fake_option", "FuzzBuzz"), ])
class OptionsTest(unittest.TestCase): def setUp(self): package_options = PackageOptions.loads("""{static: [True, False], optimized: [2, 3, 4], path: ANY}""") values = PackageOptionValues() values.add_option("static", True) values.add_option("optimized", 3) values.add_option("path", "NOTDEF") package_options.values = values self.sut = Options(package_options) def test_in(self): package_options = PackageOptions.loads("{static: [True, False]}") sut = Options(package_options) self.assertTrue("static" in sut) self.assertFalse("shared" in sut) self.assertTrue("shared" not in sut) self.assertFalse("static" not in sut) def undefined_value_test(self): """ Not assigning a value to options will raise an error at validate() step """ package_options = PackageOptions.loads("""{ path: ANY}""") with self.assertRaisesRegexp(ConanException, option_undefined_msg("path")): package_options.validate() package_options.path = "Something" package_options.validate() def undefined_value_none_test(self): """ The value None is allowed as default, not necessary to default to it """ package_options = PackageOptions.loads('{path: [None, "Other"]}') package_options.validate() package_options = PackageOptions.loads('{path: ["None", "Other"]}') package_options.validate() def items_test(self): self.assertEqual(self.sut.items(), [("optimized", "3"), ("path", "NOTDEF"), ("static", "True")]) self.assertEqual(self.sut.items(), [("optimized", "3"), ("path", "NOTDEF"), ("static", "True")]) def change_test(self): self.sut.path = "C:/MyPath" self.assertEqual(self.sut.items(), [("optimized", "3"), ("path", "C:/MyPath"), ("static", "True")]) self.assertEqual(self.sut.items(), [("optimized", "3"), ("path", "C:/MyPath"), ("static", "True")]) with self.assertRaisesRegexp( ConanException, "'5' is not a valid 'options.optimized' value"): self.sut.optimized = 5 def boolean_test(self): self.sut.static = False self.assertFalse(self.sut.static) self.assertTrue(not self.sut.static) self.assertTrue(self.sut.static == False) self.assertFalse(self.sut.static == True) self.assertFalse(self.sut.static != False) self.assertTrue(self.sut.static != True) self.assertTrue(self.sut.static == "False") self.assertTrue(self.sut.static != "True") def basic_test(self): boost_values = PackageOptionValues() boost_values.add_option("static", False) boost_values.add_option("thread", True) boost_values.add_option("thread.multi", "off") poco_values = PackageOptionValues() poco_values.add_option("deps_bundled", True) hello1_values = PackageOptionValues() hello1_values.add_option("static", False) hello1_values.add_option("optimized", 4) options = { "Boost": boost_values, "Poco": poco_values, "Hello1": hello1_values } down_ref = ConanFileReference.loads("Hello0/0.1@diego/testing") own_ref = ConanFileReference.loads("Hello1/0.1@diego/testing") output = TestBufferConanOutput() self.sut.propagate_upstream(options, down_ref, own_ref, output) self.assertEqual(self.sut.values.as_list(), [("optimized", "4"), ("path", "NOTDEF"), ("static", "False"), ("Boost:static", "False"), ("Boost:thread", "True"), ("Boost:thread.multi", "off"), ("Poco:deps_bundled", "True")]) boost_values = PackageOptionValues() boost_values.add_option("static", 2) boost_values.add_option("thread", "Any") boost_values.add_option("thread.multi", "on") poco_values = PackageOptionValues() poco_values.add_option("deps_bundled", "What") hello1_values = PackageOptionValues() hello1_values.add_option("static", True) hello1_values.add_option("optimized", "2") options2 = { "Boost": boost_values, "Poco": poco_values, "Hello1": hello1_values } down_ref = ConanFileReference.loads("Hello2/0.1@diego/testing") with self.assertRaisesRegexp( ConanException, "Hello2/0.1@diego/testing tried to change " "Hello1/0.1@diego/testing option optimized to 2"): self.sut.propagate_upstream(options2, down_ref, own_ref, output) self.assertEqual( self.sut.values.dumps(), """optimized=4 path=NOTDEF static=False Boost:static=False Boost:thread=True Boost:thread.multi=off Poco:deps_bundled=True""") def pattern_positive_test(self): boost_values = PackageOptionValues() boost_values.add_option("static", False) boost_values.add_option("path", "FuzzBuzz") options = {"Boost.*": boost_values} own_ref = ConanFileReference.loads("Boost.Assert/0.1@diego/testing") down_ref = ConanFileReference.loads("Consumer/0.1@diego/testing") output = TestBufferConanOutput() self.sut.propagate_upstream(options, down_ref, own_ref, output) self.assertEqual(self.sut.values.as_list(), [ ("optimized", "3"), ("path", "FuzzBuzz"), ("static", "False"), ("Boost.*:path", "FuzzBuzz"), ("Boost.*:static", "False"), ]) def multi_pattern_test(self): boost_values = PackageOptionValues() boost_values.add_option("static", False) boost_values.add_option("path", "FuzzBuzz") boost_values2 = PackageOptionValues() boost_values2.add_option("optimized", 2) options = {"Boost.*": boost_values, "*": boost_values2} own_ref = ConanFileReference.loads("Boost.Assert/0.1@diego/testing") down_ref = ConanFileReference.loads("Consumer/0.1@diego/testing") output = TestBufferConanOutput() self.sut.propagate_upstream(options, down_ref, own_ref, output) self.assertEqual(self.sut.values.as_list(), [ ("optimized", "2"), ("path", "FuzzBuzz"), ("static", "False"), ('*:optimized', '2'), ("Boost.*:path", "FuzzBuzz"), ("Boost.*:static", "False"), ]) def multi_pattern_error_test(self): boost_values = PackageOptionValues() boost_values.add_option("optimized", 4) boost_values2 = PackageOptionValues() boost_values2.add_option("optimized", 2) options = {"Boost.*": boost_values, "*": boost_values2} own_ref = ConanFileReference.loads("Boost.Assert/0.1@diego/testing") down_ref = ConanFileReference.loads("Consumer/0.1@diego/testing") output = TestBufferConanOutput() with self.assertRaises(ConanException): self.sut.propagate_upstream(options, down_ref, own_ref, output) def all_positive_test(self): boost_values = PackageOptionValues() boost_values.add_option("static", False) boost_values.add_option("path", "FuzzBuzz") options = {"*": boost_values} own_ref = ConanFileReference.loads("Boost.Assert/0.1@diego/testing") down_ref = ConanFileReference.loads("Consumer/0.1@diego/testing") output = TestBufferConanOutput() self.sut.propagate_upstream(options, down_ref, own_ref, output) self.assertEqual(self.sut.values.as_list(), [ ("optimized", "3"), ("path", "FuzzBuzz"), ("static", "False"), ("*:path", "FuzzBuzz"), ("*:static", "False"), ]) def pattern_ignore_test(self): boost_values = PackageOptionValues() boost_values.add_option("fake_option", "FuzzBuzz") options = {"Boost.*": boost_values} down_ref = ConanFileReference.loads("Consumer/0.1@diego/testing") own_ref = ConanFileReference.loads("Boost.Assert/0.1@diego/testing") output = TestBufferConanOutput() self.sut.propagate_upstream(options, down_ref, own_ref, output) self.assertEqual(self.sut.values.as_list(), [ ("optimized", "3"), ("path", "NOTDEF"), ("static", "True"), ("Boost.*:fake_option", "FuzzBuzz"), ]) def pattern_unmatch_test(self): boost_values = PackageOptionValues() boost_values.add_option("fake_option", "FuzzBuzz") options = {"OpenSSL.*": boost_values} down_ref = ConanFileReference.loads("Boost.Assert/0.1@diego/testing") own_ref = ConanFileReference.loads("Boost.Assert/0.1@diego/testing") output = TestBufferConanOutput() self.sut.propagate_upstream(options, down_ref, own_ref, output) self.assertEqual(self.sut.values.as_list(), [ ("optimized", "3"), ("path", "NOTDEF"), ("static", "True"), ("OpenSSL.*:fake_option", "FuzzBuzz"), ])