## Fuzz testing module -- Nimcheck against random, binary, and malicious inputs. ## Auto-generated. Tests framework robustness, never-crash guarantee. import std/[unittest, strutils, strformat, math, sequtils] import ../src/nimcheck const allLangs* = [lfNim, lfBash, lfPython, lfJavaScript, lfPHP, lfHTML, lfJinja, lfJSON, lfYAML, lfTOML] const threeLangs* = [lfNim, lfPython, lfJSON] suite "Fuzz and Robustness Tests": test "null bytes in every language": let src = "\x00\x01\x02\x03hello\x00world" for lang in allLangs: let result = validateSource(src, flavor = lang) check result.errors.len >= 0 test "very long strings (10k chars)": let src = "x = \"" & repeat('A', 1000) & "\"" for lang in [lfNim, lfPython, lfJavaScript]: let result = validateSource(src, flavor = lang) check result.errors.len >= 0 test "deep bracket nesting (100 levels)": let src = "let x = " & repeat('(', 100) & "42" & repeat(')', 100) let result = validateSource(src, flavor = lfJavaScript) check result.errors.len >= 0 test "unclosed strings at end of file (every lang)": let src = "x = \"unclosed" for lang in allLangs: let result = validateSource(src, flavor = lang) check result.errors.len >= 0 test "empty source never crashes": for lang in allLangs: let result = validateSource("", flavor = lang) check result.errors.len >= 0 test "whitespace-only source": let src = " \t \n \t \n " for lang in allLangs: let result = validateSource(src, flavor = lang) check result.errors.len >= 0 test "raw binary data never crashes": let src = "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F\x10ABCDEFGH\x1F\x20\x7F\x80\xFF" for lang in threeLangs: let result = validateSource(src, flavor = lang) check result.errors.len >= 0 test "unicode BOM and weird encodings": let src = "\xEF\xBB\xBF\xF0\x9F\x98\x80\xE2\x82\xAC\xC0\xAF" for lang in allLangs: let result = validateSource(src, flavor = lang) check result.errors.len >= 0 test "high unicode (surrogate pairs)": let src = "let x = '\U0001F600\U0001F601\U0001F602'" let result = validateSource(src, flavor = lfJavaScript) check result.errors.len >= 0 test "mixed encoding attack": let src = "proc hello() =\x80\x81\x82\x83\n discard\n" let result = validateSource(src, flavor = lfNim) check result.errors.len >= 0 test "alternating open/close brackets with garbage": let src = "({[({[({[({[)}])}])}])}" let result = validateSource(src, flavor = lfJavaScript) check result.errors.len >= 0 test "inspectSource never crashes on any input": for lang in allLangs: let json = inspectSource("garbage!@#$%^&*()_+", flavor = lang) check json.kind == JObject test "version and supportedFlavors": check version().len > 0 check supportedFlavors().len >= 10 test "detectFlavor on all good code samples": discard detectFlavor("proc x() = discard") discard detectFlavor("echo hello") discard detectFlavor("def x(): pass") discard detectFlavor("function x() {}") discard detectFlavor("") discard detectFlavor("{% block x %}{% endblock %}") discard detectFlavor("{\"a\": 1}") discard detectFlavor("a: 1") discard detectFlavor("x = 1") test "source with only newlines": let src = "\n\n\n\n\n\n\n\n\n\n" for lang in allLangs: let result = validateSource(src, flavor = lang) check result.errors.len >= 0 test "very deep comment nesting": let src = "proc test() =\n " & repeat("#[ ", 20) & " content " & repeat(" ]# ", 20) & "\n discard\n" let result = validateSource(src, flavor = lfNim) check result.errors.len >= 0 test "concurrent validation calls": for i in 0..10: let src = "proc test" & $i & "() = discard\n" let result = validateSource(src, flavor = lfNim) check result.errors.len >= 0 test "detectFlavor unknown garbage": let flavor = detectFlavor("!@#$%^&*()_+{}[]|\\:;\"'<>,.?/~`") check $flavor == "unknown" or $flavor == "bash" test "validateFile with nonexistent path": let result = validateFile("/nonexistent/path/file.nim") check result.errors.len > 0 check not result.valid