Skip to content

Commit 8e7a794

Browse files
committed
Finalize new case comand (Ready for review)
1 parent 9b5cab9 commit 8e7a794

File tree

4 files changed

+83
-66
lines changed

4 files changed

+83
-66
lines changed

commands/case.go

+46-25
Original file line numberDiff line numberDiff line change
@@ -43,28 +43,30 @@ func writeLinesToFile(filename string, lines []string) {
4343
}
4444
}
4545

46-
func AddNewCaseInput(input_lines []string,
47-
case_name string,
48-
meta_data config.EgorMeta) (config.EgorMeta, error) {
46+
func AddNewCaseInput(inputLines []string,
47+
caseName string,
48+
metaData config.EgorMeta,
49+
noTimeOut bool) (config.EgorMeta, error) {
4950

50-
input_file_name := case_name + ".in"
51-
writeLinesToFile("inputs/"+input_file_name, input_lines)
52-
input_file := config.NewIoFile(input_file_name, "inputs/"+input_file_name, true)
53-
meta_data.Inputs = append(meta_data.Inputs, input_file)
51+
inputFileName := caseName + ".in"
52+
writeLinesToFile(path.Join("inputs", inputFileName), inputLines)
53+
inputFile := config.NewIoFile(inputFileName, path.Join("inputs", inputFileName), true, noTimeOut)
54+
metaData.Inputs = append(metaData.Inputs, inputFile)
5455

55-
return meta_data, nil
56+
return metaData, nil
5657
}
5758

58-
func AddNewCaseOutput(output_lines []string,
59-
case_name string,
60-
meta_data config.EgorMeta) (config.EgorMeta, error) {
59+
func AddNewCaseOutput(outputLines []string,
60+
caseName string,
61+
metaData config.EgorMeta,
62+
noTimeOut bool) (config.EgorMeta, error) {
6163

62-
output_file_name := case_name + ".ans"
63-
writeLinesToFile("outputs/"+output_file_name, output_lines)
64-
output_file := config.NewIoFile(output_file_name, "outputs/"+output_file_name, true)
65-
meta_data.Outputs = append(meta_data.Outputs, output_file)
64+
outputFileName := caseName + ".ans"
65+
writeLinesToFile(path.Join("outputs", outputFileName), outputLines)
66+
outputFile := config.NewIoFile(outputFileName, path.Join("outputs", outputFileName), true, noTimeOut)
67+
metaData.Outputs = append(metaData.Outputs, outputFile)
6668

67-
return meta_data, nil
69+
return metaData, nil
6870
}
6971

7072
// TODO(Eroui): add checks on errors
@@ -74,33 +76,47 @@ func CustomCaseAction(context *cli.Context) error {
7476
// Load meta data
7577
cwd, err := os.Getwd()
7678
if err != nil {
79+
color.Red("Failed to Generate Custom Case")
7780
return err
7881
}
7982

80-
meta_data, err := config.LoadMetaFromPath(path.Join(cwd, "egor-meta.json"))
83+
metaData, err := config.LoadMetaFromPath(path.Join(cwd, "egor-meta.json"))
8184
if err != nil {
85+
color.Red("Failed to load egor MetaData ")
8286
return err
8387
}
8488

85-
case_name := "test-" + strconv.Itoa(len(meta_data.Inputs))
89+
noTimeOut := context.Bool("no-timeout")
90+
91+
caseName := "test-" + strconv.Itoa(len(metaData.Inputs))
8692
color.Green("Provide your input:")
87-
input_lines := readFromStdin()
88-
meta_data, err = AddNewCaseInput(input_lines, case_name, meta_data)
93+
inputLines := readFromStdin()
94+
metaData, err = AddNewCaseInput(inputLines, caseName, metaData, noTimeOut)
95+
96+
if err != nil {
97+
color.Red("Failed to add new case input")
98+
return err
99+
}
89100

90101
if !context.Bool("no-output") {
91102
color.Green("Provide your output:")
92-
output_lines := readFromStdin()
93-
meta_data, err = AddNewCaseOutput(output_lines, case_name, meta_data)
103+
outputLines := readFromStdin()
104+
metaData, err = AddNewCaseOutput(outputLines, caseName, metaData, noTimeOut)
105+
106+
if err != nil {
107+
color.Red("Failed to add new case output")
108+
return err
109+
}
94110
}
95111

96-
meta_data.SaveToFile(path.Join(cwd, "egor-meta.json"))
112+
metaData.SaveToFile(path.Join(cwd, "egor-meta.json"))
97113

98114
if err != nil {
99-
color.Red("Failed to Generate Custom Case")
115+
color.Red("Failed to save to MetaData")
100116
return err
101117
}
102118

103-
color.Green("Created Custom Test Case...")
119+
color.Green("Created Custom Test Case")
104120
return nil
105121
}
106122

@@ -116,5 +132,10 @@ var CaseCommand = cli.Command{
116132
Usage: "This test case doesnt have output",
117133
Value: false,
118134
},
135+
&cli.BoolFlag{
136+
Name: "no-timeout",
137+
Usage: "This test case should not timeout when passed time limit",
138+
Value: false,
139+
},
119140
},
120141
}

commands/case_test.go

+22-25
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,11 @@ import (
44
"github.com/chermehdi/egor/config"
55
"github.com/stretchr/testify/assert"
66
"os"
7-
"path"
87
"testing"
9-
108
)
119

12-
func DeleteDir(dirPath string) {
13-
_ = os.RemoveAll(dirPath)
14-
}
15-
1610
func createDummyMetaData() (config.EgorMeta) {
17-
meta_data := config.EgorMeta {
11+
meteData := config.EgorMeta {
1812
TaskName: "Dummy Task",
1913
TaskLang: "cpp",
2014
Inputs: []config.IoFile {
@@ -38,41 +32,44 @@ func createDummyMetaData() (config.EgorMeta) {
3832
},
3933
}
4034

41-
return meta_data
35+
return meteData
4236
}
4337

4438

4539
func TestAddNewCaseInput(t *testing.T) {
46-
meta_data := createDummyMetaData()
40+
meteData := createDummyMetaData()
4741

4842
// create temp inputs directory
4943
_ = os.Mkdir("inputs", 0777)
5044

51-
input_lines := [2]string{"Hello", "World"}
52-
case_name := "test-2"
53-
meta_data = AddNewCaseInput(input_lines, case_name, meta_data)
45+
inputLines := []string{"Hello", "World"}
46+
caseName := "test-2"
47+
meteData, err := AddNewCaseInput(inputLines, caseName, meteData, true)
5448

55-
assert.Equal(t, len(meta_data.Inputs), 3)
56-
assert.Equal(t, meta_data.Inputs[2].Name, case_name + ".in")
57-
assert.Equal(t, meta_data.Inputs[2].Custom, true)
49+
assert.Equal(t, err, nil)
50+
assert.Equal(t, len(meteData.Inputs), 3)
51+
assert.Equal(t, meteData.Inputs[2].Name, caseName + ".in")
52+
assert.Equal(t, meteData.Inputs[2].Custom, true)
53+
assert.Equal(t, meteData.Inputs[2].NoTimeOut, true)
5854

59-
DeleteDir("inputs")
55+
_ = os.RemoveAll("inputs")
6056
}
6157

6258

63-
func TestAddNewCaseInput(t *testing.T) {
64-
meta_data := createDummyMetaData()
59+
func TestAddNewCaseOutput(t *testing.T) {
60+
meteData := createDummyMetaData()
6561

6662
// create temp outputs directory
6763
_ = os.Mkdir("outputs", 0777)
6864

69-
input_lines := [2]string{"Hello", "World"}
70-
case_name := "test-2"
71-
meta_data = AddNewCaseOutput(input_lines, case_name, meta_data)
65+
outputLines := []string{"Hello", "World"}
66+
caseName := "test-2"
67+
meteData, err := AddNewCaseOutput(outputLines, caseName, meteData, true)
7268

73-
assert.Equal(t, len(meta_data.Inputs), 2)
74-
assert.Equal(t, meta_data.Outputs[1].Name, case_name + ".ans")
75-
assert.Equal(t, meta_data.Outputs[1].Custom, true)
69+
assert.Equal(t, err, nil)
70+
assert.Equal(t, len(meteData.Outputs), 2)
71+
assert.Equal(t, meteData.Outputs[1].Name, caseName + ".ans")
72+
assert.Equal(t, meteData.Outputs[1].Custom, true)
7673

77-
DeleteDir("outputs")
74+
_ = os.RemoveAll("outputs")
7875
}

commands/parse.go

-3
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,6 @@ func SerializeTask(meta EgorMeta) (string, error) {
3030
return buffer.String(), nil
3131
}
3232

33-
func CreateFile(filePath string) (*os.File, error) {
34-
return os.OpenFile(filePath, os.O_TRUNC|os.O_CREATE|os.O_WRONLY, 0777)
35-
}
3633

3734
func CreateDirectoryStructure(task Task, config Config, rootDir string) (string, error) {
3835
taskDir := path.Join(rootDir, task.Name)

config/meta.go

+15-13
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,18 @@ import (
1111
)
1212

1313
type IoFile struct {
14-
Name string
15-
Path string
16-
Custom bool
14+
Name string
15+
Path string
16+
Custom bool
17+
NoTimeOut bool
1718
}
1819

19-
func NewIoFile(fileName, filePath string, custom_case bool) IoFile {
20+
func NewIoFile(fileName, filePath string, custom_case, noTimeOut bool) IoFile {
2021
return IoFile{
21-
Name: fileName,
22-
Path: filePath,
23-
Custom: custom_case,
22+
Name: fileName,
23+
Path: filePath,
24+
Custom: custom_case,
25+
NoTimeOut: noTimeOut,
2426
}
2527
}
2628

@@ -56,8 +58,8 @@ func NewEgorMeta(task Task, config Config) EgorMeta {
5658
outputs := make([]IoFile, testCount)
5759
for i := 0; i < testCount; i++ {
5860
fileName := fmt.Sprintf("test-%d", i)
59-
inputs[i] = NewIoFile(fileName, path.Join("inputs", fileName+".in"), false)
60-
outputs[i] = NewIoFile(fileName, path.Join("outputs", fileName+".ans"), false)
61+
inputs[i] = NewIoFile(fileName, path.Join("inputs", fileName+".in"), false, false)
62+
outputs[i] = NewIoFile(fileName, path.Join("outputs", fileName+".ans"), false, false)
6163
}
6264
taskFile, err := GetTaskName(config)
6365
if err != nil {
@@ -89,8 +91,8 @@ func (egor *EgorMeta) Save(w io.Writer) error {
8991
return err
9092
}
9193

92-
func (egor *EgorMeta) SaveToFile(file_path string) error {
93-
file, _ := CreateFile(file_path)
94+
func (egor *EgorMeta) SaveToFile(filePath string) error {
95+
file, _ := CreateFile(filePath)
9496
return egor.Save(file)
9597
}
9698

@@ -108,8 +110,8 @@ func LoadMeta(r io.Reader) (EgorMeta, error) {
108110
return egor_meta, err
109111
}
110112

111-
func LoadMetaFromPath(file_path string) (EgorMeta, error) {
112-
file, _ := OpenFileFromPath(file_path)
113+
func LoadMetaFromPath(filePath string) (EgorMeta, error) {
114+
file, _ := OpenFileFromPath(filePath)
113115
return LoadMeta(file)
114116
}
115117

0 commit comments

Comments
 (0)