Não pode escolher mais do que 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 

495 linhas
15 KiB

  1. 'use strict';
  2. var _templateObject = _taggedTemplateLiteral(['\n .a-id:hover {\n color: red;\n }\n @media {\n .a-id:hover {\n color: green;\n }\n }\n '], ['\n .a-id:hover {\n color: red;\n }\n @media {\n .a-id:hover {\n color: green;\n }\n }\n ']),
  3. _templateObject2 = _taggedTemplateLiteral(['\n .a-id:hover {\n color: red;\n }\n '], ['\n .a-id:hover {\n color: red;\n }\n ']),
  4. _templateObject3 = _taggedTemplateLiteral(['\n .a-id:hover {\n color: green;\n }\n '], ['\n .a-id:hover {\n color: green;\n }\n ']);
  5. var _expect = require('expect.js');
  6. var _expect2 = _interopRequireDefault(_expect);
  7. var _commonTags = require('common-tags');
  8. var _ = require('./');
  9. var _2 = _interopRequireDefault(_);
  10. var _jssExtend = require('jss-extend');
  11. var _jssExtend2 = _interopRequireDefault(_jssExtend);
  12. var _jss = require('jss');
  13. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  14. function _taggedTemplateLiteral(strings, raw) { return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } /* eslint-disable no-underscore-dangle */
  15. var settings = {
  16. createGenerateClassName: function createGenerateClassName() {
  17. return function (rule) {
  18. return rule.key + '-id';
  19. };
  20. }
  21. };
  22. describe('jss-nested', function () {
  23. var jss = void 0;
  24. var warning = void 0;
  25. beforeEach(function () {
  26. _2.default.__Rewire__('warning', function (condition, message) {
  27. warning = message;
  28. });
  29. jss = (0, _jss.create)(settings).use((0, _2.default)());
  30. });
  31. afterEach(function () {
  32. _2.default.__ResetDependency__('warning');
  33. warning = undefined;
  34. });
  35. describe('nesting with space', function () {
  36. var sheet = void 0;
  37. beforeEach(function () {
  38. sheet = jss.createStyleSheet({
  39. a: {
  40. float: 'left',
  41. '& b': { float: 'left' }
  42. }
  43. });
  44. });
  45. it('should add rules', function () {
  46. (0, _expect2.default)(sheet.getRule('a')).to.not.be(undefined);
  47. (0, _expect2.default)(sheet.getRule('.a-id b')).to.not.be(undefined);
  48. });
  49. it('should generate correct CSS', function () {
  50. (0, _expect2.default)(sheet.toString()).to.be('.a-id {\n' + ' float: left;\n' + '}\n' + '.a-id b {\n' + ' float: left;\n' + '}');
  51. });
  52. });
  53. describe('nesting without space', function () {
  54. var sheet = void 0;
  55. beforeEach(function () {
  56. sheet = jss.createStyleSheet({
  57. a: {
  58. float: 'left',
  59. '&b': { float: 'left' }
  60. }
  61. });
  62. });
  63. it('should add rules', function () {
  64. (0, _expect2.default)(sheet.getRule('a')).to.not.be(undefined);
  65. (0, _expect2.default)(sheet.getRule('.a-idb')).to.not.be(undefined);
  66. });
  67. it('should generate correct CSS', function () {
  68. (0, _expect2.default)(sheet.toString()).to.be('.a-id {\n' + ' float: left;\n' + '}\n' + '.a-idb {\n' + ' float: left;\n' + '}');
  69. });
  70. });
  71. describe('multi nesting', function () {
  72. var sheet = void 0;
  73. beforeEach(function () {
  74. sheet = jss.createStyleSheet({
  75. a: {
  76. float: 'left',
  77. '&b': { float: 'left' },
  78. '& c': { float: 'left' }
  79. }
  80. });
  81. });
  82. it('should add rules', function () {
  83. (0, _expect2.default)(sheet.getRule('a')).to.not.be(undefined);
  84. (0, _expect2.default)(sheet.getRule('.a-idb')).to.not.be(undefined);
  85. (0, _expect2.default)(sheet.getRule('.a-id c')).to.not.be(undefined);
  86. });
  87. it('should generate correct CSS', function () {
  88. (0, _expect2.default)(sheet.toString()).to.be('.a-id {\n' + ' float: left;\n' + '}\n' + '.a-idb {\n' + ' float: left;\n' + '}\n' + '.a-id c {\n' + ' float: left;\n' + '}');
  89. });
  90. });
  91. describe('multi nesting in one selector', function () {
  92. var sheet = void 0;
  93. beforeEach(function () {
  94. sheet = jss.createStyleSheet({
  95. a: {
  96. float: 'left',
  97. '&b, &c': { float: 'left' }
  98. }
  99. });
  100. });
  101. it('should add rules', function () {
  102. (0, _expect2.default)(sheet.getRule('a')).to.not.be(undefined);
  103. (0, _expect2.default)(sheet.getRule('.a-idb, .a-idc')).to.not.be(undefined);
  104. });
  105. it('should generate correct CSS', function () {
  106. (0, _expect2.default)(sheet.toString()).to.be('.a-id {\n' + ' float: left;\n' + '}\n' + '.a-idb, .a-idc {\n' + ' float: left;\n' + '}');
  107. });
  108. });
  109. describe('.addRules()', function () {
  110. var sheet = void 0;
  111. beforeEach(function () {
  112. sheet = jss.createStyleSheet({
  113. a: {
  114. height: '1px'
  115. }
  116. });
  117. sheet.addRules({
  118. b: {
  119. height: '2px',
  120. '& c': {
  121. height: '3px'
  122. }
  123. }
  124. });
  125. });
  126. it('should generate correct CSS', function () {
  127. (0, _expect2.default)(sheet.toString()).to.be('.a-id {\n' + ' height: 1px;\n' + '}\n' + '.b-id {\n' + ' height: 2px;\n' + '}\n' + '.b-id c {\n' + ' height: 3px;\n' + '}');
  128. });
  129. });
  130. describe('nesting in a conditional', function () {
  131. var sheet = void 0;
  132. beforeEach(function () {
  133. sheet = jss.createStyleSheet({
  134. a: {
  135. color: 'green'
  136. },
  137. '@media': {
  138. a: {
  139. '&:hover': { color: 'red' }
  140. }
  141. }
  142. });
  143. });
  144. it('should add rules', function () {
  145. (0, _expect2.default)(sheet.getRule('a')).to.not.be(undefined);
  146. (0, _expect2.default)(sheet.getRule('@media')).to.not.be(undefined);
  147. });
  148. it('should generate correct CSS', function () {
  149. (0, _expect2.default)(sheet.toString()).to.be('.a-id {\n' + ' color: green;\n' + '}\n' + '@media {\n' + ' .a-id:hover {\n' + ' color: red;\n' + ' }\n' + '}');
  150. });
  151. });
  152. describe('nesting a conditional rule inside a regular rule', function () {
  153. var sheet = void 0;
  154. beforeEach(function () {
  155. sheet = jss.createStyleSheet({
  156. a: {
  157. color: 'green',
  158. '@media': {
  159. width: '200px'
  160. }
  161. },
  162. b: {
  163. color: 'red'
  164. }
  165. });
  166. });
  167. it('should add rules', function () {
  168. (0, _expect2.default)(sheet.getRule('a')).to.not.be(undefined);
  169. (0, _expect2.default)(sheet.getRule('@media')).to.not.be(undefined);
  170. (0, _expect2.default)(sheet.getRule('b')).to.not.be(undefined);
  171. });
  172. it('should generate correct CSS', function () {
  173. (0, _expect2.default)(sheet.toString()).to.be('.a-id {\n' + ' color: green;\n' + '}\n' + '@media {\n' + ' .a-id {\n' + ' width: 200px;\n' + ' }\n' + '}\n' + '.b-id {\n' + ' color: red;\n' + '}');
  174. });
  175. });
  176. describe('nesting a conditional rule inside of a nested rule', function () {
  177. var sheet = void 0;
  178. beforeEach(function () {
  179. sheet = jss.createStyleSheet({
  180. a: {
  181. '&:hover': {
  182. color: 'red',
  183. '@media': {
  184. color: 'green'
  185. }
  186. }
  187. }
  188. });
  189. });
  190. it('should generate correct CSS', function () {
  191. (0, _expect2.default)(sheet.toString()).to.be((0, _commonTags.stripIndent)(_templateObject));
  192. });
  193. });
  194. describe('order of nested conditionals', function () {
  195. var sheet = void 0;
  196. beforeEach(function () {
  197. sheet = jss.createStyleSheet({
  198. a: {
  199. '@media a': {
  200. color: 'red'
  201. },
  202. '@media b': {
  203. color: 'green'
  204. }
  205. }
  206. });
  207. });
  208. it('should add rules', function () {
  209. (0, _expect2.default)(sheet.getRule('@media a')).to.not.be(undefined);
  210. (0, _expect2.default)(sheet.getRule('@media b')).to.not.be(undefined);
  211. });
  212. it('should generate correct CSS', function () {
  213. (0, _expect2.default)(sheet.toString()).to.be('@media a {\n' + ' .a-id {\n' + ' color: red;\n' + ' }\n' + '}\n' + '@media b {\n' + ' .a-id {\n' + ' color: green;\n' + ' }\n' + '}');
  214. });
  215. });
  216. describe('adding a rule with a conditional rule', function () {
  217. var sheet = void 0;
  218. beforeEach(function () {
  219. sheet = jss.createStyleSheet();
  220. sheet.addRule('a', {
  221. color: 'green',
  222. '@media': {
  223. width: '200px'
  224. }
  225. });
  226. });
  227. it('should add rules', function () {
  228. (0, _expect2.default)(sheet.getRule('a')).to.not.be(undefined);
  229. (0, _expect2.default)(sheet.getRule('@media')).to.not.be(undefined);
  230. });
  231. it('should generate correct CSS', function () {
  232. (0, _expect2.default)(sheet.toString()).to.be('.a-id {\n' + ' color: green;\n' + '}\n' + '@media {\n' + ' .a-id {\n' + ' width: 200px;\n' + ' }\n' + '}');
  233. });
  234. });
  235. describe('do not merge nested conditional to container conditional with existing rule', function () {
  236. var sheet = void 0;
  237. beforeEach(function () {
  238. sheet = jss.createStyleSheet({
  239. a: {
  240. color: 'green',
  241. '@media': {
  242. width: '200px'
  243. },
  244. '@media large': {
  245. width: '300px'
  246. }
  247. },
  248. '@media': {
  249. b: {
  250. color: 'blue'
  251. }
  252. },
  253. c: {
  254. color: 'red'
  255. }
  256. });
  257. });
  258. it('should add rules', function () {
  259. (0, _expect2.default)(sheet.getRule('a')).to.not.be(undefined);
  260. (0, _expect2.default)(sheet.getRule('@media')).to.not.be(undefined);
  261. (0, _expect2.default)(sheet.getRule('c')).to.not.be(undefined);
  262. });
  263. it('should generate correct CSS', function () {
  264. (0, _expect2.default)(sheet.toString()).to.be('.a-id {\n' + ' color: green;\n' + '}\n' + '@media {\n' + ' .a-id {\n' + ' width: 200px;\n' + ' }\n' + '}\n' + '@media large {\n' + ' .a-id {\n' + ' width: 300px;\n' + ' }\n' + '}\n' + '@media {\n' + ' .b-id {\n' + ' color: blue;\n' + ' }\n' + '}\n' + '.c-id {\n' + ' color: red;\n' + '}');
  265. });
  266. });
  267. describe('warnings', function () {
  268. it('should warn when referenced rule is not found', function () {
  269. jss.createStyleSheet({
  270. a: {
  271. '& $b': { float: 'left' }
  272. }
  273. });
  274. (0, _expect2.default)(warning).to.be('[JSS] Could not find the referenced rule %s in %s.');
  275. });
  276. });
  277. describe('local refs', function () {
  278. var sheet = void 0;
  279. beforeEach(function () {
  280. sheet = jss.createStyleSheet({
  281. a: {
  282. float: 'left',
  283. '& $b': { float: 'left' },
  284. '& $b-warn': { float: 'right' }
  285. },
  286. b: {
  287. color: 'red'
  288. },
  289. 'b-warn': {
  290. color: 'orange'
  291. }
  292. });
  293. });
  294. it('should generate correct CSS', function () {
  295. (0, _expect2.default)(sheet.toString()).to.be('.a-id {\n' + ' float: left;\n' + '}\n' + '.a-id .b-id {\n' + ' float: left;\n' + '}\n' + '.a-id .b-warn-id {\n' + ' float: right;\n' + '}\n' + '.b-id {\n' + ' color: red;\n' + '}\n' + '.b-warn-id {\n' + ' color: orange;\n' + '}');
  296. });
  297. });
  298. describe('nesting conditionals in combination with extend plugin', function () {
  299. var sheet = void 0;
  300. beforeEach(function () {
  301. var localJss = (0, _jss.create)(settings).use((0, _jssExtend2.default)(), (0, _2.default)());
  302. sheet = localJss.createStyleSheet({
  303. button: {
  304. color: 'green',
  305. 'background-color': 'aqua',
  306. '@media': {
  307. width: '200px'
  308. }
  309. },
  310. redButton: {
  311. extend: 'button',
  312. color: 'red'
  313. }
  314. });
  315. });
  316. it('should add rules', function () {
  317. (0, _expect2.default)(sheet.getRule('button')).to.not.be(undefined);
  318. (0, _expect2.default)(sheet.getRule('@media')).to.not.be(undefined);
  319. (0, _expect2.default)(sheet.getRule('redButton')).to.not.be(undefined);
  320. });
  321. it('should generate correct CSS', function () {
  322. (0, _expect2.default)(sheet.toString()).to.be('.button-id {\n' + ' color: green;\n' + ' background-color: aqua;\n' + '}\n' + '@media {\n' + ' .button-id {\n' + ' width: 200px;\n' + ' }\n' + '}\n' + '.redButton-id {\n' + ' color: red;\n' + ' background-color: aqua;\n' + '}\n' + '@media {\n' + ' .redButton-id {\n' + ' width: 200px;\n' + ' }\n' + '}');
  323. });
  324. });
  325. describe('deep nesting', function () {
  326. var sheet = void 0;
  327. beforeEach(function () {
  328. var localJss = (0, _jss.create)(settings).use((0, _jssExtend2.default)(), (0, _2.default)());
  329. sheet = localJss.createStyleSheet({
  330. button: {
  331. color: 'black',
  332. '& .a': {
  333. color: 'red',
  334. '& .c': {
  335. color: 'gold'
  336. }
  337. }
  338. }
  339. });
  340. });
  341. it('should add rules', function () {
  342. (0, _expect2.default)(sheet.getRule('button')).to.not.be(undefined);
  343. (0, _expect2.default)(sheet.getRule('.button-id .a')).to.not.be(undefined);
  344. (0, _expect2.default)(sheet.getRule('.button-id .a .c')).to.not.be(undefined);
  345. });
  346. it('should generate correct CSS', function () {
  347. (0, _expect2.default)(sheet.toString()).to.be('.button-id {\n' + ' color: black;\n' + '}\n' + '.button-id .a {\n' + ' color: red;\n' + '}\n' + '.button-id .a .c {\n' + ' color: gold;\n' + '}');
  348. });
  349. });
  350. describe('deep nesting with multiple nestings in one selector', function () {
  351. var sheet = void 0;
  352. beforeEach(function () {
  353. sheet = jss.createStyleSheet({
  354. button: {
  355. color: 'black',
  356. '& .a, .b': {
  357. color: 'red',
  358. '& .c, &:hover': {
  359. color: 'gold'
  360. }
  361. }
  362. }
  363. });
  364. });
  365. it('should add rules', function () {
  366. (0, _expect2.default)(sheet.getRule('button')).to.not.be(undefined);
  367. (0, _expect2.default)(sheet.getRule('.button-id .a, .button-id .b')).to.not.be(undefined);
  368. (0, _expect2.default)(sheet.getRule('.button-id .a .c, .button-id .a:hover, ' + '.button-id .b .c, .button-id .b:hover')).to.not.be(undefined);
  369. });
  370. it('should generate correct CSS', function () {
  371. (0, _expect2.default)(sheet.toString()).to.be('.button-id {\n' + ' color: black;\n' + '}\n' + '.button-id .a, .button-id .b {\n' + ' color: red;\n' + '}\n' + '.button-id .a .c, .button-id .a:hover, ' + '.button-id .b .c, .button-id .b:hover {\n' + ' color: gold;\n' + '}');
  372. });
  373. });
  374. describe('support & at any position', function () {
  375. var sheet = void 0;
  376. beforeEach(function () {
  377. sheet = jss.createStyleSheet({
  378. a: {
  379. 'input:focus + &': {
  380. color: 'red'
  381. }
  382. }
  383. });
  384. });
  385. it('should generate correct CSS', function () {
  386. (0, _expect2.default)(sheet.toString()).to.be('input:focus + .a-id {\n' + ' color: red;\n' + '}');
  387. });
  388. });
  389. describe('function values', function () {
  390. var sheet = void 0;
  391. beforeEach(function () {
  392. sheet = jss.createStyleSheet({
  393. a: {
  394. '&:hover': {
  395. color: function color(_ref) {
  396. var _color = _ref.color;
  397. return _color;
  398. }
  399. }
  400. }
  401. });
  402. });
  403. it('should generate color red', function () {
  404. sheet.update({ color: 'red' });
  405. (0, _expect2.default)(sheet.toString()).to.be((0, _commonTags.stripIndent)(_templateObject2));
  406. });
  407. it('should generate color green', function () {
  408. sheet.update({ color: 'green' });
  409. (0, _expect2.default)(sheet.toString()).to.be((0, _commonTags.stripIndent)(_templateObject3));
  410. });
  411. });
  412. });