Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Proper error messages + other polish #38

Merged
merged 22 commits into from
Feb 3, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
f6da213
Added code to get the line number of a node
JimmyCushnie Feb 2, 2022
05a2cc2
added some exception types
JimmyCushnie Feb 2, 2022
9cd52c3
Throw exception when a base type fails to parse; create tests for it
JimmyCushnie Feb 2, 2022
58836db
Cache the runtime-generated generic methods for handling generic coll…
JimmyCushnie Feb 2, 2022
f8fc425
Refactor collection types and throw nice errors when there's a proble…
JimmyCushnie Feb 2, 2022
a38cff7
properly throw exception when trying to get collection data from a no…
JimmyCushnie Feb 2, 2022
098ba0a
add tests for invalid array data
JimmyCushnie Feb 2, 2022
fd840f2
add tests for invalid dictionary data
JimmyCushnie Feb 2, 2022
13982e7
improve error handling so that the line numbers are reported correctl…
JimmyCushnie Feb 2, 2022
1343c11
check for errors on complex types
JimmyCushnie Feb 2, 2022
5ec4da2
check for a format error
JimmyCushnie Feb 2, 2022
176f3de
added tests for invalid complex type data
JimmyCushnie Feb 2, 2022
e0ca222
Error messages now print the file identifier (i.e. the path to the fi…
JimmyCushnie Feb 2, 2022
cd5dfcf
memory data files now use a GUID for their identifiers if not explici…
JimmyCushnie Feb 2, 2022
2e3931d
Refactored parsing error tests
JimmyCushnie Feb 2, 2022
ccd262d
Small cleanup of InvalidFileStructureException and throw nicer errors…
JimmyCushnie Feb 2, 2022
c02e1f8
DataFiles now let the parsing errors fall through, since correct erro…
JimmyCushnie Feb 2, 2022
01b2e5b
Catch when there are duplicate sibling keys
JimmyCushnie Feb 2, 2022
024ac08
Catch many more errors with multi-line string formatting
JimmyCushnie Feb 3, 2022
7c5687b
add tests for invalid file structure errors
JimmyCushnie Feb 3, 2022
7204155
File structure errors now correctly print line number instead of line…
JimmyCushnie Feb 3, 2022
49fba04
Tests using TestUtilities now print information about the tests to st…
JimmyCushnie Feb 3, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions Changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@
* `System.Version` has been added as a built-in base type
* Added `FileInfo` and `DirectoryInfo` as built-in base types
* New and better system for adding custom base types; removed the kind of shitty old system
* Vastly improved errors. Many more kinds of error are caught, and error messages have helpful information like the file path and line number.
* Improved performance when working with generic collections (i.e. `List<T>`) by caching the runtime-compiled generic methods

todo update the docs for 1.2

Expand Down
129 changes: 129 additions & 0 deletions SUCC.Tests/Invalid file structure tests/InvalidFileStructureTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
using Microsoft.VisualStudio.TestTools.UnitTesting;
using SUCC.MemoryFiles;

namespace SUCC.Tests
{
[TestClass]
public class InvalidFileStructureTests
{
[TestMethod]
public void InvalidFileStructure_NoKeyValue()
{
const string fileText = @"
this line doesn't have a colon to indicate key/value
";
TestUtilities.PerformInvalidFileStructureTest(fileText);
}

[TestMethod]
public void InvalidFileStructure_DuplicateTopLevelKeys()
{
const string fileText = @"
key: value
key: value2
";
TestUtilities.PerformInvalidFileStructureTest(fileText);
}

[TestMethod]
public void InvalidFileStructure_DuplicateNestedKeys()
{
const string fileText = @"
key:
key2: lol
key2: cum
";
TestUtilities.PerformInvalidFileStructureTest(fileText);
}

[TestMethod]
public void InvalidFileStructure_MismatchedSiblingIndents_Back()
{
const string fileText = @"
key:
key2: lol
key3: cum
";
TestUtilities.PerformInvalidFileStructureTest(fileText);
}

[TestMethod]
public void InvalidFileStructure_MismatchedSiblingIndents_Forward()
{
const string fileText = @"
key:
key2: lol
key3: cum
";
TestUtilities.PerformInvalidFileStructureTest(fileText);
}

[TestMethod]
public void InvalidFileStructure_TopLevelListNodes()
{
const string fileText = @"
key: value
Key2: value2
key3:
- regular
- list

- floating list node
";
TestUtilities.PerformInvalidFileStructureTest(fileText);
}



[TestMethod]
public void InvalidFileStructure_MultiLineString_NoBody()
{
const string fileText = @"
key: """"""

key2: value
";
TestUtilities.PerformInvalidFileStructureTest(fileText);
}

[TestMethod]
public void InvalidFileStructure_MultiLineString_MissingTerminator()
{
const string fileText = @"
key: """"""
multi-line string
but it doesn't have a terminator!
fuck!

key2: value
";
TestUtilities.PerformInvalidFileStructureTest(fileText);
}

[TestMethod]
public void InvalidFileStructure_MultiLineString_MismatchedBodyIndents()
{
const string fileText = @"
key: """"""
multi-line string
but the indents are screwy
fuck!
""""""
";
TestUtilities.PerformInvalidFileStructureTest(fileText);
}

[TestMethod]
public void InvalidFileStructure_MultiLineString_MismatchedTerminatorIndent()
{
const string fileText = @"
key: """"""
multi-line string
but the terminator indent is
fuck!
""""""
";
TestUtilities.PerformInvalidFileStructureTest(fileText);
}
}
}
56 changes: 56 additions & 0 deletions SUCC.Tests/Parsing error tests/InvalidArrayDataTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
using Microsoft.VisualStudio.TestTools.UnitTesting;
using SUCC.MemoryFiles;

namespace SUCC.Tests
{
[TestClass]
public class InvalidArrayDataTests
{
[TestMethod]
public void InvalidFileData_InvalidArrayData_NodeHasValue()
{
const string fileText = @"
data: lol this isn't an int array
";
TestUtilities.PerformParsingErrorTest<int[]>(fileText);
}

[TestMethod]
public void InvalidFileData_InvalidArrayData_InvalidListItemNode()
{
const string fileText = @"
data:
- 0
- 1
- cum
- 69
";
TestUtilities.PerformParsingErrorTest<int[]>(fileText);
}

[TestMethod]
public void InvalidFileData_InvalidArrayData_InvalidNestedCollection()
{
const string fileText = @"
data:
- 22
- 121
-
- 55
- 6969
- 11
";
TestUtilities.PerformParsingErrorTest<int[]>(fileText);
}

[TestMethod]
public void InvalidFileData_InvalidArrayData_InvalidKeyChildren()
{
const string fileText = @"
data:
child: node
";
TestUtilities.PerformParsingErrorTest<int[]>(fileText);
}
}
}
29 changes: 29 additions & 0 deletions SUCC.Tests/Parsing error tests/InvalidBaseTypeNodeDataTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
using Microsoft.VisualStudio.TestTools.UnitTesting;
using SUCC.MemoryFiles;

namespace SUCC.Tests
{
[TestClass]
public class InvalidBaseTypeNodeDataTests
{
[TestMethod]
public void InvalidFileData_InvalidBaseType_InvalidNodeValue()
{
const string fileText = @"
data: notanint
";
TestUtilities.PerformParsingErrorTest<int>(fileText);
}

[TestMethod]
public void InvalidFileData_InvalidBaseType_BadSpecialStringCase()
{
const string fileText = @"
data: """"""
lmao it's a string
""""""
";
TestUtilities.PerformParsingErrorTest<int>(fileText);
}
}
}
87 changes: 87 additions & 0 deletions SUCC.Tests/Parsing error tests/InvalidComplexTypeDataTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
using Microsoft.VisualStudio.TestTools.UnitTesting;
using SUCC.MemoryFiles;
using System.Collections.Generic;

namespace SUCC.Tests
{
[TestClass]
public class InvalidComplexTypeDataTests
{
[TestMethod]
public void InvalidFileData_InvalidComplexTypeData_InvalidShortcut()
{
const string fileText = @"
data: this is an invalid shortcut lol
";
TestUtilities.PerformParsingErrorTest<ComplexType>(fileText);
}

[TestMethod]
public void InvalidFileData_InvalidComplexTypeData_ConstructorShortcutWithInvalidData()
{
const string fileText = @"
data: (0, test, cum)
";
TestUtilities.PerformParsingErrorTest<ComplexType>(fileText);
}

[TestMethod]
public void InvalidFileData_InvalidComplexTypeData_MethodShortcutWithInvalidData()
{
const string fileText = @"
data: MethodShortcut(cum, test, false)
";
TestUtilities.PerformParsingErrorTest<ComplexType>(fileText);
}

[TestMethod]
public void InvalidFileData_InvalidComplexTypeData_InvalidDataInChildren()
{
const string fileText = @"
data:
Integer: 69
String: sex
Boolean: invalid
";
TestUtilities.PerformParsingErrorTest<ComplexType>(fileText);
}

[TestMethod]
public void InvalidFileData_InvalidComplexTypeData_ChildrenAreListNodes()
{
const string fileText = @"
data:
- lol
- it's a list lol
";
TestUtilities.PerformParsingErrorTest<ComplexType>(fileText);
}

[TestMethod]
public void InvalidFileData_InvalidComplexTypeData_ChildrenAreMultiLineString()
{
const string fileText = @"
data: """"""
this is a string haha
indeed, it's a multi-line string!
""""""
";
TestUtilities.PerformParsingErrorTest<ComplexType>(fileText);
}


const string ValidFileStructure_InvalidComplexTypeData = @"


ComplexType5:
- lol
- it's a list lol

ComplexType6: """"""
this is a string haha
indeed, it's a multi-line string!
""""""

";
}
}
70 changes: 70 additions & 0 deletions SUCC.Tests/Parsing error tests/InvalidDictionaryDataTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
using Microsoft.VisualStudio.TestTools.UnitTesting;
using SUCC.MemoryFiles;
using System.Collections.Generic;

namespace SUCC.Tests
{
[TestClass]
public class InvalidDictionaryDataTests
{
[TestMethod]
public void InvalidFileData_InvalidDictionaryData_NodeHasValue()
{
const string fileText = @"
data: lol this isn't a dictionary
";
TestUtilities.PerformParsingErrorTest<Dictionary<string, int>>(fileText);
}

[TestMethod]
public void InvalidFileData_InvalidDictionaryData_HasWrongListForChildren()
{
const string fileText = @"
data:
- 0
- 1
- 69
";
TestUtilities.PerformParsingErrorTest<Dictionary<string, int>>(fileText);
}

[TestMethod]
public void InvalidFileData_InvalidDictionaryData_OneInvalidValue()
{
const string fileText = @"
data:
key: 12
key2: 35
key3: sex
";
TestUtilities.PerformParsingErrorTest<Dictionary<string, int>>(fileText);
}

[TestMethod]
public void InvalidFileData_InvalidDictionaryData_OneInvalidKey()
{
const string fileText = @"
data:
12: value
25: value2
sex: value3
";
TestUtilities.PerformParsingErrorTest<Dictionary<int, string>>(fileText);
}

[TestMethod]
public void InvalidFileData_InvalidDictionaryData_InvalidArrayDictionary()
{
const string fileText = @"
data:
-
key: sex
value: 420
-
key: balls
value: ass
";
TestUtilities.PerformParsingErrorTest<Dictionary<string, int>>(fileText);
}
}
}
Loading