package dice import ( "errors" "reflect" "testing" ) func TestRoll(t *testing.T) { roller := NewRoller(1) result, err := roller.Roll("2d6") if err != nil { t.Error(err) } if !reflect.DeepEqual(result, []int{6, 4}) { t.Errorf("Expected roll to equal [6, 4], but got %#v", result) } } func TestRollToJSON(t *testing.T) { r := NewRoller(1) roll, _ := r.Roll("2d6") result, err := RollToJSON(roll) if err != nil { t.Error(err) } expectedResult := `{"results":[6,4]}` if !reflect.DeepEqual([]byte(expectedResult), result) { t.Errorf("Expected '%v', but got '%v'", string(expectedResult), string(result)) } } func TestParseRoll(t *testing.T) { _, err := parseRoll("1e6") expectedMsg := "Must pass string matching '[1-9][0-9]*d[1-9]+' you passed '1e6'" expectedError := errors.New(expectedMsg) if err.Error() != expectedError.Error() { t.Errorf("Expected error message: %v; got: %v", expectedError, err) } result, err := parseRoll("2d10") if err != nil { t.Errorf("Expected 'parseRoll(\"2d10\")' to not error, got %v", err) } if result.count != 2 { t.Errorf("Expected 'result.count' to equal '2'; got: %v", result.count) } if result.diceType != 10 { t.Errorf("Expected 'result.count' to equal '10'; got: %v", result.count) } }