containerPlugin.test.js 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346
  1. import { run, html, css } from './util/run'
  2. test('options are not required', () => {
  3. let config = { content: [{ raw: html`<div class="container"></div>` }] }
  4. return run('@tailwind components', config).then((result) => {
  5. expect(result.css).toMatchFormattedCss(css`
  6. .container {
  7. width: 100%;
  8. }
  9. @media (min-width: 640px) {
  10. .container {
  11. max-width: 640px;
  12. }
  13. }
  14. @media (min-width: 768px) {
  15. .container {
  16. max-width: 768px;
  17. }
  18. }
  19. @media (min-width: 1024px) {
  20. .container {
  21. max-width: 1024px;
  22. }
  23. }
  24. @media (min-width: 1280px) {
  25. .container {
  26. max-width: 1280px;
  27. }
  28. }
  29. @media (min-width: 1536px) {
  30. .container {
  31. max-width: 1536px;
  32. }
  33. }
  34. `)
  35. })
  36. })
  37. test('screens can be passed explicitly', () => {
  38. let config = {
  39. content: [{ raw: html`<div class="container"></div>` }],
  40. theme: {
  41. container: {
  42. screens: ['400px', '500px'],
  43. },
  44. },
  45. }
  46. return run('@tailwind components', config).then((result) => {
  47. expect(result.css).toMatchFormattedCss(css`
  48. .container {
  49. width: 100%;
  50. }
  51. @media (min-width: 400px) {
  52. .container {
  53. max-width: 400px;
  54. }
  55. }
  56. @media (min-width: 500px) {
  57. .container {
  58. max-width: 500px;
  59. }
  60. }
  61. `)
  62. })
  63. })
  64. test('screens are ordered ascending by min-width', () => {
  65. let config = {
  66. content: [{ raw: html`<div class="container"></div>` }],
  67. theme: {
  68. container: {
  69. screens: ['500px', '400px'],
  70. },
  71. },
  72. }
  73. return run('@tailwind components', config).then((result) => {
  74. expect(result.css).toMatchFormattedCss(css`
  75. .container {
  76. width: 100%;
  77. }
  78. @media (min-width: 400px) {
  79. .container {
  80. max-width: 400px;
  81. }
  82. }
  83. @media (min-width: 500px) {
  84. .container {
  85. max-width: 500px;
  86. }
  87. }
  88. `)
  89. })
  90. })
  91. test('screens are deduplicated by min-width', () => {
  92. let config = {
  93. content: [{ raw: html`<div class="container"></div>` }],
  94. theme: {
  95. container: {
  96. screens: {
  97. sm: '576px',
  98. md: '768px',
  99. 'sm-only': { min: '576px', max: '767px' },
  100. },
  101. },
  102. },
  103. }
  104. return run('@tailwind components', config).then((result) => {
  105. expect(result.css).toMatchFormattedCss(css`
  106. .container {
  107. width: 100%;
  108. }
  109. @media (min-width: 576px) {
  110. .container {
  111. max-width: 576px;
  112. }
  113. }
  114. @media (min-width: 768px) {
  115. .container {
  116. max-width: 768px;
  117. }
  118. }
  119. `)
  120. })
  121. })
  122. test('the container can be centered by default', () => {
  123. let config = {
  124. content: [{ raw: html`<div class="container"></div>` }],
  125. theme: {
  126. container: {
  127. center: true,
  128. },
  129. },
  130. }
  131. return run('@tailwind components', config).then((result) => {
  132. expect(result.css).toMatchFormattedCss(css`
  133. .container {
  134. width: 100%;
  135. margin-right: auto;
  136. margin-left: auto;
  137. }
  138. @media (min-width: 640px) {
  139. .container {
  140. max-width: 640px;
  141. }
  142. }
  143. @media (min-width: 768px) {
  144. .container {
  145. max-width: 768px;
  146. }
  147. }
  148. @media (min-width: 1024px) {
  149. .container {
  150. max-width: 1024px;
  151. }
  152. }
  153. @media (min-width: 1280px) {
  154. .container {
  155. max-width: 1280px;
  156. }
  157. }
  158. @media (min-width: 1536px) {
  159. .container {
  160. max-width: 1536px;
  161. }
  162. }
  163. `)
  164. })
  165. })
  166. test('horizontal padding can be included by default', () => {
  167. let config = {
  168. content: [{ raw: html`<div class="container"></div>` }],
  169. theme: {
  170. container: {
  171. padding: '2rem',
  172. },
  173. },
  174. }
  175. return run('@tailwind components', config).then((result) => {
  176. expect(result.css).toMatchFormattedCss(css`
  177. .container {
  178. width: 100%;
  179. padding-right: 2rem;
  180. padding-left: 2rem;
  181. }
  182. @media (min-width: 640px) {
  183. .container {
  184. max-width: 640px;
  185. }
  186. }
  187. @media (min-width: 768px) {
  188. .container {
  189. max-width: 768px;
  190. }
  191. }
  192. @media (min-width: 1024px) {
  193. .container {
  194. max-width: 1024px;
  195. }
  196. }
  197. @media (min-width: 1280px) {
  198. .container {
  199. max-width: 1280px;
  200. }
  201. }
  202. @media (min-width: 1536px) {
  203. .container {
  204. max-width: 1536px;
  205. }
  206. }
  207. `)
  208. })
  209. })
  210. test('responsive horizontal padding can be included by default', () => {
  211. let config = {
  212. content: [{ raw: html`<div class="container"></div>` }],
  213. theme: {
  214. screens: {
  215. sm: '576px',
  216. md: { min: '768px' },
  217. lg: { 'min-width': '992px' },
  218. xl: { min: '1200px', max: '1600px' },
  219. },
  220. container: {
  221. padding: {
  222. DEFAULT: '1rem',
  223. sm: '2rem',
  224. lg: '4rem',
  225. xl: '5rem',
  226. },
  227. },
  228. },
  229. }
  230. return run('@tailwind components', config).then((result) => {
  231. expect(result.css).toMatchFormattedCss(css`
  232. .container {
  233. width: 100%;
  234. padding-right: 1rem;
  235. padding-left: 1rem;
  236. }
  237. @media (min-width: 576px) {
  238. .container {
  239. max-width: 576px;
  240. padding-right: 2rem;
  241. padding-left: 2rem;
  242. }
  243. }
  244. @media (min-width: 768px) {
  245. .container {
  246. max-width: 768px;
  247. }
  248. }
  249. @media (min-width: 992px) {
  250. .container {
  251. max-width: 992px;
  252. padding-right: 4rem;
  253. padding-left: 4rem;
  254. }
  255. }
  256. @media (min-width: 1200px) {
  257. .container {
  258. max-width: 1200px;
  259. padding-right: 5rem;
  260. padding-left: 5rem;
  261. }
  262. }
  263. `)
  264. })
  265. })
  266. test('setting all options at once', () => {
  267. let config = {
  268. content: [{ raw: html`<div class="container"></div>` }],
  269. theme: {
  270. container: {
  271. screens: ['400px', '500px'],
  272. center: true,
  273. padding: '2rem',
  274. },
  275. },
  276. }
  277. return run('@tailwind components', config).then((result) => {
  278. expect(result.css).toMatchFormattedCss(css`
  279. .container {
  280. width: 100%;
  281. margin-right: auto;
  282. margin-left: auto;
  283. padding-right: 2rem;
  284. padding-left: 2rem;
  285. }
  286. @media (min-width: 400px) {
  287. .container {
  288. max-width: 400px;
  289. }
  290. }
  291. @media (min-width: 500px) {
  292. .container {
  293. max-width: 500px;
  294. }
  295. }
  296. `)
  297. })
  298. })
  299. test('container can use variants', () => {
  300. let config = {
  301. content: [{ raw: html`<div class="lg:hover:container"></div>` }],
  302. theme: {
  303. container: {
  304. screens: ['400px', '500px'],
  305. },
  306. },
  307. }
  308. return run('@tailwind components', config).then((result) => {
  309. expect(result.css).toMatchFormattedCss(css`
  310. @media (min-width: 1024px) {
  311. .lg\:hover\:container:hover {
  312. width: 100%;
  313. }
  314. @media (min-width: 400px) {
  315. .lg\:hover\:container:hover {
  316. max-width: 400px;
  317. }
  318. }
  319. @media (min-width: 500px) {
  320. .lg\:hover\:container:hover {
  321. max-width: 500px;
  322. }
  323. }
  324. }
  325. `)
  326. })
  327. })