Color.tests.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566
  1. /**
  2. * @author bhouston / http://exocortex.com
  3. * @author TristanVALCKE / https://github.com/Itee
  4. */
  5. /* global QUnit */
  6. import { Color } from '../../../../src/math/Color';
  7. import { eps } from './Constants.tests';
  8. export default QUnit.module( 'Maths', () => {
  9. QUnit.module( 'Color', () => {
  10. // INSTANCING
  11. QUnit.test( "Instancing", ( assert ) => {
  12. // default ctor
  13. var c = new Color();
  14. assert.ok( c.r, "Red: " + c.r );
  15. assert.ok( c.g, "Green: " + c.g );
  16. assert.ok( c.b, "Blue: " + c.b );
  17. // rgb ctor
  18. var c = new Color( 1, 1, 1 );
  19. assert.ok( c.r == 1, "Passed" );
  20. assert.ok( c.g == 1, "Passed" );
  21. assert.ok( c.b == 1, "Passed" );
  22. } );
  23. // PUBLIC STUFF
  24. QUnit.todo( "isColor", ( assert ) => {
  25. assert.ok( false, "everything's gonna be alright" );
  26. } );
  27. QUnit.test( "set", ( assert ) => {
  28. var a = new Color();
  29. var b = new Color( 0.5, 0, 0 );
  30. var c = new Color( 0xFF0000 );
  31. var d = new Color( 0, 1.0, 0 );
  32. a.set( b );
  33. assert.ok( a.equals( b ), "Set with Color instance" );
  34. a.set( 0xFF0000 );
  35. assert.ok( a.equals( c ), "Set with number" );
  36. a.set( "rgb(0,255,0)" );
  37. assert.ok( a.equals( d ), "Set with style" );
  38. } );
  39. QUnit.todo( "setScalar", ( assert ) => {
  40. assert.ok( false, "everything's gonna be alright" );
  41. } );
  42. QUnit.test( "setHex", ( assert ) => {
  43. var c = new Color();
  44. c.setHex( 0xFA8072 );
  45. assert.ok( c.getHex() == 0xFA8072, "Hex: " + c.getHex() );
  46. } );
  47. QUnit.todo( "setRGB", ( assert ) => {
  48. assert.ok( false, "everything's gonna be alright" );
  49. } );
  50. QUnit.test( "setHSL", ( assert ) => {
  51. var c = new Color();
  52. c.setHSL( 0.75, 1.0, 0.25 );
  53. var hsl = c.getHSL();
  54. assert.ok( hsl.h == 0.75, "hue: " + hsl.h );
  55. assert.ok( hsl.s == 1.00, "saturation: " + hsl.s );
  56. assert.ok( hsl.l == 0.25, "lightness: " + hsl.l );
  57. } );
  58. QUnit.todo( "setStyle", ( assert ) => {
  59. assert.ok( false, "everything's gonna be alright" );
  60. } );
  61. QUnit.test( "clone", ( assert ) => {
  62. var c = new Color( 'teal' );
  63. var c2 = c.clone();
  64. assert.ok( c2.getHex() == 0x008080, "Hex c2: " + c2.getHex() );
  65. } );
  66. QUnit.todo( "copy", ( assert ) => {
  67. assert.ok( false, "everything's gonna be alright" );
  68. } );
  69. QUnit.test( "copyGammaToLinear", ( assert ) => {
  70. var c = new Color();
  71. var c2 = new Color();
  72. c2.setRGB( 0.3, 0.5, 0.9 );
  73. c.copyGammaToLinear( c2 );
  74. assert.ok( c.r == 0.09, "Red c: " + c.r + " Red c2: " + c2.r );
  75. assert.ok( c.g == 0.25, "Green c: " + c.g + " Green c2: " + c2.g );
  76. assert.ok( c.b == 0.81, "Blue c: " + c.b + " Blue c2: " + c2.b );
  77. } );
  78. QUnit.test( "copyLinearToGamma", ( assert ) => {
  79. var c = new Color();
  80. var c2 = new Color();
  81. c2.setRGB( 0.09, 0.25, 0.81 );
  82. c.copyLinearToGamma( c2 );
  83. assert.ok( c.r == 0.3, "Red c: " + c.r + " Red c2: " + c2.r );
  84. assert.ok( c.g == 0.5, "Green c: " + c.g + " Green c2: " + c2.g );
  85. assert.ok( c.b == 0.9, "Blue c: " + c.b + " Blue c2: " + c2.b );
  86. } );
  87. QUnit.test( "convertGammaToLinear", ( assert ) => {
  88. var c = new Color();
  89. c.setRGB( 0.3, 0.5, 0.9 );
  90. c.convertGammaToLinear();
  91. assert.ok( c.r == 0.09, "Red: " + c.r );
  92. assert.ok( c.g == 0.25, "Green: " + c.g );
  93. assert.ok( c.b == 0.81, "Blue: " + c.b );
  94. } );
  95. QUnit.test( "convertLinearToGamma", ( assert ) => {
  96. var c = new Color();
  97. c.setRGB( 4, 9, 16 );
  98. c.convertLinearToGamma();
  99. assert.ok( c.r == 2, "Red: " + c.r );
  100. assert.ok( c.g == 3, "Green: " + c.g );
  101. assert.ok( c.b == 4, "Blue: " + c.b );
  102. } );
  103. QUnit.test( "getHex", ( assert ) => {
  104. var c = new Color( 'red' );
  105. var res = c.getHex();
  106. assert.ok( res == 0xFF0000, "Hex: " + res );
  107. } );
  108. QUnit.test( "getHexString", ( assert ) => {
  109. var c = new Color( 'tomato' );
  110. var res = c.getHexString();
  111. assert.ok( res == 'ff6347', "Hex: " + res );
  112. } );
  113. QUnit.test( "getHSL", ( assert ) => {
  114. var c = new Color( 0x80ffff );
  115. var hsl = c.getHSL();
  116. assert.ok( hsl.h == 0.5, "hue: " + hsl.h );
  117. assert.ok( hsl.s == 1.0, "saturation: " + hsl.s );
  118. assert.ok( ( Math.round( parseFloat( hsl.l ) * 100 ) / 100 ) == 0.75, "lightness: " + hsl.l );
  119. } );
  120. QUnit.test( "getStyle", ( assert ) => {
  121. var c = new Color( 'plum' );
  122. var res = c.getStyle();
  123. assert.ok( res == 'rgb(221,160,221)', "style: " + res );
  124. } );
  125. QUnit.test( "offsetHSL", ( assert ) => {
  126. var a = new Color( "hsl(120,50%,50%)" );
  127. var b = new Color( 0.36, 0.84, 0.648 );
  128. a.offsetHSL( 0.1, 0.1, 0.1 );
  129. assert.ok( Math.abs( a.r - b.r ) <= eps, "Check r" );
  130. assert.ok( Math.abs( a.g - b.g ) <= eps, "Check g" );
  131. assert.ok( Math.abs( a.b - b.b ) <= eps, "Check b" );
  132. } );
  133. QUnit.test( "add", ( assert ) => {
  134. var a = new Color( 0x0000FF );
  135. var b = new Color( 0xFF0000 );
  136. var c = new Color( 0xFF00FF );
  137. a.add( b );
  138. assert.ok( a.equals( c ), "Check new value" );
  139. } );
  140. QUnit.todo( "addColors", ( assert ) => {
  141. assert.ok( false, "everything's gonna be alright" );
  142. } );
  143. QUnit.test( "addScalar", ( assert ) => {
  144. var a = new Color( 0.1, 0.0, 0.0 );
  145. var b = new Color( 0.6, 0.5, 0.5 );
  146. a.addScalar( 0.5 );
  147. assert.ok( a.equals( b ), "Check new value" );
  148. } );
  149. QUnit.test( "sub", ( assert ) => {
  150. var a = new Color( 0x0000CC );
  151. var b = new Color( 0xFF0000 );
  152. var c = new Color( 0x0000AA );
  153. a.sub( b );
  154. assert.strictEqual( a.getHex(), 0xCC, "Difference too large" );
  155. a.sub( c );
  156. assert.strictEqual( a.getHex(), 0x22, "Difference fine" );
  157. } );
  158. QUnit.test( "multiply", ( assert ) => {
  159. var a = new Color( 1, 0, 0.5 );
  160. var b = new Color( 0.5, 1, 0.5 );
  161. var c = new Color( 0.5, 0, 0.25 );
  162. a.multiply( b );
  163. assert.ok( a.equals( c ), "Check new value" );
  164. } );
  165. QUnit.test( "multiplyScalar", ( assert ) => {
  166. var a = new Color( 0.25, 0, 0.5 );
  167. var b = new Color( 0.5, 0, 1 );
  168. a.multiplyScalar( 2 );
  169. assert.ok( a.equals( b ), "Check new value" );
  170. } );
  171. QUnit.test( "copyHex", ( assert ) => {
  172. var c = new Color();
  173. var c2 = new Color( 0xF5FFFA );
  174. c.copy( c2 );
  175. assert.ok( c.getHex() == c2.getHex(), "Hex c: " + c.getHex() + " Hex c2: " + c2.getHex() );
  176. } );
  177. QUnit.test( "copyColorString", ( assert ) => {
  178. var c = new Color();
  179. var c2 = new Color( 'ivory' );
  180. c.copy( c2 );
  181. assert.ok( c.getHex() == c2.getHex(), "Hex c: " + c.getHex() + " Hex c2: " + c2.getHex() );
  182. } );
  183. QUnit.test( "setRGB", ( assert ) => {
  184. var c = new Color();
  185. c.setRGB( 1, 0.2, 0.1 );
  186. assert.ok( c.r == 1, "Red: " + c.r );
  187. assert.ok( c.g == 0.2, "Green: " + c.g );
  188. assert.ok( c.b == 0.1, "Blue: " + c.b );
  189. } );
  190. QUnit.test( "lerp", ( assert ) => {
  191. var c = new Color();
  192. var c2 = new Color();
  193. c.setRGB( 0, 0, 0 );
  194. c.lerp( c2, 0.2 );
  195. assert.ok( c.r == 0.2, "Red: " + c.r );
  196. assert.ok( c.g == 0.2, "Green: " + c.g );
  197. assert.ok( c.b == 0.2, "Blue: " + c.b );
  198. } );
  199. QUnit.test( "equals", ( assert ) => {
  200. var a = new Color( 0.5, 0.0, 1.0 );
  201. var b = new Color( 0.5, 1.0, 0.0 );
  202. assert.strictEqual( a.r, b.r, "Components: r is equal" );
  203. assert.notStrictEqual( a.g, b.g, "Components: g is not equal" );
  204. assert.notStrictEqual( a.b, b.b, "Components: b is not equal" );
  205. assert.notOk( a.equals( b ), "equals(): a not equal b" );
  206. assert.notOk( b.equals( a ), "equals(): b not equal a" );
  207. a.copy( b );
  208. assert.strictEqual( a.r, b.r, "Components after copy(): r is equal" );
  209. assert.strictEqual( a.g, b.g, "Components after copy(): g is equal" );
  210. assert.strictEqual( a.b, b.b, "Components after copy(): b is equal" );
  211. assert.ok( a.equals( b ), "equals() after copy(): a equals b" );
  212. assert.ok( b.equals( a ), "equals() after copy(): b equals a" );
  213. } );
  214. QUnit.test( "fromArray", ( assert ) => {
  215. var a = new Color();
  216. var array = [ 0.5, 0.6, 0.7, 0, 1, 0 ];
  217. a.fromArray( array );
  218. assert.strictEqual( a.r, 0.5, "No offset: check r" );
  219. assert.strictEqual( a.g, 0.6, "No offset: check g" );
  220. assert.strictEqual( a.b, 0.7, "No offset: check b" );
  221. a.fromArray( array, 3 );
  222. assert.strictEqual( a.r, 0, "With offset: check r" );
  223. assert.strictEqual( a.g, 1, "With offset: check g" );
  224. assert.strictEqual( a.b, 0, "With offset: check b" );
  225. } );
  226. QUnit.test( "toArray", ( assert ) => {
  227. var r = 0.5, g = 1.0, b = 0.0;
  228. var a = new Color( r, g, b );
  229. var array = a.toArray();
  230. assert.strictEqual( array[ 0 ], r, "No array, no offset: check r" );
  231. assert.strictEqual( array[ 1 ], g, "No array, no offset: check g" );
  232. assert.strictEqual( array[ 2 ], b, "No array, no offset: check b" );
  233. var array = [];
  234. a.toArray( array );
  235. assert.strictEqual( array[ 0 ], r, "With array, no offset: check r" );
  236. assert.strictEqual( array[ 1 ], g, "With array, no offset: check g" );
  237. assert.strictEqual( array[ 2 ], b, "With array, no offset: check b" );
  238. var array = [];
  239. a.toArray( array, 1 );
  240. assert.strictEqual( array[ 0 ], undefined, "With array and offset: check [0]" );
  241. assert.strictEqual( array[ 1 ], r, "With array and offset: check r" );
  242. assert.strictEqual( array[ 2 ], g, "With array and offset: check g" );
  243. assert.strictEqual( array[ 3 ], b, "With array and offset: check b" );
  244. } );
  245. QUnit.test( "toJSON", ( assert ) => {
  246. var a = new Color( 0.0, 0.0, 0.0 );
  247. var b = new Color( 0.0, 0.5, 0.0 );
  248. var c = new Color( 1.0, 0.0, 0.0 );
  249. var d = new Color( 1.0, 1.0, 1.0 );
  250. assert.strictEqual( a.toJSON(), 0x000000, "Check black" );
  251. assert.strictEqual( b.toJSON(), 0x007F00, "Check half-blue" );
  252. assert.strictEqual( c.toJSON(), 0xFF0000, "Check red" );
  253. assert.strictEqual( d.toJSON(), 0xFFFFFF, "Check white" );
  254. } );
  255. // OTHERS
  256. QUnit.test( "setWithNum", ( assert ) => {
  257. var c = new Color();
  258. c.set( 0xFF0000 );
  259. assert.ok( c.r == 1, "Red: " + c.r );
  260. assert.ok( c.g === 0, "Green: " + c.g );
  261. assert.ok( c.b === 0, "Blue: " + c.b );
  262. } );
  263. QUnit.test( "setWithString", ( assert ) => {
  264. var c = new Color();
  265. c.set( 'silver' );
  266. assert.ok( c.getHex() == 0xC0C0C0, "Hex c: " + c.getHex() );
  267. } );
  268. QUnit.test( "setStyleRGBRed", ( assert ) => {
  269. var c = new Color();
  270. c.setStyle( 'rgb(255,0,0)' );
  271. assert.ok( c.r == 1, "Red: " + c.r );
  272. assert.ok( c.g === 0, "Green: " + c.g );
  273. assert.ok( c.b === 0, "Blue: " + c.b );
  274. } );
  275. QUnit.test( "setStyleRGBARed", ( assert ) => {
  276. var c = new Color();
  277. c.setStyle( 'rgba(255,0,0,0.5)' );
  278. assert.ok( c.r == 1, "Red: " + c.r );
  279. assert.ok( c.g === 0, "Green: " + c.g );
  280. assert.ok( c.b === 0, "Blue: " + c.b );
  281. } );
  282. QUnit.test( "setStyleRGBRedWithSpaces", ( assert ) => {
  283. var c = new Color();
  284. c.setStyle( 'rgb( 255 , 0, 0 )' );
  285. assert.ok( c.r == 1, "Red: " + c.r );
  286. assert.ok( c.g === 0, "Green: " + c.g );
  287. assert.ok( c.b === 0, "Blue: " + c.b );
  288. } );
  289. QUnit.test( "setStyleRGBARedWithSpaces", ( assert ) => {
  290. var c = new Color();
  291. c.setStyle( 'rgba( 255, 0, 0 , 1 )' );
  292. assert.ok( c.r == 1, "Red: " + c.r );
  293. assert.ok( c.g === 0, "Green: " + c.g );
  294. assert.ok( c.b === 0, "Blue: " + c.b );
  295. } );
  296. QUnit.test( "setStyleRGBPercent", ( assert ) => {
  297. var c = new Color();
  298. c.setStyle( 'rgb(100%,50%,10%)' );
  299. assert.ok( c.r == 1, "Red: " + c.r );
  300. assert.ok( c.g == 0.5, "Green: " + c.g );
  301. assert.ok( c.b == 0.1, "Blue: " + c.b );
  302. } );
  303. QUnit.test( "setStyleRGBAPercent", ( assert ) => {
  304. var c = new Color();
  305. c.setStyle( 'rgba(100%,50%,10%, 0.5)' );
  306. assert.ok( c.r == 1, "Red: " + c.r );
  307. assert.ok( c.g == 0.5, "Green: " + c.g );
  308. assert.ok( c.b == 0.1, "Blue: " + c.b );
  309. } );
  310. QUnit.test( "setStyleRGBPercentWithSpaces", ( assert ) => {
  311. var c = new Color();
  312. c.setStyle( 'rgb( 100% ,50% , 10% )' );
  313. assert.ok( c.r == 1, "Red: " + c.r );
  314. assert.ok( c.g == 0.5, "Green: " + c.g );
  315. assert.ok( c.b == 0.1, "Blue: " + c.b );
  316. } );
  317. QUnit.test( "setStyleRGBAPercentWithSpaces", ( assert ) => {
  318. var c = new Color();
  319. c.setStyle( 'rgba( 100% ,50% , 10%, 0.5 )' );
  320. assert.ok( c.r == 1, "Red: " + c.r );
  321. assert.ok( c.g == 0.5, "Green: " + c.g );
  322. assert.ok( c.b == 0.1, "Blue: " + c.b );
  323. } );
  324. QUnit.test( "setStyleHSLRed", ( assert ) => {
  325. var c = new Color();
  326. c.setStyle( 'hsl(360,100%,50%)' );
  327. assert.ok( c.r == 1, "Red: " + c.r );
  328. assert.ok( c.g === 0, "Green: " + c.g );
  329. assert.ok( c.b === 0, "Blue: " + c.b );
  330. } );
  331. QUnit.test( "setStyleHSLARed", ( assert ) => {
  332. var c = new Color();
  333. c.setStyle( 'hsla(360,100%,50%,0.5)' );
  334. assert.ok( c.r == 1, "Red: " + c.r );
  335. assert.ok( c.g === 0, "Green: " + c.g );
  336. assert.ok( c.b === 0, "Blue: " + c.b );
  337. } );
  338. QUnit.test( "setStyleHSLRedWithSpaces", ( assert ) => {
  339. var c = new Color();
  340. c.setStyle( 'hsl(360, 100% , 50% )' );
  341. assert.ok( c.r == 1, "Red: " + c.r );
  342. assert.ok( c.g === 0, "Green: " + c.g );
  343. assert.ok( c.b === 0, "Blue: " + c.b );
  344. } );
  345. QUnit.test( "setStyleHSLARedWithSpaces", ( assert ) => {
  346. var c = new Color();
  347. c.setStyle( 'hsla( 360, 100% , 50%, 0.5 )' );
  348. assert.ok( c.r == 1, "Red: " + c.r );
  349. assert.ok( c.g === 0, "Green: " + c.g );
  350. assert.ok( c.b === 0, "Blue: " + c.b );
  351. } );
  352. QUnit.test( "setStyleHexSkyBlue", ( assert ) => {
  353. var c = new Color();
  354. c.setStyle( '#87CEEB' );
  355. assert.ok( c.getHex() == 0x87CEEB, "Hex c: " + c.getHex() );
  356. } );
  357. QUnit.test( "setStyleHexSkyBlueMixed", ( assert ) => {
  358. var c = new Color();
  359. c.setStyle( '#87cEeB' );
  360. assert.ok( c.getHex() == 0x87CEEB, "Hex c: " + c.getHex() );
  361. } );
  362. QUnit.test( "setStyleHex2Olive", ( assert ) => {
  363. var c = new Color();
  364. c.setStyle( '#F00' );
  365. assert.ok( c.getHex() == 0xFF0000, "Hex c: " + c.getHex() );
  366. } );
  367. QUnit.test( "setStyleHex2OliveMixed", ( assert ) => {
  368. var c = new Color();
  369. c.setStyle( '#f00' );
  370. assert.ok( c.getHex() == 0xFF0000, "Hex c: " + c.getHex() );
  371. } );
  372. QUnit.test( "setStyleColorName", ( assert ) => {
  373. var c = new Color();
  374. c.setStyle( 'powderblue' );
  375. assert.ok( c.getHex() == 0xB0E0E6, "Hex c: " + c.getHex() );
  376. } );
  377. } );
  378. } );
粤ICP备19079148号