diff --git a/app/server/sonicpi/lib/sonicpi/note.rb b/app/server/sonicpi/lib/sonicpi/note.rb index 9aaac05fd5..eee7a6dedc 100644 --- a/app/server/sonicpi/lib/sonicpi/note.rb +++ b/app/server/sonicpi/lib/sonicpi/note.rb @@ -13,6 +13,8 @@ module SonicPi class Note + class InvalidNoteError < ArgumentError ; end ; + NOTES_TO_INTERVALS = {c: 0, C: 0, cs: 1, CS: 1, cS: 1, Cs: 1, @@ -59,7 +61,7 @@ class Note DEFAULT_OCTAVE = 4 - MIDI_NOTE_RE = /(([a-gA-G])([sSbBfF]?))([-]?[0-9]*)/ + MIDI_NOTE_RE = /\A(([a-gA-G])([sSbBfF]?))([-]?[0-9]*)\Z/ attr_reader :pitch_class, :octave, :interval, :midi_note, :midi_string @@ -97,7 +99,7 @@ def initialize(n, o=nil) m = MIDI_NOTE_RE.match n - raise "Invalid note: #{n}" unless m + raise InvalidNoteError, "Invalid note: #{n}" unless m @pitch_class = "#{m[2].capitalize}#{unify_sharp_flat_modifier(m[3])}".to_sym if o diff --git a/app/server/sonicpi/test/test_note.rb b/app/server/sonicpi/test/test_note.rb index cb205f8be1..0e6fbd0389 100644 --- a/app/server/sonicpi/test/test_note.rb +++ b/app/server/sonicpi/test/test_note.rb @@ -119,5 +119,13 @@ def test_init_Fs3_7 assert_equal(6, n.interval) assert_equal(102, n.midi_note) end + + def test_init_error_sam + assert_raise Note::InvalidNoteError do + Note.new(:sam) + end + end end + + end