from fontTools import ttLib
from fontTools.misc.testTools import getXML, parseXML
from fontTools.ttLib.tables.C_O_L_R_ import table_C_O_L_R_

import binascii
import pytest


COLR_V0_SAMPLE = (
    (b"\x00\x00", "Version (0)"),
    (b"\x00\x01", "BaseGlyphRecordCount (1)"),
    (
        b"\x00\x00\x00\x0e",
        "Offset to BaseGlyphRecordArray from beginning of table (14)",
    ),
    (b"\x00\x00\x00\x14", "Offset to LayerRecordArray from beginning of table (20)"),
    (b"\x00\x03", "LayerRecordCount (3)"),
    (b"\x00\x06", "BaseGlyphRecord[0].BaseGlyph (6)"),
    (b"\x00\x00", "BaseGlyphRecord[0].FirstLayerIndex (0)"),
    (b"\x00\x03", "BaseGlyphRecord[0].NumLayers (3)"),
    (b"\x00\x07", "LayerRecord[0].LayerGlyph (7)"),
    (b"\x00\x00", "LayerRecord[0].PaletteIndex (0)"),
    (b"\x00\x08", "LayerRecord[1].LayerGlyph (8)"),
    (b"\x00\x01", "LayerRecord[1].PaletteIndex (1)"),
    (b"\x00\t", "LayerRecord[2].LayerGlyph (9)"),
    (b"\x00\x02", "LayerRecord[3].PaletteIndex (2)"),
)

COLR_V0_DATA = b"".join(t[0] for t in COLR_V0_SAMPLE)


COLR_V0_XML = [
    '<version value="0"/>',
    '<ColorGlyph name="glyph00006">',
    '  <layer colorID="0" name="glyph00007"/>',
    '  <layer colorID="1" name="glyph00008"/>',
    '  <layer colorID="2" name="glyph00009"/>',
    "</ColorGlyph>",
]


def dump(table, ttFont=None):
    print("\n".join(getXML(table.toXML, ttFont)))


def diff_binary_fragments(font_bytes, expected_fragments):
    pos = 0
    prev_desc = ""
    errors = 0
    for expected_bytes, description in expected_fragments:
        actual_bytes = font_bytes[pos : pos + len(expected_bytes)]
        if actual_bytes != expected_bytes:
            print(
                f'{description} (previous "{prev_desc}", actual_bytes: {"".join("%02x" % v for v in actual_bytes)} bytes: {str(font_bytes[pos:pos+16])}'
            )
            errors += 1
        pos += len(expected_bytes)
        prev_desc = description
    assert errors == 0
    assert pos == len(
        font_bytes
    ), f"Leftover font bytes, used {pos} of {len(font_bytes)}"


@pytest.fixture
def font():
    font = ttLib.TTFont()
    font.setGlyphOrder(["glyph%05d" % i for i in range(30)])
    return font


class COLR_V0_Test(object):
    def test_decompile_and_compile(self, font):
        colr = table_C_O_L_R_()
        colr.decompile(COLR_V0_DATA, font)
        diff_binary_fragments(colr.compile(font), COLR_V0_SAMPLE)

    def test_decompile_and_dump_xml(self, font):
        colr = table_C_O_L_R_()
        colr.decompile(COLR_V0_DATA, font)

        dump(colr, font)
        assert getXML(colr.toXML, font) == COLR_V0_XML

    def test_load_from_xml_and_compile(self, font):
        colr = table_C_O_L_R_()
        for name, attrs, content in parseXML(COLR_V0_XML):
            colr.fromXML(name, attrs, content, font)

        diff_binary_fragments(colr.compile(font), COLR_V0_SAMPLE)

    def test_round_trip_xml(self, font):
        colr = table_C_O_L_R_()
        for name, attrs, content in parseXML(COLR_V0_XML):
            colr.fromXML(name, attrs, content, font)
        compiled = colr.compile(font)

        colr = table_C_O_L_R_()
        colr.decompile(compiled, font)
        assert getXML(colr.toXML, font) == COLR_V0_XML


COLR_V1_SAMPLE = (
    (b"\x00\x01", "Version (1)"),
    (b"\x00\x01", "BaseGlyphRecordCount (1)"),
    (
        b"\x00\x00\x00\x22",
        "Offset to BaseGlyphRecordArray from beginning of table (34)",
    ),
    (b"\x00\x00\x00\x28", "Offset to LayerRecordArray from beginning of table (40)"),
    (b"\x00\x03", "LayerRecordCount (3)"),
    (b"\x00\x00\x00\x34", "Offset to BaseGlyphList from beginning of table (52)"),
    (b"\x00\x00\x00\x9f", "Offset to LayerList from beginning of table (159)"),
    (b"\x00\x00\x01\x62", "Offset to ClipList (354)"),
    (b"\x00\x00\x00\x00", "Offset to DeltaSetIndexMap (NULL)"),
    (b"\x00\x00\x00\x00", "Offset to VarStore (NULL)"),
    (b"\x00\x06", "BaseGlyphRecord[0].BaseGlyph (6)"),
    (b"\x00\x00", "BaseGlyphRecord[0].FirstLayerIndex (0)"),
    (b"\x00\x03", "BaseGlyphRecord[0].NumLayers (3)"),
    (b"\x00\x07", "LayerRecord[0].LayerGlyph (7)"),
    (b"\x00\x00", "LayerRecord[0].PaletteIndex (0)"),
    (b"\x00\x08", "LayerRecord[1].LayerGlyph (8)"),
    (b"\x00\x01", "LayerRecord[1].PaletteIndex (1)"),
    (b"\x00\t", "LayerRecord[2].LayerGlyph (9)"),
    (b"\x00\x02", "LayerRecord[2].PaletteIndex (2)"),
    # BaseGlyphList
    (b"\x00\x00\x00\x03", "BaseGlyphList.BaseGlyphCount (3)"),
    (b"\x00\n", "BaseGlyphList.BaseGlyphPaintRecord[0].BaseGlyph (10)"),
    (
        b"\x00\x00\x00\x16",
        "Offset to Paint table from beginning of BaseGlyphList (22)",
    ),
    (b"\x00\x0e", "BaseGlyphList.BaseGlyphPaintRecord[1].BaseGlyph (14)"),
    (
        b"\x00\x00\x00\x1c",
        "Offset to Paint table from beginning of BaseGlyphList (28)",
    ),
    (b"\x00\x0f", "BaseGlyphList.BaseGlyphPaintRecord[2].BaseGlyph (15)"),
    (
        b"\x00\x00\x00\x4a",
        "Offset to Paint table from beginning of BaseGlyphList (74)",
    ),
    # BaseGlyphPaintRecord[0]
    (b"\x01", "BaseGlyphPaintRecord[0].Paint.Format (1)"),
    (b"\x04", "BaseGlyphPaintRecord[0].Paint.NumLayers (4)"),
    (b"\x00\x00\x00\x00", "BaseGlyphPaintRecord[0].Paint.FirstLayerIndex (0)"),
    # BaseGlyphPaintRecord[1]
    (b"\x20", "BaseGlyphPaintRecord[1].Paint.Format (32)"),
    (b"\x00\x00\x0f", "Offset to SourcePaint from beginning of PaintComposite (15)"),
    (b"\x03", "BaseGlyphPaintRecord[1].Paint.CompositeMode [SRC_OVER] (3)"),
    (b"\x00\x00\x08", "Offset to BackdropPaint from beginning of PaintComposite (8)"),
    (b"\x0d", "BaseGlyphPaintRecord[1].Paint.BackdropPaint.Format (13)"),
    (b"\x00\x00\x07", "Offset to Paint from beginning of PaintVarTransform (7)"),
    (b"\x00\x00\x0a", "Offset to VarAffine2x3 from beginning of PaintVarTransform (10)"),
    (b"\x0b", "BaseGlyphPaintRecord[1].Paint.BackdropPaint.Format (11)"),
    (b"\x00\x0a", "BaseGlyphPaintRecord[1].Paint.BackdropPaint.Glyph (10)"),
    (b"\x00\x01\x00\x00", "VarAffine2x3.xx (1.0)"),
    (b"\x00\x00\x00\x00", "VarAffine2x3.xy (0.0)"),
    (b"\x00\x00\x00\x00", "VarAffine2x3.yx (0.0)"),
    (b"\x00\x01\x00\x00", "VarAffine2x3.yy (1.0)"),
    (b"\x01\x2c\x00\x00", "VarAffine2x3.dx (300.0)"),
    (b"\x00\x00\x00\x00", "VarAffine2x3.dy (0.0)"),
    (b"\x00\x00\x00\x00", "VarIndexBase (0)"),
    (b"\x0a", "BaseGlyphPaintRecord[1].Paint.SourcePaint.Format (10)"),
    (b"\x00\x00\x06", "Offset to Paint subtable from beginning of PaintGlyph (6)"),
    (b"\x00\x0b", "BaseGlyphPaintRecord[1].Paint.SourcePaint.Glyph (11)"),
    (b"\x08", "BaseGlyphPaintRecord[1].Paint.SourcePaint.Paint.Format (8)"),
    (b"\x00\x00\x0c", "Offset to ColorLine from beginning of PaintSweepGradient (12)"),
    (b"\x01\x03", "centerX (259)"),
    (b"\x01\x2c", "centerY (300)"),
    (b"\x10\x00", "startAngle (0.25)"),
    (b"\x30\x00", "endAngle (0.75)"),
    (b"\x00", "ColorLine.Extend (0; pad)"),
    (b"\x00\x02", "ColorLine.StopCount (2)"),
    (b"\x00\x00", "ColorLine.ColorStop[0].StopOffset (0.0)"),
    (b"\x00\x03", "ColorLine.ColorStop[0].PaletteIndex (3)"),
    (b"@\x00", "ColorLine.ColorStop[0].Alpha (1.0)"),
    (b"@\x00", "ColorLine.ColorStop[1].StopOffset (1.0)"),
    (b"\x00\x05", "ColorLine.ColorStop[1].PaletteIndex (5)"),
    (b"@\x00", "ColorLine.ColorStop[1].Alpha (1.0)"),
    # LayerList
    (b"\x00\x00\x00\x04", "LayerList.LayerCount (4)"),
    (
        b"\x00\x00\x00\x14",
        "First Offset to Paint table from beginning of LayerList (20)",
    ),
    (
        b"\x00\x00\x00\x23",
        "Second Offset to Paint table from beginning of LayerList (35)",
    ),
    (
        b"\x00\x00\x00\x4e",
        "Third Offset to Paint table from beginning of LayerList (78)",
    ),
    (
        b"\x00\x00\x00\x9e",
        "Fourth Offset to Paint table from beginning of LayerList (158)",
    ),
    # BaseGlyphPaintRecord[2]
    (b"\x0a", "BaseGlyphPaintRecord[2].Paint.Format (10)"),
    (b"\x00\x00\x06", "Offset to Paint subtable from beginning of PaintGlyph (6)"),
    (b"\x00\x0b", "BaseGlyphPaintRecord[2].Paint.Glyph (11)"),
    # PaintVarSolid
    (b"\x03", "LayerList.Paint[0].Paint.Format (3)"),
    (b"\x00\x02", "Paint.PaletteIndex (2)"),
    (b" \x00", "Paint.Alpha.value (0.5)"),
    (b"\x00\x00\x00\x06", "VarIndexBase (6)"),
    # PaintGlyph glyph00012
    (b"\x0a", "LayerList.Paint[1].Format (10)"),
    (b"\x00\x00\x06", "Offset to Paint subtable from beginning of PaintGlyph (6)"),
    (b"\x00\x0c", "LayerList.Paint[1].Glyph (glyph00012)"),
    (b"\x04", "LayerList.Paint[1].Paint.Format (4)"),
    (b"\x00\x00\x10", "Offset to ColorLine from beginning of PaintLinearGradient (16)"),
    (b"\x00\x01", "Paint.x0 (1)"),
    (b"\x00\x02", "Paint.y0 (2)"),
    (b"\xff\xfd", "Paint.x1 (-3)"),
    (b"\xff\xfc", "Paint.y1 (-4)"),
    (b"\x00\x05", "Paint.x2 (5)"),
    (b"\x00\x06", "Paint.y2 (6)"),
    (b"\x01", "ColorLine.Extend (1; repeat)"),
    (b"\x00\x03", "ColorLine.StopCount (3)"),
    (b"\x00\x00", "ColorLine.ColorStop[0].StopOffset (0.0)"),
    (b"\x00\x03", "ColorLine.ColorStop[0].PaletteIndex (3)"),
    (b"@\x00", "ColorLine.ColorStop[0].Alpha (1.0)"),
    (b" \x00", "ColorLine.ColorStop[1].StopOffset (0.5)"),
    (b"\x00\x04", "ColorLine.ColorStop[1].PaletteIndex (4)"),
    (b"@\x00", "ColorLine.ColorStop[1].Alpha (1.0)"),
    (b"@\x00", "ColorLine.ColorStop[2].StopOffset (1.0)"),
    (b"\x00\x05", "ColorLine.ColorStop[2].PaletteIndex (5)"),
    (b"@\x00", "ColorLine.ColorStop[2].Alpha (1.0)"),
    # PaintGlyph glyph00013
    (b"\x0a", "LayerList.Paint[2].Format (10)"),
    (b"\x00\x00\x06", "Offset to Paint subtable from beginning of PaintGlyph (6)"),
    (b"\x00\x0d", "LayerList.Paint[2].Glyph (13)"),
    (b"\x0c", "LayerList.Paint[2].Paint.Format (12)"),
    (b"\x00\x00\x07", "Offset to Paint subtable from beginning of PaintTransform (7)"),
    (b"\x00\x00\x32", "Offset to Affine2x3 subtable from beginning of PaintTransform (50)"),
    (b"\x07", "LayerList.Paint[2].Paint.Paint.Format (7)"),
    (b"\x00\x00\x14", "Offset to ColorLine from beginning of PaintVarRadialGradient (20)"),
    (b"\x00\x07", "Paint.x0.value (7)"),
    (b"\x00\x08", "Paint.y0.value (8)"),
    (b"\x00\t", "Paint.r0.value (9)"),
    (b"\x00\n", "Paint.x1.value (10)"),
    (b"\x00\x0b", "Paint.y1.value (11)"),
    (b"\x00\x0c", "Paint.r1.value (12)"),
    (b"\xff\xff\xff\xff", "VarIndexBase (0xFFFFFFFF)"),
    (b"\x00", "ColorLine.Extend (0; pad)"),
    (b"\x00\x02", "ColorLine.StopCount (2)"),
    (b"\x00\x00", "ColorLine.ColorStop[0].StopOffset.value (0.0)"),
    (b"\x00\x06", "ColorLine.ColorStop[0].PaletteIndex (6)"),
    (b"@\x00", "ColorLine.ColorStop[0].Alpha.value (1.0)"),
    (b"\xff\xff\xff\xff", "VarIndexBase (0xFFFFFFFF)"),
    (b"@\x00", "ColorLine.ColorStop[1].StopOffset.value (1.0)"),
    (b"\x00\x07", "ColorLine.ColorStop[1].PaletteIndex (7)"),
    (b"\x19\x9a", "ColorLine.ColorStop[1].Alpha.value (0.4)"),

    (b"\x00\x00\x00\x07", "VarIndexBase (7)"),
    (b"\xff\xf3\x00\x00", "Affine2x3.xx (-13)"),
    (b"\x00\x0e\x00\x00", "Affine2x3.xy (14)"),
    (b"\x00\x0f\x00\x00", "Affine2x3.yx (15)"),
    (b"\xff\xef\x00\x00", "Affine2x3.yy (-17)"),
    (b"\x00\x12\x00\x00", "Affine2x3.yy (18)"),
    (b"\x00\x13\x00\x00", "Affine2x3.yy (19)"),

    # PaintTranslate
    (b"\x0e", "LayerList.Paint[3].Format (14)"),
    (b"\x00\x00\x08", "Offset to Paint subtable from beginning of PaintTranslate (8)"),
    (b"\x01\x01", "dx (257)"),
    (b"\x01\x02", "dy (258)"),

    # PaintRotateAroundCenter
    (b"\x1a", "LayerList.Paint[3].Paint.Format (26)"),
    (
        b"\x00\x00\x0a",
        "Offset to Paint subtable from beginning of PaintRotateAroundCenter (11)",
    ),
    (b"\x10\x00", "angle (0.25)"),
    (b"\x00\xff", "centerX (255)"),
    (b"\x01\x00", "centerY (256)"),

    # PaintSkew
    (b"\x1c", "LayerList.Paint[3].Paint.Paint.Format (28)"),
    (
        b"\x00\x00\x08",
        "Offset to Paint subtable from beginning of PaintSkew (8)",
    ),
    (b"\xfc\x17", "xSkewAngle (-0.0611)"),
    (b"\x01\xc7", "ySkewAngle (0.0278)"),

    # PaintGlyph
    (b"\x0a", "LayerList.Paint[3].Paint.Paint.Paint.Format (10)"),
    (b"\x00\x00\x06", "Offset to Paint subtable from beginning of PaintGlyph (6)"),
    (b"\x00\x0b", "LayerList.Paint[2].Glyph (11)"),

    # PaintSolid
    (b"\x02", "LayerList.Paint[0].Paint.Paint.Paint.Paint.Format (2)"),
    (b"\x00\x02", "Paint.PaletteIndex (2)"),
    (b" \x00", "Paint.Alpha (0.5)"),

    # ClipList
    (b'\x01', "ClipList.Format (1)"),
    (b'\x00\x00\x00\x02', "ClipList.ClipCount (2)"),
    (b'\x00\x0a', "ClipRecord[0].StartGlyphID (10)"),
    (b'\x00\x0a', "ClipRecord[0].EndGlyphID (10)"),
    (b'\x00\x00\x13', "Offset to ClipBox subtable from beginning of ClipList (19)"),
    (b'\x00\x0e', "ClipRecord[1].StartGlyphID (14)"),
    (b'\x00\x0f', "ClipRecord[1].EndGlyphID (15)"),
    (b'\x00\x00\x20', "Offset to ClipBox subtable from beginning of ClipList (32)"),

    (b'\x02', "ClipBox.Format (2)"),
    (b'\x00\x00', "ClipBox.xMin (0)"),
    (b'\x00\x00', "ClipBox.yMin (0)"),
    (b'\x01\xf4', "ClipBox.xMax (500)"),
    (b'\x01\xf4', "ClipBox.yMax (500)"),
    (b'\x00\x00\x00\t', "ClipBox.VarIndexBase (9)"),

    (b'\x01', "ClipBox.Format (1)"),
    (b'\x00\x00', "ClipBox.xMin (0)"),
    (b'\x00\x00', "ClipBox.yMin (0)"),
    (b'\x03\xe8', "ClipBox.xMax (1000)"),
    (b'\x03\xe8', "ClipBox.yMax (1000)"),
)

COLR_V1_DATA = b"".join(t[0] for t in COLR_V1_SAMPLE)

COLR_V1_XML = [
    '<Version value="1"/>',
    "<!-- BaseGlyphRecordCount=1 -->",
    "<BaseGlyphRecordArray>",
    '  <BaseGlyphRecord index="0">',
    '    <BaseGlyph value="glyph00006"/>',
    '    <FirstLayerIndex value="0"/>',
    '    <NumLayers value="3"/>',
    "  </BaseGlyphRecord>",
    "</BaseGlyphRecordArray>",
    "<LayerRecordArray>",
    '  <LayerRecord index="0">',
    '    <LayerGlyph value="glyph00007"/>',
    '    <PaletteIndex value="0"/>',
    "  </LayerRecord>",
    '  <LayerRecord index="1">',
    '    <LayerGlyph value="glyph00008"/>',
    '    <PaletteIndex value="1"/>',
    "  </LayerRecord>",
    '  <LayerRecord index="2">',
    '    <LayerGlyph value="glyph00009"/>',
    '    <PaletteIndex value="2"/>',
    "  </LayerRecord>",
    "</LayerRecordArray>",
    "<!-- LayerRecordCount=3 -->",
    "<BaseGlyphList>",
    "  <!-- BaseGlyphCount=3 -->",
    '  <BaseGlyphPaintRecord index="0">',
    '    <BaseGlyph value="glyph00010"/>',
    '    <Paint Format="1"><!-- PaintColrLayers -->',
    '      <NumLayers value="4"/>',
    '      <FirstLayerIndex value="0"/>',
    "    </Paint>",
    "  </BaseGlyphPaintRecord>",
    '  <BaseGlyphPaintRecord index="1">',
    '    <BaseGlyph value="glyph00014"/>',
    '    <Paint Format="32"><!-- PaintComposite -->',
    '      <SourcePaint Format="11"><!-- PaintColrGlyph -->',
    '        <Glyph value="glyph00010"/>',
    "      </SourcePaint>",
    '      <CompositeMode value="src_over"/>',
    '      <BackdropPaint Format="13"><!-- PaintVarTransform -->',
    '        <Paint Format="11"><!-- PaintColrGlyph -->',
    '          <Glyph value="glyph00010"/>',
    "        </Paint>",
    "        <Transform>",
    '          <xx value="1.0"/>',
    '          <yx value="0.0"/>',
    '          <xy value="0.0"/>',
    '          <yy value="1.0"/>',
    '          <dx value="300.0"/>',
    '          <dy value="0.0"/>',
    '          <VarIndexBase value="0"/>',
    "        </Transform>",
    "      </BackdropPaint>",
    "    </Paint>",
    "  </BaseGlyphPaintRecord>",
    '  <BaseGlyphPaintRecord index="2">',
    '    <BaseGlyph value="glyph00015"/>',
    '    <Paint Format="10"><!-- PaintGlyph -->',
    '      <Paint Format="8"><!-- PaintSweepGradient -->',
    "        <ColorLine>",
    '          <Extend value="pad"/>',
    "          <!-- StopCount=2 -->",
    '          <ColorStop index="0">',
    '            <StopOffset value="0.0"/>',
    '            <PaletteIndex value="3"/>',
    '            <Alpha value="1.0"/>',
    "          </ColorStop>",
    '          <ColorStop index="1">',
    '            <StopOffset value="1.0"/>',
    '            <PaletteIndex value="5"/>',
    '            <Alpha value="1.0"/>',
    "          </ColorStop>",
    "        </ColorLine>",
    '        <centerX value="259"/>',
    '        <centerY value="300"/>',
    '        <startAngle value="45.0"/>',
    '        <endAngle value="135.0"/>',
    "      </Paint>",
    '      <Glyph value="glyph00011"/>',
    "    </Paint>",
    "  </BaseGlyphPaintRecord>",
    "</BaseGlyphList>",
    "<LayerList>",
    "  <!-- LayerCount=4 -->",
    '  <Paint index="0" Format="10"><!-- PaintGlyph -->',
    '    <Paint Format="3"><!-- PaintVarSolid -->',
    '      <PaletteIndex value="2"/>',
    '      <Alpha value="0.5"/>',
    '      <VarIndexBase value="6"/>',
    "    </Paint>",
    '    <Glyph value="glyph00011"/>',
    "  </Paint>",
    '  <Paint index="1" Format="10"><!-- PaintGlyph -->',
    '    <Paint Format="4"><!-- PaintLinearGradient -->',
    "      <ColorLine>",
    '        <Extend value="repeat"/>',
    "        <!-- StopCount=3 -->",
    '        <ColorStop index="0">',
    '          <StopOffset value="0.0"/>',
    '          <PaletteIndex value="3"/>',
    '          <Alpha value="1.0"/>',
    "        </ColorStop>",
    '        <ColorStop index="1">',
    '          <StopOffset value="0.5"/>',
    '          <PaletteIndex value="4"/>',
    '          <Alpha value="1.0"/>',
    "        </ColorStop>",
    '        <ColorStop index="2">',
    '          <StopOffset value="1.0"/>',
    '          <PaletteIndex value="5"/>',
    '          <Alpha value="1.0"/>',
    "        </ColorStop>",
    "      </ColorLine>",
    '      <x0 value="1"/>',
    '      <y0 value="2"/>',
    '      <x1 value="-3"/>',
    '      <y1 value="-4"/>',
    '      <x2 value="5"/>',
    '      <y2 value="6"/>',
    "    </Paint>",
    '    <Glyph value="glyph00012"/>',
    "  </Paint>",
    '  <Paint index="2" Format="10"><!-- PaintGlyph -->',
    '    <Paint Format="12"><!-- PaintTransform -->',
    '      <Paint Format="7"><!-- PaintVarRadialGradient -->',
    "        <ColorLine>",
    '          <Extend value="pad"/>',
    "          <!-- StopCount=2 -->",
    '          <ColorStop index="0">',
    '            <StopOffset value="0.0"/>',
    '            <PaletteIndex value="6"/>',
    '            <Alpha value="1.0"/>',
    "            <VarIndexBase/>",
    "          </ColorStop>",
    '          <ColorStop index="1">',
    '            <StopOffset value="1.0"/>',
    '            <PaletteIndex value="7"/>',
    '            <Alpha value="0.4"/>',
    '            <VarIndexBase value="7"/>',
    "          </ColorStop>",
    "        </ColorLine>",
    '        <x0 value="7"/>',
    '        <y0 value="8"/>',
    '        <r0 value="9"/>',
    '        <x1 value="10"/>',
    '        <y1 value="11"/>',
    '        <r1 value="12"/>',
    "        <VarIndexBase/>",
    "      </Paint>",
    "      <Transform>",
    '        <xx value="-13.0"/>',
    '        <yx value="14.0"/>',
    '        <xy value="15.0"/>',
    '        <yy value="-17.0"/>',
    '        <dx value="18.0"/>',
    '        <dy value="19.0"/>',
    "      </Transform>",
    "    </Paint>",
    '    <Glyph value="glyph00013"/>',
    "  </Paint>",
    '  <Paint index="3" Format="14"><!-- PaintTranslate -->',
    '    <Paint Format="26"><!-- PaintRotateAroundCenter -->',
    '      <Paint Format="28"><!-- PaintSkew -->',
    '        <Paint Format="10"><!-- PaintGlyph -->',
    '          <Paint Format="2"><!-- PaintSolid -->',
    '            <PaletteIndex value="2"/>',
    '            <Alpha value="0.5"/>',
    "          </Paint>",
    '          <Glyph value="glyph00011"/>',
    "        </Paint>",
    '        <xSkewAngle value="-11.0"/>',
    '        <ySkewAngle value="5.0"/>',
    "      </Paint>",
    '      <angle value="45.0"/>',
    '      <centerX value="255"/>',
    '      <centerY value="256"/>',
    "    </Paint>",
    '    <dx value="257"/>',
    '    <dy value="258"/>',
    "  </Paint>",
    "</LayerList>",
    '<ClipList Format="1">',
    "  <Clip>",
    '    <Glyph value="glyph00010"/>',
    '    <ClipBox Format="2">',
    '      <xMin value="0"/>',
    '      <yMin value="0"/>',
    '      <xMax value="500"/>',
    '      <yMax value="500"/>',
    '      <VarIndexBase value="9"/>',
    "    </ClipBox>",
    "  </Clip>",
    "  <Clip>",
    '    <Glyph value="glyph00014"/>',
    '    <Glyph value="glyph00015"/>',
    '    <ClipBox Format="1">',
    '      <xMin value="0"/>',
    '      <yMin value="0"/>',
    '      <xMax value="1000"/>',
    '      <yMax value="1000"/>',
    "    </ClipBox>",
    "  </Clip>",
    "</ClipList>",
]

COLR_V1_VAR_XML = [
    '<VarIndexMap Format="0">',
    '  <Map index="0" outer="1" inner="1"/>',
    '  <Map index="1" outer="1" inner="0"/>',
    '  <Map index="2" outer="1" inner="0"/>',
    '  <Map index="3" outer="1" inner="1"/>',
    '  <Map index="4" outer="1" inner="0"/>',
    '  <Map index="5" outer="1" inner="0"/>',
    '  <Map index="6" outer="0" inner="2"/>',
    '  <Map index="7" outer="0" inner="0"/>',
    '  <Map index="8" outer="0" inner="1"/>',
    '  <Map index="9" outer="1" inner="0"/>',
    '  <Map index="10" outer="1" inner="0"/>',
    '  <Map index="11" outer="0" inner="3"/>',
    '  <Map index="12" outer="0" inner="3"/>',
    "</VarIndexMap>",
    '<VarStore Format="1">',
    '  <Format value="1"/>',
    "  <VarRegionList>",
    "    <!-- RegionAxisCount=1 -->",
    "    <!-- RegionCount=1 -->",
    '    <Region index="0">',
    '      <VarRegionAxis index="0">',
    '        <StartCoord value="0.0"/>',
    '        <PeakCoord value="1.0"/>',
    '        <EndCoord value="1.0"/>',
    "      </VarRegionAxis>",
    "    </Region>",
    "  </VarRegionList>",
    "  <!-- VarDataCount=2 -->",
    '  <VarData index="0">',
    "    <!-- ItemCount=4 -->",
    '    <NumShorts value="1"/>',
    "    <!-- VarRegionCount=1 -->",
    '    <VarRegionIndex index="0" value="0"/>',
    '    <Item index="0" value="[-3277]"/>',
    '    <Item index="1" value="[6553]"/>',
    '    <Item index="2" value="[8192]"/>',
    '    <Item index="3" value="[500]"/>',
    "  </VarData>",
    '  <VarData index="1">',
    "    <!-- ItemCount=2 -->",
    '    <NumShorts value="32769"/>',
    "    <!-- VarRegionCount=1 -->",
    '    <VarRegionIndex index="0" value="0"/>',
    '    <Item index="0" value="[0]"/>',
    '    <Item index="1" value="[65536]"/>',
    "  </VarData>",
    "</VarStore>",
]


class COLR_V1_Test(object):
    def test_decompile_and_compile(self, font):
        colr = table_C_O_L_R_()
        colr.decompile(COLR_V1_DATA, font)
        diff_binary_fragments(colr.compile(font), COLR_V1_SAMPLE)

    def test_decompile_and_dump_xml(self, font):
        colr = table_C_O_L_R_()
        colr.decompile(COLR_V1_DATA, font)

        dump(colr, font)
        assert getXML(colr.toXML, font) == COLR_V1_XML

    def test_load_from_xml_and_compile(self, font):
        colr = table_C_O_L_R_()
        for name, attrs, content in parseXML(COLR_V1_XML):
            colr.fromXML(name, attrs, content, font)
        diff_binary_fragments(colr.compile(font), COLR_V1_SAMPLE)

    def test_round_trip_xml(self, font):
        colr = table_C_O_L_R_()
        for name, attrs, content in parseXML(COLR_V1_XML):
            colr.fromXML(name, attrs, content, font)
        compiled = colr.compile(font)

        colr = table_C_O_L_R_()
        colr.decompile(compiled, font)
        assert getXML(colr.toXML, font) == COLR_V1_XML


class COLR_V1_Variable_Test(object):
    def test_round_trip_xml(self, font):
        colr = table_C_O_L_R_()
        xml = COLR_V1_XML + COLR_V1_VAR_XML
        for name, attrs, content in parseXML(xml):
            colr.fromXML(name, attrs, content, font)
        compiled = colr.compile(font)

        colr = table_C_O_L_R_()
        colr.decompile(compiled, font)
        assert getXML(colr.toXML, font) == xml
