test_compiler.py 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. from typing import Set
  2. import pytest
  3. from pynecone.compiler import utils
  4. from pynecone.utils import imports
  5. from pynecone.var import ImportVar
  6. @pytest.mark.parametrize(
  7. "lib,fields,output",
  8. [
  9. (
  10. "axios",
  11. {ImportVar(tag="axios", is_default=True)},
  12. 'import axios from "axios"',
  13. ),
  14. (
  15. "axios",
  16. {ImportVar(tag="foo"), ImportVar(tag="bar")},
  17. 'import {bar, foo} from "axios"',
  18. ),
  19. (
  20. "axios",
  21. {
  22. ImportVar(tag="axios", is_default=True),
  23. ImportVar(tag="foo"),
  24. ImportVar(tag="bar"),
  25. },
  26. "import " "axios, " "{bar, " "foo} from " '"axios"',
  27. ),
  28. ],
  29. )
  30. def test_compile_import_statement(lib: str, fields: Set[ImportVar], output: str):
  31. """Test the compile_import_statement function.
  32. Args:
  33. lib: The library name.
  34. fields: The fields to import.
  35. output: The expected output.
  36. """
  37. assert utils.compile_import_statement(lib, fields) == output
  38. @pytest.mark.parametrize(
  39. "import_dict,output",
  40. [
  41. ({}, ""),
  42. (
  43. {"axios": {ImportVar(tag="axios", is_default=True)}},
  44. 'import axios from "axios"',
  45. ),
  46. (
  47. {"axios": {ImportVar(tag="foo"), ImportVar(tag="bar")}},
  48. 'import {bar, foo} from "axios"',
  49. ),
  50. (
  51. {
  52. "axios": {
  53. ImportVar(tag="axios", is_default=True),
  54. ImportVar(tag="foo"),
  55. ImportVar(tag="bar"),
  56. },
  57. "react": {ImportVar(tag="react", is_default=True)},
  58. },
  59. 'import axios, {bar, foo} from "axios"\nimport react from "react"',
  60. ),
  61. (
  62. {"": {ImportVar(tag="lib1.js"), ImportVar(tag="lib2.js")}},
  63. 'import "lib1.js"\nimport "lib2.js"',
  64. ),
  65. (
  66. {
  67. "": {ImportVar(tag="lib1.js"), ImportVar(tag="lib2.js")},
  68. "axios": {ImportVar(tag="axios", is_default=True)},
  69. },
  70. 'import "lib1.js"\nimport "lib2.js"\nimport axios from "axios"',
  71. ),
  72. ],
  73. )
  74. def test_compile_imports(
  75. import_dict: imports.ImportDict, output: str, windows_platform: bool
  76. ):
  77. """Test the compile_imports function.
  78. Args:
  79. import_dict: The import dictionary.
  80. output: The expected output.
  81. windows_platform: whether system is windows.
  82. """
  83. assert utils.compile_imports(import_dict) == (
  84. output.replace("\n", "\r\n") if windows_platform else output
  85. )
  86. @pytest.mark.parametrize(
  87. "name,value,output",
  88. [
  89. ("foo", "bar", 'const foo = "bar"'),
  90. ("num", 1, "const num = 1"),
  91. ("check", False, "const check = false"),
  92. ("arr", [1, 2, 3], "const arr = [1, 2, 3]"),
  93. ("obj", {"foo": "bar"}, 'const obj = {"foo": "bar"}'),
  94. ],
  95. )
  96. def test_compile_constant_declaration(name: str, value: str, output: str):
  97. """Test the compile_constant_declaration function.
  98. Args:
  99. name: The name of the constant.
  100. value: The value of the constant.
  101. output: The expected output.
  102. """
  103. assert utils.compile_constant_declaration(name, value) == output