def test_file_parse(self):
        # write VARS_FILE into a file that gets cleaned up, then test parsing it
        with temp_file() as filename:
            f = open(filename, 'w')
            f.write(VARS_FILE)
            f.close()

            result = BStrapVars.factory_from_sass_file(filename)
            result_json = result.base_to_json()
            self.assertEqual(VARS_JSON, result_json)

        # test error handling properly ignores bad variables
        with temp_file() as filename:
            f = open(filename, 'w')
            f.write(ERROR_VARS_FILE)
            f.close()

            result = BStrapVars.factory_from_sass_file(filename)
            result_json = result.base_to_json()
            self.assertEqual(ERROR_VARS_JSON, result_json)
    def test_file_parse(self):
        # write VARS_FILE into a file that gets cleaned up, then test parsing it
        with temp_file() as filename:
            f = open(filename, 'w')
            f.write(VARS_FILE)
            f.close()

            result = BStrapVars.factory_from_sass_file(filename)
            result_json = result.base_to_json()
            self.assertEqual(VARS_JSON, result_json)

        # test error handling properly ignores bad variables
        with temp_file() as filename:
            f = open(filename, 'w')
            f.write(ERROR_VARS_FILE)
            f.close()

            result = BStrapVars.factory_from_sass_file(filename)
            result_json = result.base_to_json()
            self.assertEqual(ERROR_VARS_JSON, result_json)
    def test_custom_and_overrides(self):
        c = {
            self.comp1_1.name:'#AAA',
            self.comp2_1.name:'#BBB',
            self.compN_2.name:'one',
            self.compN_3.name:'two',
        }

        bsv = BStrapVars.factory(self.data, c)

        expected = [(comp.name, comp.value) for comp in self.all_comps]
        expected[0] = (self.comp1_1.name, '#AAA')
        expected[3] = (self.comp2_1.name, '#BBB')
        expected[6] = (self.compN_2.name, 'one')
        expected[7] = (self.compN_3.name, 'two')
        result = list(bsv.all_value_pairs())
        self.assertEqual(result, expected)

        c = json.dumps(c)
        bsv = BStrapVars.factory(self.data, c)
        result = list(bsv.all_value_pairs())
        self.assertEqual(result, expected)

        # override some of the custom values, blank override means use default
        o = {
            self.comp1_1.name:'#CCC',
            self.comp2_1.name:'',
            self.compN_2.name:'three',
        }

        expected[0] = (self.comp1_1.name, '#CCC')
        expected[3] = (self.comp2_1.name, '#fff')
        expected[6] = (self.compN_2.name, 'three')

        bsv = BStrapVars.factory(self.data, c, o)
        result = list(bsv.all_value_pairs())
        self.assertEqual(result, expected)

        o = json.dumps(o)
        bsv = BStrapVars.factory(self.data, c, o)
        result = list(bsv.all_value_pairs())
        self.assertEqual(result, expected)

        # test serialization
        expected = BStrapVars.factory(self.data, c)
        expected_base = expected.base_to_json()
        expected_custom = expected.custom_to_json()

        result = BStrapVars.factory(expected_base, expected_custom)
        result_base = result.base_to_json()
        result_custom = result.custom_to_json()

        self.assertEqual(result_base, expected_base)
        self.assertEqual(result_custom, expected_custom)
    def test_custom_and_overrides(self):
        c = {
            self.comp1_1.name: '#AAA',
            self.comp2_1.name: '#BBB',
            self.compN_2.name: 'one',
            self.compN_3.name: 'two',
        }

        bsv = BStrapVars.factory(self.data, c)

        expected = [(comp.name, comp.value) for comp in self.all_comps]
        expected[0] = (self.comp1_1.name, '#AAA')
        expected[3] = (self.comp2_1.name, '#BBB')
        expected[6] = (self.compN_2.name, 'one')
        expected[7] = (self.compN_3.name, 'two')
        result = list(bsv.all_value_pairs())
        self.assertEqual(result, expected)

        c = json.dumps(c)
        bsv = BStrapVars.factory(self.data, c)
        result = list(bsv.all_value_pairs())
        self.assertEqual(result, expected)

        # override some of the custom values, blank override means use default
        o = {
            self.comp1_1.name: '#CCC',
            self.comp2_1.name: '',
            self.compN_2.name: 'three',
        }

        expected[0] = (self.comp1_1.name, '#CCC')
        expected[3] = (self.comp2_1.name, '#fff')
        expected[6] = (self.compN_2.name, 'three')

        bsv = BStrapVars.factory(self.data, c, o)
        result = list(bsv.all_value_pairs())
        self.assertEqual(result, expected)

        o = json.dumps(o)
        bsv = BStrapVars.factory(self.data, c, o)
        result = list(bsv.all_value_pairs())
        self.assertEqual(result, expected)

        # test serialization
        expected = BStrapVars.factory(self.data, c)
        expected_base = expected.base_to_json()
        expected_custom = expected.custom_to_json()

        result = BStrapVars.factory(expected_base, expected_custom)
        result_base = result.base_to_json()
        result_custom = result.custom_to_json()

        self.assertEqual(result_base, expected_base)
        self.assertEqual(result_custom, expected_custom)
    def test_base(self):
        # check we don't blow up if no data
        BStrapVars.factory({})
        BStrapVars.factory({}, {})
        BStrapVars.factory({}, {}, {})
        BStrapVars.factory('{}')
        BStrapVars.factory('{}', '{}')
        BStrapVars.factory('{}', '{}', '{}')

        # -- test valid data
        bsv = BStrapVars.factory(self.data)

        # check sections
        expected = [self.section1.name, self.section2.name]
        self.assertEqual(list(bsv.sections.keys()), expected)

        # check all components in sections
        expected = [comp.name for comp in self.all_comps]
        result = [comp.name for comp in bsv.all_components.values()]
        self.assertEqual(result, expected)

        # check values
        expected = [(comp.name, comp.value) for comp in self.all_comps]
        result = list(bsv.all_value_pairs())
        self.assertEqual(result, expected)

        # check colour values
        expected = list(self.colour_values.values())
        result = list(bsv.colour_values.values())
        self.assertEqual(result, expected)

        # -- test dependencies
        expected = set([self.comp1_2.name, self.comp1_3.name])
        result = bsv.dependencies(self.comp1_1.name)
        self.assertEqual(result, expected)

        # check something without dependencies
        result = bsv.dependencies(self.comp2_1.name)
        self.assertEqual(result, set([]))
    def test_base(self):
        # check we don't blow up if no data
        BStrapVars.factory({})
        BStrapVars.factory({}, {})
        BStrapVars.factory({}, {}, {})
        BStrapVars.factory('{}')
        BStrapVars.factory('{}', '{}')
        BStrapVars.factory('{}', '{}', '{}')

        # -- test valid data
        bsv = BStrapVars.factory(self.data)

        # check sections
        expected = [self.section1.name, self.section2.name]
        self.assertEqual(list(bsv.sections.keys()), expected)

        # check all components in sections
        expected = [comp.name for comp in self.all_comps]
        result = [comp.name for comp in bsv.all_components.values()]
        self.assertEqual(result, expected)

        # check values
        expected = [(comp.name, comp.value) for comp in self.all_comps]
        result = list(bsv.all_value_pairs())
        self.assertEqual(result, expected)

        # check colour values
        expected = list(self.colour_values.values())
        result = list(bsv.colour_values.values())
        self.assertEqual(result, expected)

        # -- test dependencies
        expected = set([self.comp1_2.name, self.comp1_3.name])
        result = bsv.dependencies(self.comp1_1.name)
        self.assertEqual(result, expected)

        # check something without dependencies
        result = bsv.dependencies(self.comp2_1.name)
        self.assertEqual(result, set([]))