From 3baa597cb1c12ddb684a168de4cb4172e1681200 Mon Sep 17 00:00:00 2001 From: Eric Willigers Date: Thu, 22 May 2025 18:06:55 +1000 Subject: [PATCH 1/3] idris uses slug --- workspace/test_configurations.go | 11 ++++++++- workspace/test_configurations_test.go | 32 +++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/workspace/test_configurations.go b/workspace/test_configurations.go index 497100818..3953b96af 100644 --- a/workspace/test_configurations.go +++ b/workspace/test_configurations.go @@ -2,6 +2,8 @@ package workspace import ( "fmt" + "os" + "path/filepath" "runtime" "strings" ) @@ -55,6 +57,13 @@ func (c *TestConfiguration) GetTestCommand() (string, error) { } cmd = strings.ReplaceAll(cmd, "{{test_files}}", strings.Join(testFiles, " ")) } + if strings.Contains(cmd, "{{slug}}") { + currentDir, err := os.Getwd() + if err != nil { + return "", fmt.Errorf("current directory invalid") + } + cmd = strings.ReplaceAll(cmd, "{{slug}}", filepath.Base(currentDir)) + } return cmd, nil } @@ -152,7 +161,7 @@ var TestConfigurations = map[string]TestConfiguration{ Command: "stack test", }, "idris": { - Command: "pack test `basename *.ipkg .ipkg`", + Command: "pack test {{slug}}", }, "j": { Command: `jconsole -js "exit echo unittest {{test_files}} [ load {{solution_files}}"`, diff --git a/workspace/test_configurations_test.go b/workspace/test_configurations_test.go index 97ff40902..7a093a5a1 100644 --- a/workspace/test_configurations_test.go +++ b/workspace/test_configurations_test.go @@ -101,3 +101,35 @@ func TestRustHasTrailingDashes(t *testing.T) { assert.True(t, strings.HasSuffix(cmd, "--"), "rust's test command should have trailing dashes") } + +func TestIdrisUsesCurrentDirectory(t *testing.T) { + currentDir, err := os.Getwd() + assert.NoError(t, err) + + exerciseDir := filepath.Join(currentDir, "hello-world") + defer os.RemoveAll(exerciseDir) + err = os.Mkdir(exerciseDir, os.ModePerm) + assert.NoError(t, err) + + defer os.Chdir(currentDir) + err = os.Chdir(exerciseDir) + assert.NoError(t, err) + + exercismDir := filepath.Join(".", ".exercism") + err = os.Mkdir(exercismDir, os.ModePerm) + assert.NoError(t, err) + + f, err := os.Create(filepath.Join(exercismDir, "config.json")) + assert.NoError(t, err) + defer f.Close() + + _, err = f.WriteString(`{ "files": { "solution": [ "src/HelloWorld.idr" ], "test": [ "test/src/Main.idr" ] } }`) + assert.NoError(t, err) + + testConfig, ok := TestConfigurations["idris"] + assert.True(t, ok, "unexpectedly unable to find idris test config") + + cmd, err := testConfig.GetTestCommand() + assert.NoError(t, err) + assert.Equal(t, cmd, "pack test hello-world") +} From 1f815869ec55271f8b024971325dc8e6a948fcb6 Mon Sep 17 00:00:00 2001 From: Eric Willigers Date: Mon, 26 May 2025 21:57:09 +1000 Subject: [PATCH 2/3] Obtain exercise slug from metadata --- workspace/test_configurations.go | 8 +++----- workspace/test_configurations_test.go | 26 +++++++++++++++++--------- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/workspace/test_configurations.go b/workspace/test_configurations.go index 3953b96af..d07a62f0e 100644 --- a/workspace/test_configurations.go +++ b/workspace/test_configurations.go @@ -2,8 +2,6 @@ package workspace import ( "fmt" - "os" - "path/filepath" "runtime" "strings" ) @@ -58,11 +56,11 @@ func (c *TestConfiguration) GetTestCommand() (string, error) { cmd = strings.ReplaceAll(cmd, "{{test_files}}", strings.Join(testFiles, " ")) } if strings.Contains(cmd, "{{slug}}") { - currentDir, err := os.Getwd() + metadata, err := NewExerciseMetadata(".") if err != nil { - return "", fmt.Errorf("current directory invalid") + return "", err } - cmd = strings.ReplaceAll(cmd, "{{slug}}", filepath.Base(currentDir)) + cmd = strings.ReplaceAll(cmd, "{{slug}}", metadata.ExerciseSlug) } return cmd, nil diff --git a/workspace/test_configurations_test.go b/workspace/test_configurations_test.go index 7a093a5a1..d22c08140 100644 --- a/workspace/test_configurations_test.go +++ b/workspace/test_configurations_test.go @@ -106,24 +106,32 @@ func TestIdrisUsesCurrentDirectory(t *testing.T) { currentDir, err := os.Getwd() assert.NoError(t, err) - exerciseDir := filepath.Join(currentDir, "hello-world") - defer os.RemoveAll(exerciseDir) - err = os.Mkdir(exerciseDir, os.ModePerm) + tmpDir, err := os.MkdirTemp("", "solution") + assert.NoError(t, err) + defer os.RemoveAll(tmpDir) + + em := &ExerciseMetadata{ + Track: "idris", + ExerciseSlug: "bogus-exercise", + ID: "abc", + URL: "http://example.com", + Handle: "alice", + IsRequester: true, + Dir: tmpDir, + } + err = em.Write(tmpDir) assert.NoError(t, err) defer os.Chdir(currentDir) - err = os.Chdir(exerciseDir) + err = os.Chdir(tmpDir) assert.NoError(t, err) exercismDir := filepath.Join(".", ".exercism") - err = os.Mkdir(exercismDir, os.ModePerm) - assert.NoError(t, err) - f, err := os.Create(filepath.Join(exercismDir, "config.json")) assert.NoError(t, err) defer f.Close() - _, err = f.WriteString(`{ "files": { "solution": [ "src/HelloWorld.idr" ], "test": [ "test/src/Main.idr" ] } }`) + _, err = f.WriteString(`{ "files": { "solution": [ "src/BogusExercise.idr" ], "test": [ "test/src/Main.idr" ] } }`) assert.NoError(t, err) testConfig, ok := TestConfigurations["idris"] @@ -131,5 +139,5 @@ func TestIdrisUsesCurrentDirectory(t *testing.T) { cmd, err := testConfig.GetTestCommand() assert.NoError(t, err) - assert.Equal(t, cmd, "pack test hello-world") + assert.Equal(t, cmd, "pack test bogus-exercise") } From b814c83f5c3a99e28dad8c7bb75e9f5ad6ffbd76 Mon Sep 17 00:00:00 2001 From: Eric Willigers Date: Tue, 27 May 2025 04:43:43 +1000 Subject: [PATCH 3/3] TestIdrisUsesExerciseSlug --- workspace/test_configurations_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workspace/test_configurations_test.go b/workspace/test_configurations_test.go index d22c08140..b8a8097ee 100644 --- a/workspace/test_configurations_test.go +++ b/workspace/test_configurations_test.go @@ -102,7 +102,7 @@ func TestRustHasTrailingDashes(t *testing.T) { assert.True(t, strings.HasSuffix(cmd, "--"), "rust's test command should have trailing dashes") } -func TestIdrisUsesCurrentDirectory(t *testing.T) { +func TestIdrisUsesExerciseSlug(t *testing.T) { currentDir, err := os.Getwd() assert.NoError(t, err)