Пример #1
0
def test_enum():
    enum_test = [("suit",
                  b.enum(8, {
                      0: "diamonds",
                      1: "hearts",
                      2: "spades",
                      3: "clubs"
                  }))]

    for value, suit in zip(list(range(4)),
                           ["diamonds", "hearts", "spades", "clubs"]):
        data = bytearray([value])
        result = b.parse(data, enum_test)

        assert_equal(result.suit, suit)
        assert_equal(b.write(result, enum_test), data)

    spades_test = b.parse([2], enum_test)
    spades_test.suit = "clubs"

    assert_equal(bytearray([3]), b.write(spades_test))

    def get_data_field():
        data = bytearray([42])
        result = b.parse(data, enum_test)
        result.suit

    assert_raises(ValueError, get_data_field)
Пример #2
0
def test_enum():
    enum_test = [
        ("suit", b.enum(8, {
            0: "diamonds",
            1: "hearts",
            2: "spades",
            3: "clubs"
        }))]

    for value, suit in zip(
            list(range(4)), ["diamonds", "hearts", "spades", "clubs"]):
        data = bytearray([value])
        result = b.parse(data, enum_test)

        assert_equal(result.suit, suit)
        assert_equal(b.write(result, enum_test), data)

    spades_test = b.parse([2], enum_test)
    spades_test.suit = "clubs"

    assert_equal(bytearray([3]), b.write(spades_test))

    def get_data_field():
        data = bytearray([42])
        result = b.parse(data, enum_test)
        result.suit

    assert_raises(ValueError, get_data_field)
Пример #3
0
def test_enum_multiple_values_same_key():
    enum_test = [
        ('waveform', b.enum(8, {
            0: 'triangle',
            1: 'saw down',
            2: 'saw up',
            3: 'square',
            4: 'sine',
            (5, 7): 'sample and hold'
        }))
    ]

    data = bytearray([7])
    result = b.parse(data, enum_test)
    assert result.waveform == 'sample and hold'

    dumped = b.write(result, enum_test)
    assert dumped == bytearray([7])

    data = bytearray([5])
    result = b.parse(data, enum_test)
    assert result.waveform == 'sample and hold'

    data = bytearray([2])
    result = b.parse(data, enum_test)
    assert result.waveform == 'saw up'

    test_struct = b.new(enum_test)
    test_struct.waveform = 'sample and hold'

    dumped = b.write(test_struct, enum_test)
    assert dumped == bytearray([5])
Пример #4
0
def test_minimal_pylsdj_song():
    pulse_instrument = [
        ("envelope", b.byte),
    ]

    instrument = [
        ("instrument_type", b.enum(8, {
            0: 'pulse'
        })),
        (b.CONDITIONAL, "instrument_type", {
            "pulse": pulse_instrument
        })
    ]

    song = [
        ("instruments", b.array(1, instrument))
    ]

    DEFAULT_INSTRUMENT = bytearray([0, 0xa8])

    data_bytes = DEFAULT_INSTRUMENT

    parsed_song = b.parse(data_bytes, song)

    assert_equal(parsed_song.instruments[0].envelope, 0xa8)
Пример #5
0
def test_conditional_on_non_integer_enum():
    enum_test = [
        ("instrument_type", b.enum(8, {
            0: "pulse",
            1: "wave",
            2: "kit",
            3: "noise"
        })),
        (b.CONDITIONAL, "instrument_type", {
            "pulse": [("pulse_foo", b.uint8)],
            "wave": [("wave_foo", b.uint8)],
            "kit": [("kit_foo", b.uint8)],
            "noise": [("noise_foo", b.uint8)]
        })]

    pulse_test = bytearray([0, 19])

    pulse = b.parse(pulse_test, enum_test)

    assert_equal(pulse.instrument_type, "pulse")
    assert_equal(pulse.pulse_foo, 19)

    assert_equal(b.write(pulse, enum_test), pulse_test)

    wave_test = bytearray([1, 65])

    wave = b.parse(wave_test, enum_test)

    assert_equal(wave.instrument_type, "wave")
    assert_equal(wave.wave_foo, 65)

    assert_equal(b.write(wave, enum_test), wave_test)

    kit_test = bytearray([2, 9])

    kit = b.parse(kit_test, enum_test)

    assert_equal(kit.instrument_type, "kit")
    assert_equal(kit.kit_foo, 9)

    assert_equal(b.write(kit, enum_test), kit_test)

    noise_test = bytearray([3, 17])

    noise = b.parse(noise_test, enum_test)

    assert_equal(noise.instrument_type, "noise")
    assert_equal(noise.noise_foo, 17)

    assert_equal(b.write(noise, enum_test), noise_test)
Пример #6
0
def test_conditional_on_non_integer_enum():
    enum_test = [
        ("instrument_type", b.enum(8, {
            0: "pulse",
            1: "wave",
            2: "kit",
            3: "noise"
        })),
        (b.CONDITIONAL, "instrument_type", {
            "pulse": [("pulse_foo", b.uint8)],
            "wave": [("wave_foo", b.uint8)],
            "kit": [("kit_foo", b.uint8)],
            "noise": [("noise_foo", b.uint8)]
        })]

    pulse_test = bytearray([0, 19])

    pulse = b.parse(pulse_test, enum_test)

    assert pulse.instrument_type == "pulse"
    assert pulse.pulse_foo == 19

    assert b.write(pulse, enum_test) == pulse_test

    wave_test = bytearray([1, 65])

    wave = b.parse(wave_test, enum_test)

    assert wave.instrument_type == "wave"
    assert wave.wave_foo == 65

    assert b.write(wave, enum_test) == wave_test

    kit_test = bytearray([2, 9])

    kit = b.parse(kit_test, enum_test)

    assert kit.instrument_type == "kit"
    assert kit.kit_foo == 9

    assert b.write(kit, enum_test) == kit_test

    noise_test = bytearray([3, 17])

    noise = b.parse(noise_test, enum_test)

    assert noise.instrument_type == "noise"
    assert noise.noise_foo == 17

    assert b.write(noise, enum_test) == noise_test
Пример #7
0
def test_conditional_on_non_integer_enum():
    enum_test = [("instrument_type",
                  b.enum(8, {
                      0: "pulse",
                      1: "wave",
                      2: "kit",
                      3: "noise"
                  })),
                 (b.CONDITIONAL, "instrument_type", {
                     "pulse": [("pulse_foo", b.uint8)],
                     "wave": [("wave_foo", b.uint8)],
                     "kit": [("kit_foo", b.uint8)],
                     "noise": [("noise_foo", b.uint8)]
                 })]

    pulse_test = bytearray([0, 19])

    pulse = b.parse(pulse_test, enum_test)

    assert_equal(pulse.instrument_type, "pulse")
    assert_equal(pulse.pulse_foo, 19)

    assert_equal(b.write(pulse, enum_test), pulse_test)

    wave_test = bytearray([1, 65])

    wave = b.parse(wave_test, enum_test)

    assert_equal(wave.instrument_type, "wave")
    assert_equal(wave.wave_foo, 65)

    assert_equal(b.write(wave, enum_test), wave_test)

    kit_test = bytearray([2, 9])

    kit = b.parse(kit_test, enum_test)

    assert_equal(kit.instrument_type, "kit")
    assert_equal(kit.kit_foo, 9)

    assert_equal(b.write(kit, enum_test), kit_test)

    noise_test = bytearray([3, 17])

    noise = b.parse(noise_test, enum_test)

    assert_equal(noise.instrument_type, "noise")
    assert_equal(noise.noise_foo, 17)

    assert_equal(b.write(noise, enum_test), noise_test)
Пример #8
0
def test_enum_set_invalid_value():
    enum_test = [
        ("suit", b.enum(8, {
            0: "diamonds",
            1: "hearts",
            2: "spades",
            3: "clubs"
        }, default="joker"))]

    data = bytearray([1])
    parsed = b.parse(data, enum_test)

    assert_equal("hearts", parsed.suit)

    parsed.suit = "skulls"
Пример #9
0
def test_enum_set_invalid_value():
    with pytest.raises(ValueError):
        enum_test = [
            ("suit", b.enum(8, {
                0: "diamonds",
                1: "hearts",
                2: "spades",
                3: "clubs"
            }, default="joker"))]

        data = bytearray([1])
        parsed = b.parse(data, enum_test)

        assert "hearts" == parsed.suit

        parsed.suit = "skulls"
Пример #10
0
def test_enum_set_invalid_value():
    enum_test = [("suit",
                  b.enum(8, {
                      0: "diamonds",
                      1: "hearts",
                      2: "spades",
                      3: "clubs"
                  },
                         default="joker"))]

    data = bytearray([1])
    parsed = b.parse(data, enum_test)

    assert_equal("hearts", parsed.suit)

    parsed.suit = "skulls"
Пример #11
0
def test_enum_default():
    enum_test = [
        ("suit", b.enum(8, {
            0: "diamonds",
            1: "hearts",
            2: "spades",
            3: "clubs"
        }, default="joker"))]

    data = bytearray([42])
    result = b.parse(data, enum_test)

    assert_equal(result.suit, "joker")

    data = bytearray([2])
    result = b.parse(data, enum_test)

    assert_equal(result.suit, "spades")
Пример #12
0
def test_minimal_pylsdj_song():
    pulse_instrument = [
        ("envelope", b.byte),
    ]

    instrument = [("instrument_type", b.enum(8, {0: 'pulse'})),
                  (b.CONDITIONAL, "instrument_type", {
                      "pulse": pulse_instrument
                  })]

    song = [("instruments", b.array(1, instrument))]

    DEFAULT_INSTRUMENT = bytearray([0, 0xa8])

    data_bytes = DEFAULT_INSTRUMENT

    parsed_song = b.parse(data_bytes, song)

    assert_equal(parsed_song.instruments[0].envelope, 0xa8)
Пример #13
0
def test_enum_default():
    enum_test = [("suit",
                  b.enum(8, {
                      0: "diamonds",
                      1: "hearts",
                      2: "spades",
                      3: "clubs"
                  },
                         default="joker"))]

    data = bytearray([42])
    result = b.parse(data, enum_test)

    assert_equal(result.suit, "joker")

    data = bytearray([2])
    result = b.parse(data, enum_test)

    assert_equal(result.suit, "spades")
Пример #14
0
def test_enum():
    enum_test = [
        ("suit", b.enum(8, {
            0: "diamonds",
            1: "hearts",
            2: "spades",
            3: "clubs"
        }))]

    for value, suit in zip(range(4), ["diamonds", "hearts", "spades", "clubs"]):
        data = bytearray([value])
        result = b.parse(data, enum_test)

        assert result.suit == suit
        assert b.write(result, enum_test) == data

    try:
        data = bytearray([42])
        result = b.parse(data, enum_test)
        assert False, "Failed to throw an error"
    except ValueError, e:
        # expected
        pass
Пример #15
0
import bread as b
import sys

enum_data_type = [
		("type", b.enum(8, {
			0x50 : "raw",
			0x51 : "enc"
		}))
]

hex_data = [
		("data", b.array(5, b.byte), {"str_format": hex})
]

str_data = [
		("type", b.enum(8, {
			0x50 : "raw",
			0x51 : "enc"
		})),
		("data", b.array(5, b.byte), {"str_format": hex})
]

data = bytearray([0x51, 0x01, 0x02, 0x03, 0x04, 0x05])
parsed_data = b.parse(data, str_data)
print parsed_data

simple_spec_hex = [('addr', b.uint8, {"str_format": hex})]
parsed_data = b.parse(bytearray([42]), simple_spec_hex)
print parsed_data

Пример #16
0
        4:
        'sine',
        # Some sysex parsers (like the one in Dexed) seem to accept 6 and 7 as a
        # valid value for S&H, even though the spec's value is 5
        (5, 6, 7):
        'sample and hold'
    }
}

raw_operator = [
    ('eg_rates', b.array(4, b.uint8)),
    ('eg_levels', b.array(4, b.uint8)),
    ('keyboard_level_scaling_break_point', b.uint8),  # C3 = 0x27
    ('keyboard_level_scaling_left_depth', b.uint8),
    ('keyboard_level_scaling_right_depth', b.uint8),
    ('keyboard_level_scaling_left_curve', b.enum(8, enums['curves'])),
    ('keyboard_level_scaling_right_curve', b.enum(8, enums['curves'])),
    ('keyboard_rate_scaling', b.uint8),
    ('amp_mod_sensitivity', b.uint8),
    ('key_velocity_sensitivity', b.uint8),
    ('output_level', b.uint8),
    ('osc_mode', b.enum(8, enums['osc_mode'])),
    ('osc_frequency_coarse', b.uint8),
    ('osc_frequency_fine', b.uint8),
    ('osc_detune', b.uint8, {
        'offset': -7
    })  # Range from -7 to 7
]

raw_voice = [('operators', b.array(6, raw_operator)),
             ('pitch_eg_rates', b.array(4, b.uint8)),
Пример #17
0
 ("envelope", b.byte, {
     "str_format": padded_hex(2)
 }),
 ("phase_transpose", b.byte),
 b.padding(1),
 # If false, sound length is UNLIM
 ("has_sound_length", b.boolean),
 ("sound_length", b.intX(6)),
 ("sweep", b.byte),
 b.padding(3),
 ("automate", b.boolean),
 ("automate_2", b.boolean),
 ("vibrato", [("type",
               b.enum(2, {
                   0: "hf",
                   1: "sawtooth",
                   2: "sine",
                   3: "square"
               })), ("direction", b.enum(1, {
                   0: "down",
                   1: "up"
               }))]),
 b.padding(2),
 ("table_on", b.boolean),
 ("table", b.intX(5)),
 ("wave", b.enum(2, {
     0: "12.5%",
     1: "25%",
     2: "50%",
     3: "75%"
 })),
 ("phase_finetune", b.nibble),
Пример #18
0
pulse_instrument = [
    ("envelope", b.byte, {"str_format": padded_hex(2)}),
    ("phase_transpose", b.byte),
    b.padding(1),
    # If false, sound length is UNLIM
    ("has_sound_length", b.boolean),
    ("sound_length", b.intX(6)),
    ("sweep", b.byte),
    b.padding(3),
    ("automate", b.boolean),
    ("automate_2", b.boolean),
    ("vibrato", [
        ("type", b.enum(2, {
            0: "hf",
            1: "sawtooth",
            2: "sine",
            3: "square"
        })),
        ("direction", b.enum(1, {
            0: "down",
            1: "up"
        }))
    ]),
    b.padding(2),
    ("table_on", b.boolean),
    ("table", b.intX(5)),
    ("wave", b.enum(2, {
        0: "12.5%",
        1: "25%",
        2: "50%",
        3: "75%"