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)
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)
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])
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)
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)
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
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)
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"
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"
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"
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")
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)
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")
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
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
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)),
("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),
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%"