def test_init(self):
        """
    Struggling to write good tests here

    """
        d = chords.ChordDiagram(name="D",
                                strings=[
                                    chords.String([chords.Dot(2, 1)]),
                                    chords.String([chords.Dot(2, 1)]),
                                    chords.String([chords.Dot(2, 1)]),
                                    chords.String(
                                        [chords.Dot(5, 3),
                                         chords.Dot(2, 1)])
                                ])
        #d.show()

        d.draw()
        self.assertTrue(d.string_top < d.string_bottom)

        #Check frets are not on top of each other
        fret_y = 0
        for f in d.frets:
            self.assertTrue(f.y > fret_y)
            fret_y = f.y

        #'Normal' chord, diagram should have 5 frets
        self.assertEqual(d.num_frets, 5)

        #d.show()

        d = chords.ChordDiagram(name="G",
                                strings=[
                                    chords.String([chords.Dot(0)]),
                                    chords.String([chords.Dot(2, 1)]),
                                    chords.String([chords.Dot(3, 3)]),
                                    chords.String([chords.Dot(2, 2)])
                                ])
        d.draw()

        #Guitar G chord
        d = chords.ChordDiagram(name="G",
                                strings=[
                                    chords.String([chords.Dot(3, 2)]),
                                    chords.String([chords.Dot(2, 1)]),
                                    chords.String([chords.Dot(0)]),
                                    chords.String([chords.Dot(0)]),
                                    chords.String([chords.Dot(0)]),
                                    chords.String([chords.Dot(3, 3)])
                                ])
        #Check strings are not on top of each other
        d.draw()
        self.assertEqual(d.num_strings, 6)
        string_x = 0
        for s in d.strings:
            self.assertTrue(s.string_x > string_x)
            string_x = s.string_x
            self.assertTrue(string_x < d.box_width)
Example #2
0
 def test_lefty(self):
      achord = "{define: A frets 2 1 0 0 fingers 2 1 0 0}"
      d = chords.ChordDiagram(lefty = True)
      d.parse_definition(achord)
      self.assertEqual(d.to_chordpro(), "{define: A frets 0 0 1 2}")
      self.assertEqual(d.strings[3].dots[0].fret, 2)
      self.assertEqual(d.strings[3].dots[0].finger, None) # No fingers on left-handed chords
    def test_chord_finder(self):
        C = chordprobook.chords.Chord('C')
        instruments = chordprobook.instruments.Instruments()
        plucky = instruments.get_instrument_by_name("Plucky")

        C.find_fingerings(plucky)
        self.assertTrue([0, 0, 0, 0] in C._fingering_array)

        C_sharp = chordprobook.chords.Chord('C#')
        C_sharp.find_fingerings(plucky)
        self.assertTrue([1, 1, 1, 1] in C_sharp._fingering_array)

        c7 = chordprobook.chords.Chord('C7')
        c7.find_fingerings(plucky)
        self.assertTrue([0, 0, 0, 3] in c7._fingering_array)
        self.assertTrue([3, 0, 0, 0] in c7._fingering_array)

        F = chordprobook.chords.Chord('F')
        F.find_fingerings(plucky)
        d = chords.ChordDiagram(offsets=F._fingering_array[0])
        #d.draw()
        #d.show()

        D = chordprobook.chords.Chord('D')
        D.find_fingerings(plucky)
        print("D", D._fingering_array)

        D = chordprobook.chords.Chord('D6')
        D.find_fingerings(plucky)
        print("D6", D._fingering_array)

        #Try to find chords in impossible situations
        #These should all NOT work
        c_instrument = chordprobook.instruments.Instrument(data={
            "name": "c",
            "tuning": "CCCCCCC"
        })
        D.find_fingerings(c_instrument)
        self.assertEqual(D._fingering_array, [])

        print(c7.to_chordpro())
    def test_parse(self):
        #Simple chord
        achord = "{define: A frets 2 1 0 0}"
        d = chords.ChordDiagram()
        d.parse_definition(achord)
        d.draw()
        self.assertEqual(d.num_strings, 4)
        self.assertEqual(d.strings[0].dots[0].fret, 2)
        self.assertEqual(d.strings[0].dots[0].finger, None)
        self.assertEqual(d.strings[1].dots[0].fret, 1)
        self.assertEqual(d.strings[1].dots[0].finger, None)
        self.assertEqual(d.strings[2].dots[0].fret, 0)
        self.assertEqual(d.strings[2].dots[0].finger, None)
        self.assertEqual(d.strings[3].dots[0].fret, 0)
        self.assertEqual(d.strings[3].dots[0].finger, None)

        # Simple chord without "frets"
        achord = "{define: A 2 1 0 0}"
        d = chords.ChordDiagram()
        d.parse_definition(achord)
        d.draw()
        self.assertEqual(d.num_strings, 4)
        self.assertEqual(d.strings[0].dots[0].fret, 2)
        self.assertEqual(d.strings[0].dots[0].finger, None)
        self.assertEqual(d.strings[1].dots[0].fret, 1)
        self.assertEqual(d.strings[1].dots[0].finger, None)
        self.assertEqual(d.strings[2].dots[0].fret, 0)
        self.assertEqual(d.strings[2].dots[0].finger, None)
        self.assertEqual(d.strings[3].dots[0].fret, 0)
        self.assertEqual(d.strings[3].dots[0].finger, None)

        # Chord with fingering
        achord = "{define: A frets 2 1 0 0 fingers 2 1 0 0}"
        d = chords.ChordDiagram()
        d.parse_definition(achord)
        d.draw()
        self.assertEqual(d.num_strings, 4)
        self.assertEqual(d.strings[0].dots[0].fret, 2)
        self.assertEqual(d.strings[1].dots[0].fret, 1)
        self.assertEqual(d.strings[2].dots[0].fret, 0)
        self.assertEqual(d.strings[3].dots[0].fret, 0)

        # Chord with added fingering
        aaugchord = "{define: Aaug frets 2 1 1 4 fingers 2 1 1 4 add: string 1 fret 1 finger 1 add: string 4 fret 1 finger 1}"
        d = chords.ChordDiagram()
        d.parse_definition(aaugchord)
        d.draw()
        self.assertEqual(d.num_strings, 4)
        # TODO - check serialisation of this chord with fingers and all

        # Chord with non-played strings
        dchord = "{define: D x 0 0 2 3 2}"
        d = chords.ChordDiagram()
        d.parse_definition(dchord)
        d.draw()
        self.assertEqual(d.num_strings, 6)
        self.assertEqual(d.strings[0].dots[0].fret, None)
        self.assertEqual(d.strings[1].dots[0].fret, 0)
        self.assertEqual(d.strings[2].dots[0].fret, 0)
        self.assertEqual(d.strings[3].dots[0].fret, 2)
        self.assertEqual(d.strings[4].dots[0].fret, 3)
        self.assertEqual(d.strings[5].dots[0].fret, 2)

        # Chord starting on a higher fret
        e5chord = "{define: E5 base-fret 7 frets 0 1 3 3 x x}"
        d = chords.ChordDiagram()
        d.parse_definition(e5chord)
        d.draw()
        #d.show()
        self.assertEqual(d.num_strings, 6)
        self.assertEqual(d.strings[0].dots[0].fret, 0)
        self.assertEqual(d.strings[1].dots[0].fret, 1)
        self.assertEqual(d.strings[2].dots[0].fret, 3)
        self.assertEqual(d.strings[3].dots[0].fret, 3)
        self.assertEqual(d.strings[4].dots[0].fret, None)
        self.assertEqual(d.strings[5].dots[0].fret, None)

        # Same E5 chord starting on a higher fret
        e5chord = "{define: E5 frets 0 8 10 10 x x}"
        d = chords.ChordDiagram()
        d.parse_definition(e5chord)
        d.draw()
        #d.show()
        self.assertEqual(d.num_strings, 6)
        self.assertEqual(d.strings[0].dots[0].fret, 0)
        self.assertEqual(d.strings[1].dots[0].fret, 1)
        self.assertEqual(d.strings[2].dots[0].fret, 3)
        self.assertEqual(d.strings[3].dots[0].fret, 3)
        self.assertEqual(d.strings[4].dots[0].fret, None)
        self.assertEqual(d.strings[5].dots[0].fret, None)
        self.assertEqual(d.open_strings, 1)
        self.assertEqual(d.non_played_strings, 2)
        self.assertEqual(d.to_chordpro(),
                         "{define: E5 base-fret 7 frets 0 1 3 3 x x}")

        dchord = "{define: D base-fret 1 frets  1 1 1 4}"
        d = chords.ChordDiagram()
        d.parse_definition(dchord)
        d.draw()
        self.assertEqual(d.num_strings, 4)
        self.assertEqual(d.strings[0].dots[0].fret, 2)
        self.assertEqual(d.strings[1].dots[0].fret, 2)
        self.assertEqual(d.strings[2].dots[0].fret, 2)
        self.assertEqual(d.strings[3].dots[0].fret, 5)

        # Stupid chord requiring 7 fingers and 8 strings
        stupid = "{define: F#stupid base-fret 22 frets 1 2 3 x 4 5 6 7 8 9 10 11 fingers 11 10 9 8 0 7 6 5 4 3 2 1}"
        d = chords.ChordDiagram()
        d.parse_definition(stupid)
        d.draw()
        self.assertEqual(d.non_played_strings, 1)