From c55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78 Mon Sep 17 00:00:00 2001 From: Andrew Lee Date: Sun, 19 Apr 2020 17:19:32 -0400 Subject: Inital commit --- Library/APIUpdater/project-dependencies.graph | Bin 0 -> 2089 bytes Library/AnnotationManager | Bin 0 -> 4116 bytes Library/ArtifactDB | Bin 0 -> 4059136 bytes Library/ArtifactDB-lock | Bin 0 -> 8192 bytes .../Artifacts/00/00057db738f056d550e298d6a53cd726 | Bin 0 -> 4652 bytes .../Artifacts/00/002cb4312ad9fd9916e60de1eb344301 | Bin 0 -> 9352 bytes .../Artifacts/00/007a9842ee32a428f5f4104b140069cd | Bin 0 -> 12452 bytes .../Artifacts/00/00978da3657d69e759b45be12067f085 | Bin 0 -> 4732 bytes .../Artifacts/01/011b2ea3818580f75f672da61138bd0e | Bin 0 -> 4640 bytes .../Artifacts/01/0125e6ce260e631a71b0406d78d45235 | Bin 0 -> 11952 bytes .../Artifacts/01/012c4e7ed80308b09d389444902dff1f | Bin 0 -> 178 bytes .../Artifacts/01/013bdbf75cffa5a60558e7d7517e2b2c | Bin 0 -> 43400 bytes .../Artifacts/01/018b78e182b8812bc26f30f2e3dcd2d4 | Bin 0 -> 16228 bytes .../Artifacts/01/018dc2a83789885821bca4451fe86b54 | Bin 0 -> 4848 bytes .../Artifacts/01/01a3065b876e2c7820d503fceeadbf8e | Bin 0 -> 17212 bytes .../Artifacts/02/027a8245779a2c8cb22fb831344752f0 | Bin 0 -> 13408 bytes .../Artifacts/02/02c07103d8991a48e8905f63e20c0f1c | Bin 0 -> 5244 bytes .../Artifacts/02/02c7cbd8dd0a09e5b99891e32d47a24f | Bin 0 -> 4233 bytes .../Artifacts/02/02e947e710df71d4fa0f86cb2943bba7 | Bin 0 -> 5088 bytes .../Artifacts/03/032b4497b3acd5be58c7251c1eab678e | Bin 0 -> 6140 bytes .../Artifacts/03/03525d5240013130e1d48430a1eef426 | Bin 0 -> 17564 bytes .../Artifacts/03/035a2e3d7a47b2f21ea6b95966f93876 | Bin 0 -> 7348 bytes .../Artifacts/03/0376c6b0bae99335d035ab785ba23459 | Bin 0 -> 16948 bytes .../Artifacts/03/0395bd6376641fdbdf0b957f9b85bb2c | Bin 0 -> 6188 bytes .../Artifacts/03/03b5228ce96bc9a07a5b11940915c23d | Bin 0 -> 5860 bytes .../Artifacts/03/03e58ae902c8cb7265ffb7c75d95cdd6 | Bin 0 -> 7516 bytes .../Artifacts/04/040b0170638924ac4b43df4428991b94 | Bin 0 -> 6680 bytes .../Artifacts/04/04426e5f1d9f70f2a34fd2d4f969be49 | Bin 0 -> 39104 bytes .../Artifacts/04/046165bfb2141ae237c6d64498824ceb | Bin 0 -> 7456 bytes .../Artifacts/04/049981f0049adb13c09fbb4d4d9e4947 | Bin 0 -> 5040 bytes .../Artifacts/04/04b494b0c09380e78793e0264b5a33fc | Bin 0 -> 4249 bytes .../Artifacts/04/04f15bcaf3f90042afa1853ec71d03c2 | Bin 0 -> 4225 bytes .../Artifacts/04/04fe4063e0019afd5133772b69de9f54 | Bin 0 -> 4229 bytes .../Artifacts/05/0536ee5899bb04623ac87c74a6bebc45 | Bin 0 -> 5836 bytes .../Artifacts/05/055e70c6f791a12e38bfbd078f426a32 | Bin 0 -> 148 bytes .../Artifacts/05/05a115f862ce77cc97d125c994c1e6b9 | Bin 0 -> 4616 bytes .../Artifacts/06/061166fa218424a7a9edd8ceb3e56811 | Bin 0 -> 5808 bytes .../Artifacts/06/06151ebc216634ca35cc7a359bb9a643 | Bin 0 -> 6012 bytes .../Artifacts/06/061919e7a8031897fad032a3cbdbe783 | Bin 0 -> 4544 bytes .../Artifacts/06/068692a47ecf4a3456501b41d82af735 | Bin 0 -> 17184 bytes .../Artifacts/06/068e84855cd24a63f2a46b2977e24ce0 | Bin 0 -> 6512 bytes .../Artifacts/06/069903a16064b2ed84794ee36b093274 | Bin 0 -> 16824 bytes .../Artifacts/06/06b40e7c7af436ba6f3c22b13e93e30a | Bin 0 -> 17624 bytes .../Artifacts/06/06f8205073103b50fe275b6ef0724194 | Bin 0 -> 4225 bytes .../Artifacts/07/0702464e97adc0973f9586b75b73cb51 | Bin 0 -> 4233 bytes .../Artifacts/07/070612484348d06ed5ad9e722523dccc | Bin 0 -> 17176 bytes .../Artifacts/07/0709a6e3753ab3d84d81c38364910215 | Bin 0 -> 4964 bytes .../Artifacts/07/072f6ebfdb73afcdf5b9adc41e41b183 | Bin 0 -> 5868 bytes .../Artifacts/07/0731a3ea702fbf1acb78de659ffd6044 | Bin 0 -> 7860 bytes .../Artifacts/07/075a33faff6e5f690c2449c1541f1c7f | Bin 0 -> 4225 bytes .../Artifacts/07/0793b03342f27777cdbd17c5c419e32b | Bin 0 -> 15568 bytes .../Artifacts/07/07c3ce7c307751aac70a694dcec8ed1d | Bin 0 -> 35404 bytes .../Artifacts/07/07c989d1c23c9285ba66b54e342f6e20 | Bin 0 -> 4716 bytes .../Artifacts/07/07eee7427ee5dcd029b87bc41714cf42 | Bin 0 -> 525 bytes .../Artifacts/07/07f33fac7355977c14024cf1ce48cbd7 | Bin 0 -> 4168 bytes .../Artifacts/08/082623513202133b6a3eb7502e9b7110 | Bin 0 -> 17084 bytes .../Artifacts/08/084eb500b6236078dea4082745ee0d04 | Bin 0 -> 9636 bytes .../Artifacts/08/08570d2ee3f82596518e2dcea99220d7 | Bin 0 -> 4261 bytes .../Artifacts/08/08794a9a727465a58c545bccd09992e3 | Bin 0 -> 4684 bytes .../Artifacts/08/088c981647850502c4357ab0dc68deee | Bin 0 -> 19152 bytes .../Artifacts/08/088e4853a1994d32c485b273c2434956 | Bin 0 -> 4744 bytes .../Artifacts/08/08ae906a6245c03e157dd8cb5d8c6ec9 | Bin 0 -> 4788 bytes .../Artifacts/08/08b17d86c6a39b43dd775241d7338a7c | Bin 0 -> 6464 bytes .../Artifacts/08/08dcc3c7f28d9867db4e6d7e439b59e5 | Bin 0 -> 15172 bytes .../Artifacts/08/08eb76de12610620abe9aad42068fcf1 | Bin 0 -> 7908 bytes .../Artifacts/09/093c0bda42b3532f0e7dfb39d8929190 | Bin 0 -> 5056 bytes .../Artifacts/09/094a935b1350759174999e527a022287 | Bin 0 -> 6492 bytes .../Artifacts/09/09a3dd7fb1e84858de1c8fd2a6c3bd16 | Bin 0 -> 5820 bytes .../Artifacts/09/09aa8a2a01690df968c6cc97f0921cb3 | Bin 0 -> 4968 bytes .../Artifacts/09/09d078d15788a303c115b8deb636a4d4 | Bin 0 -> 5012 bytes .../Artifacts/0a/0a1eb237ef8f1469e36f1c3c32e4ce0a | Bin 0 -> 11068 bytes .../Artifacts/0a/0a3145d8872c01a9c7c534fdfee8fbf2 | Bin 0 -> 4780 bytes .../Artifacts/0a/0a5562c9a733f014ce21de07dac77c70 | Bin 0 -> 4736 bytes .../Artifacts/0a/0aca69c1956b6d260e02810c3df57c91 | Bin 0 -> 6960 bytes .../Artifacts/0b/0b5c586616b5a75ec4c22a8830edae72 | Bin 0 -> 14012 bytes .../Artifacts/0b/0b6a1af4e0209cebb3da8e66ece56e91 | Bin 0 -> 6448 bytes .../Artifacts/0b/0bd782678a2d7e9befcf43aa8f933131 | Bin 0 -> 12680 bytes .../Artifacts/0b/0be737900454458b0a970b6b5f649f29 | Bin 0 -> 4768 bytes .../Artifacts/0b/0be8d3753cedc192223060fb402f6787 | Bin 0 -> 6524 bytes .../Artifacts/0b/0bf713f90029202a2e9e134152ac0b4d | Bin 0 -> 4225 bytes .../Artifacts/0c/0c655749df0e52e3188739fd81f110b1 | Bin 0 -> 7820 bytes .../Artifacts/0c/0c93f18b8e5f9005f21ceae19588d158 | Bin 0 -> 200 bytes .../Artifacts/0c/0c9e395db919c9e8b909bdbd98747c9c | Bin 0 -> 4644 bytes .../Artifacts/0c/0cb6c10b6bdf11ac2a5353745b243e08 | Bin 0 -> 17172 bytes .../Artifacts/0c/0cf0178a43b48004b8fe00cee767da54 | Bin 0 -> 8824 bytes .../Artifacts/0d/0d0233d92797a51725382048070bac0a | Bin 0 -> 10232 bytes .../Artifacts/0d/0d5ce261b7e45cc8899243d8a6f7e87e | Bin 0 -> 8988 bytes .../Artifacts/0d/0d743c0f5a375bc3ca888b8867006e49 | Bin 0 -> 12392 bytes .../Artifacts/0d/0d7b7d099d82456f43844ae9eaa78e62 | Bin 0 -> 175 bytes .../Artifacts/0d/0d9f6e4cbfb4d3982f02e0323d214131 | Bin 0 -> 7568 bytes .../Artifacts/0d/0dcc5d1909a7460bcbbaee1b7b04e7b2 | Bin 0 -> 18224 bytes .../Artifacts/0d/0de61355159f594a8f3ab14ad65c4146 | Bin 0 -> 236 bytes .../Artifacts/0e/0e044323b59ede42f254977e3873e646 | Bin 0 -> 14516 bytes .../Artifacts/0e/0e0de6c282e27fe18bd91f9e18fca7cd | Bin 0 -> 6824 bytes .../Artifacts/0e/0e3651aa8232fa11c3e0a521dcc3767d | Bin 0 -> 17328 bytes .../Artifacts/0e/0e880c7381507965ef9a608559f90061 | Bin 0 -> 20236 bytes .../Artifacts/0e/0ea624d8c8906705e986718437d624bf | Bin 0 -> 8548 bytes .../Artifacts/0e/0ec0feade09aba34d8d0ebb05aa662b4 | Bin 0 -> 6488 bytes .../Artifacts/0f/0f227d1c9377c78e8bea737df8513b31 | Bin 0 -> 8808 bytes .../Artifacts/0f/0f48605975c974e0bc6aaf8389808c58 | Bin 0 -> 4245 bytes .../Artifacts/0f/0f4a43ea026a025aa5739e744719d5c9 | Bin 0 -> 19580 bytes .../Artifacts/0f/0f888294cbe1e68d3f4ecfe0e0878c50 | Bin 0 -> 9904 bytes .../Artifacts/0f/0f91783f6a0131c0527a892bf77f672e | Bin 0 -> 162 bytes .../Artifacts/0f/0fb3aa124f56798451065780a8223d8c | Bin 0 -> 5976 bytes .../Artifacts/10/10177a5cf1a0b4187d5905de209c9b38 | Bin 0 -> 7500 bytes .../Artifacts/10/1017c2bae733d360effe1e2bc7f2c682 | Bin 0 -> 10044 bytes .../Artifacts/10/103cb804c10848ef07e0f24a54d219f9 | Bin 0 -> 4652 bytes .../Artifacts/10/103ffb2582b8071ce0b25e0cc81e7704 | Bin 0 -> 4704 bytes .../Artifacts/10/105a930bba48f3817c7d58223138b3fb | Bin 0 -> 4229 bytes .../Artifacts/10/105ae5716c6fce261ac6a13243455f3e | Bin 0 -> 4428 bytes .../Artifacts/10/1093f012c61e27af69cb5a1f77738d61 | Bin 0 -> 4744 bytes .../Artifacts/11/114b9ce99b5928ba4f7a41fe5711cc07 | Bin 0 -> 17064 bytes .../Artifacts/11/1164db785c4922ea3ee67734cfe828c9 | Bin 0 -> 6344 bytes .../Artifacts/11/1168fef792db4334f912d6c5d1ee2a47 | Bin 0 -> 6536 bytes .../Artifacts/11/116a377105d9b6f696b1f5724dc0b3ab | Bin 0 -> 8760 bytes .../Artifacts/11/116dae3f447d35a386a452bb91ec9173 | Bin 0 -> 4788 bytes .../Artifacts/11/1174eff0d80d77fec06d4f0260e81308 | Bin 0 -> 4241 bytes .../Artifacts/11/11893022c46645582cd6743e65cbae72 | Bin 0 -> 252 bytes .../Artifacts/11/11e57d8b048a42859ca0ba0d36868aff | Bin 0 -> 8080 bytes .../Artifacts/12/1256833e9c5fc4cc47cfcf5187eb7f33 | Bin 0 -> 5596 bytes .../Artifacts/13/130bf734cdd1dfa4a9bdd219379170f3 | Bin 0 -> 24144 bytes .../Artifacts/13/13320a2a3a6372e0b4f75b0a90dfcaef | Bin 0 -> 4604 bytes .../Artifacts/13/133e212eb8a27d33ad7a43d5c404b73d | Bin 0 -> 5704 bytes .../Artifacts/13/136c847b80044369b222529873c23cb3 | Bin 0 -> 18608 bytes .../Artifacts/13/1370c0969eb35c20b7f50041f2f0fcd8 | Bin 0 -> 4225 bytes .../Artifacts/13/13a0de93d84f07047a060d4bd63473f8 | Bin 0 -> 16776 bytes .../Artifacts/13/13be4eea363d75a6fbd00bfb2cff34ff | Bin 0 -> 4976 bytes .../Artifacts/13/13cbea42a4cde3d417a23940955deef6 | Bin 0 -> 5604 bytes .../Artifacts/13/13cbfb820e9cf9b87f66b7578a63057f | Bin 0 -> 4464 bytes .../Artifacts/13/13cd86d4d7ec86cf4e2e3adbcfded114 | Bin 0 -> 10044 bytes .../Artifacts/14/14297d792a3c90f72a690b61672de236 | Bin 0 -> 7492 bytes .../Artifacts/14/145e3ea1d8533e56e8100c2e2a71ab36 | Bin 0 -> 4229 bytes .../Artifacts/14/1487728f7ae26a881602677f16021516 | Bin 0 -> 4225 bytes .../Artifacts/14/14b2ddb6e47bb793b03dfee4563642e2 | Bin 0 -> 6752 bytes .../Artifacts/14/14c3ab8c980a1673ae5a73984f7ff7c0 | Bin 0 -> 188 bytes .../Artifacts/14/14de5ede599b830a8b00830c76be20c7 | Bin 0 -> 20324 bytes .../Artifacts/14/14e9821b7d138a98f8254e91e775ad1f | Bin 0 -> 5196 bytes .../Artifacts/14/14f5e8cb99006a0c4e95004b555883da | Bin 0 -> 4233 bytes .../Artifacts/15/15dc39e20d51b5dab8c95a5f08ab1191 | Bin 0 -> 4868 bytes .../Artifacts/15/15e7848ee129333e1302f4c1c95230f9 | Bin 0 -> 4512 bytes .../Artifacts/16/16481cb72241093b8f7c25b7019a763c | Bin 0 -> 6520 bytes .../Artifacts/16/169a5d48eec409b750b0a3be178eeb39 | Bin 0 -> 4233 bytes .../Artifacts/16/16a090b1d5523b827aba5b9e32991965 | Bin 0 -> 17080 bytes .../Artifacts/16/16b4c7d7e04f4f41cb422a5fb81b46f4 | Bin 0 -> 19200 bytes .../Artifacts/16/16fb1827614ee17a8da2b1b4b2b4ad10 | Bin 0 -> 4644 bytes .../Artifacts/16/16fc15cb9ff5798656768ff243303b02 | Bin 0 -> 4640 bytes .../Artifacts/17/1724bb6af239c84ce42d9e3ef3394545 | Bin 0 -> 4756 bytes .../Artifacts/17/1735759485e4f1ee2aa56269ffcba793 | Bin 0 -> 207 bytes .../Artifacts/17/17a11417aa10043693120cb6fef4ce60 | Bin 0 -> 20396 bytes .../Artifacts/17/17ac9fa7f17f0a6e420694cca655b35f | Bin 0 -> 7148 bytes .../Artifacts/17/17b2c32f969af2621abaef46533ac179 | Bin 0 -> 41096 bytes .../Artifacts/17/17e11bb2e560f698ec957aa4d2d7f680 | Bin 0 -> 5132 bytes .../Artifacts/17/17f7859138da5be07bff3ec4dbbbbc17 | Bin 0 -> 4229 bytes .../Artifacts/17/17fe37c2fa6dc25b7acb41e9e48f67ea | Bin 0 -> 6552 bytes .../Artifacts/18/181ac2bcc9fce649eb7a98db2918197b | Bin 0 -> 4996 bytes .../Artifacts/18/1834b78a05f7e17e856b17a00e33e0e4 | Bin 0 -> 4225 bytes .../Artifacts/18/183a6e99acaec4f07f6fad965be9d8d2 | Bin 0 -> 40 bytes .../Artifacts/18/18578a3f3a9bc26619d5b605a228b75d | Bin 0 -> 4229 bytes .../Artifacts/18/18c0ad074a89e2fb1bee080e997d8bed | Bin 0 -> 4580 bytes .../Artifacts/18/18ca9f1f13422989f666be9a1cfd5f63 | Bin 0 -> 5544 bytes .../Artifacts/18/18d5463ae290c9dc82a7500813ffce20 | Bin 0 -> 4560 bytes .../Artifacts/18/18df75c5de965041fa069311a0423e3d | Bin 0 -> 5860 bytes .../Artifacts/18/18f6d5166b91c77a48c931a544e178e6 | Bin 0 -> 6020 bytes .../Artifacts/19/19015d460650db48bd30ed9dc1ac109b | Bin 0 -> 5292 bytes .../Artifacts/19/1916d0dc3ce72a38d0ba147374904b37 | Bin 0 -> 15028 bytes .../Artifacts/19/191ce0203456a7e6485877d6de150b40 | Bin 0 -> 4344 bytes .../Artifacts/19/1924337bb7f233a15abe206ee65697c8 | Bin 0 -> 17168 bytes .../Artifacts/19/194bbd6e650ae9c064e3042912be703b | Bin 0 -> 13320 bytes .../Artifacts/19/19978bf66e8ec2a0143336d2de6e0a86 | Bin 0 -> 7160 bytes .../Artifacts/19/19a83a896ca4e31324132dee4143cce1 | Bin 0 -> 258 bytes .../Artifacts/19/19b4ccef956186ee6e24b1b72d920819 | Bin 0 -> 4568 bytes .../Artifacts/1a/1a01b5ef5fd588d89232fcb4708f646b | Bin 0 -> 5800 bytes .../Artifacts/1b/1b15c3147e2282863ba1f2e061624ee6 | Bin 0 -> 10708 bytes .../Artifacts/1b/1b41257dc5ee0cc30340b8e6333905e2 | Bin 0 -> 4788 bytes .../Artifacts/1b/1b718ca15611fcb26523f975b95d6e34 | Bin 0 -> 4740 bytes .../Artifacts/1b/1b94602ddaa9da103a7e57347731d27d | Bin 0 -> 4616 bytes .../Artifacts/1b/1b9f6f4abc93150f7ff07755262f4366 | Bin 0 -> 322 bytes .../Artifacts/1b/1bb5d2469210148121310c8c2dac0dc6 | Bin 0 -> 4592 bytes .../Artifacts/1b/1bb7cc48b31276832d33e126811fd54c | Bin 0 -> 9456 bytes .../Artifacts/1b/1bbb1fef5079b5641fe65bd7f0b4780d | Bin 0 -> 23548 bytes .../Artifacts/1b/1bc4b89d20bf483362a1aaf9b6bd6d22 | Bin 0 -> 5752 bytes .../Artifacts/1c/1c4c141ebf9aa6abcefbf991134d1347 | Bin 0 -> 4225 bytes .../Artifacts/1c/1c80726bdf8dcec45972c5a0d8baff1b | Bin 0 -> 10836 bytes .../Artifacts/1c/1cacc5349758d9100d52f84cf2a1e955 | Bin 0 -> 9872 bytes .../Artifacts/1d/1d0148afb1f52a3c88e1ffa11545b44c | Bin 0 -> 4724 bytes .../Artifacts/1d/1d6a8ea309a24fa58f05c1729f849dd6 | Bin 0 -> 8992 bytes .../Artifacts/1d/1d6d9c52bb48758158daab8a92585b28 | Bin 0 -> 5292 bytes .../Artifacts/1d/1dcc788dde2aa2bfd9029ae77e79101b | Bin 0 -> 5004 bytes .../Artifacts/1d/1de643b3cff993daae626fea8bf21812 | Bin 0 -> 274 bytes .../Artifacts/1e/1e2212b20080431765e248bf3032ccac | Bin 0 -> 13992 bytes .../Artifacts/1e/1e314a8e14b09644c88fa2d5bfcc19a6 | Bin 0 -> 251 bytes .../Artifacts/1e/1e37d6006399506ed19c61a8020514e2 | Bin 0 -> 5624 bytes .../Artifacts/1e/1e4ba297ca17145bb4a2e5a5f9ac7c46 | Bin 0 -> 5956 bytes .../Artifacts/1e/1e4f16b733f5bbc80bc6ec23da1cdbf2 | Bin 0 -> 6428 bytes .../Artifacts/1e/1e81c7456c4b54438f63b6b501d4cc9f | Bin 0 -> 5844 bytes .../Artifacts/1e/1edd63957e79a9fe0b210840965b0936 | Bin 0 -> 4233 bytes .../Artifacts/1f/1f0f48dc7029cfefcb0c7e0a67ba4c42 | Bin 0 -> 269 bytes .../Artifacts/1f/1f1fa245eaf3228b33d8eed6b37327bb | Bin 0 -> 4233 bytes .../Artifacts/1f/1f3e12217ecffbadb94b7fbf4f2f9a42 | Bin 0 -> 4980 bytes .../Artifacts/1f/1f4ea4a041c1544ec3f20752b6fdd7ae | Bin 0 -> 7924 bytes .../Artifacts/1f/1f7a9dcfafff4ed2a6315a0f68752b6e | Bin 0 -> 5024 bytes .../Artifacts/1f/1fec442c704ddf090ea5398d42d9df79 | Bin 0 -> 475 bytes .../Artifacts/1f/1ff42aa232dcec7b6f69d1a17a6c2b50 | Bin 0 -> 8852 bytes .../Artifacts/1f/1ff5db9e1612d24316097c4f4cecb3d1 | Bin 0 -> 17620 bytes .../Artifacts/20/200319e64e448f326f640c14d60e10db | Bin 0 -> 18680 bytes .../Artifacts/20/20045b183a0c51709de2e1908c3ac9e2 | Bin 0 -> 4712 bytes .../Artifacts/20/205355baed36ab213d806e6a609e0647 | Bin 0 -> 9952 bytes .../Artifacts/20/207b1593e302ed35d2db3d2417d487dd | Bin 0 -> 8292 bytes .../Artifacts/21/218b4ab5ad84f6287d370def3e2ded8e | Bin 0 -> 175 bytes .../Artifacts/21/219b725bb3538c7763cae2e53bf06e0b | Bin 0 -> 10344 bytes .../Artifacts/21/21becd126932ff2a657a24a321c4d829 | Bin 0 -> 5316 bytes .../Artifacts/22/220bc74d8011eca91f79b51f6fd37182 | Bin 0 -> 4225 bytes .../Artifacts/22/2247294585432f0269855d28d2abf32f | Bin 0 -> 55896 bytes .../Artifacts/22/226e882476642b871f980c039c04a312 | Bin 0 -> 5764 bytes .../Artifacts/22/22c06d355a09363a34441ff3ad0ae54b | Bin 0 -> 9972 bytes .../Artifacts/22/22f62a6415215fc37c3bffeb0cba860d | Bin 0 -> 4736 bytes .../Artifacts/23/2317e286c4b1d5638f42b8945c326b01 | Bin 0 -> 28028 bytes .../Artifacts/23/233f363fa672bfef3ef414b22363023e | Bin 0 -> 82144 bytes .../Artifacts/23/2341a138065a7ccca32f256ba0c20f0a | Bin 0 -> 4225 bytes .../Artifacts/23/23d3e8b41fe1cf54b67ca065fce4da9b | Bin 0 -> 4233 bytes .../Artifacts/23/23fb3e4912aa4a7b9cdc188453f49abf | Bin 0 -> 4692 bytes .../Artifacts/24/247747ec214893333942a4f3b4b150f7 | Bin 0 -> 5020 bytes .../Artifacts/24/248816608095f016d3c305a05d4e4cb8 | Bin 0 -> 17564 bytes .../Artifacts/24/24b4c1a8df63f27ce3f4a2c27a1cd433 | Bin 0 -> 5380 bytes .../Artifacts/24/24c464e9521e6412a0dd400a9ccd6ac3 | Bin 0 -> 8388 bytes .../Artifacts/24/24cb85b9573db8c936df1fe5440ee888 | Bin 0 -> 4253 bytes .../Artifacts/24/24d38a52757b6b312b7e3485e4bbd263 | Bin 0 -> 12820 bytes .../Artifacts/24/24e63f4d680476f836cf1f60cdaf786f | Bin 0 -> 8496 bytes .../Artifacts/25/250664040712eb06ef8405e1bcff9db7 | Bin 0 -> 18836 bytes .../Artifacts/25/25186a6ee24a6177a0849083ef4d3a30 | Bin 0 -> 17568 bytes .../Artifacts/25/2546cc9aa204da4d6142a9af70ddd4f1 | Bin 0 -> 4245 bytes .../Artifacts/25/256cbfae240578dd7bde6093ab398502 | Bin 0 -> 9188 bytes .../Artifacts/25/2595d28835bfbffea40eccab67bf9a82 | Bin 0 -> 17172 bytes .../Artifacts/25/25961b0971a84f00ae54ee36bcc78f9f | Bin 0 -> 4856 bytes .../Artifacts/25/25ac9ec6ed05e57d0d98a46a307e0516 | Bin 0 -> 5804 bytes .../Artifacts/25/25accf0f5e9002f98d6899513f27f515 | Bin 0 -> 17172 bytes .../Artifacts/25/25ed7b3cd62bdb6046b02d6ff30257ba | Bin 0 -> 4241 bytes .../Artifacts/26/2628688eb85ef2058da67257a75b4981 | Bin 0 -> 269 bytes .../Artifacts/26/266cc5824f6611c89edc3ece1cfe7be7 | Bin 0 -> 4612 bytes .../Artifacts/26/26ea2c38b13d01efaa2833998dd23e6c | Bin 0 -> 4225 bytes .../Artifacts/26/26f82af7868bea6fbb6462d47fd188fd | Bin 0 -> 7924 bytes .../Artifacts/27/271ef67f52327eb3457e071ef678f286 | Bin 0 -> 15244 bytes .../Artifacts/27/27219a8b78a6f17f19cffea67ff08874 | Bin 0 -> 5344 bytes .../Artifacts/27/2775c8c172913c9152a755cac846e97a | Bin 0 -> 17744 bytes .../Artifacts/27/277c0cdd2b18ebaff4007489f1d027a0 | Bin 0 -> 5460 bytes .../Artifacts/27/2784a06f88a70adc7741815439768097 | Bin 0 -> 28616 bytes .../Artifacts/27/2785348ce422605f6596f3e0492d3b25 | Bin 0 -> 9284 bytes .../Artifacts/27/278bcf24e6b2788c6036c89c448b665b | Bin 0 -> 5012 bytes .../Artifacts/27/27b70df6462612a13877588dfe95eb35 | Bin 0 -> 4160 bytes .../Artifacts/27/27df247bcc272003545632c81309f869 | Bin 0 -> 6044 bytes .../Artifacts/27/27f5502b0619d78160a133dca0fcf6b1 | Bin 0 -> 10900 bytes .../Artifacts/28/28472b5d2225768aec0a8de21828e288 | Bin 0 -> 4229 bytes .../Artifacts/28/286509bbe4fe06c2e6375960f5b96bb0 | Bin 0 -> 6012 bytes .../Artifacts/29/2914a76c0ddf161247f5903c1991dee5 | Bin 0 -> 4233 bytes .../Artifacts/29/2942687c50c9841bb58dd72d0a95ad72 | Bin 0 -> 22888 bytes .../Artifacts/29/29dd072da8fe435cacc6b3713fffa489 | Bin 0 -> 13996 bytes .../Artifacts/29/29ec68f2f7648464365d68d39def74e4 | Bin 0 -> 37764 bytes .../Artifacts/2a/2a2e551f09c3eba4df249d1adbec5760 | Bin 0 -> 6168 bytes .../Artifacts/2a/2a4fc6e71962a80af60e19ab02c21e05 | Bin 0 -> 262 bytes .../Artifacts/2a/2a8afb9fab61b464b4e5770072ccd548 | Bin 0 -> 7144 bytes .../Artifacts/2a/2a95bb581e5490254da375c4b74ab476 | Bin 0 -> 5584 bytes .../Artifacts/2a/2a9c6686ddddd0e0b29c56bd4b02cc3a | Bin 0 -> 5532 bytes .../Artifacts/2b/2b1919a049c99c063d209cb68ab9e59e | Bin 0 -> 5988 bytes .../Artifacts/2b/2b34a0a6a90a1f8f5db766dbf9bfac27 | Bin 0 -> 5844 bytes .../Artifacts/2b/2b3e994d33d068e12a0641d610089d53 | Bin 0 -> 5832 bytes .../Artifacts/2b/2b77ff3bd5b156e6c58ab7dff4e9ebcd | Bin 0 -> 5896 bytes .../Artifacts/2b/2b8a4ef43daa7415e586980f2f58c2ab | Bin 0 -> 18736 bytes .../Artifacts/2b/2bd177cef454da4a9b4611d6708d217e | Bin 0 -> 19940 bytes .../Artifacts/2b/2bd965ec74f65987a23916e21aac78a7 | Bin 0 -> 5064 bytes .../Artifacts/2b/2be31b1244ff6b55d548dbcc30f9bb30 | Bin 0 -> 17328 bytes .../Artifacts/2c/2c6dd9306b4480bef2804ab473875b1c | Bin 0 -> 5468 bytes .../Artifacts/2c/2cc026344a3f7ac8fcbb684e3400f107 | Bin 0 -> 13012 bytes .../Artifacts/2c/2cef9978f62f617bd9ff4d29c866e82e | Bin 0 -> 19128 bytes .../Artifacts/2c/2cfcf3ad7499bdc92aac7906fcbf63be | Bin 0 -> 5156 bytes .../Artifacts/2d/2d0c9ba5393dd45827455a22de050df2 | Bin 0 -> 4560 bytes .../Artifacts/2d/2d4dde0431f06d8375595c721bef50f8 | Bin 0 -> 4616 bytes .../Artifacts/2d/2d6d5a702b4ecb309820c77c43b99127 | Bin 0 -> 4776 bytes .../Artifacts/2d/2d847dd3486d270fd7722b360ac82738 | Bin 0 -> 4225 bytes .../Artifacts/2d/2dc885efa1616f0f342042326ab297e2 | Bin 0 -> 5300 bytes .../Artifacts/2d/2df19610510ec13acfbc8c62457148eb | Bin 0 -> 8040 bytes .../Artifacts/2e/2e1d175d940b1a9283568636497a5336 | Bin 0 -> 4432 bytes .../Artifacts/2e/2e4abef8906379b5411b1da85949de1c | Bin 0 -> 7652 bytes .../Artifacts/2e/2e679b17b0b8efc7d0d4c1fc1cdae31f | Bin 0 -> 2490 bytes .../Artifacts/2e/2e738c0f355787146f26a76c213d27d1 | Bin 0 -> 4636 bytes .../Artifacts/2e/2e9f38779a1430cd4a88da187621c6fc | Bin 0 -> 5896 bytes .../Artifacts/2e/2ed7ff2f210d273bc509557aa864005b | Bin 0 -> 27456 bytes .../Artifacts/2e/2ede6af250f365011b922fd5686ac12f | Bin 0 -> 470 bytes .../Artifacts/2e/2eebd8965716d04a0db81dad12ebb10e | Bin 0 -> 6604 bytes .../Artifacts/2f/2f0e07adf97d2ebb4b04c37f95b0c44d | Bin 0 -> 133 bytes .../Artifacts/2f/2f2db7c0157dba067747f8d98034f372 | Bin 0 -> 7392 bytes .../Artifacts/2f/2f400878daa66e8e6eb9ee1e93604f41 | Bin 0 -> 4233 bytes .../Artifacts/2f/2f608d203389663b14c4135d734c5b0e | Bin 0 -> 7052 bytes .../Artifacts/2f/2f93ad39ff11c66255f567253fe1422c | Bin 0 -> 4241 bytes .../Artifacts/2f/2fe0decdfc3139b3ab84bbacc46a38bc | Bin 0 -> 5880 bytes .../Artifacts/2f/2fe166dbed7fcf96295135530f730608 | Bin 0 -> 8976 bytes .../Artifacts/30/301d2a805b957408c729ce1b6d9d3f47 | Bin 0 -> 143 bytes .../Artifacts/30/30481928779ae94a32b190383d554503 | Bin 0 -> 13924 bytes .../Artifacts/30/30f72ab43c8f926f5bd91dbd2c819ae2 | Bin 0 -> 5224 bytes .../Artifacts/31/31146bcd49110d52caf20dbcb7e2b935 | Bin 0 -> 218304 bytes .../Artifacts/31/312b64eac3d94c33680a326cfea4655e | Bin 0 -> 17180 bytes .../Artifacts/31/31390783c2ee09756420e9063c536d4b | Bin 0 -> 20692 bytes .../Artifacts/31/315061f97acaf5e610a505361e8e05df | Bin 0 -> 9912 bytes .../Artifacts/31/3155cba6b5a6876abd5dec7533a10619 | Bin 0 -> 82132 bytes .../Artifacts/31/31cebc11414109e30a84a47030293a58 | Bin 0 -> 4580 bytes .../Artifacts/32/321bdb0fcd5492bfed628b3efbd65363 | Bin 0 -> 200 bytes .../Artifacts/32/3241a82fe37ab665133ca8f033dfcd84 | Bin 0 -> 6712 bytes .../Artifacts/32/3262099ce8726bb3ce307336aae8aac0 | Bin 0 -> 6832 bytes .../Artifacts/32/3292688fdcc9924b63eddb139bfe9671 | Bin 0 -> 4612 bytes .../Artifacts/33/332fb44b7ad1077a597334ac741ce5ff | Bin 0 -> 16612 bytes .../Artifacts/33/33472c490c225d5343d013f1a3e20561 | Bin 0 -> 4225 bytes .../Artifacts/33/339477e1a3003f05d4af66b41cedc27b | Bin 0 -> 4229 bytes .../Artifacts/33/339c85c2b3f188b9635880228b001560 | Bin 0 -> 35944 bytes .../Artifacts/33/33b5cfae4f2d213cd462890c91a6019d | Bin 0 -> 10436 bytes .../Artifacts/33/33bf94198f92d0692bf1c91140bcfba7 | Bin 0 -> 9224 bytes .../Artifacts/33/33f496b2c16cd018f3923e437aa15315 | Bin 0 -> 17620 bytes .../Artifacts/33/33f69ab3bef5640cca8f826129cb1312 | Bin 0 -> 5804 bytes .../Artifacts/33/33ffffbf0608628e11e75d8caae4a596 | Bin 0 -> 13632 bytes .../Artifacts/34/340cfcfa453d84a56b0fa34ebf44d470 | Bin 0 -> 5140 bytes .../Artifacts/34/343d7299db1e75ae05ef55e6b9766941 | Bin 0 -> 17728 bytes .../Artifacts/34/344f8b36c58be6e55f00d3fa63f04eff | Bin 0 -> 4241 bytes .../Artifacts/34/34d3ff1f22feb91fbca195cfa79ff4b8 | Bin 0 -> 4245 bytes .../Artifacts/35/352b251d3ab4062bf7ca1479893bf302 | Bin 0 -> 5036 bytes .../Artifacts/35/3585c4e7700e1f3fc6c42a4494e4df2b | Bin 0 -> 9008 bytes .../Artifacts/36/3610beeeb94a29f18f1c3da276d1d505 | Bin 0 -> 4225 bytes .../Artifacts/36/364ae3db70f9439cf0c33b0f076d5aff | Bin 0 -> 4840 bytes .../Artifacts/36/366f4254bfa8841a9f79bb19df84615b | Bin 0 -> 17616 bytes .../Artifacts/37/371bd1ae8b5402618e5d4fe40c2d5971 | Bin 0 -> 17016 bytes .../Artifacts/37/37313f43564307f2fd5b8b3a7bd29c09 | Bin 0 -> 4592 bytes .../Artifacts/37/375ab6d8e1bf7844f6624747eac9dc5a | Bin 0 -> 9672 bytes .../Artifacts/37/37682686e667db8bef104cfa664e14b2 | Bin 0 -> 4616 bytes .../Artifacts/37/37a5d2f21241146665b5a7f410c804c1 | Bin 0 -> 16728 bytes .../Artifacts/37/37bee9b8072e9e71f4af6ef5152ac205 | Bin 0 -> 580 bytes .../Artifacts/37/37c5798009f101064246bc7c223f6201 | Bin 0 -> 6528 bytes .../Artifacts/37/37e5c582e0236894b2bf976a82cead92 | Bin 0 -> 17184 bytes .../Artifacts/38/3827829f1a9fa0085e8104e0a9c6dc94 | Bin 0 -> 4237 bytes .../Artifacts/38/3833f9815358e8bc9a26bac5585764d3 | Bin 0 -> 4776 bytes .../Artifacts/38/38458aeb7fffcd4316efc0b8e67370e8 | Bin 0 -> 4233 bytes .../Artifacts/38/38505357239ff7fb23bf8064e0e802ce | Bin 0 -> 4233 bytes .../Artifacts/38/38566d987fac5c3483753eebe1a92b1d | Bin 0 -> 5520 bytes .../Artifacts/38/38ac021ac38e8b225cc5d8a57522fb48 | Bin 0 -> 12388 bytes .../Artifacts/38/38bc7f27f8b6b7f12002a86ec48f9cdc | Bin 0 -> 5152 bytes .../Artifacts/38/38e4fd2958293ef0837fae83b4db6caf | Bin 0 -> 4229 bytes .../Artifacts/39/396135e9840caf759a6817c4ee0b3137 | Bin 0 -> 4229 bytes .../Artifacts/39/39781d2524cf795e9f7d37b7ebfc8b08 | Bin 0 -> 199 bytes .../Artifacts/39/398a1087a52c111660f921caa271bf6d | Bin 0 -> 4588 bytes .../Artifacts/39/398a478dfe447f86b2329c1530b4ec93 | Bin 0 -> 7256 bytes .../Artifacts/39/39bfe240698f9ae953b5221c118fb4d6 | Bin 0 -> 20440 bytes .../Artifacts/39/39d15b1e409260b2205ede5f464ff657 | Bin 0 -> 244 bytes .../Artifacts/39/39f090952b33e6ecb0fe3575a64c19d4 | Bin 0 -> 10508 bytes .../Artifacts/3a/3a05efd7e426d16ad96f12365120dd75 | Bin 0 -> 17552 bytes .../Artifacts/3a/3aae955f8b50367b0d4b8b4b3834a33b | Bin 0 -> 20724 bytes .../Artifacts/3a/3adb92abb227838a9bab0ea9923e4d33 | Bin 0 -> 8352 bytes .../Artifacts/3a/3ae5e68eacce4a66ed11b1794bbb1648 | Bin 0 -> 4221 bytes .../Artifacts/3a/3ae8754b6bed0275720700ed9cb19d02 | Bin 0 -> 4249 bytes .../Artifacts/3a/3af72cb6346d605ecf18faf57c6456e5 | Bin 0 -> 8448 bytes .../Artifacts/3b/3b1b7e5d9c9365f8b035af3235ffe278 | Bin 0 -> 6120 bytes .../Artifacts/3b/3b2cab0fd4fc17bbf1c6d75ba783bcdd | Bin 0 -> 5032 bytes .../Artifacts/3b/3b4ac39eb914b38f8d8806ad13472f8b | Bin 0 -> 5380 bytes .../Artifacts/3b/3b76e03cc6134422d4670a14dab598d2 | Bin 0 -> 265 bytes .../Artifacts/3b/3b7e15b56126ad3d14570f62a9a8cc46 | Bin 0 -> 5276 bytes .../Artifacts/3b/3b96dc0f0ea78303f0b7ab4d9cccd835 | Bin 0 -> 4225 bytes .../Artifacts/3b/3bc73bae4b6a4f0cc33899c1e73acd50 | Bin 0 -> 4221 bytes .../Artifacts/3c/3c236318bb347fa9ba79fb12438d785c | Bin 0 -> 17496 bytes .../Artifacts/3c/3c77366c4e3f5a29bf7e73302c84e43e | Bin 0 -> 8752 bytes .../Artifacts/3c/3c86436b3e5e8159edca4aafedfd8567 | Bin 0 -> 4225 bytes .../Artifacts/3c/3c9a45d43eb1be73f55d3ac2753aa683 | Bin 0 -> 5820 bytes .../Artifacts/3c/3ccf9007523111492c8d627d665fbe27 | Bin 0 -> 202 bytes .../Artifacts/3c/3cd3afe97ff43350a61afcd336f5f65f | Bin 0 -> 5192 bytes .../Artifacts/3c/3ce57eca4cf365e6dc044f95d67be609 | Bin 0 -> 16864 bytes .../Artifacts/3c/3ce6f6d7afb665438f210aac24ca1a85 | Bin 0 -> 4636 bytes .../Artifacts/3d/3d115495dc17f09c8f2788dfa2eb56f8 | Bin 0 -> 5152 bytes .../Artifacts/3d/3d31c6b2c910190d0d7f363af6fcbc4c | Bin 0 -> 4225 bytes .../Artifacts/3d/3d911c1d3897dc4e1a0225c79df7a233 | Bin 0 -> 4257 bytes .../Artifacts/3d/3da598fa08cfb9879b37424b8d3ca990 | Bin 0 -> 391 bytes .../Artifacts/3d/3ddea8aa6936a7205f0bfa20b2cac625 | Bin 0 -> 12092 bytes .../Artifacts/3d/3de3ed75cfb71d38444a407d26b902d3 | Bin 0 -> 6440 bytes .../Artifacts/3e/3e020cda1c716423532d30d64208b20b | Bin 0 -> 16036 bytes .../Artifacts/3e/3e03e07310c190651021b7492700ee8c | Bin 0 -> 8352 bytes .../Artifacts/3e/3e224850573209509df7c1e38d89583c | Bin 0 -> 5928 bytes .../Artifacts/3e/3e45383b22dfa2ac849ce41663c5fe32 | Bin 0 -> 12292 bytes .../Artifacts/3e/3e9243594859df900e537d519f8d9907 | Bin 0 -> 4528 bytes .../Artifacts/3e/3eb2d80fa456faa904f56541e54ca951 | Bin 0 -> 4229 bytes .../Artifacts/3e/3eb87ad3267b1653dd4c96ed6f82db2f | Bin 0 -> 6600 bytes .../Artifacts/3e/3efccc31ea1cf09ffb73010a4a7f8b5a | Bin 0 -> 5300 bytes .../Artifacts/3f/3f144a7277bde67f0d5b6e627d967375 | Bin 0 -> 32252 bytes .../Artifacts/3f/3f1deb1a9b242f6f1579865c0e88f9cc | Bin 0 -> 6500 bytes .../Artifacts/3f/3f2feb78341c296675119898c3fa971e | Bin 0 -> 48828 bytes .../Artifacts/3f/3f553d38907b34dca437f1114b7bcec0 | Bin 0 -> 14648 bytes .../Artifacts/3f/3f644676149468493a20b9aeb11d128c | Bin 0 -> 5304 bytes .../Artifacts/3f/3f878ef34779674a3880a4f567a87ff5 | Bin 0 -> 161 bytes .../Artifacts/40/40566722eb2c9f8739ebd7bade9a3bcf | Bin 0 -> 339 bytes .../Artifacts/40/4059563320d3b945ca14ee33a794a451 | Bin 0 -> 20704 bytes .../Artifacts/40/406175b55a61baafb83393a18b4e4ec8 | Bin 0 -> 6388 bytes .../Artifacts/40/40a1263ae11a6d7b9071d4d7148cdfc3 | Bin 0 -> 6316 bytes .../Artifacts/40/40ad7ab4aff859ab0d0f8923325eda9a | Bin 0 -> 12508 bytes .../Artifacts/40/40f0d4138e9d28eaeadb35c6cd39c86a | Bin 0 -> 4932 bytes .../Artifacts/41/411a14de3f1b19ad2f222e92ac3ae475 | Bin 0 -> 157 bytes .../Artifacts/41/413ac0edb76098ecb685082b760d716d | Bin 0 -> 4980 bytes .../Artifacts/41/417cb8baf25dd7818adced4177f67c52 | Bin 0 -> 5304 bytes .../Artifacts/41/41c6c5869236961c25aec4229d604fdb | Bin 0 -> 414 bytes .../Artifacts/42/42036390230ed0c002a4aed8cd8e6304 | Bin 0 -> 7428 bytes .../Artifacts/42/4249bc41032c5f80e45e6315de8a2d03 | Bin 0 -> 16848 bytes .../Artifacts/43/4365ccb32b17bfa6d351f5bdb035f967 | Bin 0 -> 6944 bytes .../Artifacts/43/436ffcc900c5e7b4be42e1c930392557 | Bin 0 -> 5152 bytes .../Artifacts/43/43a98529fd7bc49cd930fda59cb73610 | Bin 0 -> 16724 bytes .../Artifacts/43/43e90fb3cd1f2326ec4f8a53ee11dcc9 | Bin 0 -> 17176 bytes .../Artifacts/43/43fb3343b0c5cd60ca853c2c4e346dd9 | Bin 0 -> 4724 bytes .../Artifacts/44/442268ac77101f73f2d60dea2dcd9462 | Bin 0 -> 7804 bytes .../Artifacts/44/44294f3ff12cac9dc5ce448752c37134 | Bin 0 -> 5356 bytes .../Artifacts/44/4438da17c2d0eaa885f4e29ff280d8c5 | Bin 0 -> 29600 bytes .../Artifacts/44/44b2c1aed0d141d614d2ba8fc90e1931 | Bin 0 -> 5460 bytes .../Artifacts/44/44cab0080c32dc3e056b8162bfd3943d | Bin 0 -> 4225 bytes .../Artifacts/44/44cb1bd6a3147f6b6209eb18f6f37125 | Bin 0 -> 8772 bytes .../Artifacts/44/44edd0e1ba367dfa588627ddd51cbdbb | Bin 0 -> 4460 bytes .../Artifacts/45/451ff88d0441d72891f1bd591f3b78b3 | Bin 0 -> 439 bytes .../Artifacts/45/454264059d076c4cec018b695bafd849 | Bin 0 -> 13340 bytes .../Artifacts/45/454485bdb92306faae51fd6c123b43e7 | Bin 0 -> 8196 bytes .../Artifacts/45/4546b597d677a8ac9b799d4917ac18c1 | Bin 0 -> 4676 bytes .../Artifacts/45/45f530864d94527386aefcd90530bbf9 | Bin 0 -> 7720 bytes .../Artifacts/46/462ef9ed8535f6d5913a207cfa5dd6c3 | Bin 0 -> 7368 bytes .../Artifacts/46/465c4e6647578467015b63113fcb5e14 | Bin 0 -> 8500 bytes .../Artifacts/46/467e0343b8d2c05bc912479ddac7b013 | Bin 0 -> 4492 bytes .../Artifacts/46/469b2b15808088845e882a92f29a058d | Bin 0 -> 5784 bytes .../Artifacts/47/4775e4a018932639704c718b097c2432 | Bin 0 -> 478 bytes .../Artifacts/47/4779b50a5741e0237ceec3c54a69cc79 | Bin 0 -> 22608 bytes .../Artifacts/48/4808638ca542ad4f1e20f49f8e542496 | Bin 0 -> 4916 bytes .../Artifacts/48/4837cc0c57804317f868ddfc992207a4 | Bin 0 -> 8248 bytes .../Artifacts/48/48980d2a4d7098bf0f2fa3461a5cdbc9 | Bin 0 -> 22020 bytes .../Artifacts/48/48c694e4fc8dd0a48192e05c360f6df9 | Bin 0 -> 4660 bytes .../Artifacts/48/48d22bc4a01e3e937330d6c1b0593a13 | Bin 0 -> 4221 bytes .../Artifacts/48/48d9068463917b7836754937b2d609ba | Bin 0 -> 9032 bytes .../Artifacts/49/4936e2daeca83e735493bcc0bdfe984c | Bin 0 -> 11232 bytes .../Artifacts/49/49429bea68cf54ba74d4176d1f28de86 | Bin 0 -> 4556 bytes .../Artifacts/49/49f8b0fc35f478f77a875914d38f33bb | Bin 0 -> 41248 bytes .../Artifacts/4a/4a042120097bfe296285e83c8b7899c7 | Bin 0 -> 4225 bytes .../Artifacts/4a/4a356541449d26eb51a237c19e80ede7 | Bin 0 -> 4588 bytes .../Artifacts/4a/4a4de2657de9b8aff890d1d5b249d11f | Bin 0 -> 6760 bytes .../Artifacts/4a/4ac1109ad262b244d44e70b40b203503 | Bin 0 -> 4752 bytes .../Artifacts/4a/4ad62df2299af830b8db48725ecd41a1 | Bin 0 -> 6620 bytes .../Artifacts/4b/4b3674b4c1589df0e36427eac150f9f1 | Bin 0 -> 4764 bytes .../Artifacts/4b/4b3829728616e2bc58352b701846f073 | Bin 0 -> 4572 bytes .../Artifacts/4b/4b4ebd23a856b35c661ce4a2f2f06850 | Bin 0 -> 4245 bytes .../Artifacts/4c/4c155400ed838f5b5e16c6db47ba0854 | Bin 0 -> 8600 bytes .../Artifacts/4c/4c2571e185d659e48fb0fbb3581ada42 | Bin 0 -> 202 bytes .../Artifacts/4c/4c4c171ba9d917d629d35e9240aa1f3c | Bin 0 -> 11376 bytes .../Artifacts/4c/4c6a5f7480da208a689d660811616858 | Bin 0 -> 5044 bytes .../Artifacts/4c/4c9007fecfeda6c7fc210aa2121266ec | Bin 0 -> 6700 bytes .../Artifacts/4c/4ccc25b44e26626230faf2536a546867 | Bin 0 -> 8336 bytes .../Artifacts/4d/4d8bb8a79a93fb4cf87c555244e4e8bd | Bin 0 -> 4740 bytes .../Artifacts/4d/4dcac4a47171e454565878801c10f918 | Bin 0 -> 15912 bytes .../Artifacts/4d/4dd71ed385bf3887b4d8da6dde51562a | Bin 0 -> 9184 bytes .../Artifacts/4d/4ddc62ebb875a0329263463c7990d0b7 | Bin 0 -> 17496 bytes .../Artifacts/4d/4df34937b3cc79a33dee4738a07e3c79 | Bin 0 -> 8936 bytes .../Artifacts/4e/4e50898cf8a58245a0b7a618aa1bb19d | Bin 0 -> 6400 bytes .../Artifacts/4e/4ec692aba18fca8e419828ecca9c25b1 | Bin 0 -> 22072 bytes .../Artifacts/4f/4f0360ddfb8f67bcbba13fc814e9fc03 | Bin 0 -> 7076 bytes .../Artifacts/4f/4f45c4bf860a1e6648427e57dd7c4e74 | Bin 0 -> 5804 bytes .../Artifacts/4f/4f5d92a982d1334b70ca10c4a281a85e | Bin 0 -> 6468 bytes .../Artifacts/4f/4f7bd147a29ad6ffcc8c4afe20a4b88c | Bin 0 -> 4229 bytes .../Artifacts/4f/4f966a8de0501bb7120a2ee652d07932 | Bin 0 -> 5176 bytes .../Artifacts/4f/4f99e3426b30e5f6d4af7589713b0137 | Bin 0 -> 6092 bytes .../Artifacts/4f/4fa83977c1730e1a4ffedb07c85ae715 | Bin 0 -> 4245 bytes .../Artifacts/4f/4fd6909ded33fc5eca2b4453e21f72db | Bin 0 -> 17628 bytes .../Artifacts/4f/4fdb5b7176e2e81a694e55fa000299ad | Bin 0 -> 4229 bytes .../Artifacts/50/502279c4e4bbfbc5435d9a7a6bea3582 | Bin 0 -> 12092 bytes .../Artifacts/50/502b714d87197649fb5277e8a760aeef | Bin 0 -> 9176 bytes .../Artifacts/50/50aa1772ca8d54f465d6d928c4ac8797 | Bin 0 -> 5784 bytes .../Artifacts/51/51122b8691a581cdb93622b2d8874fde | Bin 0 -> 4732 bytes .../Artifacts/51/51295a7e97bff337ff0c94fd724ee488 | Bin 0 -> 5016 bytes .../Artifacts/51/5145d5ff7af5d60931e621a8dc92c057 | Bin 0 -> 7764 bytes .../Artifacts/51/514f565a1809cfce174ce5fb8392284e | Bin 0 -> 6800 bytes .../Artifacts/51/51964cf0f99c65a81eebb0b57bbfa797 | Bin 0 -> 6468 bytes .../Artifacts/52/521149520882f419f0ada94a3ad3ff17 | Bin 0 -> 8388 bytes .../Artifacts/52/5215db2bf259cf34c2700dbd1d7499db | Bin 0 -> 5416 bytes .../Artifacts/52/527293af630d04b0140205510b82b39f | Bin 0 -> 31804 bytes .../Artifacts/52/52df893db741112fa27d49688d2df523 | Bin 0 -> 5376 bytes .../Artifacts/53/5305e89e3760930633d52727b876e399 | Bin 0 -> 9632 bytes .../Artifacts/53/53192f0563788f0e6db8b33899d1ef2c | Bin 0 -> 14280 bytes .../Artifacts/53/53558c7c9be0ad7d5944fbc64227784a | Bin 0 -> 11368 bytes .../Artifacts/53/535be8475cd0df73ac933a758d3bafcc | Bin 0 -> 11564 bytes .../Artifacts/53/536626b65bd5b0c339852296b69154ba | Bin 0 -> 15240 bytes .../Artifacts/53/53c2a0ad45fe85b0fbc2aebe65153c65 | Bin 0 -> 5000 bytes .../Artifacts/53/53c85e67f72f414d8ccbc610f67e588b | Bin 0 -> 161 bytes .../Artifacts/53/53eb767b9d79ac8ce6ef7c85d298eeb7 | Bin 0 -> 875 bytes .../Artifacts/54/54d3d5c6ebd1f8d5c476a9a2a2cb2bc0 | Bin 0 -> 4512 bytes .../Artifacts/55/551291d85aad0eb5ce8fe9546b69d485 | Bin 0 -> 17084 bytes .../Artifacts/55/551aff0ee89bf98b5c9ad2ea7f728e25 | Bin 0 -> 7428 bytes .../Artifacts/55/552ab9ada313b11d69ed631fb5f9ead4 | Bin 0 -> 17640 bytes .../Artifacts/55/5562b23ccd4f6837374b6302b4513073 | Bin 0 -> 4245 bytes .../Artifacts/55/5588c78eafd12e6315a7bbbceb31fea5 | Bin 0 -> 5672 bytes .../Artifacts/55/55b794eaeff64c0b9c39a9ad03672f82 | Bin 0 -> 9452 bytes .../Artifacts/55/55beb4e4cd93a0b06c5f6dc4405c3b45 | Bin 0 -> 5392 bytes .../Artifacts/55/55ceda85023ca289c3d37a91dcaa001f | Bin 0 -> 17744 bytes .../Artifacts/56/5624f1d452218ce39002b6c0b237ae8e | Bin 0 -> 4684 bytes .../Artifacts/56/564393408b8ff5a4d9620b09ce654592 | Bin 0 -> 5916 bytes .../Artifacts/56/56745a5bf7d8f0aacae02714e3a61b0c | Bin 0 -> 4644 bytes .../Artifacts/57/5748e7f6bb407c2cfd65003a0f73a7dd | Bin 0 -> 17176 bytes .../Artifacts/57/5748fdf9f435eec400a60a35c25f0daf | Bin 0 -> 5180 bytes .../Artifacts/57/57519b689d1973090df572125fa70fe9 | Bin 0 -> 4237 bytes .../Artifacts/57/575dad0b76830720bd266cb3ff8e79e4 | Bin 0 -> 82140 bytes .../Artifacts/57/5763f562da4bba9fd73a7a06c65fc8ee | Bin 0 -> 4221 bytes .../Artifacts/57/577f59a2483efb2f425dbdf6b38378d8 | Bin 0 -> 5804 bytes .../Artifacts/57/57fe8c2dd5e6bb2d1e3f2038cd276985 | Bin 0 -> 6492 bytes .../Artifacts/58/580b4658bd4f60cc34e0a1cf68849524 | Bin 0 -> 7532 bytes .../Artifacts/58/58366a135971058b80c98e56a0996587 | Bin 0 -> 31284 bytes .../Artifacts/58/5865ed3475b72d6d0d252b66fe2ce81b | Bin 0 -> 6180 bytes .../Artifacts/58/58747095622feac4b52c10978dce1fc4 | Bin 0 -> 7048 bytes .../Artifacts/58/58bedc5fc7ca8b69448604423616a4ca | Bin 0 -> 4592 bytes .../Artifacts/58/58ca184cf1be70a178c03977f34c80df | Bin 0 -> 187 bytes .../Artifacts/58/58e8b6ef79da9ad70738e53f3515abd4 | Bin 0 -> 4416 bytes .../Artifacts/59/59103e67d13fefa8f4a88e2de7a32d78 | Bin 0 -> 11156 bytes .../Artifacts/59/5910c0498bb42f231b836228e92cdfec | Bin 0 -> 8712 bytes .../Artifacts/59/5935009ea87d15c50b559c10f99e5f7d | Bin 0 -> 4225 bytes .../Artifacts/59/59aeaae9ffe5f738f5c74d026fce2975 | Bin 0 -> 4225 bytes .../Artifacts/59/59c9c5463b12991f4e11d09e39a0483c | Bin 0 -> 5300 bytes .../Artifacts/59/59f1d85cf27e8bec5ce0cd56532904b3 | Bin 0 -> 6956 bytes .../Artifacts/5a/5a2d1e17cda5644d9a7220134c9ed9de | Bin 0 -> 5080 bytes .../Artifacts/5a/5a94e85ca796d782eca80f32ec98b4a8 | Bin 0 -> 7664 bytes .../Artifacts/5a/5a97e5bd7103e95bb41a6f65cb7e8855 | Bin 0 -> 4624 bytes .../Artifacts/5b/5b0a8f01491318fa319be29a95cf72a9 | Bin 0 -> 4221 bytes .../Artifacts/5b/5b1fe8b490fe8a26991a3cc5687e3274 | Bin 0 -> 5132 bytes .../Artifacts/5b/5b32256edc856bb460bf03c073b4eccd | Bin 0 -> 6440 bytes .../Artifacts/5b/5b329590c4f31ea731fc3b8d2f965c2c | Bin 0 -> 47516 bytes .../Artifacts/5b/5b43a384abfe8945ff5ffac249db962b | Bin 0 -> 9992 bytes .../Artifacts/5b/5b5a359ff1658893ecc4c680031f380d | Bin 0 -> 5488 bytes .../Artifacts/5b/5b5d0c6aa186759d85d0e1a94ab4640f | Bin 0 -> 9848 bytes .../Artifacts/5b/5ba138abee1d3a0771adaa1eeb8958dd | Bin 0 -> 17568 bytes .../Artifacts/5b/5ba39ce7b5cc19c76e7a956c1b98a184 | Bin 0 -> 12156 bytes .../Artifacts/5b/5bc01b82d7f1bcd6f8be540c332d522a | Bin 0 -> 5720 bytes .../Artifacts/5b/5be56877ae78bd02816499902bf89e30 | Bin 0 -> 4540 bytes .../Artifacts/5c/5c0e133e4da6ed5cfed6a533050fda78 | Bin 0 -> 4408 bytes .../Artifacts/5c/5c11cc51b250073c5307ef63cdaeba62 | Bin 0 -> 17180 bytes .../Artifacts/5c/5c32988b3fc46acf74fe90c8bf634c94 | Bin 0 -> 17064 bytes .../Artifacts/5c/5c61e20f7303aa05b13494ea0e4b9c72 | Bin 0 -> 8720 bytes .../Artifacts/5c/5cbf44de0514f209568943bfff6c21d4 | Bin 0 -> 4760 bytes .../Artifacts/5c/5cfa3da79aa4dab36f602655801edf3d | Bin 0 -> 3490 bytes .../Artifacts/5d/5d06e3c010f5ced81f33b48d3e81f663 | Bin 0 -> 2077 bytes .../Artifacts/5d/5d5a5beeffcfcc507ffd1387075b7025 | Bin 0 -> 17172 bytes .../Artifacts/5d/5dd38e373c6c37f5850fc3531a3ba567 | Bin 0 -> 13236 bytes .../Artifacts/5d/5dfec150f74373f44874124436f92c04 | Bin 0 -> 4592 bytes .../Artifacts/5e/5e37bda525bd01a8c030a3f53ab478d8 | Bin 0 -> 5924 bytes .../Artifacts/5e/5e66faeba705fd417afa2db62bbb8fe1 | Bin 0 -> 17272 bytes .../Artifacts/5e/5e901c93d3e0e16b6e9de5d1ffb568d8 | Bin 0 -> 4233 bytes .../Artifacts/5e/5e944266dc13d9a64677fb2f3d396c58 | Bin 0 -> 17624 bytes .../Artifacts/5e/5eb1f04905ddf6831a16a428cf774073 | Bin 0 -> 5084 bytes .../Artifacts/5e/5eb4821df1b5f057df90c70be7deaa8c | Bin 0 -> 4980 bytes .../Artifacts/5e/5edeb8d8255690ae155beec45fa7a944 | Bin 0 -> 9616 bytes .../Artifacts/5e/5edf0930d97908aac39a6bc888e6c131 | Bin 0 -> 5008 bytes .../Artifacts/5e/5ee53216b8c909da9a6b566d20b9ca19 | Bin 0 -> 6344 bytes .../Artifacts/5e/5ee6cc55a6fbeb323aeab5d10e4f44c3 | Bin 0 -> 5044 bytes .../Artifacts/5e/5eee7fde725b48658abcb0aa8d2095fa | Bin 0 -> 7812 bytes .../Artifacts/5f/5f1d41586b1edf4e883f64eb6424c092 | Bin 0 -> 5868 bytes .../Artifacts/5f/5f2b93164f4e7a111490da36aa14aa17 | Bin 0 -> 4225 bytes .../Artifacts/5f/5fa58f431407b571f98d0f8a5a0dddd7 | Bin 0 -> 5040 bytes .../Artifacts/5f/5faa51ddf9e496c3c17c61d3d62b24fd | Bin 0 -> 15700 bytes .../Artifacts/5f/5fb3a387f5ed6967d2c990ff597c4a4c | Bin 0 -> 5304 bytes .../Artifacts/60/60a6077cb284d30827bf713a4659b0da | Bin 0 -> 2286 bytes .../Artifacts/60/60b7c318957bc946e6cad00e45dde00b | Bin 0 -> 9516 bytes .../Artifacts/60/60f9e26f59555426d2402cdfb2086039 | Bin 0 -> 4225 bytes .../Artifacts/61/615d14d9c1192e01ad1181a0f0c31a4a | Bin 0 -> 4225 bytes .../Artifacts/61/618afee15e2fc31c8ce6644f79a9fa5d | Bin 0 -> 10020 bytes .../Artifacts/61/61a0fd098858cf0a7dde28b73f10f1cf | Bin 0 -> 6444 bytes .../Artifacts/61/61a263939a8ba053c40ef9c710c1f971 | Bin 0 -> 8928 bytes .../Artifacts/61/61e432b67ebd113fd00cd89efc695eee | Bin 0 -> 4225 bytes .../Artifacts/62/6202331e9441c214084ec07db33eb041 | Bin 0 -> 6280 bytes .../Artifacts/62/6208e289d7f863f9f938afb0b3bd9a67 | Bin 0 -> 9072 bytes .../Artifacts/62/622338bfb0a46d6d90d9379c7ce1df83 | Bin 0 -> 4229 bytes .../Artifacts/62/622418842cc2f529daf8d32811e548fd | Bin 0 -> 10652 bytes .../Artifacts/62/622c302deccd66e11f90b75e09298215 | Bin 0 -> 229144 bytes .../Artifacts/62/6269503b12ea2485a06db6b286b6189c | Bin 0 -> 17180 bytes .../Artifacts/62/62ca00dbf6bd9f9b50e2bc4fd791a72d | Bin 0 -> 17628 bytes .../Artifacts/62/62d70b4e94b526e8b58483753fcaae3d | Bin 0 -> 4504 bytes .../Artifacts/62/62f596d1da6716be6c83f12e1772809a | Bin 0 -> 17640 bytes .../Artifacts/63/6308d8bfbf725bbfed6cedf20e4b772c | Bin 0 -> 4544 bytes .../Artifacts/63/631889f68262ee38fcaddb0b342975c3 | Bin 0 -> 21452 bytes .../Artifacts/63/6363d06ee22353af731332defac32e67 | Bin 0 -> 4468 bytes .../Artifacts/63/63a5754ad405033d964ee8a53ff96cc0 | Bin 0 -> 8352 bytes .../Artifacts/63/63c37411b1e45f434116a9941d945a80 | Bin 0 -> 34208 bytes .../Artifacts/63/63fc7a699e115aa43067f3bb8f21dcd5 | Bin 0 -> 6648 bytes .../Artifacts/64/64462e21802ab64dc91fad391d29ae2a | Bin 0 -> 12808 bytes .../Artifacts/64/64ad39e35207db034f09d47e62bb4ccd | Bin 0 -> 20704 bytes .../Artifacts/65/650cdc0700911265b1c759b129315bc9 | Bin 0 -> 6432 bytes .../Artifacts/65/65494baaf7a7b19fa4a6f53e97ac4e05 | Bin 0 -> 4229 bytes .../Artifacts/65/65af45b371e00d3446a8cd93ca60c86e | Bin 0 -> 10904 bytes .../Artifacts/65/65c249d7e4d66abcb5c0114a5d37a245 | Bin 0 -> 56072 bytes .../Artifacts/65/65d0b89df0ad5553ad3598f7f5b4497a | Bin 0 -> 4229 bytes .../Artifacts/65/65dce8bb15c0be1119a804725ac784e8 | Bin 0 -> 12476 bytes .../Artifacts/66/6618a33ea480ac61c334cefe955e7bd9 | Bin 0 -> 312 bytes .../Artifacts/66/6625ff97dde6e0071a0837006a373527 | Bin 0 -> 17768 bytes .../Artifacts/66/66823fe9da5932bed8d63e32f3177a94 | Bin 0 -> 6152 bytes .../Artifacts/66/669b31c5da3aa426f0e806a5e23e61f8 | Bin 0 -> 6316 bytes .../Artifacts/66/66a6865073311067494bbe71fb8d6e3f | Bin 0 -> 17180 bytes .../Artifacts/66/66ef5a582ace0e988051303c2e199e28 | Bin 0 -> 30128 bytes .../Artifacts/66/66f5928ad36627139e1c423123a049b1 | Bin 0 -> 205 bytes .../Artifacts/67/676aedeff52b3db763f153a37f89a2e2 | Bin 0 -> 8148 bytes .../Artifacts/67/67729dcddc436b5aee904a38522d8d63 | Bin 0 -> 12100 bytes .../Artifacts/67/67a48c829e4b93f9674ee7d50d3fccad | Bin 0 -> 78636 bytes .../Artifacts/67/67db65994390ee1da8d900684e242073 | Bin 0 -> 5436 bytes .../Artifacts/68/68c17e43a27d0930d84c07e4723c9182 | Bin 0 -> 4241 bytes .../Artifacts/68/68d5ac688d7858d49820c0fa0a8ff786 | Bin 0 -> 4532 bytes .../Artifacts/68/68f0073e2738ee88302c52df404b7b34 | Bin 0 -> 6572 bytes .../Artifacts/69/691e305da292c9fac124a8c0af61d457 | Bin 0 -> 10064 bytes .../Artifacts/69/693ae77f4d30f133831d06712244306d | Bin 0 -> 4225 bytes .../Artifacts/69/6942242044c3dfc17c7f97226924e09a | Bin 0 -> 4229 bytes .../Artifacts/69/6949060e27855c5ac10ef79d07e45fa9 | Bin 0 -> 4229 bytes .../Artifacts/69/698c83b2b64f653fb408c0c1356749fb | Bin 0 -> 8160 bytes .../Artifacts/69/69a87e09ad725ecdde7836c348d0aa09 | Bin 0 -> 7112 bytes .../Artifacts/69/69d7f4fe1eead23a6665179ee22b59c1 | Bin 0 -> 8196 bytes .../Artifacts/6a/6a7344d9167dcbfd15a745e05aaa8cc1 | Bin 0 -> 5744 bytes .../Artifacts/6b/6b08e773f80bbfe8989827a8b492b797 | Bin 0 -> 4680 bytes .../Artifacts/6b/6b38a0dcb8ff4ec8efd287a3b3f69688 | Bin 0 -> 11584 bytes .../Artifacts/6b/6b6f9b101d414cebea68be1b1929661f | Bin 0 -> 5252 bytes .../Artifacts/6b/6b975722bd4e0e4be3bab72cb51b6d25 | Bin 0 -> 6144 bytes .../Artifacts/6b/6bb559f2e0f1a4443dcec7ec42e30da6 | Bin 0 -> 17328 bytes .../Artifacts/6c/6c12a76306423b66a29681e32ac6d93a | Bin 0 -> 10196 bytes .../Artifacts/6c/6c2248de8d4d74d17e6cf05a7a661353 | Bin 0 -> 5284 bytes .../Artifacts/6c/6c3f8ec7c37858af5ed3b7fcf6d0516d | Bin 0 -> 13304 bytes .../Artifacts/6c/6c686931c56405543a7f5d6486598643 | Bin 0 -> 4512 bytes .../Artifacts/6c/6c68999f70f27ff7c436d7d5ebec0443 | Bin 0 -> 247 bytes .../Artifacts/6c/6c70f9a6fe9074bf74427e7a69411f42 | Bin 0 -> 4241 bytes .../Artifacts/6c/6c924df507920c74f1f6b75280298ea9 | Bin 0 -> 159 bytes .../Artifacts/6c/6c9b904976f3028ec3169f84b342d29d | Bin 0 -> 82352 bytes .../Artifacts/6c/6cf9b68aa8ad3324ff114591df23787e | Bin 0 -> 214 bytes .../Artifacts/6d/6d501f7b766f7dc39eec7bb71255f39a | Bin 0 -> 5600 bytes .../Artifacts/6d/6d5f5aedcf69496321a5bbfe9bd36ee0 | Bin 0 -> 4952 bytes .../Artifacts/6d/6da60fabd675e8b942714d9237b848a6 | Bin 0 -> 4233 bytes .../Artifacts/6d/6dddb97df40a22a43a217125e7d69284 | Bin 0 -> 4900 bytes .../Artifacts/6e/6e08991de0b248f9f8249baf1f428ba9 | Bin 0 -> 5228 bytes .../Artifacts/6e/6e56941b8c7af2a0d4e5573399398eed | Bin 0 -> 6840 bytes .../Artifacts/6e/6e71a3e7c3073fa3560c6d042e85ff35 | Bin 0 -> 10440 bytes .../Artifacts/6e/6e8784873afecee8a690892646db6ad9 | Bin 0 -> 5824 bytes .../Artifacts/6e/6eb07d6a0c2a3054eab25473206aa87c | Bin 0 -> 4824 bytes .../Artifacts/6e/6ebcf318e28f331682cea976947a87b5 | Bin 0 -> 10092 bytes .../Artifacts/6e/6ece5606c0d91afb9cc6971d7156353c | Bin 0 -> 243 bytes .../Artifacts/6f/6f55cf97331c52ddf94ad39b3eb6d33b | Bin 0 -> 5200 bytes .../Artifacts/6f/6f7c7466bbec7a587a93e6293bba5a75 | Bin 0 -> 4237 bytes .../Artifacts/6f/6f84dd051d64192fa930c59a8ed9db19 | Bin 0 -> 17176 bytes .../Artifacts/6f/6faaf401de9d925a06deb01031203d44 | Bin 0 -> 425 bytes .../Artifacts/6f/6fb0adcbd9eb2944ae7e3a0cb8e39f96 | Bin 0 -> 5672 bytes .../Artifacts/6f/6fcccd790d7a9125fa72a8fbb1dc1de8 | Bin 0 -> 7124 bytes .../Artifacts/6f/6fda466bdbec95732a0ccad207525bc8 | Bin 0 -> 7244 bytes .../Artifacts/70/7024acf13e7e4139f19d2a673e87fca5 | Bin 0 -> 14332 bytes .../Artifacts/70/702cda8bf7571cc0df83b1a165e602d8 | Bin 0 -> 350656 bytes .../Artifacts/70/702df78a8a35a7b45a1470f52d7c7cc1 | Bin 0 -> 17628 bytes .../Artifacts/70/703e79cbe8ef2235dfde4aa48cc77202 | Bin 0 -> 17620 bytes .../Artifacts/70/70aa3dda62eef6110622f02f3db9cc5a | Bin 0 -> 15684 bytes .../Artifacts/70/70e261dc5360def38d34a74209b8fa05 | Bin 0 -> 9140 bytes .../Artifacts/71/713c4799aacb9f5d12ca35388807c44b | Bin 0 -> 9656 bytes .../Artifacts/71/7153b7a2111d4bf5726a5eb7514278ce | Bin 0 -> 4420 bytes .../Artifacts/71/71892e8c1689261ebc84773d0f5859f6 | Bin 0 -> 4920 bytes .../Artifacts/71/71b1cf657d94ff8b63b342602256db33 | Bin 0 -> 538 bytes .../Artifacts/71/71de0fbc074bb68ff35599579f72ea80 | Bin 0 -> 4744 bytes .../Artifacts/72/726752a05dc630122ffc3ff634d1814a | Bin 0 -> 5040 bytes .../Artifacts/72/72a12d9c3324fd837daf984b2930de3b | Bin 0 -> 12208 bytes .../Artifacts/73/7316aef0ed15c140e0ffd84075e296d6 | Bin 0 -> 9020 bytes .../Artifacts/73/73d2ba5882fcb596897d7a73df2850fd | Bin 0 -> 16564 bytes .../Artifacts/73/73d6a34541bf0be7d477ec68db129ef2 | Bin 0 -> 157 bytes .../Artifacts/73/73fc8c94c9e67e9b1736a1d860c882ba | Bin 0 -> 55896 bytes .../Artifacts/74/7443fc5c2c475e9093b5e74b0ac03067 | Bin 0 -> 14940 bytes .../Artifacts/74/747a0d0ead951ed640e01517af1ff277 | Bin 0 -> 5768 bytes .../Artifacts/74/7484ef34a270ddd1339055b83d613e31 | Bin 0 -> 7876 bytes .../Artifacts/74/749060369b3360446e08bce489e3b5f1 | Bin 0 -> 20700 bytes .../Artifacts/74/74b84aeb0abb92f8128e2858db348eb5 | Bin 0 -> 193 bytes .../Artifacts/74/74db60ce9ad7d275d5b505e5a048185d | Bin 0 -> 4424 bytes .../Artifacts/74/74e8ae365aed8b147044d072c55b2099 | Bin 0 -> 154 bytes .../Artifacts/74/74ef494d23eeef378846e242a13a4773 | Bin 0 -> 5468 bytes .../Artifacts/75/7503c542e60383cb3ca084903ff1c80a | Bin 0 -> 4708 bytes .../Artifacts/75/752478c410a7231db25077bbb5fee11d | Bin 0 -> 5908 bytes .../Artifacts/75/75840f5170d2745d533b7f09ce992698 | Bin 0 -> 6336 bytes .../Artifacts/75/759fa782a1a19355fc7154f167b8e057 | Bin 0 -> 204 bytes .../Artifacts/75/75e21c68cf09ad3e6b2a16641a40f8e1 | Bin 0 -> 29688 bytes .../Artifacts/76/76430bbe2e87dea9fe177a06461efb57 | Bin 0 -> 205 bytes .../Artifacts/76/7669aacc9a75af5d96de02d1231ca56b | Bin 0 -> 4233 bytes .../Artifacts/76/76a160f26096b93172b83e8940cbf317 | Bin 0 -> 11836 bytes .../Artifacts/76/76f24174143385d46342a13959b0bd5f | Bin 0 -> 17172 bytes .../Artifacts/76/76f37d74f72ab2c056c1813cd5e65271 | Bin 0 -> 9580 bytes .../Artifacts/77/7735f2887084f283eefe883f614ecf5f | Bin 0 -> 4776 bytes .../Artifacts/77/776a094b5f78ab161bf9e637c93c771d | Bin 0 -> 5524 bytes .../Artifacts/77/778b015b0c0fd03f9e6f34170a271c3f | Bin 0 -> 4968 bytes .../Artifacts/77/77903d5e0ecb4a9eaae20c8b28c70aac | Bin 0 -> 11784 bytes .../Artifacts/77/77ec011249b08fb17adf2e15a1e2672b | Bin 0 -> 29936 bytes .../Artifacts/78/7808c154cf09768b6b1b29474f47efc7 | Bin 0 -> 179 bytes .../Artifacts/78/7843b95be2ac4e84e3f744dec1b6d2c3 | Bin 0 -> 4168 bytes .../Artifacts/78/78fdeea0557f822afa72e8e4e705e478 | Bin 0 -> 10916 bytes .../Artifacts/79/790e2f4010b119c6bd4bcd0dc3b4dad7 | Bin 0 -> 22964 bytes .../Artifacts/79/795749de7356577fc8de1fd84e3a4142 | Bin 0 -> 82140 bytes .../Artifacts/79/7988985fd148d818da8ff7c885c24727 | Bin 0 -> 9812 bytes .../Artifacts/79/79c584fe6dfaf532810dfaf10e0bd055 | Bin 0 -> 5064 bytes .../Artifacts/79/79d067a500a243c65170d4480ab0c41d | Bin 0 -> 9520 bytes .../Artifacts/79/79ec9924523cab891e1402fd42acd369 | Bin 0 -> 290 bytes .../Artifacts/7a/7a0b4e95758087f04d9b96616a0a433b | Bin 0 -> 6888 bytes .../Artifacts/7a/7a1ddd4bb62494c94d9a519402133b72 | Bin 0 -> 175 bytes .../Artifacts/7a/7a242b203ec1f87acb85a1bca6d92a05 | Bin 0 -> 6272 bytes .../Artifacts/7a/7a3812acbce337fede22a13d60be701d | Bin 0 -> 9324 bytes .../Artifacts/7a/7a422c42e8d1c35b63f76b33fda4d52f | Bin 0 -> 12520 bytes .../Artifacts/7a/7aa8381beae3d61f095839726d33821e | Bin 0 -> 5276 bytes .../Artifacts/7a/7ab697405347529d2c9651dfdd1c53fa | Bin 0 -> 8388 bytes .../Artifacts/7a/7ac6c1fdfe9b07e270619958ff49d50d | Bin 0 -> 4652 bytes .../Artifacts/7a/7ad154c61ec1fa2e037fbb66380436d0 | Bin 0 -> 17176 bytes .../Artifacts/7b/7b1c49ddf8ff7572a460daa2c0f7de27 | Bin 0 -> 4944 bytes .../Artifacts/7b/7b792571f5382aea7ae3bd5d1e066121 | Bin 0 -> 8732 bytes .../Artifacts/7b/7b9c7ec404f78f246398c5724e792baa | Bin 0 -> 5168 bytes .../Artifacts/7b/7bc20827162ddd36b541e61f0d2a3916 | Bin 0 -> 10308 bytes .../Artifacts/7b/7bcf1c1dac433557299f90223a6b1796 | Bin 0 -> 156 bytes .../Artifacts/7c/7c06665d81fcfc7ef32834f386752a64 | Bin 0 -> 5512 bytes .../Artifacts/7c/7c0a52a9e25cbb89e389299b52a8a0c5 | Bin 0 -> 7468 bytes .../Artifacts/7c/7c319978c39a6eabd8452b5053851966 | Bin 0 -> 4229 bytes .../Artifacts/7c/7c536cc5e7e5cb82fe3b9db34ddefac8 | Bin 0 -> 23848 bytes .../Artifacts/7c/7c97c493dafce68bb2b711f1e7c82cc6 | Bin 0 -> 245 bytes .../Artifacts/7d/7d117ab77a9affc127e4ab2ca0a3619d | Bin 0 -> 12964 bytes .../Artifacts/7d/7d23ff101b4f31c973e98948daeab65d | Bin 0 -> 5060 bytes .../Artifacts/7d/7d2b1b311591fc74b13b637f7eb260d9 | Bin 0 -> 257 bytes .../Artifacts/7d/7d60037118799cadcd00a53424a11914 | Bin 0 -> 45632 bytes .../Artifacts/7d/7d6bf65b11c4d06ee51af0dd2fb4667c | Bin 0 -> 5180 bytes .../Artifacts/7d/7db5547321cc85d7df305fae9f8ae5c3 | Bin 0 -> 4564 bytes .../Artifacts/7d/7dfd312258bf4dd10f5aa04dfc49aff1 | Bin 0 -> 5720 bytes .../Artifacts/7d/7dfde6001575602515bb12f126c02a3d | Bin 0 -> 4237 bytes .../Artifacts/7e/7e01561233644e028ea51dfa90cdfa74 | Bin 0 -> 261 bytes .../Artifacts/7e/7e25ba33d99337c285eb311a33bfe647 | Bin 0 -> 4660 bytes .../Artifacts/7e/7e335d9490c3fb2363bbc720cde3f22d | Bin 0 -> 7004 bytes .../Artifacts/7e/7e6e85dbbfa209b3f4170edf11d834a2 | Bin 0 -> 39760 bytes .../Artifacts/7e/7e911d8e752695abfefd019fb4619bbb | Bin 0 -> 6116 bytes .../Artifacts/7e/7eeb70a79371aa81fec02fe01411a904 | Bin 0 -> 12364 bytes .../Artifacts/7f/7f14077002b925e48d80eca5ccaedbdc | Bin 0 -> 8852 bytes .../Artifacts/7f/7f507f0c334389839cef89a0c4271b0e | Bin 0 -> 7756 bytes .../Artifacts/7f/7f62a967c11665b160fc2cb207ce7daa | Bin 0 -> 10860 bytes .../Artifacts/7f/7f6c421855079c70ff6023b5a61a31fd | Bin 0 -> 9856 bytes .../Artifacts/7f/7fa05f6b7bd227f6a2ca0a59ade48bb0 | Bin 0 -> 7044 bytes .../Artifacts/80/8073ba681b42589118f63bd0851c5dc6 | Bin 0 -> 4840 bytes .../Artifacts/81/81071f95f4859a115cf058e3964e2702 | Bin 0 -> 8320 bytes .../Artifacts/81/81094cdc9e247641f8619199761b0e02 | Bin 0 -> 8052 bytes .../Artifacts/81/815fd7d8a04cac0cbfee40bdbdd9bcaf | Bin 0 -> 23064 bytes .../Artifacts/81/817caa01300665b61cff5d37e4cfb1b5 | Bin 0 -> 4764 bytes .../Artifacts/82/8224ae79f92713e3454f398739191270 | Bin 0 -> 4237 bytes .../Artifacts/82/8226c87cbe69d2b971c1bdda552d9524 | Bin 0 -> 6308 bytes .../Artifacts/82/826f933060fc58333bd19621634d9298 | Bin 0 -> 143 bytes .../Artifacts/83/8336cfbfe61eb3393bb106e67f83b638 | Bin 0 -> 4680 bytes .../Artifacts/83/834d0ef10d20f0d5b7d9b07a46bc0953 | Bin 0 -> 4652 bytes .../Artifacts/83/83a43593ec482460c58dc2754ac908aa | Bin 0 -> 403 bytes .../Artifacts/83/83aeda4e541db0b1484ae460215b4c07 | Bin 0 -> 8552 bytes .../Artifacts/83/83fad0618fc64941150c9f368f499b74 | Bin 0 -> 4225 bytes .../Artifacts/84/84884f82cd25440718d5eeffcdad9b94 | Bin 0 -> 7252 bytes .../Artifacts/84/849014c6ed94cdc3a815c303ee0becac | Bin 0 -> 4960 bytes .../Artifacts/84/84c82b460875aeab10c1c43ad0e2b357 | Bin 0 -> 6276 bytes .../Artifacts/85/8523f9937b95b1272478fff88305b2b8 | Bin 0 -> 9168 bytes .../Artifacts/85/852c0b05a99d0f9897dcf7732499524e | Bin 0 -> 9920 bytes .../Artifacts/85/85336340c6ba1a102aad7fad6870b9f1 | Bin 0 -> 6616 bytes .../Artifacts/85/854398386571a7fb475846bd1d83d2b4 | Bin 0 -> 4720 bytes .../Artifacts/85/855c88b3bee12b55dd6440009e160437 | Bin 0 -> 4464 bytes .../Artifacts/85/856288e33efa9a5b36a89c6204e892dd | Bin 0 -> 111492 bytes .../Artifacts/85/857c4cc6aa48a750906094bfa06271cc | Bin 0 -> 4233 bytes .../Artifacts/85/85c9b223384f2d321bad364b289bee33 | Bin 0 -> 152 bytes .../Artifacts/86/868034333448e420ee1dd66bbb07f407 | Bin 0 -> 17640 bytes .../Artifacts/86/86fc0131e87972257d106d4dfd761159 | Bin 0 -> 4764 bytes .../Artifacts/87/8713dc15cc165093e05c266cf692cb93 | Bin 0 -> 4225 bytes .../Artifacts/87/87273590159094d1d4154ac869b364eb | Bin 0 -> 17092 bytes .../Artifacts/87/8739134dd280de00190fb7e1cb8cfbb6 | Bin 0 -> 4416 bytes .../Artifacts/87/87463bf1e8c30ec72c3948a11c5ee163 | Bin 0 -> 17208 bytes .../Artifacts/87/8764f37e6a7c178dffc723938d6fe920 | Bin 0 -> 4692 bytes .../Artifacts/87/877ef686af4274bf1b9de831caf670eb | Bin 0 -> 4240 bytes .../Artifacts/87/8798b9ecb8ae8f4165f045e68ff61189 | Bin 0 -> 4225 bytes .../Artifacts/87/87bf9ac2942b239f85ecedb016ccdc4d | Bin 0 -> 4732 bytes .../Artifacts/87/87c2ee8fbb7ce90211274b7293b98198 | Bin 0 -> 7096 bytes .../Artifacts/88/8848a061a1d6dfbf64b6b6ec121a979c | Bin 0 -> 14016 bytes .../Artifacts/88/88ac36b1851404c3bd3f6c6d020ac687 | Bin 0 -> 5828 bytes .../Artifacts/88/88b9a5470365b9a61d548368e61ed968 | Bin 0 -> 5208 bytes .../Artifacts/89/892196e23ce17dc43d89177274a3d82f | Bin 0 -> 4624 bytes .../Artifacts/89/89af7bdbf91378c7bab6a7b63512f86c | Bin 0 -> 7676 bytes .../Artifacts/89/89b733d617afb44c6756010b85fc9d07 | Bin 0 -> 4512 bytes .../Artifacts/89/89e87464d9bfb1d39e531ee233514044 | Bin 0 -> 204 bytes .../Artifacts/89/89f0cd22c886efa64fe257103a45cab6 | Bin 0 -> 4229 bytes .../Artifacts/89/89f2cbc6a5c4abfe3f35849547a5ed0a | Bin 0 -> 6088 bytes .../Artifacts/89/89fa36df881bad490537fc016610fba2 | Bin 0 -> 4229 bytes .../Artifacts/8a/8a06ecb9f523ce50f0fce38faa1fc787 | Bin 0 -> 24388 bytes .../Artifacts/8a/8a09c1f9e2a48fefc79d41abae79eec7 | Bin 0 -> 6544 bytes .../Artifacts/8a/8a0fca11be8512159b6f9ef02ecdc80b | Bin 0 -> 4900 bytes .../Artifacts/8a/8a36f42e7b419b54c6d521084d3b7293 | Bin 0 -> 4484 bytes .../Artifacts/8a/8a3ff46a9124cd2be97cb6c561b289ce | Bin 0 -> 4464 bytes .../Artifacts/8a/8a409d938b07becfd9da1148893fee7d | Bin 0 -> 4560 bytes .../Artifacts/8a/8a6142b913fdbe4b2dc963276425f49e | Bin 0 -> 5216 bytes .../Artifacts/8a/8a629165807ca997bd6eeb23f40653e6 | Bin 0 -> 6972 bytes .../Artifacts/8a/8a9907ca198749bf8f6c6f8102a71cb1 | Bin 0 -> 199 bytes .../Artifacts/8a/8aaaf125375d09b902c5528becb63c43 | Bin 0 -> 6152 bytes .../Artifacts/8a/8abbeafce631859262ecd41a01510dc9 | Bin 0 -> 9064 bytes .../Artifacts/8a/8ae045d3835d10d47b7891ffcc8a0c91 | Bin 0 -> 4249 bytes .../Artifacts/8a/8afa58ea83687c2455397b60b90d176c | Bin 0 -> 4836 bytes .../Artifacts/8b/8bcff60f555328b375ddc8d862779ea6 | Bin 0 -> 17724 bytes .../Artifacts/8b/8bd1b163127f6b79ca69030723456213 | Bin 0 -> 5548 bytes .../Artifacts/8b/8bebf1ba877c9d62b73e11245fe84598 | Bin 0 -> 7656 bytes .../Artifacts/8b/8bf8e732855c5dc1e2b4d57b2ed5e428 | Bin 0 -> 24540 bytes .../Artifacts/8c/8c15c2316fd8ba05c3443bc60fc91281 | Bin 0 -> 21196 bytes .../Artifacts/8c/8c46c3b1276bc2c71724c37c02e6ce8f | Bin 0 -> 7288 bytes .../Artifacts/8c/8c4daf5a108f8bbf9c7368d8b1fa3f0c | Bin 0 -> 6952 bytes .../Artifacts/8c/8c8e7251810edc4e96b770fca41af577 | Bin 0 -> 4668 bytes .../Artifacts/8c/8cb3f902786d355898a8af140b3d1664 | Bin 0 -> 4237 bytes .../Artifacts/8c/8cdc86be282fafbf192607c2e9d8e494 | Bin 0 -> 4676 bytes .../Artifacts/8c/8cf74902f6d9d5f1c571e436985f1d5e | Bin 0 -> 256 bytes .../Artifacts/8c/8cff1894069595b8e033a3d17d2becc8 | Bin 0 -> 4856 bytes .../Artifacts/8d/8d0801fcf7f26d5d412898b43baebce2 | Bin 0 -> 7124 bytes .../Artifacts/8d/8d286137869f9d96db4c15d40e5d951f | Bin 0 -> 13932 bytes .../Artifacts/8d/8d39534b3c1d947347b9711e91528cb6 | Bin 0 -> 5344 bytes .../Artifacts/8d/8d5e70331d9ea6a22de0949864f0357b | Bin 0 -> 17256 bytes .../Artifacts/8d/8d664fa051ddbbf168abd2d4614aca49 | Bin 0 -> 6116 bytes .../Artifacts/8d/8da4e8fb7fec26e042aee4f34904ffca | Bin 0 -> 5112 bytes .../Artifacts/8d/8ddd85595b1c0cc286479c06a3ea3431 | Bin 0 -> 13968 bytes .../Artifacts/8d/8de243c8ca4268f7bb501747dc539a82 | Bin 0 -> 6736 bytes .../Artifacts/8e/8e18d58959e715934a44d59b6b8f3f8b | Bin 0 -> 9064 bytes .../Artifacts/8e/8e372c5e92f7b0bfb7d0a5fef938248c | Bin 0 -> 254 bytes .../Artifacts/8e/8e8e40bb2d8e96fbbedb01fedb510a14 | Bin 0 -> 17652 bytes .../Artifacts/8e/8eb75a2efdb30665c0a52463aec0c17c | Bin 0 -> 52304 bytes .../Artifacts/8e/8eb76a42afae8e89ef3ef3aef76e606e | Bin 0 -> 24308 bytes .../Artifacts/8e/8eda04c26bb13c4694134a610c0d38fa | Bin 0 -> 5240 bytes .../Artifacts/8f/8f0925f56adbdc3fee17b6df8a169922 | Bin 0 -> 31144 bytes .../Artifacts/8f/8f6812f54a6b6e49f4bed890f5f9176e | Bin 0 -> 4253 bytes .../Artifacts/8f/8f838212508562883cfcbef17c82cc9e | Bin 0 -> 5328 bytes .../Artifacts/8f/8f95959182198c3c72bc59d10ac7d8f2 | Bin 0 -> 6336 bytes .../Artifacts/8f/8f9dbb2793f69ef234744711b5ea35e7 | Bin 0 -> 18036 bytes .../Artifacts/8f/8f9e2cdca34df14379060b508e59b54f | Bin 0 -> 4237 bytes .../Artifacts/8f/8ff0cf28a635bd109ba29799c4571c48 | Bin 0 -> 5148 bytes .../Artifacts/90/900622c3fedf32ec1720646f1bc4db5c | Bin 0 -> 5040 bytes .../Artifacts/90/9006c289fffe30f8410e0682f9e194c1 | Bin 0 -> 4800 bytes .../Artifacts/90/9009a9f358587ea7df739bd7088566ec | Bin 0 -> 14840 bytes .../Artifacts/90/900a8f1038c53f1afe8426596e4b7725 | Bin 0 -> 148116 bytes .../Artifacts/90/9010ba15340f6fd5444bf7f2f8108a33 | Bin 0 -> 4229 bytes .../Artifacts/90/902a040e1eba897d13197d4510598ba8 | Bin 0 -> 18048 bytes .../Artifacts/90/9046ad8215c1698a9fb3996a34ff69cc | Bin 0 -> 4225 bytes .../Artifacts/90/907319a906b2f2b6de467eb1c09f29a8 | Bin 0 -> 5344 bytes .../Artifacts/90/9075a5f314abfc3101397c8bb8a88c1c | Bin 0 -> 8560 bytes .../Artifacts/90/90cde701a4678164ef50fec65657e3ae | Bin 0 -> 17180 bytes .../Artifacts/91/91139490a29e2309d4dc0b127a8cd570 | Bin 0 -> 4556 bytes .../Artifacts/91/91c31e01cd3c29d28a0067a0c793046b | Bin 0 -> 4225 bytes .../Artifacts/91/91fecae32804fc3fbb8656b441aabb2a | Bin 0 -> 4580 bytes .../Artifacts/92/92072c5a775eac8e33f08356479de5ec | Bin 0 -> 17568 bytes .../Artifacts/92/9240bef35ce6372268140860230fa0b2 | Bin 0 -> 5744 bytes .../Artifacts/92/92622e385c22e2091b3c5cbdbe038634 | Bin 0 -> 13720 bytes .../Artifacts/92/92a9aa33366eef109f0d80c62a36b3d8 | Bin 0 -> 5808 bytes .../Artifacts/92/92dee1db808c5e60801da837ad6a3123 | Bin 0 -> 5100 bytes .../Artifacts/92/92fe3c52a7a2453e7b5db929ca83ee7a | Bin 0 -> 6692 bytes .../Artifacts/93/9303925937c0b89346e1dad263fc6d1e | Bin 0 -> 14608 bytes .../Artifacts/93/9305022daf29dc2226da0a2c871f98a5 | Bin 0 -> 8380 bytes .../Artifacts/93/932bb18c3f3c3b70e40355e8a5239e1c | Bin 0 -> 8376 bytes .../Artifacts/93/932e760195be1e29952b74e977f84c48 | Bin 0 -> 201 bytes .../Artifacts/93/936f0c68ac9736a8b8de3ede600379cb | Bin 0 -> 4668 bytes .../Artifacts/93/93e9f6455f8cdaf5329b6d5dd8671c7e | Bin 0 -> 4904 bytes .../Artifacts/93/93fc3012d797b749abde15f373285520 | Bin 0 -> 176 bytes .../Artifacts/94/94748c671f784a58941712688cb25813 | Bin 0 -> 4840 bytes .../Artifacts/94/94d9bc095b851f32e50356e3f503303d | Bin 0 -> 11956 bytes .../Artifacts/94/94e43cf8d55b33fc5b2c3a667ee57bd4 | Bin 0 -> 4572 bytes .../Artifacts/94/94f4f55b54979971d5db002fca11cd7c | Bin 0 -> 4225 bytes .../Artifacts/95/9502f066eb43f9ed0a0dc4919124265b | Bin 0 -> 11296 bytes .../Artifacts/95/951e3421546c6134031949550dd42a81 | Bin 0 -> 5472 bytes .../Artifacts/95/9520906471aa7398f5424d4d343037c2 | Bin 0 -> 22212 bytes .../Artifacts/95/9529b372962ea71120d67ccc83bceec5 | Bin 0 -> 5468 bytes .../Artifacts/95/95327805ca23660c29237dc9c119cdde | Bin 0 -> 16384 bytes .../Artifacts/95/953a0b360f275eb35b9ad951c27134d0 | Bin 0 -> 4664 bytes .../Artifacts/95/956650161e347c06fe53aa5954ff4914 | Bin 0 -> 22696 bytes .../Artifacts/95/95e724a0169c926c843cd22e4d8ae3d0 | Bin 0 -> 14332 bytes .../Artifacts/96/9604f556fd34631d2a1d5740ee14447e | Bin 0 -> 16040 bytes .../Artifacts/96/961d14e3348f311dbde12b16215abc4a | Bin 0 -> 6560 bytes .../Artifacts/96/963d06d34bf7af7e8f9f3a5306fe4eee | Bin 0 -> 7052 bytes .../Artifacts/96/96635cff2d3f721bfaf2a99a1d5d918d | Bin 0 -> 38852 bytes .../Artifacts/96/9692664e6d036de2396aee564b3f2545 | Bin 0 -> 20076 bytes .../Artifacts/96/96ef0ccba43ea84a6e44dd5371545378 | Bin 0 -> 9040 bytes .../Artifacts/96/96f91d89df3205caf9f08b173d043c7e | Bin 0 -> 4572 bytes .../Artifacts/97/9703c660578894d41f69fff4efef2d3d | Bin 0 -> 5328 bytes .../Artifacts/97/97226edd5293a98a6736040bac40c1f0 | Bin 0 -> 4744 bytes .../Artifacts/97/972395cd897c09352bb200a9263bd12e | Bin 0 -> 11836 bytes .../Artifacts/97/973601b7fb19b039cfc2f8f505a88427 | Bin 0 -> 17624 bytes .../Artifacts/97/9744bb3062f12528f07619cc604bb657 | Bin 0 -> 13196 bytes .../Artifacts/97/976b56cbcaab96388b44403ae48a7997 | Bin 0 -> 5492 bytes .../Artifacts/97/97a18865d5c1462667ce32f8c9e702de | Bin 0 -> 5568 bytes .../Artifacts/97/97d1ef000220acfb803a21d08026b4fd | Bin 0 -> 9996 bytes .../Artifacts/97/97fd452720adece62961bb3e1e5c3c6a | Bin 0 -> 10052 bytes .../Artifacts/97/97ff85b225fba9d0d5312a57a705aebe | Bin 0 -> 7240 bytes .../Artifacts/98/9817031d61a8df5862c25d726c4f4852 | Bin 0 -> 8636 bytes .../Artifacts/98/983b42378d1da2f1a6f21eddf6c4d878 | Bin 0 -> 8648 bytes .../Artifacts/98/987b5f74c6f84620146880183f2e66dd | Bin 0 -> 4229 bytes .../Artifacts/98/989c0ccd64500e45277315a7f0f7ca32 | Bin 0 -> 4225 bytes .../Artifacts/98/98edc19a6caba26df079dccb72c665af | Bin 0 -> 5520 bytes .../Artifacts/99/999cacb2f6d0854d22fadc90a50cafd6 | Bin 0 -> 200 bytes .../Artifacts/9a/9a62b3fea1fd20a9d0177af7f06f2dcb | Bin 0 -> 7068 bytes .../Artifacts/9b/9b20c14620d49fed8b8a3a023ca9aa54 | Bin 0 -> 17012 bytes .../Artifacts/9b/9bb61e4064cce20fff242d8719ec225f | Bin 0 -> 189 bytes .../Artifacts/9b/9bb938071e738eb550dfd7ad509d7b14 | Bin 0 -> 8868 bytes .../Artifacts/9b/9be1433935a255e4b38617684d733da0 | Bin 0 -> 4580 bytes .../Artifacts/9b/9be59f3f2d77e094229e8df95b8c42b4 | Bin 0 -> 9088 bytes .../Artifacts/9c/9c085aacb1fce8ccae436d9933f664c7 | Bin 0 -> 5764 bytes .../Artifacts/9c/9c4c60e93b5a2ae014f1cdd5a66b3a3e | Bin 0 -> 5648 bytes .../Artifacts/9c/9c9e00b78870804508c306d4744c94a4 | Bin 0 -> 9780 bytes .../Artifacts/9c/9c9f84d493c412ccd7f753ed29b2e4b9 | Bin 0 -> 354 bytes .../Artifacts/9c/9ce4fd4d50c8c1e062c3988dbba327e5 | Bin 0 -> 24704 bytes .../Artifacts/9c/9cf44a21959e4d8ed78ab349c103737f | Bin 0 -> 4976 bytes .../Artifacts/9c/9cfd70194cef1114c1625ed8f615164f | Bin 0 -> 17660 bytes .../Artifacts/9d/9d088a584d16c67a31d358c61910e1a7 | Bin 0 -> 6748 bytes .../Artifacts/9d/9d6228701a76d83a70b4132f253128fd | Bin 0 -> 4225 bytes .../Artifacts/9d/9d7ea056f0f12b74f5594fd628e49703 | Bin 0 -> 6044 bytes .../Artifacts/9d/9d9fb15ff18d4685f65ff1a61e1487fc | Bin 0 -> 86920 bytes .../Artifacts/9d/9de04a6476b1d5d374a7048f56ebcdc9 | Bin 0 -> 7032 bytes .../Artifacts/9e/9e6ff3dc1d12050a76b6d227807b9889 | Bin 0 -> 4488 bytes .../Artifacts/9e/9e9739897b4a943d394a5467b90e9744 | Bin 0 -> 5164 bytes .../Artifacts/9e/9ebf085a886bdbd9da2df5ad725b11af | Bin 0 -> 5416 bytes .../Artifacts/9f/9f145098b4dbc4267d9bae715e229cdd | Bin 0 -> 17180 bytes .../Artifacts/9f/9f16170f5333e79c523daadbfdbb7d47 | Bin 0 -> 4964 bytes .../Artifacts/9f/9f2979b5085f68337fbda73acfa49ef7 | Bin 0 -> 4596 bytes .../Artifacts/9f/9fae2c8c4bbdab5de16e73f80b1f5456 | Bin 0 -> 4241 bytes .../Artifacts/9f/9fc705d46f9612cae556fccb830ce649 | Bin 0 -> 4804 bytes .../Artifacts/a0/a03bc0bdbc877b66a50f914049972126 | Bin 0 -> 25012 bytes .../Artifacts/a0/a055a1e3667d97d0da344d7bd76081aa | Bin 0 -> 266 bytes .../Artifacts/a0/a0e272a8f53c1e104b38a12643810e9e | Bin 0 -> 4708 bytes .../Artifacts/a0/a0ea3d713b130379c1b4898aa0091b07 | Bin 0 -> 5212 bytes .../Artifacts/a1/a173f675b1a718fd762d512a8435184b | Bin 0 -> 5040 bytes .../Artifacts/a1/a174b6c078952cea72d51ec23d65f65a | Bin 0 -> 7400 bytes .../Artifacts/a1/a182ebf82964867220ec38eda6f7e37a | Bin 0 -> 11980 bytes .../Artifacts/a1/a198d7df6485c3b48412481bc397b71c | Bin 0 -> 17172 bytes .../Artifacts/a1/a1a294416679c08fa1a7b5b720883416 | Bin 0 -> 16852 bytes .../Artifacts/a1/a1b4f0d1b5651d2108ff50b46759b6f4 | Bin 0 -> 13248 bytes .../Artifacts/a1/a1c47b691a3d86f3d01fc3a33564f0e0 | Bin 0 -> 7640 bytes .../Artifacts/a2/a20c82e0a749c6b894001a6793b36ec4 | Bin 0 -> 4576 bytes .../Artifacts/a2/a27914a21368c924fb41bebcc796878e | Bin 0 -> 4904 bytes .../Artifacts/a2/a28326e3b426573c4ece5b5546fe6aae | Bin 0 -> 4225 bytes .../Artifacts/a2/a2b99cf16497146d66907601f3fb7950 | Bin 0 -> 21228 bytes .../Artifacts/a2/a2bdae819236bed2f5d1a376b1ac806c | Bin 0 -> 9936 bytes .../Artifacts/a2/a2eaa29705734b445601f3ea47035583 | Bin 0 -> 5632 bytes .../Artifacts/a3/a309d5bfe793cd5ce926c08078978f42 | Bin 0 -> 12676 bytes .../Artifacts/a3/a3ceb2b88442d42a811751f55aa3fd5d | Bin 0 -> 8296 bytes .../Artifacts/a4/a4234e603b1904fdefc554a9f7f4bfd4 | Bin 0 -> 6160 bytes .../Artifacts/a4/a42692062cc8681f1a049cbcccfdf89b | Bin 0 -> 15076 bytes .../Artifacts/a4/a43f9501357e34a5adeaac80ca7c0570 | Bin 0 -> 11588 bytes .../Artifacts/a4/a452743b738895df865f79ce4d1c1e4a | Bin 0 -> 4672 bytes .../Artifacts/a4/a47a6ab6e39aca5f688cb12e75dd1234 | Bin 0 -> 12812 bytes .../Artifacts/a4/a48288b04d015ed37b51bf351b082b16 | Bin 0 -> 4708 bytes .../Artifacts/a4/a48db16728c740688041d7afb61d3dbc | Bin 0 -> 4229 bytes .../Artifacts/a4/a4c8505bd1ae66c9f25966e1ec5de98a | Bin 0 -> 33044 bytes .../Artifacts/a4/a4e35cee96664444608111b27ff83d01 | Bin 0 -> 4644 bytes .../Artifacts/a5/a536340a8d321f5ce17e22fae0f29af8 | Bin 0 -> 17180 bytes .../Artifacts/a5/a536b3ef3318f04d442a66ef43f26493 | Bin 0 -> 4864 bytes .../Artifacts/a5/a543358ea704cbbc3e1244f2addd5b96 | Bin 0 -> 17564 bytes .../Artifacts/a5/a556871c7a4ac4952d518e6f2586d65a | Bin 0 -> 17616 bytes .../Artifacts/a5/a56974b110f9f4085b82f18f9189d722 | Bin 0 -> 4728 bytes .../Artifacts/a5/a56a6de2d28c624086fe1de4e90460ef | Bin 0 -> 4245 bytes .../Artifacts/a5/a57d9adf5d15b84b6460f65b7bc45a9c | Bin 0 -> 6800 bytes .../Artifacts/a5/a57ed357458aad4c010bd645426ec835 | Bin 0 -> 6060 bytes .../Artifacts/a5/a599fac17b9e5287b8db74af5bac51d3 | Bin 0 -> 4484 bytes .../Artifacts/a5/a5af40fc8133af3f0fda801211fe7bb2 | Bin 0 -> 4233 bytes .../Artifacts/a5/a5b10609ed054c0a1ce5349c611638eb | Bin 0 -> 23076 bytes .../Artifacts/a5/a5db9ddbc7ebf1a0d63c1deff9c7a345 | Bin 0 -> 8404 bytes .../Artifacts/a6/a661ce0ee0d4c35598d550085d935143 | Bin 0 -> 6840 bytes .../Artifacts/a6/a66d0ee2726dccaa5178579f5bb5063c | Bin 0 -> 7068 bytes .../Artifacts/a7/a7106456c6eec96fbd8b1e9d903e603b | Bin 0 -> 257 bytes .../Artifacts/a7/a719e260306d77f54f320d7ca0278615 | Bin 0 -> 9744 bytes .../Artifacts/a7/a71c03723bda49f9c3851a8fe5487814 | Bin 0 -> 4860 bytes .../Artifacts/a7/a730ed9a2cb7cfdaba5adb41d9049bbc | Bin 0 -> 16864 bytes .../Artifacts/a7/a73257752b3bb8d7ce052b37b4fac1d3 | Bin 0 -> 203 bytes .../Artifacts/a7/a732607c67c785d501297d0666c5694c | Bin 0 -> 25624 bytes .../Artifacts/a7/a783099ce3a2c530fb68abba01b27479 | Bin 0 -> 4684 bytes .../Artifacts/a7/a7868ad8e1aa10b2d50af705c4e734ec | Bin 0 -> 14924 bytes .../Artifacts/a7/a7a4ee02bc1b0e150788026900588db0 | Bin 0 -> 11092 bytes .../Artifacts/a8/a8014cdca57d1eff2ace3edb75edd2f2 | Bin 0 -> 6616 bytes .../Artifacts/a8/a816e6844275c01c976eb66f067b14dc | Bin 0 -> 5852 bytes .../Artifacts/a8/a8580efda4dd10a91b74c031e0b72367 | Bin 0 -> 5300 bytes .../Artifacts/a8/a86ca8cbe4cda5fadff2e1fb8684d0e0 | Bin 0 -> 7060 bytes .../Artifacts/a8/a874ca0c76735119e876c74c25c6d6a7 | Bin 0 -> 30388 bytes .../Artifacts/a8/a88945e36db003008694203e77d76134 | Bin 0 -> 5096 bytes .../Artifacts/a8/a8c4a6d7c2227ea56ba4bba9cec47a5c | Bin 0 -> 5436 bytes .../Artifacts/a8/a8c5364a023716ef6f0eb1543b87cb91 | Bin 0 -> 17184 bytes .../Artifacts/a9/a91e925f57859fca59972219d231203e | Bin 0 -> 14496 bytes .../Artifacts/a9/a924085270b785fe53dae2bd3f99d749 | Bin 0 -> 8152 bytes .../Artifacts/a9/a9ac59ebcb1d799bcb6a09aea8228307 | Bin 0 -> 4800 bytes .../Artifacts/a9/a9adcff3b5388a1600770321548dcb5a | Bin 0 -> 5548 bytes .../Artifacts/a9/a9fcf1f8ef794a0b38366361c5cdb5d8 | Bin 0 -> 4229 bytes .../Artifacts/aa/aa0dd8baf411cec4f63462f16328a182 | Bin 0 -> 4225 bytes .../Artifacts/aa/aa43f883b6b73df61662e5445a6262d7 | Bin 0 -> 6256 bytes .../Artifacts/aa/aa648354bba1a81903f335aacb48eb40 | Bin 0 -> 153 bytes .../Artifacts/aa/aa77488b6315c9622ee1ee8ae3ca8c2e | Bin 0 -> 6932 bytes .../Artifacts/ab/aba2ca1e1bed12e1083837c86194e81e | Bin 0 -> 4241 bytes .../Artifacts/ab/abf1c012ec71f544a78e5cf0144d9d2b | Bin 0 -> 168 bytes .../Artifacts/ab/abfe0ca15be088b9dcfe631fe450304c | Bin 0 -> 313 bytes .../Artifacts/ac/ac15d391e049c47aa072eeb31cf369b7 | Bin 0 -> 17176 bytes .../Artifacts/ac/ac4b42de4cbb4984ce2e4fd47573b5f2 | Bin 0 -> 16848 bytes .../Artifacts/ac/ac760665cf6b2023cf416a48735e80d6 | Bin 0 -> 4552 bytes .../Artifacts/ac/acca287896a78089ed800172d0026f7c | Bin 0 -> 4848 bytes .../Artifacts/ac/acfd73463df39ef34d66bea3d59a0617 | Bin 0 -> 4229 bytes .../Artifacts/ad/ad0d3f4f42d5bbabcc2d81f4fedd1ec1 | Bin 0 -> 19572 bytes .../Artifacts/ad/ad30472f25e6464d1f5daf3079993770 | Bin 0 -> 11100 bytes .../Artifacts/ad/ad3a5b4adac97592f027716f0c265e1b | Bin 0 -> 7300 bytes .../Artifacts/ad/ad3c252c6f26bca017c1a8d7b2db570c | Bin 0 -> 6284 bytes .../Artifacts/ad/ad40db2c3f251c401a10af5340bb1eee | Bin 0 -> 395 bytes .../Artifacts/ad/ad4129a6eb7bd917a6e89ff54697d23b | Bin 0 -> 21904 bytes .../Artifacts/ad/ad99347677ba421cfb8345cb7ae2da0e | Bin 0 -> 4848 bytes .../Artifacts/ad/adb25bcfb31a6ebee8249b49d8f01d1a | Bin 0 -> 5320 bytes .../Artifacts/ad/adb7a17b8ba9afb98404edb5a5303670 | Bin 0 -> 20140 bytes .../Artifacts/ad/add3807966f73f68a10333821d37c06b | Bin 0 -> 502 bytes .../Artifacts/ad/adff4cdd22a8a4476279acdfda8afd2d | Bin 0 -> 4229 bytes .../Artifacts/ae/ae33e47ca2c8247394a6fbf66585009f | Bin 0 -> 1099 bytes .../Artifacts/ae/ae51b0c92e4d654271834a49adca9ea4 | Bin 0 -> 4668 bytes .../Artifacts/ae/ae553695fa0082e3c593d7b18bb7482b | Bin 0 -> 17568 bytes .../Artifacts/ae/ae832c745d4cd1a1bd15e33493e0c3e0 | Bin 0 -> 13392 bytes .../Artifacts/ae/aef22008ced9f57dd3968b86b406ff1c | Bin 0 -> 7900 bytes .../Artifacts/af/af1d9af421a02c239e509b023edbbc57 | Bin 0 -> 9144 bytes .../Artifacts/af/af68e98d0b459eadcbc8282ef94f832a | Bin 0 -> 4964 bytes .../Artifacts/af/af83c08a647ca78ab3d105731b2ed0f0 | Bin 0 -> 17212 bytes .../Artifacts/af/afaea85e4c79ada04491ed23c12d8cd2 | Bin 0 -> 4512 bytes .../Artifacts/af/aff4496fb280df0d2b0993b55728707c | Bin 0 -> 4652 bytes .../Artifacts/b0/b05ad80f807411f662d3e1b856f8e7f8 | Bin 0 -> 4229 bytes .../Artifacts/b0/b066bea681dce09ce59f12c41a68c8be | Bin 0 -> 205 bytes .../Artifacts/b0/b06996ce1dc7cf5d5cfb5cc214ab50ce | Bin 0 -> 4225 bytes .../Artifacts/b0/b08f87f4a3bea1decfb616c7b2a741f0 | Bin 0 -> 17552 bytes .../Artifacts/b0/b0add22e794b6e1fbca3d706b87fec9a | Bin 0 -> 17544 bytes .../Artifacts/b0/b0fb937cb79b644dc5478c7c7fca0e1c | Bin 0 -> 5092 bytes .../Artifacts/b1/b12ef856f2b242744125f9b6f3fddfb4 | Bin 0 -> 17480 bytes .../Artifacts/b1/b16ca91621fd724b93e1d2d91d51071e | Bin 0 -> 4748 bytes .../Artifacts/b1/b1c68c34027c8b52233575d7b4007a93 | Bin 0 -> 5444 bytes .../Artifacts/b1/b1d49623a0eb2a1a3d8ec3d32c4bef82 | Bin 0 -> 910248 bytes .../Artifacts/b1/b1e12061672d43e7115eb08b3e0b83cc | Bin 0 -> 8688 bytes .../Artifacts/b1/b1f660c96d3f712abb0b88b3ddca3a7c | Bin 0 -> 5856 bytes .../Artifacts/b2/b2472b873d16922b3fa9b914232f6695 | Bin 0 -> 7072 bytes .../Artifacts/b2/b260797475f170774e2388f3f9eaacef | Bin 0 -> 6680 bytes .../Artifacts/b2/b296ac0d566349d1193188d9d1a11ded | Bin 0 -> 4241 bytes .../Artifacts/b3/b329cb8363f190ba181a42e3867b2960 | Bin 0 -> 19736 bytes .../Artifacts/b3/b32f90e5e9a12b0f1634dc12660970fd | Bin 0 -> 165020 bytes .../Artifacts/b3/b33af3da5c05f1383d2d97f7e1275fbd | Bin 0 -> 4229 bytes .../Artifacts/b3/b35e8197d9d938512178012047e13f39 | Bin 0 -> 4257 bytes .../Artifacts/b3/b3666aa279a57adbfa2eaea6843e1886 | Bin 0 -> 5320 bytes .../Artifacts/b3/b37e16b4a95ef9d8d3f348300aa50eb4 | Bin 0 -> 4504 bytes .../Artifacts/b3/b3951734078bfe369f6d7ee9aa768172 | Bin 0 -> 14584 bytes .../Artifacts/b3/b3cf7702e8cc8cc4261dbf045dbb1add | Bin 0 -> 39092 bytes .../Artifacts/b3/b3d10c17496ca75517d15883f9d259a9 | Bin 0 -> 8744 bytes .../Artifacts/b4/b402b8875d5566fb394754bc1faaf3aa | Bin 0 -> 17628 bytes .../Artifacts/b4/b41a89a67a53a369b7d00aa18765ba96 | Bin 0 -> 8652 bytes .../Artifacts/b4/b443be225c94546aa8d7c67496610894 | Bin 0 -> 6168 bytes .../Artifacts/b4/b47d018719465cad9db43b127bf84d49 | Bin 0 -> 18576 bytes .../Artifacts/b4/b47f42c14baa103aabd3b0dc63f07fa5 | Bin 0 -> 18976 bytes .../Artifacts/b4/b4bff0e99eb3155e799c9a0ffa9ddece | Bin 0 -> 4225 bytes .../Artifacts/b5/b5106995bfd63b5d938fa1f1fa511b63 | Bin 0 -> 6176 bytes .../Artifacts/b5/b59c52b030077e57d3b9393da2b6fe56 | Bin 0 -> 17332 bytes .../Artifacts/b5/b5cc8de37bcc6a691538762ba376e303 | Bin 0 -> 7716 bytes .../Artifacts/b5/b5d0825b8c93269a8fd1970d8977cb91 | Bin 0 -> 7416 bytes .../Artifacts/b6/b61ee712b3aaadf1abb9803fd3135642 | Bin 0 -> 814 bytes .../Artifacts/b6/b63826d77830a89c8e502842626fdc72 | Bin 0 -> 5068 bytes .../Artifacts/b6/b6384d43178c47eb9b30763920a2a048 | Bin 0 -> 5456 bytes .../Artifacts/b6/b6c69b33548e4bfee14bccd85dcc82f5 | Bin 0 -> 14816 bytes .../Artifacts/b6/b6d99485d33c1dd8078a99ef8e16701d | Bin 0 -> 5072 bytes .../Artifacts/b6/b6ef332695a20822e76b316979f045d4 | Bin 0 -> 8952 bytes .../Artifacts/b7/b73d9c638857d5d1d791f7ff4c1f1af3 | Bin 0 -> 4684 bytes .../Artifacts/b7/b75b2c5958a8c5320f0a60a56321970a | Bin 0 -> 17716 bytes .../Artifacts/b7/b78411ac3f447b304f2801865df3d8c6 | Bin 0 -> 16444 bytes .../Artifacts/b7/b7be73ab80deeaa6190bb0c5269a39fb | Bin 0 -> 385 bytes .../Artifacts/b7/b7f5bc2ddcf2f3601f708fbb0080856f | Bin 0 -> 6964 bytes .../Artifacts/b8/b837d75cdd88bc229c848e372f43c0f9 | Bin 0 -> 6280 bytes .../Artifacts/b8/b872f644fd77d16fda508a1f31ef21c7 | Bin 0 -> 5556 bytes .../Artifacts/b8/b88552fe70de20ed4275e35e2e63f8ed | Bin 0 -> 8548 bytes .../Artifacts/b8/b8b1aca5071b991720424a9797489120 | Bin 0 -> 6628 bytes .../Artifacts/b8/b8bc59989068d6b2664c4deb0990e71c | Bin 0 -> 8188 bytes .../Artifacts/b8/b8cd5e93132d2cc0235f64529fbaf76c | Bin 0 -> 4225 bytes .../Artifacts/b9/b90823f71533a3f65eb41014bba9a124 | Bin 0 -> 4712 bytes .../Artifacts/b9/b90a4e9afe4cf3bffab687f3015c8e7d | Bin 0 -> 16568 bytes .../Artifacts/b9/b91c3765407b5220abcde8fb42b6d012 | Bin 0 -> 5656 bytes .../Artifacts/b9/b9518f59bbc4a434b58e0eaed0945ad0 | Bin 0 -> 4920 bytes .../Artifacts/b9/b96111ce792adb0fa28c4af280a7f821 | Bin 0 -> 9956 bytes .../Artifacts/b9/b96261b441e77a658e9f207b2b093792 | Bin 0 -> 5760 bytes .../Artifacts/b9/b9d49b9056f8cd6613eb19150050f3f2 | Bin 0 -> 5780 bytes .../Artifacts/b9/b9fa0e1af69285c31560390ee73e2c48 | Bin 0 -> 7052 bytes .../Artifacts/ba/ba6e9805ddf4a02f2f81c1a0aab74930 | Bin 0 -> 17444 bytes .../Artifacts/bb/bb1b5a4a3d36d87ee144faabf20efb5f | Bin 0 -> 4948 bytes .../Artifacts/bb/bb208bc9b9741793155674c66ee00971 | Bin 0 -> 4245 bytes .../Artifacts/bb/bb5df611eae7894e2c19846670f3d045 | Bin 0 -> 4241 bytes .../Artifacts/bb/bbd219f6060928cb59aeb0bac7e67ff6 | Bin 0 -> 4856 bytes .../Artifacts/bc/bc1640324cdf975413bfa9d6d5c93f2a | Bin 0 -> 4221 bytes .../Artifacts/bc/bc726ef2ec848db1db538924b9077742 | Bin 0 -> 5372 bytes .../Artifacts/bc/bc7e4894048020c92f4569ef4ae5ce72 | Bin 0 -> 5724 bytes .../Artifacts/bc/bcaf87258b9727bc12ccbc5050b2bee9 | Bin 0 -> 5076 bytes .../Artifacts/bc/bcc16bd27df58f53f0f663a2c85e3b24 | Bin 0 -> 4237 bytes .../Artifacts/bd/bd0ada6585c7869267e05fc588e5c73a | Bin 0 -> 15172 bytes .../Artifacts/bd/bd1d2486c2e3b755fa4ae32a4e6dd1bc | Bin 0 -> 17176 bytes .../Artifacts/bd/bd232a566d0b0efbb4c7d4fe6a077a66 | Bin 0 -> 4500 bytes .../Artifacts/bd/bd2d47745dba1290a985893cc6513d9d | Bin 0 -> 269 bytes .../Artifacts/bd/bd3900606aba5a9404efa187e3b8ba73 | Bin 0 -> 4612 bytes .../Artifacts/bd/bd4f7de9b3931e4eb9382e97292448f4 | Bin 0 -> 8152 bytes .../Artifacts/bd/bd877d7ebb9bf43b6b59396f5bea3a8c | Bin 0 -> 4780 bytes .../Artifacts/bd/bd92d2f908ecb8dcaa72df11062d824e | Bin 0 -> 4776 bytes .../Artifacts/be/be03839eb3cb223ca502477b2a243af1 | Bin 0 -> 12760 bytes .../Artifacts/be/be7bd3982d0ca8a5808c19f6d915a6a6 | Bin 0 -> 27916 bytes .../Artifacts/be/be9ffb9825df404dffbae799eb3dcd67 | Bin 0 -> 17716 bytes .../Artifacts/be/bea5ae61f8e9b9da6915603e45f11e8f | Bin 0 -> 125204 bytes .../Artifacts/be/bedc0fe37a3b7c3970c5de84f7e21fcc | Bin 0 -> 18060 bytes .../Artifacts/be/befffb678fd5f238b11ae9e468473733 | Bin 0 -> 4237 bytes .../Artifacts/bf/bf3f32d45d921946ba4e3f44f5f0bdb5 | Bin 0 -> 4628 bytes .../Artifacts/bf/bf8f8c63c6f7dd01f4f13dde3a23f85a | Bin 0 -> 8812 bytes .../Artifacts/bf/bf969cb2be5689c6d9b1d9aa43da0711 | Bin 0 -> 4904 bytes .../Artifacts/bf/bf9bf3e35bae89fdca54c6938e134288 | Bin 0 -> 375 bytes .../Artifacts/bf/bfabdff2bcb824d6b6613892a0698a0f | Bin 0 -> 5532 bytes .../Artifacts/bf/bfe8cb190a2048078e96c3e4185cfd24 | Bin 0 -> 351 bytes .../Artifacts/bf/bffc6e850a8e42000d83d7a240701b4d | Bin 0 -> 4229 bytes .../Artifacts/c0/c000af77a2462df7e74f63c841c68b82 | Bin 0 -> 4804 bytes .../Artifacts/c0/c02d21da5ad8e0fbefddba6dee1cedb1 | Bin 0 -> 4892 bytes .../Artifacts/c0/c03c5a55edb8174c8a03b88c99f2b204 | Bin 0 -> 537 bytes .../Artifacts/c0/c0c25d4d2ade855fd5815b42af5c4a3c | Bin 0 -> 447 bytes .../Artifacts/c0/c0e29ea71e40731636e0801294404c36 | Bin 0 -> 14952 bytes .../Artifacts/c0/c0e511a0a1faa6378e8424ebb7d7ea10 | Bin 0 -> 9820 bytes .../Artifacts/c0/c0f59b89087dc1922987cd039f851124 | Bin 0 -> 5180 bytes .../Artifacts/c1/c123df76fcdaf44c67223a3b14aced04 | Bin 0 -> 7332 bytes .../Artifacts/c1/c184a4e8589b85cb75da1173289b48c2 | Bin 0 -> 4249 bytes .../Artifacts/c1/c18aea3e2dd51c1713e7be0a5f5f70c4 | Bin 0 -> 5200 bytes .../Artifacts/c1/c1b2ca7dcc4155099ba1ac33fe8897cc | Bin 0 -> 17184 bytes .../Artifacts/c1/c1bab8ca598865822d118c3c78b88a2b | Bin 0 -> 11964 bytes .../Artifacts/c2/c25d40aa53d75d427be961b299599ac2 | Bin 0 -> 161 bytes .../Artifacts/c2/c280ef53536efb0ec70d666cfb57888f | Bin 0 -> 5124 bytes .../Artifacts/c2/c288468df3ad9c92e3c42033873c586f | Bin 0 -> 4520 bytes .../Artifacts/c2/c2958ac0dae99c60e1bea2630023ea8c | Bin 0 -> 7468 bytes .../Artifacts/c2/c2d759d97107fac8e629836eeac0a26a | Bin 0 -> 5120 bytes .../Artifacts/c2/c2d99e99f8a5d94b4fb68bbbee87f1dc | Bin 0 -> 11368 bytes .../Artifacts/c3/c3af1140aab68c8ee7f5ea4e852941d4 | Bin 0 -> 197 bytes .../Artifacts/c3/c3ba8ef07cf814ccfc3e7e1164940819 | Bin 0 -> 4864 bytes .../Artifacts/c4/c403afe8b8ed5ea21907dd48527445d2 | Bin 0 -> 17080 bytes .../Artifacts/c4/c40b9ab794fd3e2e26302c8e547e6fe0 | Bin 0 -> 10488 bytes .../Artifacts/c4/c4213815aee509acb982a1d404f879c4 | Bin 0 -> 4992 bytes .../Artifacts/c4/c4239e6b4cbce6cb9b40937e5f999d7f | Bin 0 -> 4229 bytes .../Artifacts/c4/c445d040cfe1c1f6c088cad69d4fcd4f | Bin 0 -> 157 bytes .../Artifacts/c4/c45fe0abd33d44a029a77bff85919fb0 | Bin 0 -> 4225 bytes .../Artifacts/c4/c47c7180c04ec7b1c4f66beaca64ef59 | Bin 0 -> 4229 bytes .../Artifacts/c4/c4b76feedf7786114f0b706635195371 | Bin 0 -> 8920 bytes .../Artifacts/c4/c4c031adfb6ae3972a64cfc7d0d6c6ab | Bin 0 -> 4896 bytes .../Artifacts/c4/c4d2355281a9f58e213e306546027c1d | Bin 0 -> 4664 bytes .../Artifacts/c4/c4dede6665f81bf4318252b4b9a1f4b7 | Bin 0 -> 21264 bytes .../Artifacts/c4/c4e2403273a5f505b39ebdc93f25634b | Bin 0 -> 4229 bytes .../Artifacts/c4/c4f00870f74854c20ab247fc0a0321ed | Bin 0 -> 9136 bytes .../Artifacts/c5/c516f75c2cd4f581b4d73f3329b1bda4 | Bin 0 -> 8396 bytes .../Artifacts/c5/c5c0a8ddfe92a93198578c0419140148 | Bin 0 -> 200 bytes .../Artifacts/c5/c5e47458ffe48ba4318fa66fc64fdf1a | Bin 0 -> 6332 bytes .../Artifacts/c5/c5ef4406066fa155df064ba50454a72b | Bin 0 -> 19320 bytes .../Artifacts/c5/c5f96409b5fd0f3c92343b3122b5f111 | Bin 0 -> 17508 bytes .../Artifacts/c6/c65a4453ee4799328a83abb3f218ab63 | Bin 0 -> 207 bytes .../Artifacts/c6/c675417799691275f1e93bfa48836e0e | Bin 0 -> 6520 bytes .../Artifacts/c6/c6a32356b2483e8cdacf0497356b1d76 | Bin 0 -> 5620 bytes .../Artifacts/c6/c6c5da05174896636c766f6cda02d4cd | Bin 0 -> 5060 bytes .../Artifacts/c7/c74efdbe1c8a0289aeec2abfb631a05e | Bin 0 -> 6288 bytes .../Artifacts/c7/c7b20fd442f5d0beaab4aa1592abb26a | Bin 0 -> 8776 bytes .../Artifacts/c7/c7b9784a93b4ba12d2958fa5b6e1f2a4 | Bin 0 -> 5368 bytes .../Artifacts/c7/c7e0a3e486f111229ede597eb4a09ef3 | Bin 0 -> 4808 bytes .../Artifacts/c8/c8248da421fbb59ca32014a1b0ecae67 | Bin 0 -> 7736 bytes .../Artifacts/c8/c8377849addd8ed4928d9d56c9948379 | Bin 0 -> 24908 bytes .../Artifacts/c8/c85185b7f98b211e643173cd3e330809 | Bin 0 -> 11116 bytes .../Artifacts/c8/c88a737a9bdd05281bfe71bcb0e372ee | Bin 0 -> 16728 bytes .../Artifacts/c8/c89212d8c43b2b459d9707566203c3da | Bin 0 -> 6044 bytes .../Artifacts/c8/c8a1c7b5c8495c21db74cd739fcbbdb2 | Bin 0 -> 17568 bytes .../Artifacts/c8/c8a2249caddc210c5c3339be0698cb5b | Bin 0 -> 16228 bytes .../Artifacts/c9/c90b781a10be3a15cd1f90e9c8c70ad3 | Bin 0 -> 6232 bytes .../Artifacts/c9/c9555d518cccd471153d86583e048c07 | Bin 0 -> 4237 bytes .../Artifacts/c9/c9aee2450e8e1ea2973f3ab704ba8da8 | Bin 0 -> 41304 bytes .../Artifacts/c9/c9c676058b9d43b8d2704601c68cf21a | Bin 0 -> 151 bytes .../Artifacts/c9/c9e237319b48e61b86ff8132a3f97e1d | Bin 0 -> 9300 bytes .../Artifacts/c9/c9e787721ded611279286e6025384901 | Bin 0 -> 5988 bytes .../Artifacts/ca/ca4de5b7044b4279c5dfdf824fcd4218 | Bin 0 -> 249 bytes .../Artifacts/ca/ca868d1985c84418faf6e68ae469a686 | Bin 0 -> 5052 bytes .../Artifacts/ca/cae9a67064f8cb226c41d5a1eaa7b882 | Bin 0 -> 5272 bytes .../Artifacts/cb/cb0da58eae538c5ec3e70dbb6c733363 | Bin 0 -> 4225 bytes .../Artifacts/cb/cb5dd9756fdf8998465b25018ba3ec83 | Bin 0 -> 16860 bytes .../Artifacts/cb/cb8856fddd0f6f637f24b1238c65e354 | Bin 0 -> 5972 bytes .../Artifacts/cb/cb8c48ecb6ff36e31f577f04eb18fe67 | Bin 0 -> 450 bytes .../Artifacts/cb/cb9382c04c0f8d397c0c9786e33c9048 | Bin 0 -> 17624 bytes .../Artifacts/cb/cbae3560326b96c5ef1e7dd3540a7b94 | Bin 0 -> 238 bytes .../Artifacts/cc/cc2951ba97366949f9bf49d70b47f2e4 | Bin 0 -> 6100 bytes .../Artifacts/cc/cc5188f5cebb7a41dcb7ea698d7cf2e4 | Bin 0 -> 13944 bytes .../Artifacts/cc/cc7d8979d89051c85a368d74870b60a4 | Bin 0 -> 5736 bytes .../Artifacts/cc/cc9322d99bb9b592ae8e79343d487d69 | Bin 0 -> 6516 bytes .../Artifacts/cc/cca7317a6755216cc90c25f504d968bf | Bin 0 -> 13212 bytes .../Artifacts/cc/cca81affe2b310d6deb2f7a3155800f5 | Bin 0 -> 4844 bytes .../Artifacts/cc/ccb92074633786cef5dceb21ceacbd9e | Bin 0 -> 4249 bytes .../Artifacts/cc/ccef22031d7753f0ce8ed5ed976ec45d | Bin 0 -> 4225 bytes .../Artifacts/cd/cd02e3a54e26683dd58600cbef4f77c9 | Bin 0 -> 6716 bytes .../Artifacts/cd/cd09abf6fedca002279dd92b45c97508 | Bin 0 -> 289 bytes .../Artifacts/cd/cd17dbc07ce039ce531bdde9f50c37c7 | Bin 0 -> 8664 bytes .../Artifacts/cd/cd17f307321fd295b10dc888ddafed29 | Bin 0 -> 5760 bytes .../Artifacts/cd/cd48ad71cd577d4a458b0263c7a59306 | Bin 0 -> 10064 bytes .../Artifacts/cd/cd4cf463ed04c4433f508368ba9d9b34 | Bin 0 -> 4237 bytes .../Artifacts/cd/cdd06ca54553a0cbe49f4fb2f15a25d3 | Bin 0 -> 189 bytes .../Artifacts/cd/cde600cb1006e8b1f5b104c61d1e27e9 | Bin 0 -> 17628 bytes .../Artifacts/cd/cdf16e277cac3e4124865031f3ba973b | Bin 0 -> 5804 bytes .../Artifacts/ce/ce00fbfd073665b7de72972046a5f832 | Bin 0 -> 4245 bytes .../Artifacts/ce/cea46d380acddf5912e80b083e1298bb | Bin 0 -> 10208 bytes .../Artifacts/ce/ceb27ce710cf14b9febe8df1554151dd | Bin 0 -> 17564 bytes .../Artifacts/ce/cec8805ea0721ca87b030ad6e9e4e653 | Bin 0 -> 4772 bytes .../Artifacts/ce/cee6c31082cae8646122afec98bda5b1 | Bin 0 -> 10108 bytes .../Artifacts/cf/cf4d8c398c8135ccd6a5235a7910f457 | Bin 0 -> 4229 bytes .../Artifacts/cf/cfafbfecc495b8494e0f81f6840bd6d0 | Bin 0 -> 5200 bytes .../Artifacts/d0/d0526ad96371206ff9b1b6a06d6e9028 | Bin 0 -> 4225 bytes .../Artifacts/d0/d0c0fd0154cf9f4b8b4139912e01cc99 | Bin 0 -> 6464 bytes .../Artifacts/d0/d0e696c5568a31366d1875e8bb59c1f1 | Bin 0 -> 17016 bytes .../Artifacts/d0/d0f6bc32179709481774e859625e45e2 | Bin 0 -> 4504 bytes .../Artifacts/d0/d0f8009143a3b6cc50799a2803307eb1 | Bin 0 -> 17640 bytes .../Artifacts/d1/d1188f32f8f5016c73f0da90c710627c | Bin 0 -> 9016 bytes .../Artifacts/d1/d119256577cf7cad2a895c84d2819479 | Bin 0 -> 4241 bytes .../Artifacts/d1/d138442754e882a3516e083c1713ba79 | Bin 0 -> 17268 bytes .../Artifacts/d1/d15fbecd6f34b5f226133f4e341020ad | Bin 0 -> 17480 bytes .../Artifacts/d2/d2159b9033692f38f394b0a910762c32 | Bin 0 -> 4764 bytes .../Artifacts/d2/d2466661530f464e67b8b5576e2dec15 | Bin 0 -> 4772 bytes .../Artifacts/d2/d2a7996852b215974a1268132f7d78d9 | Bin 0 -> 7664 bytes .../Artifacts/d3/d3396113c33b733c16ed9e6ee59c4b17 | Bin 0 -> 9136 bytes .../Artifacts/d3/d372708d311574e9c8207bcf2fa307aa | Bin 0 -> 7092 bytes .../Artifacts/d3/d37583263881840fe5a41f44ff2e192e | Bin 0 -> 4221 bytes .../Artifacts/d4/d40f57679420e867dc83ca5f60a59466 | Bin 0 -> 157 bytes .../Artifacts/d4/d4301541567e392908f4fb9cf8abdfa0 | Bin 0 -> 5020 bytes .../Artifacts/d4/d439ad08b576d4fa29fd950a64bbcf3f | Bin 0 -> 4225 bytes .../Artifacts/d4/d49e6642f4f68eac410099efeb257722 | Bin 0 -> 4824 bytes .../Artifacts/d4/d4b1ab398c5f6953bb3f64ed5f8958bc | Bin 0 -> 28160 bytes .../Artifacts/d4/d4ce3846ae486afa1e42714b97352d48 | Bin 0 -> 25820 bytes .../Artifacts/d4/d4e2547b82b32d8396f1c6ccab964ae8 | Bin 0 -> 212 bytes .../Artifacts/d5/d56334dd996b19dd072507994ea0a6a9 | Bin 0 -> 16736 bytes .../Artifacts/d5/d57c293529371c810c7030973994d948 | Bin 0 -> 6836 bytes .../Artifacts/d5/d5cd18b888f9eada307d0b83e1f244cf | Bin 0 -> 17448 bytes .../Artifacts/d5/d5d22c15fc7ffedadcf81ff618adb2f4 | Bin 0 -> 17568 bytes .../Artifacts/d6/d60270576172625e2e048e46ca449016 | Bin 0 -> 31960 bytes .../Artifacts/d6/d682b7596cbda0b38927733530bc4c6f | Bin 0 -> 193 bytes .../Artifacts/d6/d6a12c0555571313f96d467b60cf7bc4 | Bin 0 -> 7636 bytes .../Artifacts/d6/d6e396c1a96d83e1a449508eb8684514 | Bin 0 -> 4225 bytes .../Artifacts/d6/d6e5e9dac86d157abdbd16d7168e2d8b | Bin 0 -> 5028 bytes .../Artifacts/d6/d6f6336441cae7a964ec56ec04a6ed4e | Bin 0 -> 6232 bytes .../Artifacts/d7/d713e8814597bec52676879fab37b720 | Bin 0 -> 24336 bytes .../Artifacts/d7/d7686d13fc24aa9db0698a2f644f9509 | Bin 0 -> 322 bytes .../Artifacts/d7/d78d790320909c1bad434396febf9aab | Bin 0 -> 4992 bytes .../Artifacts/d7/d79cebd4ad27ad5d9602db1550d652ba | Bin 0 -> 11280 bytes .../Artifacts/d7/d7f63fcd72d39a0e14bab4fadd6d0bfb | Bin 0 -> 5556 bytes .../Artifacts/d8/d809c4801360de223762f6d5ad4f4879 | Bin 0 -> 4748 bytes .../Artifacts/d8/d827c0b1a27120d2ae31e99da06c183c | Bin 0 -> 4564 bytes .../Artifacts/d8/d82813bbd61ef92cb58acaf893357a39 | Bin 0 -> 4712 bytes .../Artifacts/d8/d8a5984afe996c91954da8724f5713b9 | Bin 0 -> 4221 bytes .../Artifacts/d9/d914ebc090ffd04d9b9e68134e280633 | Bin 0 -> 4229 bytes .../Artifacts/d9/d97e1402057da410b8a24d66779a7500 | Bin 0 -> 5924 bytes .../Artifacts/d9/d99637805c9b6f7be83e8a919c28dc67 | Bin 0 -> 4229 bytes .../Artifacts/d9/d9ba977bf0c7a271f94ce05f0cddc504 | Bin 0 -> 4229 bytes .../Artifacts/d9/d9c0f490433492e03d94ae02ccd9800a | Bin 0 -> 10624 bytes .../Artifacts/da/da1c0086cb229c89d4574deacfc198d6 | Bin 0 -> 13904 bytes .../Artifacts/da/da2d23eb774685f982194d6d64c0127d | Bin 0 -> 17264 bytes .../Artifacts/da/da86d27b5e8deb1460c8cf1610edcc39 | Bin 0 -> 9852 bytes .../Artifacts/da/daa0ea2ff39f6b380596da17d225fd61 | Bin 0 -> 9748 bytes .../Artifacts/da/dab79ac96246b49286d8a92c01fa5baa | Bin 0 -> 8832 bytes .../Artifacts/da/daf37dca5534788dcf79d9d697f7e54b | Bin 0 -> 4500 bytes .../Artifacts/db/db0c92868ce168ac5912d30f1d2fdf88 | Bin 0 -> 10996 bytes .../Artifacts/db/db3e7628085f3799160cd2b05c743c39 | Bin 0 -> 5340 bytes .../Artifacts/db/db44f277b7f3e328efcf1f6cb377bdad | Bin 0 -> 6316 bytes .../Artifacts/db/db5dcf28173ec141dd8fa57c5f070d2f | Bin 0 -> 6132 bytes .../Artifacts/db/db6fe11f13ce881b7b3cc558ce5e4804 | Bin 0 -> 4720 bytes .../Artifacts/db/dbb4a02322cb4710e44a7367ad17b241 | Bin 0 -> 4572 bytes .../Artifacts/db/dbd6fe679dbc0202b9c3acfca9a4fc5b | Bin 0 -> 5888 bytes .../Artifacts/db/dbea5e9afb86dbee9eeded21dbb7ef75 | Bin 0 -> 4476 bytes .../Artifacts/dc/dc153a3a4a254caaed6cc5b505b37234 | Bin 0 -> 4652 bytes .../Artifacts/dc/dc1b5146ea6d50ed11cade83d6258c25 | Bin 0 -> 4952 bytes .../Artifacts/dc/dc35865836b7b59ae5888ed4adfee5e2 | Bin 0 -> 7644 bytes .../Artifacts/dc/dc53024c97c1f4d15b0830663c2677ca | Bin 0 -> 4221 bytes .../Artifacts/dc/dca03a080c479c7defc937b230c47a80 | Bin 0 -> 4229 bytes .../Artifacts/dc/dca4c2de29598b6ebec5316b25f98ce6 | Bin 0 -> 4237 bytes .../Artifacts/dc/dcb8562a5c42cdca6e940cc77ee693ce | Bin 0 -> 5004 bytes .../Artifacts/dc/dcc7e915b0819b28ba0ed4522a8245c8 | Bin 0 -> 7704 bytes .../Artifacts/dc/dcd1bf78179cb965a1380bfe2b0e1998 | Bin 0 -> 4225 bytes .../Artifacts/dd/dd0f57be1fd882f19974ab37e56a81ab | Bin 0 -> 4225 bytes .../Artifacts/dd/dd14d2f4c53fbe1c4c495dd676ec8701 | Bin 0 -> 10820 bytes .../Artifacts/dd/dd59c653ae4a6e02fb471b96238ec97b | Bin 0 -> 185 bytes .../Artifacts/dd/dd8753932fffdbb3f3e750f68cf4af87 | Bin 0 -> 5656 bytes .../Artifacts/dd/dd8a33c8b125ee4cbf8adcb714f9ef68 | Bin 0 -> 4233 bytes .../Artifacts/dd/ddb185f5135eb1976d6c201af01d3234 | Bin 0 -> 4552 bytes .../Artifacts/dd/ddf78f32cd974afa8b9f62d347802b50 | Bin 0 -> 5060 bytes .../Artifacts/de/de5a5c3b27ae52c4f383cd380dff6375 | Bin 0 -> 4512 bytes .../Artifacts/de/deba3daf780992f9232063b1af88d8e9 | Bin 0 -> 4776 bytes .../Artifacts/de/dec8af187b15f45ea9a84901c57bdb60 | Bin 0 -> 18556 bytes .../Artifacts/de/ded6d0c9d86f4a44166616a85a39be1b | Bin 0 -> 7520 bytes .../Artifacts/de/deff4e65a32d8802e73de4451d1c788e | Bin 0 -> 4676 bytes .../Artifacts/df/df07eb2f20ef59a93ecd0191b3b8eae1 | Bin 0 -> 9332 bytes .../Artifacts/df/df497d53d15903a90aa122624bf56019 | Bin 0 -> 161 bytes .../Artifacts/df/df57635a752f4e60301d884803ffe606 | Bin 0 -> 6768 bytes .../Artifacts/df/dfc226e88f37d655fc48e7ef66cc37fe | Bin 0 -> 4588 bytes .../Artifacts/df/dfc7adf9df39411babd81d45010ea7e7 | Bin 0 -> 5080 bytes .../Artifacts/df/dff19d3e9cf019f71a5b1677cea4d278 | Bin 0 -> 213 bytes .../Artifacts/e0/e01e9b6584fac8da6c2f08e1fdea5c46 | Bin 0 -> 9152 bytes .../Artifacts/e0/e023ce0744fe41a41564d967a531c2f0 | Bin 0 -> 7492 bytes .../Artifacts/e0/e031e5bee2c8d29154cbdeb01832e1e4 | Bin 0 -> 17716 bytes .../Artifacts/e0/e0347ae0bfcdbb67eb2d3da0655a4c6a | Bin 0 -> 5096 bytes .../Artifacts/e0/e0b45164e035c0ba30abd1108c114cfa | Bin 0 -> 17176 bytes .../Artifacts/e0/e0bf5f0b70fcdb4505aed7ba4437677f | Bin 0 -> 5548 bytes .../Artifacts/e0/e0d458b6a07c88220f7e8b8207d304d5 | Bin 0 -> 20692 bytes .../Artifacts/e1/e11c3e001490abdc9d957327df4c1028 | Bin 0 -> 12816 bytes .../Artifacts/e1/e12623ee4468c48608a004a8ebaee603 | Bin 0 -> 18380 bytes .../Artifacts/e1/e1465d7df5db5d115090b98216d37ccb | Bin 0 -> 5312 bytes .../Artifacts/e1/e16bb4d98688b3d502a100f105aa402f | Bin 0 -> 182 bytes .../Artifacts/e1/e187f225c021c8f49a0b557fe3550389 | Bin 0 -> 6788 bytes .../Artifacts/e1/e189a9d0aa2942a3d5d1c414b238a18a | Bin 0 -> 11296 bytes .../Artifacts/e1/e190efd2d7895a40a58d755b449cafc8 | Bin 0 -> 9164 bytes .../Artifacts/e1/e198676a85374a586de1211245c13b72 | Bin 0 -> 4468 bytes .../Artifacts/e1/e1a78986a3fa21efdf05bc55cb662c53 | Bin 0 -> 4233 bytes .../Artifacts/e1/e1d5ab37385319c26fc51951f82c1651 | Bin 0 -> 14324 bytes .../Artifacts/e1/e1dcf20658be178ede6b66815a5d490a | Bin 0 -> 4241 bytes .../Artifacts/e1/e1e1f89b9bcac396af4fd01a91405be5 | Bin 0 -> 5260 bytes .../Artifacts/e2/e22899741b11d0711ebbe2126f192ba0 | Bin 0 -> 6132 bytes .../Artifacts/e2/e2357474dcedbd4bc2be95ae25f4bab4 | Bin 0 -> 4229 bytes .../Artifacts/e2/e244c36d3e7c1464fa404b44608fbd8c | Bin 0 -> 6468 bytes .../Artifacts/e2/e27f3ae93eb265726caf28d0df630bd3 | Bin 0 -> 7420 bytes .../Artifacts/e2/e29368fef9285bf0d5f40941c6b6c9ba | Bin 0 -> 4956 bytes .../Artifacts/e2/e2ea13252e9b942ea4ecac30a87f6630 | Bin 0 -> 4245 bytes .../Artifacts/e3/e33aaeccbd400f4d30f59f4530af52ae | Bin 0 -> 15108 bytes .../Artifacts/e3/e3646238fe5406eaa9623c9a528b97c6 | Bin 0 -> 17628 bytes .../Artifacts/e3/e378f97f8726e88f7d858535d3769287 | Bin 0 -> 4225 bytes .../Artifacts/e3/e3919844da7f36809d45f56fa8f32d0c | Bin 0 -> 9500 bytes .../Artifacts/e3/e3a4931c8fe51a88fd486db36b1ed15d | Bin 0 -> 4940 bytes .../Artifacts/e4/e4452c20bab7ad62b3b575439299fe7d | Bin 0 -> 20696 bytes .../Artifacts/e4/e49e545eefa9725717a08165c60864ee | Bin 0 -> 16416 bytes .../Artifacts/e4/e4a94be5dc17896bc897bf948f4f94cd | Bin 0 -> 21640 bytes .../Artifacts/e4/e4ddfd1c0efc534be4a3eda2517e87de | Bin 0 -> 5480 bytes .../Artifacts/e4/e4de0ee64eddfdfcd793a8abb633403b | Bin 0 -> 4229 bytes .../Artifacts/e4/e4ec926ca10e25268f787182b3a0e60d | Bin 0 -> 4253 bytes .../Artifacts/e5/e52cf813e74128d189711032a0583b8a | Bin 0 -> 4868 bytes .../Artifacts/e5/e559409d727cde09a4765221d2b95d72 | Bin 0 -> 8280 bytes .../Artifacts/e5/e59d60c5e90acbe241ba6e89eebf04cb | Bin 0 -> 22876 bytes .../Artifacts/e6/e60b7a8416f474fadea61bcdf8d8704f | Bin 0 -> 4504 bytes .../Artifacts/e6/e65bf8c65c685cec06bd8e52a16d52c0 | Bin 0 -> 20864 bytes .../Artifacts/e6/e66460cafd5074b19289137d535ecb6e | Bin 0 -> 20696 bytes .../Artifacts/e6/e6764e31b9c2b1a875cded0e44168719 | Bin 0 -> 4229 bytes .../Artifacts/e6/e6c32083ae5f3f1910e36209a987b8f1 | Bin 0 -> 7952 bytes .../Artifacts/e6/e6d1d32a4cba3803f3d250f1e9abe1b2 | Bin 0 -> 4229 bytes .../Artifacts/e6/e6feff700718ddc97f31aef35f811459 | Bin 0 -> 17564 bytes .../Artifacts/e7/e70ca86e0c854f62ab61e8c937b4760c | Bin 0 -> 12992 bytes .../Artifacts/e7/e783d72a4160348ee709022995f23226 | Bin 0 -> 4229 bytes .../Artifacts/e7/e7aa20835e0b9d4a62f1435847fcd794 | Bin 0 -> 8800 bytes .../Artifacts/e7/e7c30ed989f7df32a5f20551bfd47b88 | Bin 0 -> 5200 bytes .../Artifacts/e7/e7cca011a97d21319dcea9646ecf2949 | Bin 0 -> 5036 bytes .../Artifacts/e8/e8194503f58f07da5a97290070b0df24 | Bin 0 -> 478 bytes .../Artifacts/e8/e82e55c7179662fde8816917c4917cd4 | Bin 0 -> 9360 bytes .../Artifacts/e8/e8d450ab598c6a73e256e113e78d358b | Bin 0 -> 5424 bytes .../Artifacts/e8/e8f38ee6d33088758518f46acb0b5c0e | Bin 0 -> 5964 bytes .../Artifacts/e9/e941f5f0eda6eeba892d57fe9db6a402 | Bin 0 -> 5556 bytes .../Artifacts/e9/e991fd12ef37b3f5bade394c16d51325 | Bin 0 -> 17172 bytes .../Artifacts/e9/e9c2520b3ec17c8cd8e974e289a7dfcf | Bin 0 -> 10604 bytes .../Artifacts/ea/ea16376b91ff5b5af20db923e86f2a05 | Bin 0 -> 6680 bytes .../Artifacts/ea/ea4da0a98a81c65a7fd9b5905518d30f | Bin 0 -> 11016 bytes .../Artifacts/ea/ea6113efb4b0d8a77264c5432ba7d9f1 | Bin 0 -> 4229 bytes .../Artifacts/ea/ea86462cae07169cf0fd8cf35ef3698c | Bin 0 -> 8768 bytes .../Artifacts/ea/ea90c983af50c230b1470c6f13e797e2 | Bin 0 -> 7684 bytes .../Artifacts/eb/eb2b2b94cdc3eca3b61a08e19ab1960e | Bin 0 -> 5020 bytes .../Artifacts/eb/eb2ef1ef7ccecc64b09ce4b0f4e94ed5 | Bin 0 -> 1952 bytes .../Artifacts/eb/eb40e1ef1bebbea796ab0281b6bf93d0 | Bin 0 -> 4249 bytes .../Artifacts/eb/ebacb01de631643e62870a8447ed9989 | Bin 0 -> 4600 bytes .../Artifacts/eb/ebb4b0dbe5f11d4ca77af7662640294d | Bin 0 -> 11604 bytes .../Artifacts/eb/ebbaad72db72151d56809436976cb367 | Bin 0 -> 8360 bytes .../Artifacts/ec/ec0e1900ca922318728059a658f72f83 | Bin 0 -> 4424 bytes .../Artifacts/ec/ec100a8f14d8434ff2dfdc6b069dcf06 | Bin 0 -> 17620 bytes .../Artifacts/ec/ec324142b98f1b50a85515e23eea79b5 | Bin 0 -> 552 bytes .../Artifacts/ec/ec393438ac0fcbc140a4c50bbcde889f | Bin 0 -> 6180 bytes .../Artifacts/ec/ec89bf3bc08eca1067d150b93a372750 | Bin 0 -> 8312 bytes .../Artifacts/ec/eca2e6d2698b57d5752962b5dd48d5d2 | Bin 0 -> 9732 bytes .../Artifacts/ec/ecab0c39cc68609c1ea5e959ae285cf0 | Bin 0 -> 9228 bytes .../Artifacts/ec/ecc28ca6ae917935f5e0817ed39f41a8 | Bin 0 -> 4237 bytes .../Artifacts/ed/ed174cd4c0b0a4635328d00ee9f394dc | Bin 0 -> 17004 bytes .../Artifacts/ed/ed2b3a54e4624e040397dfd8d5de8769 | Bin 0 -> 40848 bytes .../Artifacts/ed/ed2cd5080e843489499db3bbaf3e74f4 | Bin 0 -> 4225 bytes .../Artifacts/ed/ed4ce8bd29f5e75e0e3386698de68cb5 | Bin 0 -> 20896 bytes .../Artifacts/ed/ed609e69f07580d66438891767b62ea2 | Bin 0 -> 18568 bytes .../Artifacts/ed/ed85736a2d9823b12bf12a23542731d5 | Bin 0 -> 17804 bytes .../Artifacts/ed/edc4db287d9c3b8b403c806cb83cf91c | Bin 0 -> 17180 bytes .../Artifacts/ee/ee2d8f69e2a3a1b1b41addcc761b58fd | Bin 0 -> 17172 bytes .../Artifacts/ee/ee98b5001fdca78c3d74fb7a01ed69b0 | Bin 0 -> 13012 bytes .../Artifacts/ee/eea40b7cb464982cf394f045254f6c3c | Bin 0 -> 5100 bytes .../Artifacts/ee/eeb5859b126bc5acb95dbcd2e8c65f84 | Bin 0 -> 5824 bytes .../Artifacts/ee/eee8108f285f18cd81cec9ad7dd02ee2 | Bin 0 -> 6932 bytes .../Artifacts/ef/ef1cf0f1e552f9fcc5cef32223a1aa08 | Bin 0 -> 85212 bytes .../Artifacts/ef/ef52cd2ba6b05811876983db84b2b00e | Bin 0 -> 6836 bytes .../Artifacts/ef/ef5fe5e004095bb518cc43d22f82dc47 | Bin 0 -> 4229 bytes .../Artifacts/ef/ef8550ad667f72d844cce149329684d3 | Bin 0 -> 69214 bytes .../Artifacts/ef/ef9befa8d6dcdff535dc28debd189e67 | Bin 0 -> 5856 bytes .../Artifacts/ef/efaca569410f0a05404ee97da7ea835c | Bin 0 -> 4237 bytes .../Artifacts/ef/efaeb4971e3c1af3515a74fa1259ba4c | Bin 0 -> 16852 bytes .../Artifacts/ef/efba4d8565414107a3779bbb515e972b | Bin 0 -> 6764 bytes .../Artifacts/f0/f01684ed5999a3a5eb843ac4f2328836 | Bin 0 -> 4241 bytes .../Artifacts/f0/f0388ce27d963c7fabdf4b1d6f12f3e5 | Bin 0 -> 302 bytes .../Artifacts/f0/f0de91db71ed8bd56f3b8eff58293177 | Bin 0 -> 8628 bytes .../Artifacts/f0/f0dfb6630509a0d28175a90f5e50b566 | Bin 0 -> 4364 bytes .../Artifacts/f0/f0fa0699813b9656ab55d42b7bed2403 | Bin 0 -> 5708 bytes .../Artifacts/f0/f0fe129666ec72f621acb88c4a892947 | Bin 0 -> 82140 bytes .../Artifacts/f1/f13f1b67708aabd54b78249702fc15a7 | Bin 0 -> 6780 bytes .../Artifacts/f1/f16e70af94c920eb7e7da3844e42014b | Bin 0 -> 8116 bytes .../Artifacts/f1/f18edf9646b634e31c6d7a9c17a85e19 | Bin 0 -> 4620 bytes .../Artifacts/f1/f1ac08e48411f7b06fe4af16fb4d9db5 | Bin 0 -> 227 bytes .../Artifacts/f1/f1c3f8101783f5987427af33e3f4a26d | Bin 0 -> 4584 bytes .../Artifacts/f1/f1cffc0b2a2daa7e162ff6dc74f84d12 | Bin 0 -> 9388 bytes .../Artifacts/f1/f1e2170e3efdb865fdc160f6c6074013 | Bin 0 -> 17500 bytes .../Artifacts/f2/f261393bac64078980e5d91da9c26dc9 | Bin 0 -> 12840 bytes .../Artifacts/f2/f26cd6a6ae74b44403b7fd6ba41dce59 | Bin 0 -> 17624 bytes .../Artifacts/f2/f2a9441bdf1dc83ffb09e31c77be6f33 | Bin 0 -> 7388 bytes .../Artifacts/f2/f2c423cb4a60a50c1227b1263e8b6c34 | Bin 0 -> 4552 bytes .../Artifacts/f3/f32d83f3188521d3aadd11401a5b9151 | Bin 0 -> 4824 bytes .../Artifacts/f3/f33935967180b679aa810f93ac2c4a45 | Bin 0 -> 12000 bytes .../Artifacts/f3/f33eaad45a73c6e86675f9df9930c513 | Bin 0 -> 4792 bytes .../Artifacts/f3/f34192e8854b6e20266785deb990b2c6 | Bin 0 -> 15536 bytes .../Artifacts/f3/f364772462b0281b084c12674f41121a | Bin 0 -> 59280 bytes .../Artifacts/f3/f3671a4430c48b7306d215b6a1e853fd | Bin 0 -> 29184 bytes .../Artifacts/f3/f3ac993363685eb9993b8bfe7b1b8465 | Bin 0 -> 4464 bytes .../Artifacts/f3/f3f275f81d5a4c0ece2a419e7f30244e | Bin 0 -> 5692 bytes .../Artifacts/f4/f4142e56c8453b0dd21e64fb06187085 | Bin 0 -> 8868 bytes .../Artifacts/f4/f4628fff7c1b920b44957a583419dcdb | Bin 0 -> 6256 bytes .../Artifacts/f4/f4e0050c7e28dd774d5e9a1b6cbddffe | Bin 0 -> 7772 bytes .../Artifacts/f5/f52ae9be1fba6024571338d2557825fe | Bin 0 -> 8092 bytes .../Artifacts/f5/f5382c9ef52f74c33e516fc3fe6399a1 | Bin 0 -> 22876 bytes .../Artifacts/f5/f53a5306cddc01174f019ada7e1db5c7 | Bin 0 -> 6776 bytes .../Artifacts/f5/f579596d42eac7e38c1b6ab35b497745 | Bin 0 -> 17180 bytes .../Artifacts/f5/f57c8e76981f6f46d9bbc48ee7f56814 | Bin 0 -> 1249 bytes .../Artifacts/f5/f5c1ff90eb9b091c9915bf01cab367e3 | Bin 0 -> 4604 bytes .../Artifacts/f5/f5c3008e79e9b471ff8bb48468ee91de | Bin 0 -> 5388 bytes .../Artifacts/f5/f5c4fa80c70126fba5f8dc08d9cddcfe | Bin 0 -> 285 bytes .../Artifacts/f5/f5df2d39804f712c7d0f8909b9287e7f | Bin 0 -> 5820 bytes .../Artifacts/f6/f664a6018847f5285585dafe5322ad3e | Bin 0 -> 4768 bytes .../Artifacts/f6/f674fd3c37aff71b44b6715d0df513f5 | Bin 0 -> 7140 bytes .../Artifacts/f6/f68d261146da6ae8c08a852352b2b5bb | Bin 0 -> 11500 bytes .../Artifacts/f6/f6c1caf6c9794dd24820567077386608 | Bin 0 -> 6476 bytes .../Artifacts/f7/f719fabda1b810db2c2630cd7a2047fc | Bin 0 -> 17620 bytes .../Artifacts/f7/f7274cf6ca8b359c12d58e6e7e7408f4 | Bin 0 -> 503 bytes .../Artifacts/f7/f73fed6995ef9e5d2d252581fdcc43d6 | Bin 0 -> 4796 bytes .../Artifacts/f8/f81ff60a008ee725a26c22bfcc3a52e7 | Bin 0 -> 5140 bytes .../Artifacts/f8/f83e93e6e06d2a8a5718d2bf52032450 | Bin 0 -> 17332 bytes .../Artifacts/f8/f85d5f79e65d426f0abd0679d18fd389 | Bin 0 -> 4440 bytes .../Artifacts/f8/f8699ec491a3366d31a273e27607e8c4 | Bin 0 -> 17568 bytes .../Artifacts/f8/f86b84f20f524a9983701da22f138544 | Bin 0 -> 4225 bytes .../Artifacts/f8/f8c2dba26200c96ea7bd86f6fcaa24f8 | Bin 0 -> 156 bytes .../Artifacts/f9/f9075ce0f07b40dfddb2790f6e1c2eb5 | Bin 0 -> 211 bytes .../Artifacts/f9/f934ad3ec259e442045763fa27043bf7 | Bin 0 -> 250 bytes .../Artifacts/f9/f95223af7d8813b4830c5e17f69160b6 | Bin 0 -> 4225 bytes .../Artifacts/f9/f95574743641fb2e880d80188f966da8 | Bin 0 -> 4972 bytes .../Artifacts/fa/fa77148024477a78de4d816de0517715 | Bin 0 -> 6452 bytes .../Artifacts/fa/fa8dd58c7f291bf068a05be27e2ec2fe | Bin 0 -> 4229 bytes .../Artifacts/fa/faafb2fc3be02fec46cfa5c129fd57b6 | Bin 0 -> 250 bytes .../Artifacts/fa/fac4af718d22f9b76b43ebc44745b7fa | Bin 0 -> 16492 bytes .../Artifacts/fa/fac9d0290c2ffad7802d9968e7fd4e29 | Bin 0 -> 9364 bytes .../Artifacts/fa/fad4d0eaeae112d867393eecf09817e7 | Bin 0 -> 159 bytes .../Artifacts/fa/fae4d9546e07eb2685665fe87e8ce239 | Bin 0 -> 7876 bytes .../Artifacts/fb/fb1cc7cbad4562387a1174426cb799a2 | Bin 0 -> 4568 bytes .../Artifacts/fb/fb92a26e82fd66371b47b099b01e7012 | Bin 0 -> 50272 bytes .../Artifacts/fb/fbb063317893721bfa0c84cce982110b | Bin 0 -> 17620 bytes .../Artifacts/fc/fc4cc3be367234bb822ee543eccc4952 | Bin 0 -> 4241 bytes .../Artifacts/fc/fc5c48865328817cce5184b071c6dcff | Bin 0 -> 14896 bytes .../Artifacts/fc/fc6feb7626df851817e1612c43a23680 | Bin 0 -> 143 bytes .../Artifacts/fc/fcaf0faa46c483eb90b65c3e523ee32a | Bin 0 -> 20196 bytes .../Artifacts/fc/fcbdb7b86e2090e1d82a337063a7b3f7 | Bin 0 -> 4225 bytes .../Artifacts/fc/fcefe457280e1b20bf2912badccf6bf8 | Bin 0 -> 263 bytes .../Artifacts/fd/fd50e8c50ae1da0d88a9ac3c74470f67 | Bin 0 -> 5992 bytes .../Artifacts/fd/fd93684f9450cd03c20e9d96dd7c5600 | Bin 0 -> 4912 bytes .../Artifacts/fd/fdb916ce46ea2256c85375dedbc0775c | Bin 0 -> 6836 bytes .../Artifacts/fe/fe15ddcfc1938c1ec7224704f7b89e35 | Bin 0 -> 4233 bytes .../Artifacts/fe/fe1ab1a2ce7b4f0f2186da8e46dbe5de | Bin 0 -> 4720 bytes .../Artifacts/fe/fe1ba0376bfbb4c4e00390611bb552ce | Bin 0 -> 8288 bytes .../Artifacts/fe/fe324fa7d2bc294f258f7dbd390e3d7b | Bin 0 -> 4728 bytes .../Artifacts/fe/fe6c76bd4254fd74532d6e9a62e828e7 | Bin 0 -> 7944 bytes .../Artifacts/fe/fea473043e6ba40a4165c61fd03a285b | Bin 0 -> 4225 bytes .../Artifacts/fe/febeb198631c777e1cfa2313bc844fa4 | Bin 0 -> 7712 bytes .../Artifacts/fe/fefdc39679b19ad34572626df52894d0 | Bin 0 -> 4560 bytes .../Artifacts/ff/ff3508cc37eb3e2b8a3568804a0d2030 | Bin 0 -> 5580 bytes .../Artifacts/ff/ff47b1b2f93218bee583c92542510735 | Bin 0 -> 166 bytes .../Artifacts/ff/ff56e161db4ff3c12b974974a9000564 | Bin 0 -> 5376 bytes .../Artifacts/ff/ff7d021e5203cd110f7667af9942ff92 | Bin 0 -> 20700 bytes .../Artifacts/ff/ffcc32305b9bbd1fa75894b0c16a6204 | Bin 0 -> 4237 bytes .../Artifacts/ff/ffe2248a370a4b91ba42e56249cd6cf6 | Bin 0 -> 10008 bytes .../Artifacts/ff/ffeadcb07ddeb68139b1a66e2e87eb82 | Bin 0 -> 4225 bytes .../Artifacts/ff/fff999cab6df30b2b0a55830319c6dcb | Bin 0 -> 17004 bytes Library/AssetImportState | 1 + Library/BuildPlayer.prefs | 0 Library/BuildSettings.asset | Bin 0 -> 4152 bytes ...apshot_2d367089-5505-4276-9de6-6530a5b7eec5.txt | 1 + Library/CurrentLayout-default.dwlt | 786 + Library/EditorInstance.json | 6 + Library/EditorOnlyScriptingSettings.json | 1 + Library/EditorSnapSettings.asset | 20 + Library/EditorUserBuildSettings.asset | Bin 0 -> 5800 bytes Library/EditorUserSettings.asset | 19 + Library/InspectorExpandedItems.asset | Bin 0 -> 4104 bytes Library/LastSceneManagerSetup.txt | 5 + Library/LibraryFormatVersion.txt | 2 + Library/MonoManager.asset | Bin 0 -> 4100 bytes .../com.unity.collab-proxy@1.2.16/.npmignore | 6 + .../com.unity.collab-proxy@1.2.16/CHANGELOG.md | 31 + .../CHANGELOG.md.meta | 7 + .../com.unity.collab-proxy@1.2.16/DEPENDENCIES.md | 9 + .../DEPENDENCIES.md.meta | 7 + .../Documentation~/collab-proxy.md | 5 + .../com.unity.collab-proxy@1.2.16/Editor.meta | 8 + .../Editor/AssemblyInfo.cs | 4 + .../Editor/AssemblyInfo.cs.meta | 11 + .../Editor/Collab.meta | 8 + .../Editor/Collab/Bootstrap.cs | 24 + .../Editor/Collab/Bootstrap.cs.meta | 11 + .../Editor/Collab/CollabAnalytics.cs | 21 + .../Editor/Collab/CollabAnalytics.cs.meta | 11 + .../Editor/Collab/CollabHistoryWindow.cs | 330 + .../Editor/Collab/CollabHistoryWindow.cs.meta | 11 + .../Editor/Collab/CollabToolbarButton.cs | 297 + .../Editor/Collab/CollabToolbarButton.cs.meta | 11 + .../Editor/Collab/CollabToolbarWindow.cs | 137 + .../Editor/Collab/CollabToolbarWindow.cs.meta | 11 + .../Editor/Collab/Presenters.meta | 8 + .../Collab/Presenters/CollabHistoryPresenter.cs | 228 + .../Presenters/CollabHistoryPresenter.cs.meta | 11 + .../Editor/Collab/Views.meta | 8 + .../Editor/Collab/Views/BuildStatusButton.cs | 53 + .../Editor/Collab/Views/BuildStatusButton.cs.meta | 11 + .../Editor/Collab/Views/CollabHistoryDropDown.cs | 78 + .../Collab/Views/CollabHistoryDropDown.cs.meta | 11 + .../Collab/Views/CollabHistoryDropDownItem.cs | 53 + .../Collab/Views/CollabHistoryDropDownItem.cs.meta | 11 + .../Editor/Collab/Views/CollabHistoryItem.cs | 229 + .../Editor/Collab/Views/CollabHistoryItem.cs.meta | 11 + .../Collab/Views/CollabHistoryItemFactory.cs | 121 + .../Collab/Views/CollabHistoryItemFactory.cs.meta | 11 + .../Collab/Views/CollabHistoryRevisionLine.cs | 94 + .../Collab/Views/CollabHistoryRevisionLine.cs.meta | 11 + .../Editor/Collab/Views/HistoryProgressSpinner.cs | 69 + .../Collab/Views/HistoryProgressSpinner.cs.meta | 11 + .../Collab/Views/ICollabHistoryItemFactory.cs | 17 + .../Collab/Views/ICollabHistoryItemFactory.cs.meta | 11 + .../Editor/Collab/Views/PagedListView.cs | 192 + .../Editor/Collab/Views/PagedListView.cs.meta | 11 + .../Editor/Collab/Views/StatusView.cs | 88 + .../Editor/Collab/Views/StatusView.cs.meta | 11 + .../Editor/Resources.meta | 8 + .../Editor/Resources/Styles.meta | 8 + .../Resources/Styles/CollabHistoryCommon.uss | 259 + .../Resources/Styles/CollabHistoryCommon.uss.meta | 10 + .../Editor/Resources/Styles/CollabHistoryDark.uss | 86 + .../Resources/Styles/CollabHistoryDark.uss.meta | 10 + .../Editor/Resources/Styles/CollabHistoryLight.uss | 86 + .../Resources/Styles/CollabHistoryLight.uss.meta | 10 + .../Editor/Unity.CollabProxy.Editor.asmdef | 7 + .../Editor/Unity.CollabProxy.Editor.asmdef.meta | 7 + .../com.unity.collab-proxy@1.2.16/LICENSE.md | 31 + .../com.unity.collab-proxy@1.2.16/LICENSE.md.meta | 7 + .../com.unity.collab-proxy@1.2.16/README.md | 16 + .../com.unity.collab-proxy@1.2.16/README.md.meta | 7 + .../com.unity.collab-proxy@1.2.16/Tests.meta | 8 + .../Tests/Editor.meta | 8 + .../Tests/Editor/HistoryTests.cs | 583 + .../Tests/Editor/HistoryTests.cs.meta | 11 + .../Editor/Unity.CollabProxy.EditorTests.asmdef | 13 + .../Unity.CollabProxy.EditorTests.asmdef.meta | 7 + .../com.unity.collab-proxy@1.2.16/package.json | 21 + .../package.json.meta | 7 + .../com.unity.ext.nunit@1.0.0/.gitlab-ci.yml | 15 + .../com.unity.ext.nunit@1.0.0/CHANGELOG.md | 11 + .../com.unity.ext.nunit@1.0.0/CHANGELOG.md.meta | 7 + .../Documentation~/ext.nunit.md | 6 + .../com.unity.ext.nunit@1.0.0/LICENSE.md | 19 + .../com.unity.ext.nunit@1.0.0/LICENSE.md.meta | 7 + .../com.unity.ext.nunit@1.0.0/README.md | 6 + .../com.unity.ext.nunit@1.0.0/README.md.meta | 7 + .../com.unity.ext.nunit@1.0.0/net35.meta | 8 + .../net35/unity-custom.meta | 8 + .../This is a custom build DONT include.txt | 4 + .../This is a custom build DONT include.txt.meta | 7 + .../net35/unity-custom/nunit.framework.dll | Bin 0 -> 339968 bytes .../net35/unity-custom/nunit.framework.dll.mdb | Bin 0 -> 176962 bytes .../unity-custom/nunit.framework.dll.mdb.meta | 7 + .../net35/unity-custom/nunit.framework.dll.meta | 37 + .../net35/unity-custom/nunit.framework.pdb | Bin 0 -> 1531392 bytes .../net35/unity-custom/nunit.framework.pdb.meta | 7 + .../net35/unity-custom/nunit.framework.xml | 18101 +++++++++++++++++++ .../net35/unity-custom/nunit.framework.xml.meta | 7 + .../com.unity.ext.nunit@1.0.0/package.json | 16 + .../com.unity.ext.nunit@1.0.0/package.json.meta | 7 + .../com.unity.ide.rider@1.1.4/.editorconfig | 6 + .../com.unity.ide.rider@1.1.4/CHANGELOG.md | 74 + .../com.unity.ide.rider@1.1.4/CHANGELOG.md.meta | 7 + .../com.unity.ide.rider@1.1.4/CONTRIBUTING.md | 6 + .../com.unity.ide.rider@1.1.4/CONTRIBUTING.md.meta | 7 + .../Documentation~/README.md | 4 + .../com.unity.ide.rider@1.1.4/LICENSE.md | 21 + .../com.unity.ide.rider@1.1.4/LICENSE.md.meta | 7 + .../com.unity.ide.rider@1.1.4/Rider.meta | 8 + .../com.unity.ide.rider@1.1.4/Rider/Editor.meta | 8 + .../Rider/Editor/Discovery.cs | 457 + .../Rider/Editor/Discovery.cs.meta | 11 + .../Rider/Editor/EditorPluginInterop.cs | 136 + .../Rider/Editor/EditorPluginInterop.cs.meta | 11 + .../Rider/Editor/LoggingLevel.cs | 22 + .../Rider/Editor/LoggingLevel.cs.meta | 11 + .../Rider/Editor/PluginSettings.cs | 128 + .../Rider/Editor/PluginSettings.cs.meta | 11 + .../Rider/Editor/PostProcessors.meta | 8 + .../PostProcessors/RiderAssetPostprocessor.cs | 16 + .../PostProcessors/RiderAssetPostprocessor.cs.meta | 11 + .../Rider/Editor/ProjectGeneration.meta | 8 + .../Editor/ProjectGeneration/FileIOProvider.cs | 23 + .../ProjectGeneration/FileIOProvider.cs.meta | 11 + .../Rider/Editor/ProjectGeneration/GUIDProvider.cs | 16 + .../Editor/ProjectGeneration/GUIDProvider.cs.meta | 11 + .../Editor/ProjectGeneration/ProjectGeneration.cs | 1090 ++ .../ProjectGeneration/ProjectGeneration.cs.meta | 11 + .../Rider/Editor/RiderInitializer.cs | 38 + .../Rider/Editor/RiderInitializer.cs.meta | 11 + .../Rider/Editor/RiderScriptEditor.cs | 404 + .../Rider/Editor/RiderScriptEditor.cs.meta | 11 + .../Rider/Editor/RiderScriptEditorData.cs | 29 + .../Rider/Editor/RiderScriptEditorData.cs.meta | 11 + .../Rider/Editor/UnitTesting.meta | 8 + .../Rider/Editor/UnitTesting/CallbackData.cs | 27 + .../Rider/Editor/UnitTesting/CallbackData.cs.meta | 11 + .../Editor/UnitTesting/CallbackInitializer.cs | 18 + .../Editor/UnitTesting/CallbackInitializer.cs.meta | 11 + .../Rider/Editor/UnitTesting/RiderTestRunner.cs | 47 + .../Editor/UnitTesting/RiderTestRunner.cs.meta | 11 + .../Rider/Editor/UnitTesting/TestEvent.cs | 31 + .../Rider/Editor/UnitTesting/TestEvent.cs.meta | 11 + .../Rider/Editor/UnitTesting/TestsCallback.cs | 83 + .../Rider/Editor/UnitTesting/TestsCallback.cs.meta | 11 + .../Rider/Editor/Util.meta | 8 + .../Rider/Editor/Util/CommandLineParser.cs | 36 + .../Rider/Editor/Util/CommandLineParser.cs.meta | 11 + .../Rider/Editor/Util/FileSystemUtil.cs | 66 + .../Rider/Editor/Util/FileSystemUtil.cs.meta | 11 + .../Rider/Editor/Util/LibcNativeInterop.cs | 12 + .../Rider/Editor/Util/LibcNativeInterop.cs.meta | 11 + .../Rider/Editor/Util/RiderMenu.cs | 25 + .../Rider/Editor/Util/RiderMenu.cs.meta | 11 + .../Rider/Editor/Util/UnityUtils.cs | 20 + .../Rider/Editor/Util/UnityUtils.cs.meta | 11 + .../Rider/Editor/com.unity.ide.rider.asmdef | 22 + .../Rider/Editor/com.unity.ide.rider.asmdef.meta | 7 + .../com.unity.ide.rider@1.1.4/package.json | 19 + .../com.unity.ide.rider@1.1.4/package.json.meta | 7 + .../com.unity.ide.vscode@1.1.4/CHANGELOG.md | 55 + .../com.unity.ide.vscode@1.1.4/CHANGELOG.md.meta | 7 + .../com.unity.ide.vscode@1.1.4/CONTRIBUTING.md | 6 + .../CONTRIBUTING.md.meta | 7 + .../Documentation~/README.md | 4 + .../com.unity.ide.vscode@1.1.4/Editor.meta | 8 + .../Editor/ProjectGeneration.meta | 8 + .../ProjectGeneration/AssemblyNameProvider.cs | 50 + .../ProjectGeneration/AssemblyNameProvider.cs.meta | 11 + .../Editor/ProjectGeneration/FileIO.cs | 38 + .../Editor/ProjectGeneration/FileIO.cs.meta | 11 + .../Editor/ProjectGeneration/GUIDGenerator.cs | 21 + .../Editor/ProjectGeneration/GUIDGenerator.cs.meta | 11 + .../Editor/ProjectGeneration/ProjectGeneration.cs | 718 + .../ProjectGeneration/ProjectGeneration.cs.meta | 11 + .../Editor/Unity.com.unity.vscode.Editor.asmdef | 9 + .../Unity.com.unity.vscode.Editor.asmdef.meta | 7 + .../Editor/VSCodeDiscovery.cs | 137 + .../Editor/VSCodeDiscovery.cs.meta | 11 + .../Editor/VSCodeScriptEditor.cs | 257 + .../Editor/VSCodeScriptEditor.cs.meta | 11 + .../com.unity.ide.vscode@1.1.4/LICENSE.md | 21 + .../com.unity.ide.vscode@1.1.4/LICENSE.md.meta | 7 + .../com.unity.ide.vscode@1.1.4/package.json | 17 + .../com.unity.ide.vscode@1.1.4/package.json.meta | 7 + .../com.unity.test-framework@1.1.11/CHANGELOG.md | 112 + .../CHANGELOG.md.meta | 7 + .../CONTRIBUTING.md | 9 + .../CONTRIBUTING.md.meta | 7 + .../Documentation~/TableOfContents.md | 66 + .../Documentation~/edit-mode-vs-play-mode-tests.md | 53 + .../Documentation~/extending.md | 10 + .../Documentation~/extension-get-test-results.md | 45 + .../Documentation~/extension-retrieve-test-list.md | 13 + .../Documentation~/extension-run-tests.md | 72 + .../Documentation~/getting-started.md | 18 + .../images/editmode-create-test-script.png | Bin 0 -> 17180 bytes .../Documentation~/images/editmode-run-test.png | Bin 0 -> 30337 bytes .../Documentation~/images/editmode-run-tests.png | Bin 0 -> 25209 bytes .../Documentation~/images/editmode-tab.png | Bin 0 -> 25740 bytes .../Documentation~/images/import-settings.png | Bin 0 -> 48913 bytes .../Documentation~/images/new-test-script.png | Bin 0 -> 25943 bytes .../Documentation~/images/playmode-enable-all.png | Bin 0 -> 43884 bytes .../images/playmode-results-standalone.png | Bin 0 -> 30034 bytes .../images/playmode-run-standalone.png | Bin 0 -> 17677 bytes .../Documentation~/images/playmode-tab.png | Bin 0 -> 42321 bytes .../Documentation~/images/test-runner-window.png | Bin 0 -> 84317 bytes .../Documentation~/images/test-templates.png | Bin 0 -> 28115 bytes .../images/tests-folder-assembly.png | Bin 0 -> 15397 bytes .../Documentation~/index.md | 54 + .../Documentation~/manual.md | 80 + .../reference-actions-outside-tests.md | 98 + .../reference-attribute-conditionalignore.md | 39 + .../reference-attribute-testmustexpectalllogs.md | 11 + .../reference-attribute-testplayerbuildmodifier.md | 105 + .../reference-attribute-testruncallback.md | 46 + .../reference-attribute-unityplatform.md | 35 + .../reference-attribute-unitytest.md | 51 + .../Documentation~/reference-command-line.md | 116 + .../Documentation~/reference-comparer-color.md | 47 + .../Documentation~/reference-comparer-equals.md | 27 + .../Documentation~/reference-comparer-float.md | 46 + .../reference-comparer-quaternion.md | 46 + .../Documentation~/reference-comparer-vector2.md | 47 + .../Documentation~/reference-comparer-vector3.md | 47 + .../Documentation~/reference-comparer-vector4.md | 47 + .../Documentation~/reference-custom-assertion.md | 66 + .../Documentation~/reference-custom-attributes.md | 15 + .../Documentation~/reference-custom-constraints.md | 31 + .../reference-custom-equality-comparers.md | 32 + .../reference-custom-yield-instructions.md | 60 + .../Documentation~/reference-execution-settings.md | 17 + .../Documentation~/reference-filter.md | 15 + .../Documentation~/reference-icallbacks.md | 48 + .../Documentation~/reference-ierror-callbacks.md | 9 + .../Documentation~/reference-itest-adaptor.md | 31 + .../reference-itest-result-adaptor.md | 25 + .../Documentation~/reference-itest-run-settings.md | 29 + .../Documentation~/reference-recompile-scripts.md | 22 + .../Documentation~/reference-setup-and-cleanup.md | 91 + .../Documentation~/reference-test-runner-api.md | 23 + .../Documentation~/reference-test-utils.md | 40 + .../reference-tests-monobehaviour.md | 51 + .../reference-tests-parameterized.md | 18 + .../reference-wait-for-domain-reload.md | 19 + .../Documentation~/resources.md | 6 + .../workflow-create-playmode-test.md | 28 + .../workflow-create-test-assembly.md | 17 + .../Documentation~/workflow-create-test.md | 36 + .../workflow-run-playmode-test-standalone.md | 21 + .../Documentation~/workflow-run-test.md | 19 + .../com.unity.test-framework@1.1.11/LICENSE.md | 5 + .../LICENSE.md.meta | 7 + .../UnityEditor.TestRunner.meta | 8 + .../UnityEditor.TestRunner/Api.meta | 8 + .../Api/CallbacksDelegator.cs | 136 + .../Api/CallbacksDelegator.cs.meta | 11 + .../Api/CallbacksDelegatorListener.cs | 28 + .../Api/CallbacksDelegatorListener.cs.meta | 11 + .../UnityEditor.TestRunner/Api/CallbacksHolder.cs | 69 + .../Api/CallbacksHolder.cs.meta | 11 + .../Api/ExecutionSettings.cs | 57 + .../Api/ExecutionSettings.cs.meta | 11 + .../UnityEditor.TestRunner/Api/Filter.cs | 81 + .../UnityEditor.TestRunner/Api/Filter.cs.meta | 11 + .../UnityEditor.TestRunner/Api/ICallbacks.cs | 10 + .../UnityEditor.TestRunner/Api/ICallbacks.cs.meta | 11 + .../Api/ICallbacksDelegator.cs | 18 + .../Api/ICallbacksDelegator.cs.meta | 11 + .../UnityEditor.TestRunner/Api/ICallbacksHolder.cs | 10 + .../Api/ICallbacksHolder.cs.meta | 11 + .../UnityEditor.TestRunner/Api/IErrorCallbacks.cs | 7 + .../Api/IErrorCallbacks.cs.meta | 11 + .../UnityEditor.TestRunner/Api/ITestAdaptor.cs | 31 + .../Api/ITestAdaptor.cs.meta | 11 + .../Api/ITestAdaptorFactory.cs | 18 + .../Api/ITestAdaptorFactory.cs.meta | 11 + .../Api/ITestResultAdaptor.cs | 86 + .../Api/ITestResultAdaptor.cs.meta | 11 + .../UnityEditor.TestRunner/Api/ITestRunSettings.cs | 9 + .../Api/ITestRunSettings.cs.meta | 11 + .../UnityEditor.TestRunner/Api/ITestRunnerApi.cs | 12 + .../Api/ITestRunnerApi.cs.meta | 11 + .../Api/ITestTreeRebuildCallbacks.cs | 7 + .../Api/ITestTreeRebuildCallbacks.cs.meta | 11 + .../UnityEditor.TestRunner/Api/RunState.cs | 11 + .../UnityEditor.TestRunner/Api/RunState.cs.meta | 11 + .../UnityEditor.TestRunner/Api/TestAdaptor.cs | 142 + .../UnityEditor.TestRunner/Api/TestAdaptor.cs.meta | 11 + .../Api/TestAdaptorFactory.cs | 91 + .../Api/TestAdaptorFactory.cs.meta | 11 + .../UnityEditor.TestRunner/Api/TestMode.cs | 11 + .../UnityEditor.TestRunner/Api/TestMode.cs.meta | 11 + .../Api/TestResultAdaptor.cs | 87 + .../Api/TestResultAdaptor.cs.meta | 11 + .../UnityEditor.TestRunner/Api/TestRunnerApi.cs | 120 + .../Api/TestRunnerApi.cs.meta | 11 + .../UnityEditor.TestRunner/Api/TestStatus.cs | 10 + .../UnityEditor.TestRunner/Api/TestStatus.cs.meta | 11 + .../UnityEditor.TestRunner/AssemblyInfo.cs | 15 + .../UnityEditor.TestRunner/AssemblyInfo.cs.meta | 11 + .../UnityEditor.TestRunner/CommandLineParser.meta | 8 + .../CommandLineParser/CommandLineOption.cs | 45 + .../CommandLineParser/CommandLineOption.cs.meta | 11 + .../CommandLineParser/CommandLineOptionSet.cs | 49 + .../CommandLineParser/CommandLineOptionSet.cs.meta | 11 + .../CommandLineParser/ICommandLineOption.cs | 8 + .../CommandLineParser/ICommandLineOption.cs.meta | 11 + .../UnityEditor.TestRunner/CommandLineTest.meta | 8 + .../CommandLineTest/Executer.cs | 134 + .../CommandLineTest/Executer.cs.meta | 11 + .../CommandLineTest/ExecutionSettings.cs | 11 + .../CommandLineTest/ExecutionSettings.cs.meta | 11 + .../CommandLineTest/ExitCallbacks.cs | 53 + .../CommandLineTest/ExitCallbacks.cs.meta | 11 + .../CommandLineTest/ISettingsBuilder.cs | 10 + .../CommandLineTest/ISettingsBuilder.cs.meta | 11 + .../CommandLineTest/LogSavingCallbacks.cs | 29 + .../CommandLineTest/LogSavingCallbacks.cs.meta | 11 + .../CommandLineTest/LogWriter.cs | 92 + .../CommandLineTest/LogWriter.cs.meta | 11 + .../CommandLineTest/ResultsSavingCallbacks.cs | 50 + .../CommandLineTest/ResultsSavingCallbacks.cs.meta | 11 + .../CommandLineTest/ResultsWriter.cs | 103 + .../CommandLineTest/ResultsWriter.cs.meta | 11 + .../CommandLineTest/RunData.cs | 8 + .../CommandLineTest/RunData.cs.meta | 11 + .../CommandLineTest/RunSettings.cs | 29 + .../CommandLineTest/RunSettings.cs.meta | 11 + .../CommandLineTest/SettingsBuilder.cs | 185 + .../CommandLineTest/SettingsBuilder.cs.meta | 11 + .../CommandLineTest/SetupException.cs | 23 + .../CommandLineTest/SetupException.cs.meta | 11 + .../CommandLineTest/TestStarter.cs | 80 + .../CommandLineTest/TestStarter.cs.meta | 11 + .../UnityEditor.TestRunner/GUI.meta | 8 + .../GUI/AssetsDatabaseHelper.cs | 11 + .../GUI/AssetsDatabaseHelper.cs.meta | 11 + .../UnityEditor.TestRunner/GUI/GuiHelper.cs | 101 + .../UnityEditor.TestRunner/GUI/GuiHelper.cs.meta | 11 + .../GUI/IAssetsDatabaseHelper.cs | 7 + .../GUI/IAssetsDatabaseHelper.cs.meta | 11 + .../UnityEditor.TestRunner/GUI/IGuiHelper.cs | 13 + .../UnityEditor.TestRunner/GUI/IGuiHelper.cs.meta | 11 + .../GUI/TestListBuilder.meta | 8 + .../GUI/TestListBuilder/RenderingOptions.cs | 12 + .../GUI/TestListBuilder/RenderingOptions.cs.meta | 11 + .../GUI/TestListBuilder/ResultSummarizer.cs | 175 + .../GUI/TestListBuilder/ResultSummarizer.cs.meta | 11 + .../GUI/TestListBuilder/TestFilterSettings.cs | 105 + .../GUI/TestListBuilder/TestFilterSettings.cs.meta | 11 + .../GUI/TestListBuilder/TestTreeViewBuilder.cs | 111 + .../TestListBuilder/TestTreeViewBuilder.cs.meta | 11 + .../GUI/TestListGuiHelper.cs | 135 + .../GUI/TestListGuiHelper.cs.meta | 11 + .../GUI/TestListTreeView.meta | 8 + .../GUI/TestListTreeView/Icons.cs | 24 + .../GUI/TestListTreeView/Icons.cs.meta | 11 + .../TestListTreeView/TestListTreeViewDataSource.cs | 99 + .../TestListTreeViewDataSource.cs.meta | 11 + .../GUI/TestListTreeView/TestListTreeViewGUI.cs | 11 + .../TestListTreeView/TestListTreeViewGUI.cs.meta | 11 + .../GUI/TestListTreeView/TestTreeViewItem.cs | 118 + .../GUI/TestListTreeView/TestTreeViewItem.cs.meta | 11 + .../UnityEditor.TestRunner/GUI/TestRunnerResult.cs | 149 + .../GUI/TestRunnerResult.cs.meta | 11 + .../GUI/TestRunnerUIFilter.cs | 178 + .../GUI/TestRunnerUIFilter.cs.meta | 11 + .../UnityEditor.TestRunner/GUI/Views.meta | 8 + .../GUI/Views/EditModeTestListGUI.cs | 93 + .../GUI/Views/EditModeTestListGUI.cs.meta | 11 + .../GUI/Views/PlayModeTestListGUI.cs | 111 + .../GUI/Views/PlayModeTestListGUI.cs.meta | 11 + .../GUI/Views/TestListGUIBase.cs | 525 + .../GUI/Views/TestListGUIBase.cs.meta | 11 + .../UnityEditor.TestRunner/NUnitExtension.meta | 8 + .../NUnitExtension/Attributes.meta | 8 + .../Attributes/AssetPipelineIgnore.cs | 63 + .../Attributes/AssetPipelineIgnore.cs.meta | 11 + .../Attributes/ITestPlayerBuildModifier.cs | 7 + .../Attributes/ITestPlayerBuildModifier.cs.meta | 11 + .../Attributes/TestPlayerBuildModifierAttribute.cs | 25 + .../TestPlayerBuildModifierAttribute.cs.meta | 11 + .../NUnitExtension/TestRunnerStateSerializer.cs | 162 + .../TestRunnerStateSerializer.cs.meta | 11 + .../RequireApiProfileAttribute.cs | 32 + .../RequireApiProfileAttribute.cs.meta | 11 + .../RequirePlatformSupportAttribute.cs | 33 + .../RequirePlatformSupportAttribute.cs.meta | 11 + .../TestBuildAssemblyFilter.cs | 22 + .../TestBuildAssemblyFilter.cs.meta | 11 + .../UnityEditor.TestRunner/TestLaunchers.meta | 8 + .../TestLaunchers/AttributeFinderBase.cs | 104 + .../TestLaunchers/AttributeFinderBase.cs.meta | 11 + .../TestLaunchers/EditModeLauncher.cs | 160 + .../TestLaunchers/EditModeLauncher.cs.meta | 11 + .../EditModeLauncherContextSettings.cs | 31 + .../EditModeLauncherContextSettings.cs.meta | 11 + .../TestLaunchers/PlatformSetup.meta | 8 + .../PlatformSetup/AndroidPlatformSetup.cs | 66 + .../PlatformSetup/AndroidPlatformSetup.cs.meta | 11 + .../PlatformSetup/ApplePlatformSetup.cs | 42 + .../PlatformSetup/ApplePlatformSetup.cs.meta | 11 + .../TestLaunchers/PlatformSetup/IPlatformSetup.cs | 11 + .../PlatformSetup/IPlatformSetup.cs.meta | 11 + .../PlatformSetup/LuminPlatformSetup.cs | 50 + .../PlatformSetup/LuminPlatformSetup.cs.meta | 11 + .../PlatformSetup/PlatformSpecificSetup.cs | 117 + .../PlatformSetup/PlatformSpecificSetup.cs.meta | 11 + .../PlatformSetup/SwitchPlatformSetup.cs | 41 + .../PlatformSetup/SwitchPlatformSetup.cs.meta | 11 + .../PlatformSetup/UwpPlatformSetup.cs | 52 + .../PlatformSetup/UwpPlatformSetup.cs.meta | 11 + .../PlatformSetup/XboxOnePlatformSetup.cs | 47 + .../PlatformSetup/XboxOnePlatformSetup.cs.meta | 11 + .../TestLaunchers/PlayerLauncher.cs | 216 + .../TestLaunchers/PlayerLauncher.cs.meta | 11 + .../TestLaunchers/PlayerLauncherBuildOptions.cs | 23 + .../PlayerLauncherBuildOptions.cs.meta | 11 + .../TestLaunchers/PlayerLauncherContextSettings.cs | 112 + .../PlayerLauncherContextSettings.cs.meta | 11 + .../TestLaunchers/PlaymodeLauncher.cs | 133 + .../TestLaunchers/PlaymodeLauncher.cs.meta | 11 + .../PostbuildCleanupAttributeFinder.cs | 9 + .../PostbuildCleanupAttributeFinder.cs.meta | 11 + .../TestLaunchers/PrebuildSetupAttributeFinder.cs | 9 + .../PrebuildSetupAttributeFinder.cs.meta | 11 + .../TestLaunchers/RemotePlayerLogController.cs | 83 + .../RemotePlayerLogController.cs.meta | 11 + .../TestLaunchers/RemotePlayerTestController.cs | 110 + .../RemotePlayerTestController.cs.meta | 11 + .../TestLaunchers/RemoteTestResultReciever.cs | 22 + .../TestLaunchers/RemoteTestResultReciever.cs.meta | 11 + .../TestLaunchers/RuntimeTestLauncherBase.cs | 92 + .../TestLaunchers/RuntimeTestLauncherBase.cs.meta | 11 + .../TestLaunchers/TestLauncherBase.cs | 85 + .../TestLaunchers/TestLauncherBase.cs.meta | 11 + .../UnityEditor.TestRunner/TestResultSerializer.cs | 71 + .../TestResultSerializer.cs.meta | 11 + .../UnityEditor.TestRunner/TestRun.meta | 8 + .../UnityEditor.TestRunner/TestRun/Tasks.meta | 8 + .../TestRun/Tasks/BuildActionTaskBase.cs | 86 + .../TestRun/Tasks/BuildActionTaskBase.cs.meta | 11 + .../TestRun/Tasks/BuildTestTreeTask.cs | 61 + .../TestRun/Tasks/BuildTestTreeTask.cs.meta | 11 + .../TestRun/Tasks/CleanupVerificationTask.cs | 47 + .../TestRun/Tasks/CleanupVerificationTask.cs.meta | 11 + .../TestRun/Tasks/FileCleanupVerifierTaskBase.cs | 14 + .../Tasks/FileCleanupVerifierTaskBase.cs.meta | 11 + .../TestRun/Tasks/LegacyEditModeRunTask.cs | 26 + .../TestRun/Tasks/LegacyEditModeRunTask.cs.meta | 11 + .../TestRun/Tasks/LegacyPlayModeRunTask.cs | 26 + .../TestRun/Tasks/LegacyPlayModeRunTask.cs.meta | 11 + .../TestRun/Tasks/LegacyPlayerRunTask.cs | 18 + .../TestRun/Tasks/LegacyPlayerRunTask.cs.meta | 11 + .../TestRun/Tasks/PerformUndoTask.cs | 39 + .../TestRun/Tasks/PerformUndoTask.cs.meta | 11 + .../TestRun/Tasks/PrebuildSetupTask.cs | 20 + .../TestRun/Tasks/PrebuildSetupTask.cs.meta | 11 + .../RegisterFilesForCleanupVerificationTask.cs | 13 + ...RegisterFilesForCleanupVerificationTask.cs.meta | 11 + .../TestRun/Tasks/SaveModiedSceneTask.cs | 22 + .../TestRun/Tasks/SaveModiedSceneTask.cs.meta | 11 + .../TestRun/Tasks/SaveUndoIndexTask.cs | 15 + .../TestRun/Tasks/SaveUndoIndexTask.cs.meta | 11 + .../TestRun/Tasks/TestTaskBase.cs | 16 + .../TestRun/Tasks/TestTaskBase.cs.meta | 11 + .../UnityEditor.TestRunner/TestRun/TestJobData.cs | 49 + .../TestRun/TestJobData.cs.meta | 11 + .../TestRun/TestJobDataHolder.cs | 28 + .../TestRun/TestJobDataHolder.cs.meta | 11 + .../TestRun/TestJobRunner.cs | 166 + .../TestRun/TestJobRunner.cs.meta | 11 + .../TestRun/TestRunCanceledException.cs | 9 + .../TestRun/TestRunCanceledException.cs.meta | 11 + .../UnityEditor.TestRunner/TestRunner.meta | 8 + .../TestRunner/Callbacks.meta | 8 + .../TestRunner/Callbacks/EditModeRunnerCallback.cs | 178 + .../Callbacks/EditModeRunnerCallback.cs.meta | 11 + .../TestRunner/Callbacks/RerunCallback.cs | 86 + .../TestRunner/Callbacks/RerunCallback.cs.meta | 11 + .../TestRunner/Callbacks/RerunCallbackData.cs | 15 + .../TestRunner/Callbacks/RerunCallbackData.cs.meta | 11 + .../Callbacks/RerunCallbackInitializer.cs | 17 + .../Callbacks/RerunCallbackInitializer.cs.meta | 11 + .../TestRunner/Callbacks/TestRunnerCallback.cs | 37 + .../Callbacks/TestRunnerCallback.cs.meta | 11 + .../TestRunner/Callbacks/WindowResultUpdater.cs | 44 + .../Callbacks/WindowResultUpdater.cs.meta | 11 + .../TestRunner/EditModePCHelper.cs | 32 + .../TestRunner/EditModePCHelper.cs.meta | 11 + .../TestRunner/EditModeRunner.cs | 438 + .../TestRunner/EditModeRunner.cs.meta | 11 + .../TestRunner/EditmodeWorkItemFactory.cs | 14 + .../TestRunner/EditmodeWorkItemFactory.cs.meta | 11 + .../TestRunner/EditorEnumeratorTestWorkItem.cs | 179 + .../EditorEnumeratorTestWorkItem.cs.meta | 11 + .../TestRunner/EnumeratorStepHelper.cs | 51 + .../TestRunner/EnumeratorStepHelper.cs.meta | 11 + .../TestRunner/Messages.meta | 8 + .../TestRunner/Messages/EnterPlayMode.cs | 39 + .../TestRunner/Messages/EnterPlayMode.cs.meta | 11 + .../TestRunner/Messages/ExitPlayMode.cs | 32 + .../TestRunner/Messages/ExitPlayMode.cs.meta | 11 + .../TestRunner/Messages/RecompileScripts.cs | 63 + .../TestRunner/Messages/RecompileScripts.cs.meta | 11 + .../TestRunner/Messages/WaitForDomainReload.cs | 44 + .../Messages/WaitForDomainReload.cs.meta | 11 + .../UnityEditor.TestRunner/TestRunner/Utils.meta | 8 + .../TestRunner/Utils/CachingTestListProvider.cs | 48 + .../Utils/CachingTestListProvider.cs.meta | 11 + .../TestRunner/Utils/EditorAssembliesProxy.cs | 13 + .../TestRunner/Utils/EditorAssembliesProxy.cs.meta | 11 + .../TestRunner/Utils/EditorAssemblyWrapper.cs | 18 + .../TestRunner/Utils/EditorAssemblyWrapper.cs.meta | 11 + .../Utils/EditorCompilationInterfaceProxy.cs | 17 + .../Utils/EditorCompilationInterfaceProxy.cs.meta | 11 + .../Utils/EditorLoadedTestAssemblyProvider.cs | 69 + .../Utils/EditorLoadedTestAssemblyProvider.cs.meta | 11 + .../TestRunner/Utils/IEditorAssembliesProxy.cs | 9 + .../Utils/IEditorAssembliesProxy.cs.meta | 11 + .../Utils/IEditorCompilationInterfaceProxy.cs | 10 + .../Utils/IEditorCompilationInterfaceProxy.cs.meta | 11 + .../Utils/IEditorLoadedTestAssemblyProvider.cs | 12 + .../IEditorLoadedTestAssemblyProvider.cs.meta | 11 + .../TestRunner/Utils/ITestListCache.cs | 13 + .../TestRunner/Utils/ITestListCache.cs.meta | 11 + .../TestRunner/Utils/ITestListCacheData.cs | 13 + .../TestRunner/Utils/ITestListCacheData.cs.meta | 11 + .../TestRunner/Utils/ITestListProvider.cs | 11 + .../TestRunner/Utils/ITestListProvider.cs.meta | 11 + .../TestRunner/Utils/TestListCache.cs | 56 + .../TestRunner/Utils/TestListCache.cs.meta | 11 + .../TestRunner/Utils/TestListCacheData.cs | 27 + .../TestRunner/Utils/TestListCacheData.cs.meta | 11 + .../TestRunner/Utils/TestListJob.cs | 36 + .../TestRunner/Utils/TestListJob.cs.meta | 11 + .../TestRunner/Utils/TestListProvider.cs | 42 + .../TestRunner/Utils/TestListProvider.cs.meta | 11 + .../UnityEditor.TestRunner/TestRunnerWindow.cs | 263 + .../TestRunnerWindow.cs.meta | 11 + .../TestRunnerWindowSettings.cs | 26 + .../TestRunnerWindowSettings.cs.meta | 11 + .../UnityEditor.TestRunner/TestSettings.meta | 8 + .../TestSettings/ITestSettings.cs | 22 + .../TestSettings/ITestSettings.cs.meta | 11 + .../TestSettings/ITestSettingsDeserializer.cs | 7 + .../TestSettings/ITestSettingsDeserializer.cs.meta | 11 + .../TestSettings/TestSettings.cs | 160 + .../TestSettings/TestSettings.cs.meta | 11 + .../TestSettings/TestSettingsDeserializer.cs | 130 + .../TestSettings/TestSettingsDeserializer.cs.meta | 11 + .../UnityEditor.TestRunner.asmdef | 21 + .../UnityEditor.TestRunner.asmdef.meta | 7 + .../UnityEditor.TestRunner/UnityTestProtocol.meta | 8 + .../AssemblyCompilationErrorsMessage.cs | 13 + .../AssemblyCompilationErrorsMessage.cs.meta | 11 + .../UnityTestProtocol/ITestRunnerApiMapper.cs | 15 + .../UnityTestProtocol/ITestRunnerApiMapper.cs.meta | 11 + .../UnityTestProtocol/IUtpLogger.cs | 7 + .../UnityTestProtocol/IUtpLogger.cs.meta | 11 + .../UnityTestProtocol/IUtpMessageReporter.cs | 14 + .../UnityTestProtocol/IUtpMessageReporter.cs.meta | 11 + .../UnityTestProtocol/Message.cs | 29 + .../UnityTestProtocol/Message.cs.meta | 11 + .../UnityTestProtocol/TestFinishedMessage.cs | 18 + .../UnityTestProtocol/TestFinishedMessage.cs.meta | 11 + .../UnityTestProtocol/TestPlanMessage.cs | 14 + .../UnityTestProtocol/TestPlanMessage.cs.meta | 11 + .../UnityTestProtocol/TestRunnerApiMapper.cs | 99 + .../UnityTestProtocol/TestRunnerApiMapper.cs.meta | 11 + .../UnityTestProtocol/TestStartedMessage.cs | 15 + .../UnityTestProtocol/TestStartedMessage.cs.meta | 11 + .../UnityTestProtocol/TestState.cs | 13 + .../UnityTestProtocol/TestState.cs.meta | 11 + .../UnityTestProtocol/UnityTestProtocolListener.cs | 35 + .../UnityTestProtocolListener.cs.meta | 11 + .../UnityTestProtocol/UnityTestProtocolStarter.cs | 37 + .../UnityTestProtocolStarter.cs.meta | 11 + .../UnityTestProtocol/UtpDebuglogger.cs | 13 + .../UnityTestProtocol/UtpDebuglogger.cs.meta | 11 + .../UnityTestProtocol/UtpMessageReporter.cs | 57 + .../UnityTestProtocol/UtpMessageReporter.cs.meta | 11 + .../UnityEngine.TestRunner.meta | 8 + .../UnityEngine.TestRunner/AssemblyInfo.cs | 16 + .../UnityEngine.TestRunner/AssemblyInfo.cs.meta | 11 + .../UnityEngine.TestRunner/Assertions.meta | 8 + .../Assertions/AllocatingGCMemoryConstraint.cs | 83 + .../AllocatingGCMemoryConstraint.cs.meta | 11 + .../Assertions/ConstraintsExtensions.cs | 14 + .../Assertions/ConstraintsExtensions.cs.meta | 11 + .../Assertions/InvalidSignatureException.cs | 18 + .../Assertions/InvalidSignatureException.cs.meta | 11 + .../UnityEngine.TestRunner/Assertions/Is.cs | 10 + .../UnityEngine.TestRunner/Assertions/Is.cs.meta | 11 + .../UnityEngine.TestRunner/Assertions/LogAssert.cs | 39 + .../Assertions/LogAssert.cs.meta | 11 + .../Assertions/LogScope.meta | 8 + .../Assertions/LogScope/ILogScope.cs | 22 + .../Assertions/LogScope/ILogScope.cs.meta | 11 + .../Assertions/LogScope/LogEvent.cs | 18 + .../Assertions/LogScope/LogEvent.cs.meta | 11 + .../Assertions/LogScope/LogMatch.cs | 103 + .../Assertions/LogScope/LogMatch.cs.meta | 11 + .../Assertions/LogScope/LogScope.cs | 223 + .../Assertions/LogScope/LogScope.cs.meta | 11 + .../Assertions/UnexpectedLogMessageException.cs | 29 + .../UnexpectedLogMessageException.cs.meta | 11 + .../Assertions/UnhandledLogMessageException.cs | 35 + .../UnhandledLogMessageException.cs.meta | 11 + .../Assertions/UnityTestTimeoutException.cs | 28 + .../Assertions/UnityTestTimeoutException.cs.meta | 11 + .../UnityEngine.TestRunner/NUnitExtensions.meta | 8 + .../NUnitExtensions/ActionDelegator.cs | 79 + .../NUnitExtensions/ActionDelegator.cs.meta | 11 + .../NUnitExtensions/Attributes.meta | 8 + .../Attributes/ConditionalIgnoreAttribute.cs | 36 + .../Attributes/ConditionalIgnoreAttribute.cs.meta | 11 + .../NUnitExtensions/Attributes/TestEnumerator.cs | 52 + .../Attributes/TestEnumerator.cs.meta | 11 + .../Attributes/TestMustExpectAllLogsAttribute.cs | 28 + .../TestMustExpectAllLogsAttribute.cs.meta | 11 + .../Attributes/UnityCombinatorialStrategy.cs | 20 + .../Attributes/UnityCombinatorialStrategy.cs.meta | 11 + .../Attributes/UnityPlatformAttribute.cs | 56 + .../Attributes/UnityPlatformAttribute.cs.meta | 11 + .../Attributes/UnitySetUpAttribute.cs | 10 + .../Attributes/UnitySetUpAttribute.cs.meta | 11 + .../Attributes/UnityTearDownAttribute.cs | 10 + .../Attributes/UnityTearDownAttribute.cs.meta | 11 + .../Attributes/UnityTestAttribute.cs | 33 + .../Attributes/UnityTestAttribute.cs.meta | 11 + .../NUnitExtensions/BaseDelegator.cs | 58 + .../NUnitExtensions/BaseDelegator.cs.meta | 11 + .../NUnitExtensions/Commands.meta | 8 + .../Commands/BeforeAfterTestCommandBase.cs | 196 + .../Commands/BeforeAfterTestCommandBase.cs.meta | 11 + .../Commands/BeforeAfterTestCommandState.cs | 49 + .../Commands/BeforeAfterTestCommandState.cs.meta | 11 + .../EnumerableApplyChangesToContextCommand.cs | 34 + .../EnumerableApplyChangesToContextCommand.cs.meta | 11 + .../Commands/EnumerableRepeatedTestCommand.cs | 60 + .../Commands/EnumerableRepeatedTestCommand.cs.meta | 11 + .../Commands/EnumerableRetryTestCommand.cs | 60 + .../Commands/EnumerableRetryTestCommand.cs.meta | 11 + .../Commands/EnumerableSetUpTearDownCommand.cs | 44 + .../EnumerableSetUpTearDownCommand.cs.meta | 11 + .../Commands/EnumerableTestMethodCommand.cs | 86 + .../Commands/EnumerableTestMethodCommand.cs.meta | 11 + .../Commands/ImmediateEnumerableCommand.cs | 32 + .../Commands/ImmediateEnumerableCommand.cs.meta | 11 + .../Commands/OuterUnityTestActionCommand.cs | 49 + .../Commands/OuterUnityTestActionCommand.cs.meta | 11 + .../Commands/SetUpTearDownCommand.cs | 48 + .../Commands/SetUpTearDownCommand.cs.meta | 11 + .../NUnitExtensions/Commands/TestActionCommand.cs | 53 + .../Commands/TestActionCommand.cs.meta | 11 + .../Commands/TestCommandPcHelper.cs | 18 + .../Commands/TestCommandPcHelper.cs.meta | 11 + .../NUnitExtensions/ConstructDelegator.cs | 141 + .../NUnitExtensions/ConstructDelegator.cs.meta | 11 + .../NUnitExtensions/Filters.meta | 8 + .../NUnitExtensions/Filters/AssemblyNameFilter.cs | 25 + .../Filters/AssemblyNameFilter.cs.meta | 11 + .../Filters/CategoryFilterExtended.cs | 36 + .../Filters/CategoryFilterExtended.cs.meta | 11 + .../NUnitExtensions/IAsyncTestAssemblyBuilder.cs | 12 + .../IAsyncTestAssemblyBuilder.cs.meta | 11 + .../NUnitExtensions/IStateSerializer.cs | 12 + .../NUnitExtensions/IStateSerializer.cs.meta | 11 + .../NUnitExtensions/Runner.meta | 8 + .../NUnitExtensions/Runner/CompositeWorkItem.cs | 342 + .../Runner/CompositeWorkItem.cs.meta | 11 + .../Runner/CoroutineTestWorkItem.cs | 75 + .../Runner/CoroutineTestWorkItem.cs.meta | 11 + .../NUnitExtensions/Runner/DefaultTestWorkItem.cs | 96 + .../Runner/DefaultTestWorkItem.cs.meta | 11 + .../NUnitExtensions/Runner/FailCommand.cs | 34 + .../NUnitExtensions/Runner/FailCommand.cs.meta | 11 + .../Runner/IEnumerableTestMethodCommand.cs | 10 + .../Runner/IEnumerableTestMethodCommand.cs.meta | 11 + .../Runner/PlaymodeWorkItemFactory.cs | 13 + .../Runner/PlaymodeWorkItemFactory.cs.meta | 11 + .../Runner/RestoreTestContextAfterDomainReload.cs | 4 + .../RestoreTestContextAfterDomainReload.cs.meta | 11 + .../NUnitExtensions/Runner/TestCommandBuilder.cs | 127 + .../Runner/TestCommandBuilder.cs.meta | 11 + .../Runner/UnityLogCheckDelegatingCommand.cs | 143 + .../Runner/UnityLogCheckDelegatingCommand.cs.meta | 11 + .../Runner/UnityTestAssemblyRunner.cs | 98 + .../Runner/UnityTestAssemblyRunner.cs.meta | 11 + .../Runner/UnityTestExecutionContext.cs | 130 + .../Runner/UnityTestExecutionContext.cs.meta | 11 + .../NUnitExtensions/Runner/UnityWorkItem.cs | 113 + .../NUnitExtensions/Runner/UnityWorkItem.cs.meta | 11 + .../Runner/UnityWorkItemDataHolder.cs | 10 + .../Runner/UnityWorkItemDataHolder.cs.meta | 11 + .../NUnitExtensions/Runner/WorkItemFactory.cs | 28 + .../NUnitExtensions/Runner/WorkItemFactory.cs.meta | 11 + .../NUnitExtensions/TestExtensions.cs | 146 + .../NUnitExtensions/TestExtensions.cs.meta | 11 + .../NUnitExtensions/TestResultExtensions.cs | 77 + .../NUnitExtensions/TestResultExtensions.cs.meta | 11 + .../NUnitExtensions/UnityTestAssemblyBuilder.cs | 58 + .../UnityTestAssemblyBuilder.cs.meta | 11 + .../UnityEngine.TestRunner/TestRunner.meta | 8 + .../TestRunner/Callbacks.meta | 8 + .../TestRunner/Callbacks/PlayModeRunnerCallback.cs | 47 + .../Callbacks/PlayModeRunnerCallback.cs.meta | 11 + .../TestRunner/Callbacks/RemoteTestResultSender.cs | 151 + .../Callbacks/RemoteTestResultSender.cs.meta | 11 + .../TestRunner/Callbacks/TestResultRenderer.cs | 97 + .../Callbacks/TestResultRenderer.cs.meta | 11 + .../Callbacks/TestResultRendererCallback.cs | 36 + .../Callbacks/TestResultRendererCallback.cs.meta | 11 + .../TestRunner/ITestRunnerListener.cs | 26 + .../TestRunner/ITestRunnerListener.cs.meta | 11 + .../TestRunner/Messages.meta | 8 + .../Messages/IEditModeTestYieldInstruction.cs | 12 + .../Messages/IEditModeTestYieldInstruction.cs.meta | 11 + .../TestRunner/PlaymodeTestsController.cs | 129 + .../TestRunner/PlaymodeTestsController.cs.meta | 11 + .../TestRunner/PlaymodeTestsControllerSettings.cs | 36 + .../PlaymodeTestsControllerSettings.cs.meta | 11 + .../TestRunner/RemoteHelpers.meta | 8 + .../RemoteHelpers/IRemoteTestResultDataFactory.cs | 11 + .../IRemoteTestResultDataFactory.cs.meta | 11 + .../RemoteHelpers/PlayerConnectionMessageIds.cs | 14 + .../PlayerConnectionMessageIds.cs.meta | 11 + .../TestRunner/RemoteHelpers/RemoteTestData.cs | 56 + .../RemoteHelpers/RemoteTestData.cs.meta | 11 + .../RemoteHelpers/RemoteTestResultData.cs | 54 + .../RemoteHelpers/RemoteTestResultData.cs.meta | 11 + .../RemoteHelpers/RemoteTestResultDataFactory.cs | 51 + .../RemoteTestResultDataFactory.cs.meta | 11 + .../RemoteTestResultDataWithTestData.cs | 15 + .../RemoteTestResultDataWithTestData.cs.meta | 11 + .../TestRunner/SynchronousFilter.cs | 51 + .../TestRunner/SynchronousFilter.cs.meta | 11 + .../TestRunner/TestEnumeratorWrapper.cs | 51 + .../TestRunner/TestEnumeratorWrapper.cs.meta | 11 + .../TestRunner/TestListenerWrapper.cs | 30 + .../TestRunner/TestListenerWrapper.cs.meta | 11 + .../TestRunner/TestPlatform.cs | 21 + .../TestRunner/TestPlatform.cs.meta | 11 + .../TestRunner/TestRunnerFilter.cs | 203 + .../TestRunner/TestRunnerFilter.cs.meta | 11 + .../UnityEngine.TestRunner.asmdef | 13 + .../UnityEngine.TestRunner.asmdef.meta | 7 + .../UnityEngine.TestRunner/Utils.meta | 8 + .../Utils/AssemblyProvider.meta | 8 + .../Utils/AssemblyProvider/AssemblyLoadProxy.cs | 12 + .../AssemblyProvider/AssemblyLoadProxy.cs.meta | 11 + .../Utils/AssemblyProvider/AssemblyWrapper.cs | 30 + .../Utils/AssemblyProvider/AssemblyWrapper.cs.meta | 11 + .../Utils/AssemblyProvider/IAssemblyLoadProxy.cs | 7 + .../AssemblyProvider/IAssemblyLoadProxy.cs.meta | 11 + .../Utils/AssemblyProvider/IAssemblyWrapper.cs | 11 + .../AssemblyProvider/IAssemblyWrapper.cs.meta | 11 + .../AssemblyProvider/IScriptingRuntimeProxy.cs | 7 + .../IScriptingRuntimeProxy.cs.meta | 11 + .../AssemblyProvider/ITestAssemblyProvider.cs | 10 + .../AssemblyProvider/ITestAssemblyProvider.cs.meta | 11 + .../AssemblyProvider/PlayerTestAssemblyProvider.cs | 66 + .../PlayerTestAssemblyProvider.cs.meta | 11 + .../AssemblyProvider/ScriptingRuntimeProxy.cs | 10 + .../AssemblyProvider/ScriptingRuntimeProxy.cs.meta | 11 + .../Utils/AttributeHelper.cs | 45 + .../Utils/AttributeHelper.cs.meta | 11 + .../Utils/ColorEqualityComparer.cs | 36 + .../Utils/ColorEqualityComparer.cs.meta | 11 + .../Utils/CoroutineRunner.cs | 103 + .../Utils/CoroutineRunner.cs.meta | 11 + .../Utils/FloatEqualityComparer.cs | 30 + .../Utils/FloatEqualityComparer.cs.meta | 11 + .../Utils/IOuterUnityTestAction.cs | 19 + .../Utils/IOuterUnityTestAction.cs.meta | 11 + .../Utils/IPostBuildCleanup.cs | 7 + .../Utils/IPostBuildCleanup.cs.meta | 11 + .../Utils/IPrebuildSceneSetup.cs | 7 + .../Utils/IPrebuildSceneSetup.cs.meta | 11 + .../Utils/ITestRunCallback.cs | 12 + .../Utils/ITestRunCallback.cs.meta | 11 + .../Utils/MonoBehaviourTest.meta | 8 + .../Utils/MonoBehaviourTest/IMonoBehaviourTest.cs | 7 + .../MonoBehaviourTest/IMonoBehaviourTest.cs.meta | 11 + .../Utils/MonoBehaviourTest/MonoBehaviourTest.cs | 23 + .../MonoBehaviourTest/MonoBehaviourTest.cs.meta | 11 + .../Utils/PostBuildCleanupAttribute.cs | 20 + .../Utils/PostBuildCleanupAttribute.cs.meta | 11 + .../Utils/PrebuildSceneSetupAttribute.cs | 20 + .../Utils/PrebuildSceneSetupAttribute.cs.meta | 11 + .../Utils/QuaternionEqualityComparer.cs | 31 + .../Utils/QuaternionEqualityComparer.cs.meta | 11 + .../Utils/StacktraceFilter.cs | 43 + .../Utils/StacktraceFilter.cs.meta | 11 + .../Utils/TestRunCallbackAttribute.cs | 24 + .../Utils/TestRunCallbackAttribute.cs.meta | 11 + .../Utils/TestRunCallbackListener.cs | 63 + .../Utils/TestRunCallbackListener.cs.meta | 11 + .../UnityEngine.TestRunner/Utils/Utils.cs | 40 + .../UnityEngine.TestRunner/Utils/Utils.cs.meta | 11 + .../Utils/Vector2ComparerWithEqualsOperator.cs | 22 + .../Vector2ComparerWithEqualsOperator.cs.meta | 11 + .../Utils/Vector2EqualityComparer.cs | 33 + .../Utils/Vector2EqualityComparer.cs.meta | 11 + .../Utils/Vector3ComparerWithEqualsOperator.cs | 22 + .../Vector3ComparerWithEqualsOperator.cs.meta | 11 + .../Utils/Vector3EqualityComparer.cs | 32 + .../Utils/Vector3EqualityComparer.cs.meta | 11 + .../Utils/Vector4ComparerWithEqualsOperator.cs | 22 + .../Vector4ComparerWithEqualsOperator.cs.meta | 11 + .../Utils/Vector4EqualityComparer.cs | 32 + .../Utils/Vector4EqualityComparer.cs.meta | 11 + .../com.unity.test-framework@1.1.11/package.json | 26 + .../package.json.meta | 7 + .../com.unity.textmeshpro@2.0.1/.gitlab-ci.yml | 12 + .../com.unity.textmeshpro@2.0.1/CHANGELOG.md | 180 + .../com.unity.textmeshpro@2.0.1/CHANGELOG.md.meta | 7 + .../Documentation~/TextMeshPro.md | 35 + .../Documentation~/TextMeshPro.md.meta | 7 + .../Editor Resources.meta | 8 + .../Editor Resources/Gizmos.meta | 8 + .../Gizmos/TMP - Dropdown Icon.psd | Bin 0 -> 85308 bytes .../Gizmos/TMP - Dropdown Icon.psd.meta | 143 + .../Gizmos/TMP - Font Asset Icon.psd | Bin 0 -> 103962 bytes .../Gizmos/TMP - Font Asset Icon.psd.meta | 57 + .../Gizmos/TMP - Input Field Icon.psd | Bin 0 -> 102100 bytes .../Gizmos/TMP - Input Field Icon.psd.meta | 57 + .../Gizmos/TMP - Sprite Asset Icon.psd | Bin 0 -> 103456 bytes .../Gizmos/TMP - Sprite Asset Icon.psd.meta | 57 + .../Gizmos/TMP - Text Component Icon.psd | Bin 0 -> 89826 bytes .../Gizmos/TMP - Text Component Icon.psd.meta | 53 + .../Editor Resources/Shaders.meta | 8 + .../Editor Resources/Shaders/TMP_Properties.cginc | 85 + .../Shaders/TMP_Properties.cginc.meta | 9 + .../Shaders/TMP_SDF Internal SSD.shader | 126 + .../Shaders/TMP_SDF Internal SSD.shader.meta | 9 + .../Editor Resources/Textures.meta | 8 + .../Textures/SectionHeader_Dark.psd | Bin 0 -> 20744 bytes .../Textures/SectionHeader_Dark.psd.meta | 53 + .../Textures/SectionHeader_Light.psd | Bin 0 -> 20732 bytes .../Textures/SectionHeader_Light.psd.meta | 53 + .../Textures/btn_AlignBaseLine.psd | Bin 0 -> 43698 bytes .../Textures/btn_AlignBaseLine.psd.meta | 53 + .../Textures/btn_AlignBaseLine_Light.psd | Bin 0 -> 43792 bytes .../Textures/btn_AlignBaseLine_Light.psd.meta | 53 + .../Editor Resources/Textures/btn_AlignBottom.psd | Bin 0 -> 42130 bytes .../Textures/btn_AlignBottom.psd.meta | 53 + .../Textures/btn_AlignBottom_Light.psd | Bin 0 -> 42404 bytes .../Textures/btn_AlignBottom_Light.psd.meta | 53 + .../Editor Resources/Textures/btn_AlignCapLine.psd | Bin 0 -> 43303 bytes .../Textures/btn_AlignCapLine.psd.meta | 58 + .../Textures/btn_AlignCapLine_Light.psd | Bin 0 -> 43393 bytes .../Textures/btn_AlignCapLine_Light.psd.meta | 58 + .../Editor Resources/Textures/btn_AlignCenter.psd | Bin 0 -> 36404 bytes .../Textures/btn_AlignCenter.psd.meta | 53 + .../Textures/btn_AlignCenterGeo.psd | Bin 0 -> 34342 bytes .../Textures/btn_AlignCenterGeo.psd.meta | 56 + .../Textures/btn_AlignCenterGeo_Light.psd | Bin 0 -> 40812 bytes .../Textures/btn_AlignCenterGeo_Light.psd.meta | 56 + .../Textures/btn_AlignCenter_Light.psd | Bin 0 -> 42374 bytes .../Textures/btn_AlignCenter_Light.psd.meta | 53 + .../Editor Resources/Textures/btn_AlignFlush.psd | Bin 0 -> 35952 bytes .../Textures/btn_AlignFlush.psd.meta | 53 + .../Textures/btn_AlignFlush_Light.psd | Bin 0 -> 42370 bytes .../Textures/btn_AlignFlush_Light.psd.meta | 53 + .../Textures/btn_AlignJustified.psd | Bin 0 -> 33922 bytes .../Textures/btn_AlignJustified.psd.meta | 59 + .../Textures/btn_AlignJustified_Light.psd | Bin 0 -> 40274 bytes .../Textures/btn_AlignJustified_Light.psd.meta | 59 + .../Editor Resources/Textures/btn_AlignLeft.psd | Bin 0 -> 37030 bytes .../Textures/btn_AlignLeft.psd.meta | 53 + .../Textures/btn_AlignLeft_Light.psd | Bin 0 -> 42188 bytes .../Textures/btn_AlignLeft_Light.psd.meta | 53 + .../Editor Resources/Textures/btn_AlignMidLine.psd | Bin 0 -> 43949 bytes .../Textures/btn_AlignMidLine.psd.meta | 58 + .../Editor Resources/Textures/btn_AlignMiddle.psd | Bin 0 -> 42140 bytes .../Textures/btn_AlignMiddle.psd.meta | 53 + .../Textures/btn_AlignMiddle_Light.psd | Bin 0 -> 42446 bytes .../Textures/btn_AlignMiddle_Light.psd.meta | 53 + .../Textures/btn_AlignMidline_Light.psd | Bin 0 -> 44041 bytes .../Textures/btn_AlignMidline_Light.psd.meta | 58 + .../Editor Resources/Textures/btn_AlignRight.psd | Bin 0 -> 36444 bytes .../Textures/btn_AlignRight.psd.meta | 53 + .../Textures/btn_AlignRight_Light.psd | Bin 0 -> 42386 bytes .../Textures/btn_AlignRight_Light.psd.meta | 53 + .../Editor Resources/Textures/btn_AlignTop.psd | Bin 0 -> 42120 bytes .../Textures/btn_AlignTop.psd.meta | 53 + .../Textures/btn_AlignTop_Light.psd | Bin 0 -> 42456 bytes .../Textures/btn_AlignTop_Light.psd.meta | 53 + .../com.unity.textmeshpro@2.0.1/LICENSE.md | 5 + .../com.unity.textmeshpro@2.0.1/LICENSE.md.meta | 7 + .../Package Resources.meta | 8 + .../TMP Essential Resources.unitypackage | Bin 0 -> 1277840 bytes .../TMP Essential Resources.unitypackage.meta | 7 + .../TMP Examples & Extras.unitypackage | Bin 0 -> 1928373 bytes .../TMP Examples & Extras.unitypackage.meta | 7 + .../PackageConversionData.json | 654 + .../PackageConversionData.json.meta | 7 + .../PackageConversionData_Assets.json | 184 + .../PackageConversionData_Assets.json.meta | 7 + .../com.unity.textmeshpro@2.0.1/Scripts.meta | 8 + .../Scripts/Editor.meta | 8 + .../Scripts/Editor/DropdownOptionListDrawer.cs | 60 + .../Editor/DropdownOptionListDrawer.cs.meta | 12 + .../Scripts/Editor/GlyphInfoDrawer.cs | 61 + .../Scripts/Editor/GlyphInfoDrawer.cs.meta | 10 + .../Scripts/Editor/GlyphMetricsPropertyDrawer.cs | 53 + .../Editor/GlyphMetricsPropertyDrawer.cs.meta | 11 + .../Scripts/Editor/GlyphRectPropertyDrawer.cs | 44 + .../Scripts/Editor/GlyphRectPropertyDrawer.cs.meta | 11 + .../Scripts/Editor/TMP_BaseEditorPanel.cs | 1116 ++ .../Scripts/Editor/TMP_BaseEditorPanel.cs.meta | 10 + .../Scripts/Editor/TMP_BaseShaderGUI.cs | 534 + .../Scripts/Editor/TMP_BaseShaderGUI.cs.meta | 12 + .../Scripts/Editor/TMP_BitmapShaderGUI.cs | 85 + .../Scripts/Editor/TMP_BitmapShaderGUI.cs.meta | 12 + .../Scripts/Editor/TMP_CharacterPropertyDrawer.cs | 237 + .../Editor/TMP_CharacterPropertyDrawer.cs.meta | 11 + .../Scripts/Editor/TMP_ColorGradientAssetMenu.cs | 51 + .../Editor/TMP_ColorGradientAssetMenu.cs.meta | 12 + .../Scripts/Editor/TMP_ColorGradientEditor.cs | 146 + .../Scripts/Editor/TMP_ColorGradientEditor.cs.meta | 12 + .../Scripts/Editor/TMP_DropdownEditor.cs | 51 + .../Scripts/Editor/TMP_DropdownEditor.cs.meta | 12 + .../Scripts/Editor/TMP_EditorCoroutine.cs | 96 + .../Scripts/Editor/TMP_EditorCoroutine.cs.meta | 11 + .../Scripts/Editor/TMP_EditorPanel.cs | 153 + .../Scripts/Editor/TMP_EditorPanel.cs.meta | 10 + .../Scripts/Editor/TMP_EditorUtility.cs | 450 + .../Scripts/Editor/TMP_EditorUtility.cs.meta | 10 + .../Scripts/Editor/TMP_FontAssetEditor.cs | 1711 ++ .../Scripts/Editor/TMP_FontAssetEditor.cs.meta | 10 + .../Scripts/Editor/TMP_FontAsset_CreationMenu.cs | 190 + .../Editor/TMP_FontAsset_CreationMenu.cs.meta | 11 + .../TMP_GlyphPairAdjustmentRecordPropertyDrawer.cs | 382 + ...GlyphPairAdjustmentRecordPropertyDrawer.cs.meta | 11 + .../Scripts/Editor/TMP_GlyphPropertyDrawer.cs | 118 + .../Scripts/Editor/TMP_GlyphPropertyDrawer.cs.meta | 11 + .../Scripts/Editor/TMP_InputFieldEditor.cs | 283 + .../Scripts/Editor/TMP_InputFieldEditor.cs.meta | 12 + .../Scripts/Editor/TMP_MeshRendererEditor.cs | 76 + .../Scripts/Editor/TMP_MeshRendererEditor.cs.meta | 12 + .../Scripts/Editor/TMP_PackageUtilities.cs | 920 + .../Scripts/Editor/TMP_PackageUtilities.cs.meta | 11 + .../Scripts/Editor/TMP_PostBuildProcessHandler.cs | 63 + .../Editor/TMP_PostBuildProcessHandler.cs.meta | 12 + .../Scripts/Editor/TMP_ProjectTextSettings.cs | 43 + .../Scripts/Editor/TMP_ProjectTextSettings.cs.meta | 11 + .../Scripts/Editor/TMP_ResourcesLoader.cs | 68 + .../Scripts/Editor/TMP_ResourcesLoader.cs.meta | 12 + .../Scripts/Editor/TMP_SDFShaderGUI.cs | 442 + .../Scripts/Editor/TMP_SDFShaderGUI.cs.meta | 12 + .../Scripts/Editor/TMP_SerializedPropertyHolder.cs | 14 + .../Editor/TMP_SerializedPropertyHolder.cs.meta | 11 + .../Scripts/Editor/TMP_SettingsEditor.cs | 341 + .../Scripts/Editor/TMP_SettingsEditor.cs.meta | 12 + .../Scripts/Editor/TMP_SpriteAssetEditor.cs | 896 + .../Scripts/Editor/TMP_SpriteAssetEditor.cs.meta | 10 + .../Scripts/Editor/TMP_SpriteAssetImporter.cs | 232 + .../Scripts/Editor/TMP_SpriteAssetImporter.cs.meta | 12 + .../Scripts/Editor/TMP_SpriteAssetMenu.cs | 329 + .../Scripts/Editor/TMP_SpriteAssetMenu.cs.meta | 10 + .../Editor/TMP_SpriteCharacterPropertyDrawer.cs | 225 + .../TMP_SpriteCharacterPropertyDrawer.cs.meta | 11 + .../Editor/TMP_SpriteGlyphPropertyDrawer.cs | 93 + .../Editor/TMP_SpriteGlyphPropertyDrawer.cs.meta | 11 + .../Scripts/Editor/TMP_StyleAssetMenu.cs | 49 + .../Scripts/Editor/TMP_StyleAssetMenu.cs.meta | 12 + .../Scripts/Editor/TMP_StyleSheetEditor.cs | 278 + .../Scripts/Editor/TMP_StyleSheetEditor.cs.meta | 12 + .../Scripts/Editor/TMP_SubMeshUI_Editor.cs | 98 + .../Scripts/Editor/TMP_SubMeshUI_Editor.cs.meta | 12 + .../Scripts/Editor/TMP_SubMesh_Editor.cs | 76 + .../Scripts/Editor/TMP_SubMesh_Editor.cs.meta | 12 + .../Scripts/Editor/TMP_TextAlignmentDrawer.cs | 119 + .../Scripts/Editor/TMP_TextAlignmentDrawer.cs.meta | 10 + .../Scripts/Editor/TMP_UIStyleManager.cs | 134 + .../Scripts/Editor/TMP_UIStyleManager.cs.meta | 12 + .../Scripts/Editor/TMP_UiEditorPanel.cs | 91 + .../Scripts/Editor/TMP_UiEditorPanel.cs.meta | 12 + .../Scripts/Editor/TMPro_ContextMenus.cs | 341 + .../Scripts/Editor/TMPro_ContextMenus.cs.meta | 10 + .../Scripts/Editor/TMPro_CreateObjectMenu.cs | 311 + .../Scripts/Editor/TMPro_CreateObjectMenu.cs.meta | 10 + .../Scripts/Editor/TMPro_EditorShaderUtilities.cs | 53 + .../Editor/TMPro_EditorShaderUtilities.cs.meta | 10 + .../Scripts/Editor/TMPro_FontAssetCreatorWindow.cs | 1736 ++ .../Editor/TMPro_FontAssetCreatorWindow.cs.meta | 10 + .../Scripts/Editor/TMPro_FontPlugin.cs | 115 + .../Scripts/Editor/TMPro_FontPlugin.cs.meta | 10 + .../Scripts/Editor/TMPro_SortingLayerHelper.cs | 105 + .../Editor/TMPro_SortingLayerHelper.cs.meta | 10 + .../Scripts/Editor/TMPro_TextContainerEditor.cs | 235 + .../Editor/TMPro_TextContainerEditor.cs.meta | 10 + .../Scripts/Editor/TMPro_TexturePostProcessor.cs | 75 + .../Editor/TMPro_TexturePostProcessor.cs.meta | 10 + .../Scripts/Editor/Unity.TextMeshPro.Editor.asmdef | 13 + .../Editor/Unity.TextMeshPro.Editor.asmdef.meta | 7 + .../Scripts/Runtime.meta | 8 + .../Scripts/Runtime/AssemblyInfo.cs.cs | 11 + .../Scripts/Runtime/AssemblyInfo.cs.cs.meta | 11 + .../Scripts/Runtime/FastAction.cs | 146 + .../Scripts/Runtime/FastAction.cs.meta | 12 + .../Scripts/Runtime/MaterialReferenceManager.cs | 644 + .../Runtime/MaterialReferenceManager.cs.meta | 12 + .../Scripts/Runtime/TMP_Asset.cs | 26 + .../Scripts/Runtime/TMP_Asset.cs.meta | 12 + .../Scripts/Runtime/TMP_Character.cs | 51 + .../Scripts/Runtime/TMP_Character.cs.meta | 11 + .../Scripts/Runtime/TMP_CharacterInfo.cs | 73 + .../Scripts/Runtime/TMP_CharacterInfo.cs.meta | 11 + .../Scripts/Runtime/TMP_ColorGradient.cs | 68 + .../Scripts/Runtime/TMP_ColorGradient.cs.meta | 12 + .../Scripts/Runtime/TMP_CoroutineTween.cs | 246 + .../Scripts/Runtime/TMP_CoroutineTween.cs.meta | 12 + .../Scripts/Runtime/TMP_DefaultControls.cs | 385 + .../Scripts/Runtime/TMP_DefaultControls.cs.meta | 12 + .../Scripts/Runtime/TMP_Dropdown.cs | 1059 ++ .../Scripts/Runtime/TMP_Dropdown.cs.meta | 11 + .../Scripts/Runtime/TMP_EditorResourceManager.cs | 142 + .../Runtime/TMP_EditorResourceManager.cs.meta | 11 + .../Scripts/Runtime/TMP_FontAsset.cs | 1948 ++ .../Scripts/Runtime/TMP_FontAsset.cs.meta | 11 + .../Scripts/Runtime/TMP_FontAssetCommon.cs | 456 + .../Scripts/Runtime/TMP_FontAssetCommon.cs.meta | 10 + .../Scripts/Runtime/TMP_FontAssetUtilities.cs | 360 + .../Scripts/Runtime/TMP_FontAssetUtilities.cs.meta | 11 + .../Scripts/Runtime/TMP_FontFeatureTable.cs | 55 + .../Scripts/Runtime/TMP_FontFeatureTable.cs.meta | 11 + .../Scripts/Runtime/TMP_FontFeaturesCommon.cs | 223 + .../Scripts/Runtime/TMP_FontFeaturesCommon.cs.meta | 11 + .../Scripts/Runtime/TMP_InputField.cs | 4149 +++++ .../Scripts/Runtime/TMP_InputField.cs.meta | 11 + .../Scripts/Runtime/TMP_InputValidator.cs | 15 + .../Scripts/Runtime/TMP_InputValidator.cs.meta | 12 + .../Scripts/Runtime/TMP_LineInfo.cs | 52 + .../Scripts/Runtime/TMP_LineInfo.cs.meta | 12 + .../Scripts/Runtime/TMP_ListPool.cs | 21 + .../Scripts/Runtime/TMP_ListPool.cs.meta | 12 + .../Scripts/Runtime/TMP_MaterialManager.cs | 626 + .../Scripts/Runtime/TMP_MaterialManager.cs.meta | 10 + .../Scripts/Runtime/TMP_MeshInfo.cs | 668 + .../Scripts/Runtime/TMP_MeshInfo.cs.meta | 12 + .../Scripts/Runtime/TMP_ObjectPool.cs | 51 + .../Scripts/Runtime/TMP_ObjectPool.cs.meta | 12 + .../Scripts/Runtime/TMP_PackageResourceImporter.cs | 212 + .../Runtime/TMP_PackageResourceImporter.cs.meta | 16 + .../Scripts/Runtime/TMP_RichTextTagStack.cs | 278 + .../Scripts/Runtime/TMP_RichTextTagStack.cs.meta | 12 + .../Scripts/Runtime/TMP_RichTextTagsCommon.cs | 113 + .../Scripts/Runtime/TMP_RichTextTagsCommon.cs.meta | 11 + .../Scripts/Runtime/TMP_ScrollbarEventHandler.cs | 31 + .../Runtime/TMP_ScrollbarEventHandler.cs.meta | 12 + .../Scripts/Runtime/TMP_SelectionCaret.cs | 23 + .../Scripts/Runtime/TMP_SelectionCaret.cs.meta | 12 + .../Scripts/Runtime/TMP_Settings.cs | 440 + .../Scripts/Runtime/TMP_Settings.cs.meta | 12 + .../Scripts/Runtime/TMP_ShaderUtilities.cs | 563 + .../Scripts/Runtime/TMP_ShaderUtilities.cs.meta | 10 + .../Scripts/Runtime/TMP_Sprite.cs | 31 + .../Scripts/Runtime/TMP_Sprite.cs.meta | 10 + .../Scripts/Runtime/TMP_SpriteAnimator.cs | 147 + .../Scripts/Runtime/TMP_SpriteAnimator.cs.meta | 12 + .../Scripts/Runtime/TMP_SpriteAsset.cs | 503 + .../Scripts/Runtime/TMP_SpriteAsset.cs.meta | 11 + .../Runtime/TMP_SpriteAssetImportFormats.cs | 61 + .../Runtime/TMP_SpriteAssetImportFormats.cs.meta | 12 + .../Scripts/Runtime/TMP_SpriteCharacter.cs | 74 + .../Scripts/Runtime/TMP_SpriteCharacter.cs.meta | 11 + .../Scripts/Runtime/TMP_SpriteGlyph.cs | 61 + .../Scripts/Runtime/TMP_SpriteGlyph.cs.meta | 11 + .../Scripts/Runtime/TMP_Style.cs | 95 + .../Scripts/Runtime/TMP_Style.cs.meta | 12 + .../Scripts/Runtime/TMP_StyleSheet.cs | 131 + .../Scripts/Runtime/TMP_StyleSheet.cs.meta | 13 + .../Scripts/Runtime/TMP_SubMesh.cs | 580 + .../Scripts/Runtime/TMP_SubMesh.cs.meta | 12 + .../Scripts/Runtime/TMP_SubMeshUI.cs | 807 + .../Scripts/Runtime/TMP_SubMeshUI.cs.meta | 12 + .../Scripts/Runtime/TMP_Text.cs | 7594 ++++++++ .../Scripts/Runtime/TMP_Text.cs.meta | 12 + .../Scripts/Runtime/TMP_TextElement.cs | 62 + .../Scripts/Runtime/TMP_TextElement.cs.meta | 11 + .../Scripts/Runtime/TMP_TextElement_Legacy.cs | 25 + .../Scripts/Runtime/TMP_TextElement_Legacy.cs.meta | 12 + .../Scripts/Runtime/TMP_TextInfo.cs | 256 + .../Scripts/Runtime/TMP_TextInfo.cs.meta | 12 + .../Scripts/Runtime/TMP_TextParsingUtilities.cs | 136 + .../Runtime/TMP_TextParsingUtilities.cs.meta | 11 + .../Scripts/Runtime/TMP_TextUtilities.cs | 2279 +++ .../Scripts/Runtime/TMP_TextUtilities.cs.meta | 12 + .../Scripts/Runtime/TMP_UpdateManager.cs | 238 + .../Scripts/Runtime/TMP_UpdateManager.cs.meta | 12 + .../Scripts/Runtime/TMP_UpdateRegistery.cs | 178 + .../Scripts/Runtime/TMP_UpdateRegistery.cs.meta | 12 + .../Scripts/Runtime/TMPro_EventManager.cs | 150 + .../Scripts/Runtime/TMPro_EventManager.cs.meta | 10 + .../Scripts/Runtime/TMPro_ExtensionMethods.cs | 224 + .../Scripts/Runtime/TMPro_ExtensionMethods.cs.meta | 10 + .../Scripts/Runtime/TMPro_MeshUtilities.cs | 357 + .../Scripts/Runtime/TMPro_MeshUtilities.cs.meta | 10 + .../Scripts/Runtime/TMPro_Private.cs | 4051 +++++ .../Scripts/Runtime/TMPro_Private.cs.meta | 10 + .../Scripts/Runtime/TMPro_UGUI_Private.cs | 4314 +++++ .../Scripts/Runtime/TMPro_UGUI_Private.cs.meta | 10 + .../Scripts/Runtime/TextContainer.cs | 370 + .../Scripts/Runtime/TextContainer.cs.meta | 12 + .../Scripts/Runtime/TextMeshPro.cs | 551 + .../Scripts/Runtime/TextMeshPro.cs.meta | 39 + .../Scripts/Runtime/TextMeshProUGUI.cs | 656 + .../Scripts/Runtime/TextMeshProUGUI.cs.meta | 11 + .../Scripts/Runtime/Unity.TextMeshPro.asmdef | 13 + .../Scripts/Runtime/Unity.TextMeshPro.asmdef.meta | 7 + .../com.unity.textmeshpro@2.0.1/Tests.meta | 8 + .../com.unity.textmeshpro@2.0.1/Tests/Editor.meta | 8 + .../Tests/Editor/TMP_EditorTests.cs | 209 + .../Tests/Editor/TMP_EditorTests.cs.meta | 11 + .../Editor/Unity.TextMeshPro.Editor.Tests.asmdef | 16 + .../Unity.TextMeshPro.Editor.Tests.asmdef.meta | 7 + .../com.unity.textmeshpro@2.0.1/Tests/Runtime.meta | 8 + .../Tests/Runtime/TMP_RuntimeTests.cs | 207 + .../Tests/Runtime/TMP_RuntimeTests.cs.meta | 11 + .../Tests/Runtime/Unity.TextMeshPro.Tests.asmdef | 12 + .../Runtime/Unity.TextMeshPro.Tests.asmdef.meta | 7 + .../com.unity.textmeshpro@2.0.1/package.json | 21 + .../com.unity.textmeshpro@2.0.1/package.json.meta | 7 + .../com.unity.timeline@1.2.13/CHANGELOG.md | 256 + .../com.unity.timeline@1.2.13/CHANGELOG.md.meta | 7 + .../Documentation~/TableOfContents.md | 68 + .../Documentation~/clp_about.md | 101 + .../Documentation~/clp_add.md | 21 + .../Documentation~/clp_blend.md | 37 + .../Documentation~/clp_dup.md | 24 + .../Documentation~/clp_ease.md | 74 + .../Documentation~/clp_gap_extrap.md | 47 + .../Documentation~/clp_insert.md | 25 + .../Documentation~/clp_match.md | 42 + .../Documentation~/clp_pan_zoom.md | 24 + .../Documentation~/clp_position.md | 58 + .../Documentation~/clp_reset.md | 18 + .../Documentation~/clp_select.md | 42 + .../Documentation~/clp_speed.md | 29 + .../Documentation~/clp_split.md | 15 + .../Documentation~/clp_tile.md | 16 + .../Documentation~/clp_trim.md | 75 + .../Documentation~/crv_about.md | 18 + .../Documentation~/crv_hide.md | 15 + .../Documentation~/crv_keys_add.md | 6 + .../Documentation~/crv_keys_del.md | 6 + .../Documentation~/crv_keys_edit.md | 9 + .../Documentation~/crv_keys_interp.md | 27 + .../Documentation~/crv_keys_sel.md | 20 + .../Documentation~/crv_nav.md | 12 + .../Documentation~/grp_hide.md | 9 + .../Documentation~/grp_lock.md | 15 + .../Documentation~/grp_use.md | 28 + .../images/timeline_add_track_menu.png | Bin 0 -> 32518 bytes .../images/timeline_animation_window_locked.png | Bin 0 -> 59523 bytes .../images/timeline_cinematic_example.png | Bin 0 -> 28719 bytes .../images/timeline_clip_blend_area.png | Bin 0 -> 14526 bytes .../images/timeline_clip_double_speed.png | Bin 0 -> 7266 bytes .../images/timeline_clip_duplicate_before.png | Bin 0 -> 13277 bytes .../images/timeline_clip_duplicate_clip_after.png | Bin 0 -> 24530 bytes .../images/timeline_clip_duplicate_clip_before.png | Bin 0 -> 23780 bytes .../images/timeline_clip_duplicate_project.png | Bin 0 -> 8847 bytes .../images/timeline_clip_ease_in_bad_gap.png | Bin 0 -> 13263 bytes .../images/timeline_clip_ease_in_good_gap.png | Bin 0 -> 13278 bytes .../images/timeline_clip_ease_in_out.png | Bin 0 -> 10448 bytes .../timeline_clip_ease_in_override_scene.png | Bin 0 -> 7264 bytes .../timeline_clip_ease_in_override_track.png | Bin 0 -> 8511 bytes .../images/timeline_clip_split_after.png | Bin 0 -> 51225 bytes .../images/timeline_clip_split_before.png | Bin 0 -> 49172 bytes .../images/timeline_clip_trim_end_keys.png | Bin 0 -> 10713 bytes .../images/timeline_clip_trim_loop.png | Bin 0 -> 9744 bytes .../images/timeline_clip_trim_start_keys.png | Bin 0 -> 9959 bytes .../images/timeline_clips_anim_clip_timing.png | Bin 0 -> 15540 bytes .../images/timeline_clips_arrows.png | Bin 0 -> 29964 bytes .../images/timeline_clips_position_invalid.png | Bin 0 -> 51718 bytes .../images/timeline_clips_positioning.png | Bin 0 -> 52838 bytes .../images/timeline_clips_select_first.png | Bin 0 -> 24581 bytes .../images/timeline_clips_select_last.png | Bin 0 -> 23965 bytes .../images/timeline_clips_split_after.png | Bin 0 -> 53226 bytes .../images/timeline_clips_split_before.png | Bin 0 -> 51168 bytes .../images/timeline_clips_tile_result.png | Bin 0 -> 23403 bytes .../images/timeline_clips_tile_selection.png | Bin 0 -> 23806 bytes .../Documentation~/images/timeline_clips_view.png | Bin 0 -> 32623 bytes .../images/timeline_clips_view_adding.png | Bin 0 -> 55441 bytes .../images/timeline_clips_view_inserting_after.png | Bin 0 -> 54074 bytes .../timeline_clips_view_inserting_before.png | Bin 0 -> 83136 bytes .../Documentation~/images/timeline_cog_menu.png | Bin 0 -> 64070 bytes .../images/timeline_curves_first_last_tangent.png | Bin 0 -> 12438 bytes .../images/timeline_curves_interp_menu.png | Bin 0 -> 24231 bytes .../images/timeline_curves_tangent_joined.png | Bin 0 -> 10955 bytes .../images/timeline_curves_view_icon.png | Bin 0 -> 23957 bytes .../images/timeline_curves_view_position_x.png | Bin 0 -> 24957 bytes .../timeline_curves_view_select_contiguous.png | Bin 0 -> 25576 bytes .../images/timeline_curves_view_select_key.png | Bin 0 -> 25433 bytes .../images/timeline_duration_mode.png | Bin 0 -> 32285 bytes .../images/timeline_editor_bindings.png | Bin 0 -> 25155 bytes .../images/timeline_editor_create.png | Bin 0 -> 9320 bytes .../images/timeline_editor_project.png | Bin 0 -> 23571 bytes .../images/timeline_editor_to_start.png | Bin 0 -> 3635 bytes .../Documentation~/images/timeline_end_button.png | Bin 0 -> 406 bytes .../images/timeline_frames_subframes.png | Bin 0 -> 4375 bytes .../images/timeline_gap_extrap_icons.png | Bin 0 -> 12020 bytes .../images/timeline_gap_extrap_two_tracks.png | Bin 0 -> 15365 bytes .../images/timeline_humanoid_after_match.png | Bin 0 -> 126539 bytes .../images/timeline_humanoid_before_match.png | Bin 0 -> 128899 bytes .../images/timeline_humanoid_blend.png | Bin 0 -> 17714 bytes .../images/timeline_humanoid_idle.png | Bin 0 -> 14868 bytes .../images/timeline_humanoid_manual.png | Bin 0 -> 138408 bytes .../images/timeline_humanoid_match_menu.png | Bin 0 -> 63735 bytes .../images/timeline_humanoid_runleft.png | Bin 0 -> 14753 bytes .../images/timeline_humanoid_start.png | Bin 0 -> 12225 bytes .../images/timeline_inspector_activation_clip.png | Bin 0 -> 7861 bytes .../images/timeline_inspector_activation_track.png | Bin 0 -> 6026 bytes .../images/timeline_inspector_anim_extrap.png | Bin 0 -> 15520 bytes .../images/timeline_inspector_animation_clip.png | Bin 0 -> 16299 bytes .../timeline_inspector_animation_clip_common.png | Bin 0 -> 15481 bytes .../timeline_inspector_animation_clip_playable.png | Bin 0 -> 19074 bytes .../images/timeline_inspector_animation_track.png | Bin 0 -> 15169 bytes .../images/timeline_inspector_audio_clip.png | Bin 0 -> 13803 bytes .../images/timeline_inspector_blend_curves.png | Bin 0 -> 16350 bytes .../images/timeline_inspector_clip_speed.png | Bin 0 -> 16331 bytes .../images/timeline_inspector_clip_timing.png | Bin 0 -> 16399 bytes .../timeline_inspector_control_clip_common.png | Bin 0 -> 23444 bytes .../timeline_inspector_control_clip_playable.png | Bin 0 -> 23382 bytes .../images/timeline_inspector_curve_editor.png | Bin 0 -> 13476 bytes .../timeline_inspector_ease_in_blend_out.png | Bin 0 -> 16943 bytes .../images/timeline_inspector_ease_in_out.png | Bin 0 -> 15471 bytes .../timeline_inspector_multiple_selection.png | Bin 0 -> 13550 bytes .../images/timeline_inspector_narrow_selection.png | Bin 0 -> 5679 bytes .../timeline_inspector_playable_director.png | Bin 0 -> 28149 bytes .../images/timeline_inspector_timeline.png | Bin 0 -> 8192 bytes .../images/timeline_last_loop_before.png | Bin 0 -> 12014 bytes .../images/timeline_last_loop_complete.png | Bin 0 -> 11230 bytes .../images/timeline_last_loop_trim.png | Bin 0 -> 11094 bytes .../images/timeline_masking_avatar_inspector.png | Bin 0 -> 14939 bytes .../images/timeline_masking_avatar_off.png | Bin 0 -> 19307 bytes .../images/timeline_masking_avatar_on.png | Bin 0 -> 19368 bytes .../images/timeline_masking_override.png | Bin 0 -> 66387 bytes .../images/timeline_masking_override_selected.png | Bin 0 -> 18016 bytes .../images/timeline_masking_start.png | Bin 0 -> 15262 bytes .../images/timeline_masking_waving.png | Bin 0 -> 17988 bytes .../images/timeline_match_clip_many.png | Bin 0 -> 77249 bytes .../images/timeline_match_clip_two.png | Bin 0 -> 79126 bytes .../images/timeline_match_prematch_clips.png | Bin 0 -> 40196 bytes .../images/timeline_match_prematch_scene.png | Bin 0 -> 62941 bytes .../images/timeline_mix_mode_blend_arrow.png | Bin 0 -> 54693 bytes .../images/timeline_mix_mode_position_cursor.png | Bin 0 -> 53829 bytes .../images/timeline_move_track_after copy.png | Bin 0 -> 54312 bytes .../images/timeline_move_track_after.png | Bin 0 -> 29958 bytes .../images/timeline_move_track_before.png | Bin 0 -> 32807 bytes .../images/timeline_nesting_editing.png | Bin 0 -> 67320 bytes .../images/timeline_nesting_example.png | Bin 0 -> 48098 bytes .../images/timeline_nesting_global.png | Bin 0 -> 67541 bytes .../images/timeline_nesting_local.png | Bin 0 -> 67369 bytes .../images/timeline_next_frame_button.png | Bin 0 -> 339 bytes .../images/timeline_overview_asset.png | Bin 0 -> 45627 bytes .../images/timeline_overview_enemy.png | Bin 0 -> 24561 bytes .../images/timeline_overview_instance.png | Bin 0 -> 62046 bytes .../images/timeline_overview_player.png | Bin 0 -> 24628 bytes .../Documentation~/images/timeline_play_button.png | Bin 0 -> 354 bytes .../Documentation~/images/timeline_play_range.png | Bin 0 -> 27794 bytes .../images/timeline_play_range_button.png | Bin 0 -> 383 bytes .../images/timeline_playback_controls.png | Bin 0 -> 2485 bytes .../images/timeline_playhead_insert_100_after.png | Bin 0 -> 9698 bytes .../images/timeline_playhead_insert_before.png | Bin 0 -> 55797 bytes .../images/timeline_playhead_insert_menu.png | Bin 0 -> 65723 bytes .../images/timeline_playhead_location.png | Bin 0 -> 21955 bytes .../images/timeline_playhead_select_menu.png | Bin 0 -> 44026 bytes .../images/timeline_playhead_trim_after.png | Bin 0 -> 7501 bytes .../images/timeline_playhead_trim_before.png | Bin 0 -> 7186 bytes .../images/timeline_preview_selector.png | Bin 0 -> 38627 bytes .../images/timeline_previous_frame_button.png | Bin 0 -> 344 bytes .../images/timeline_property_red.png | Bin 0 -> 23891 bytes .../images/timeline_replace_mode.png | Bin 0 -> 53572 bytes .../images/timeline_replace_mode_red_cut.png | Bin 0 -> 53909 bytes .../Documentation~/images/timeline_ripple_mode.png | Bin 0 -> 53955 bytes .../images/timeline_ripple_mode_yellow_arrow.png | Bin 0 -> 55475 bytes .../Documentation~/images/timeline_splash.png | Bin 0 -> 303699 bytes .../images/timeline_start_button.png | Bin 0 -> 406 bytes .../images/timeline_track_alert_icon.png | Bin 0 -> 21787 bytes .../images/timeline_track_duplicate.png | Bin 0 -> 31780 bytes .../images/timeline_track_group_add.png | Bin 0 -> 26295 bytes .../images/timeline_track_group_hidden.png | Bin 0 -> 17305 bytes .../images/timeline_track_group_locked.png | Bin 0 -> 41260 bytes .../images/timeline_track_group_plus.png | Bin 0 -> 39248 bytes .../Documentation~/images/timeline_track_list.png | Bin 0 -> 32359 bytes .../images/timeline_track_locked.png | Bin 0 -> 31180 bytes .../Documentation~/images/timeline_track_muted.png | Bin 0 -> 27116 bytes .../images/timeline_track_priority.png | Bin 0 -> 26971 bytes .../images/timeline_track_reorder.png | Bin 0 -> 28181 bytes .../images/timeline_track_select_first.png | Bin 0 -> 26509 bytes .../images/timeline_track_select_last.png | Bin 0 -> 26922 bytes .../images/timeline_workflow_clip_in_project.png | Bin 0 -> 7516 bytes .../images/timeline_workflow_converted_clip.png | Bin 0 -> 14778 bytes .../images/timeline_workflow_dopesheet.png | Bin 0 -> 13690 bytes .../images/timeline_workflow_keyframing_menu.png | Bin 0 -> 32363 bytes .../images/timeline_workflow_record_button.png | Bin 0 -> 13956 bytes .../timeline_workflow_recorded_clip_track_menu.png | Bin 0 -> 15038 bytes .../images/timeline_workflow_recording.png | Bin 0 -> 14041 bytes .../timeline_workflow_recording_diamonds.png | Bin 0 -> 15926 bytes .../Documentation~/images/timeline_zoombar.png | Bin 0 -> 23166 bytes .../images/timeline_zoomed_clip_edit_modes.png | Bin 0 -> 36955 bytes .../workflow_inspector_animation_clip_playable.png | Bin 0 -> 18808 bytes .../images/workflow_nesting_control_disabled.png | Bin 0 -> 23366 bytes .../images/workflow_nesting_done.png | Bin 0 -> 47973 bytes .../images/workflow_nesting_double_click.png | Bin 0 -> 48899 bytes .../images/workflow_nesting_drag_board.png | Bin 0 -> 46454 bytes .../images/workflow_nesting_edit_warning.png | Bin 0 -> 69329 bytes .../images/workflow_nesting_master.png | Bin 0 -> 50036 bytes .../Documentation~/index.md | 39 + .../Documentation~/insp_about.md | 27 + .../Documentation~/insp_clp.md | 16 + .../Documentation~/insp_clp_act.md | 25 + .../Documentation~/insp_clp_anim_com.md | 47 + .../Documentation~/insp_clp_anim_plyb.md | 44 + .../Documentation~/insp_clp_aud.md | 35 + .../Documentation~/insp_clp_ctrl_com.md | 34 + .../Documentation~/insp_clp_ctrl_plyb.md | 45 + .../Documentation~/insp_tl.md | 15 + .../Documentation~/insp_trk.md | 13 + .../Documentation~/insp_trk_act.md | 16 + .../Documentation~/insp_trk_anim.md | 22 + .../Documentation~/play_director.md | 27 + .../Documentation~/tl_about.md | 50 + .../Documentation~/tl_gloss.md | 71 + .../Documentation~/tl_play_cntrls.md | 104 + .../Documentation~/tl_selector.md | 11 + .../Documentation~/tl_settings.md | 70 + .../Documentation~/tl_window.md | 29 + .../Documentation~/trk_add.md | 15 + .../Documentation~/trk_delete.md | 13 + .../Documentation~/trk_dup.md | 14 + .../Documentation~/trk_list_about.md | 29 + .../Documentation~/trk_lock.md | 13 + .../Documentation~/trk_mute.md | 15 + .../Documentation~/trk_reorder.md | 17 + .../Documentation~/trk_select.md | 25 + .../Documentation~/wf_about.md | 10 + .../Documentation~/wf_char_anim.md | 75 + .../Documentation~/wf_conv_infinite.md | 16 + .../Documentation~/wf_instance.md | 23 + .../Documentation~/wf_mask.md | 44 + .../Documentation~/wf_nested.md | 50 + .../Documentation~/wf_rec_anim.md | 60 + .../com.unity.timeline@1.2.13/Editor.meta | 8 + .../com.unity.timeline@1.2.13/Editor/Actions.meta | 8 + .../Editor/Actions/ClipsActions.cs | 376 + .../Editor/Actions/ClipsActions.cs.meta | 11 + .../Editor/Actions/ItemAction.cs | 124 + .../Editor/Actions/ItemAction.cs.meta | 11 + .../Editor/Actions/MarkerActions.cs | 17 + .../Editor/Actions/MarkerActions.cs.meta | 11 + .../Editor/Actions/Menus.meta | 8 + .../Editor/Actions/Menus/MenuItemActionBase.cs | 177 + .../Actions/Menus/MenuItemActionBase.cs.meta | 11 + .../Editor/Actions/Menus/TimelineContextMenu.cs | 448 + .../Actions/Menus/TimelineContextMenu.cs.meta | 11 + .../Editor/Actions/TimelineActions.cs | 946 + .../Editor/Actions/TimelineActions.cs.meta | 11 + .../Editor/Actions/TrackActions.cs | 521 + .../Editor/Actions/TrackActions.cs.meta | 11 + .../Editor/Activation.meta | 8 + .../Editor/Activation/ActivationTrackEditor.cs | 56 + .../Activation/ActivationTrackEditor.cs.meta | 11 + .../Editor/Activation/ActivationTrackInspector.cs | 43 + .../Activation/ActivationTrackInspector.cs.meta | 11 + .../Editor/Analytics.meta | 8 + .../Editor/Analytics/TimelineAnalytics.cs | 170 + .../Editor/Analytics/TimelineAnalytics.cs.meta | 11 + .../Editor/Animation.meta | 8 + .../Editor/Animation/AnimationClipActions.cs | 96 + .../Editor/Animation/AnimationClipActions.cs.meta | 11 + .../Editor/Animation/AnimationClipCurveCache.cs | 436 + .../Animation/AnimationClipCurveCache.cs.meta | 11 + .../Editor/Animation/AnimationOffsetMenu.cs | 82 + .../Editor/Animation/AnimationOffsetMenu.cs.meta | 11 + .../Animation/AnimationPlayableAssetEditor.cs | 65 + .../Animation/AnimationPlayableAssetEditor.cs.meta | 11 + .../Editor/Animation/AnimationTrackActions.cs | 151 + .../Editor/Animation/AnimationTrackActions.cs.meta | 11 + .../Editor/Animation/BindingSelector.cs | 224 + .../Editor/Animation/BindingSelector.cs.meta | 11 + .../Editor/Animation/BindingTreeViewDataSource.cs | 139 + .../Animation/BindingTreeViewDataSource.cs.meta | 11 + .../Animation/BindingTreeViewDataSourceGUI.cs | 80 + .../Animation/BindingTreeViewDataSourceGUI.cs.meta | 11 + .../Editor/Animation/ClipCurveEditor.cs | 332 + .../Editor/Animation/ClipCurveEditor.cs.meta | 11 + .../Editor/Animation/CurveDataSource.cs | 272 + .../Editor/Animation/CurveDataSource.cs.meta | 11 + .../Editor/Animation/CurvesProxy.cs | 302 + .../Editor/Animation/CurvesProxy.cs.meta | 11 + .../Editor/Animation/TimelineAnimationUtilities.cs | 435 + .../Animation/TimelineAnimationUtilities.cs.meta | 11 + .../Editor/Attributes.meta | 8 + .../Editor/Attributes/ActiveInModeAttribute.cs | 14 + .../Attributes/ActiveInModeAttribute.cs.meta | 11 + .../Editor/Attributes/MenuEntryAttribute.cs | 37 + .../Editor/Attributes/MenuEntryAttribute.cs.meta | 11 + .../Editor/Attributes/ShortcutAttribute.cs | 71 + .../Editor/Attributes/ShortcutAttribute.cs.meta | 11 + .../com.unity.timeline@1.2.13/Editor/Audio.meta | 8 + .../Editor/Audio/AudioClipPropertiesDrawer.cs | 81 + .../Editor/Audio/AudioClipPropertiesDrawer.cs.meta | 11 + .../Editor/Audio/AudioPlayableAssetEditor.cs | 84 + .../Editor/Audio/AudioPlayableAssetEditor.cs.meta | 11 + .../Editor/Audio/AudioPlayableAssetInspector.cs | 27 + .../Audio/AudioPlayableAssetInspector.cs.meta | 11 + .../Editor/Audio/AudioTrackInspector.cs | 164 + .../Editor/Audio/AudioTrackInspector.cs.meta | 11 + .../Editor/ControlTrack.meta | 8 + .../ControlTrack/ControlPlayableAssetEditor.cs | 69 + .../ControlPlayableAssetEditor.cs.meta | 11 + .../Editor/CurveEditUtility.cs | 657 + .../Editor/CurveEditUtility.cs.meta | 11 + .../Editor/CustomEditors.meta | 8 + .../Editor/CustomEditors/ClipEditor.cs | 256 + .../Editor/CustomEditors/ClipEditor.cs.meta | 11 + .../CustomEditors/CustomTimelineEditorCache.cs | 155 + .../CustomTimelineEditorCache.cs.meta | 11 + .../Editor/CustomEditors/MarkerEditor.cs | 209 + .../Editor/CustomEditors/MarkerEditor.cs.meta | 11 + .../Editor/CustomEditors/MarkerTrackEditor.cs | 18 + .../Editor/CustomEditors/MarkerTrackEditor.cs.meta | 11 + .../Editor/CustomEditors/TrackEditor.cs | 284 + .../Editor/CustomEditors/TrackEditor.cs.meta | 11 + .../Editor/DirectorNamedColor.cs | 288 + .../Editor/DirectorNamedColor.cs.meta | 11 + .../Editor/DirectorStyles.cs | 362 + .../Editor/DirectorStyles.cs.meta | 11 + .../Editor/Extensions.meta | 8 + .../Extensions/AnimatedParameterExtensions.cs | 150 + .../Extensions/AnimatedParameterExtensions.cs.meta | 11 + .../Editor/Extensions/AnimationTrackExtensions.cs | 134 + .../Extensions/AnimationTrackExtensions.cs.meta | 11 + .../Editor/Extensions/TrackExtensions.cs | 495 + .../Editor/Extensions/TrackExtensions.cs.meta | 11 + .../com.unity.timeline@1.2.13/Editor/Items.meta | 8 + .../Editor/Items/ClipItem.cs | 143 + .../Editor/Items/ClipItem.cs.meta | 11 + .../Editor/Items/ITimelineItem.cs | 39 + .../Editor/Items/ITimelineItem.cs.meta | 11 + .../Editor/Items/ItemsGroup.cs | 63 + .../Editor/Items/ItemsGroup.cs.meta | 11 + .../Editor/Items/ItemsPerTrack.cs | 45 + .../Editor/Items/ItemsPerTrack.cs.meta | 11 + .../Editor/Items/ItemsUtils.cs | 116 + .../Editor/Items/ItemsUtils.cs.meta | 11 + .../Editor/Items/MarkerItem.cs | 106 + .../Editor/Items/MarkerItem.cs.meta | 11 + .../Editor/Manipulators.meta | 8 + .../Editor/Manipulators/AddDelete.meta | 8 + .../Manipulators/AddDelete/AddDeleteItemModeMix.cs | 26 + .../AddDelete/AddDeleteItemModeMix.cs.meta | 11 + .../AddDelete/AddDeleteItemModeReplace.cs | 18 + .../AddDelete/AddDeleteItemModeReplace.cs.meta | 11 + .../AddDelete/AddDeleteItemModeRipple.cs | 18 + .../AddDelete/AddDeleteItemModeRipple.cs.meta | 11 + .../Manipulators/AddDelete/IAddDeleteItemMode.cs | 10 + .../AddDelete/IAddDeleteItemMode.cs.meta | 11 + .../Editor/Manipulators/Cursors.meta | 8 + .../Editor/Manipulators/Cursors/TimelineCursors.cs | 95 + .../Manipulators/Cursors/TimelineCursors.cs.meta | 11 + .../Editor/Manipulators/EditMode.cs | 344 + .../Editor/Manipulators/EditMode.cs.meta | 11 + .../Editor/Manipulators/EditModeInputHandler.cs | 199 + .../Manipulators/EditModeInputHandler.cs.meta | 11 + .../Editor/Manipulators/Move.meta | 8 + .../Editor/Manipulators/Move/IMoveItemMode.cs | 28 + .../Editor/Manipulators/Move/IMoveItemMode.cs.meta | 11 + .../Editor/Manipulators/Move/MoveItemHandler.cs | 312 + .../Manipulators/Move/MoveItemHandler.cs.meta | 11 + .../Editor/Manipulators/Move/MoveItemModeMix.cs | 138 + .../Manipulators/Move/MoveItemModeMix.cs.meta | 11 + .../Manipulators/Move/MoveItemModeReplace.cs | 99 + .../Manipulators/Move/MoveItemModeReplace.cs.meta | 11 + .../Editor/Manipulators/Move/MoveItemModeRipple.cs | 271 + .../Manipulators/Move/MoveItemModeRipple.cs.meta | 11 + .../Editor/Manipulators/Move/MovingItems.cs | 137 + .../Editor/Manipulators/Move/MovingItems.cs.meta | 11 + .../Editor/Manipulators/Sequence.meta | 8 + .../Editor/Manipulators/Sequence/EaseClip.cs | 146 + .../Editor/Manipulators/Sequence/EaseClip.cs.meta | 11 + .../Editor/Manipulators/Sequence/Jog.cs | 61 + .../Editor/Manipulators/Sequence/Jog.cs.meta | 11 + .../Sequence/MarkerHeaderContextMenu.cs | 24 + .../Sequence/MarkerHeaderContextMenu.cs.meta | 11 + .../Manipulators/Sequence/RectangleSelect.cs | 36 + .../Manipulators/Sequence/RectangleSelect.cs.meta | 11 + .../Editor/Manipulators/Sequence/RectangleTool.cs | 169 + .../Manipulators/Sequence/RectangleTool.cs.meta | 11 + .../Editor/Manipulators/Sequence/RectangleZoom.cs | 23 + .../Manipulators/Sequence/RectangleZoom.cs.meta | 11 + .../Manipulators/Sequence/SelectAndMoveItem.cs | 297 + .../Sequence/SelectAndMoveItem.cs.meta | 11 + .../Editor/Manipulators/Sequence/TrackZoom.cs | 20 + .../Editor/Manipulators/Sequence/TrackZoom.cs.meta | 11 + .../Editor/Manipulators/Sequence/TrimClip.cs | 232 + .../Editor/Manipulators/Sequence/TrimClip.cs.meta | 11 + .../Editor/Manipulators/TimeAreaAutoPanner.cs | 72 + .../Editor/Manipulators/TimeAreaAutoPanner.cs.meta | 11 + .../Editor/Manipulators/TimeIndicator.cs | 47 + .../Editor/Manipulators/TimeIndicator.cs.meta | 11 + .../Editor/Manipulators/TimelineClipGroup.cs | 54 + .../Editor/Manipulators/TimelineClipGroup.cs.meta | 11 + .../Editor/Manipulators/Trim.meta | 8 + .../Editor/Manipulators/Trim/ITrimItemMode.cs | 23 + .../Editor/Manipulators/Trim/ITrimItemMode.cs.meta | 11 + .../Editor/Manipulators/Trim/TrimItemModeMix.cs | 102 + .../Manipulators/Trim/TrimItemModeMix.cs.meta | 11 + .../Manipulators/Trim/TrimItemModeReplace.cs | 139 + .../Manipulators/Trim/TrimItemModeReplace.cs.meta | 11 + .../Editor/Manipulators/Trim/TrimItemModeRipple.cs | 97 + .../Manipulators/Trim/TrimItemModeRipple.cs.meta | 11 + .../Editor/Manipulators/Utils.meta | 8 + .../Editor/Manipulators/Utils/EditModeGUIUtils.cs | 27 + .../Manipulators/Utils/EditModeGUIUtils.cs.meta | 11 + .../Editor/Manipulators/Utils/EditModeMixUtils.cs | 137 + .../Manipulators/Utils/EditModeMixUtils.cs.meta | 11 + .../Manipulators/Utils/EditModeReplaceUtils.cs | 57 + .../Utils/EditModeReplaceUtils.cs.meta | 11 + .../Manipulators/Utils/EditModeRippleUtils.cs | 108 + .../Manipulators/Utils/EditModeRippleUtils.cs.meta | 11 + .../Editor/Manipulators/Utils/EditModeUtils.cs | 123 + .../Manipulators/Utils/EditModeUtils.cs.meta | 11 + .../Editor/Manipulators/Utils/ManipulatorsUtils.cs | 19 + .../Manipulators/Utils/ManipulatorsUtils.cs.meta | 11 + .../Editor/Manipulators/Utils/PlacementValidity.cs | 13 + .../Manipulators/Utils/PlacementValidity.cs.meta | 11 + .../com.unity.timeline@1.2.13/Editor/MenuOrder.cs | 103 + .../Editor/MenuOrder.cs.meta | 11 + .../Editor/Playables.meta | 8 + .../Editor/Playables/ControlPlayableInspector.cs | 212 + .../Playables/ControlPlayableInspector.cs.meta | 11 + .../Editor/Properties.meta | 8 + .../Editor/Properties/AssemblyInfo.cs | 24 + .../Editor/Properties/AssemblyInfo.cs.meta | 11 + .../Editor/Recording.meta | 8 + .../Editor/Recording/AnimationTrackRecorder.cs | 306 + .../Recording/AnimationTrackRecorder.cs.meta | 11 + .../Editor/Recording/TimelineRecording.cs | 497 + .../Editor/Recording/TimelineRecording.cs.meta | 11 + .../TimelineRecordingContextualResponder.cs | 134 + .../TimelineRecordingContextualResponder.cs.meta | 11 + .../Recording/TimelineRecording_Monobehaviour.cs | 709 + .../TimelineRecording_Monobehaviour.cs.meta | 11 + .../Recording/TimelineRecording_PlayableAsset.cs | 115 + .../TimelineRecording_PlayableAsset.cs.meta | 11 + .../Recording/TrackAssetRecordingExtensions.cs | 191 + .../TrackAssetRecordingExtensions.cs.meta | 11 + .../com.unity.timeline@1.2.13/Editor/Shortcuts.cs | 266 + .../Editor/Shortcuts.cs.meta | 11 + .../com.unity.timeline@1.2.13/Editor/Signals.meta | 8 + .../Editor/Signals/SignalAssetInspector.cs | 28 + .../Editor/Signals/SignalAssetInspector.cs.meta | 11 + .../Editor/Signals/SignalEmitterEditor.cs | 23 + .../Editor/Signals/SignalEmitterEditor.cs.meta | 11 + .../Editor/Signals/SignalEmitterInspector.cs | 377 + .../Editor/Signals/SignalEmitterInspector.cs.meta | 11 + .../Editor/Signals/SignalEventDrawer.cs | 39 + .../Editor/Signals/SignalEventDrawer.cs.meta | 11 + .../Editor/Signals/SignalManager.cs | 87 + .../Editor/Signals/SignalManager.cs.meta | 11 + .../Editor/Signals/SignalReceiverHeader.cs | 15 + .../Editor/Signals/SignalReceiverHeader.cs.meta | 11 + .../Editor/Signals/SignalReceiverInspector.cs | 116 + .../Editor/Signals/SignalReceiverInspector.cs.meta | 11 + .../Editor/Signals/SignalUtility.cs | 125 + .../Editor/Signals/SignalUtility.cs.meta | 11 + .../Editor/Signals/Styles.cs | 39 + .../Editor/Signals/Styles.cs.meta | 11 + .../Editor/Signals/TreeView.meta | 8 + .../Editor/Signals/TreeView/SignalListFactory.cs | 31 + .../Signals/TreeView/SignalListFactory.cs.meta | 11 + .../Editor/Signals/TreeView/SignalReceiverItem.cs | 180 + .../Signals/TreeView/SignalReceiverItem.cs.meta | 11 + .../Signals/TreeView/SignalReceiverTreeView.cs | 155 + .../TreeView/SignalReceiverTreeView.cs.meta | 11 + .../com.unity.timeline@1.2.13/Editor/State.meta | 8 + .../Editor/State/ISequenceState.cs | 106 + .../Editor/State/ISequenceState.cs.meta | 11 + .../Editor/State/SequenceHierarchy.cs | 298 + .../Editor/State/SequenceHierarchy.cs.meta | 11 + .../Editor/State/SequencePath.cs | 131 + .../Editor/State/SequencePath.cs.meta | 11 + .../Editor/State/SequenceState.cs | 212 + .../Editor/State/SequenceState.cs.meta | 11 + .../Editor/State/WindowState.cs | 1131 ++ .../Editor/State/WindowState.cs.meta | 11 + .../Editor/StyleSheets.meta | 8 + .../Editor/StyleSheets/Extensions.meta | 8 + .../Editor/StyleSheets/Extensions/common.uss | 1153 ++ .../Editor/StyleSheets/Extensions/common.uss.meta | 11 + .../Editor/StyleSheets/Extensions/dark.uss | 286 + .../Editor/StyleSheets/Extensions/dark.uss.meta | 11 + .../Editor/StyleSheets/Extensions/light.uss | 282 + .../Editor/StyleSheets/Extensions/light.uss.meta | 11 + .../Editor/StyleSheets/Images.meta | 8 + .../Editor/StyleSheets/Images/DarkSkin.meta | 8 + .../Images/DarkSkin/TimelineActivation.png | Bin 0 -> 15414 bytes .../Images/DarkSkin/TimelineActivation.png.meta | 107 + .../Images/DarkSkin/TimelineAutokey.png | Bin 0 -> 1300 bytes .../Images/DarkSkin/TimelineAutokey.png.meta | 77 + .../Images/DarkSkin/TimelineAutokey@2x.png | Bin 0 -> 1822 bytes .../Images/DarkSkin/TimelineAutokey@2x.png.meta | 91 + .../Images/DarkSkin/TimelineAutokey_active.png | Bin 0 -> 350 bytes .../DarkSkin/TimelineAutokey_active.png.meta | 77 + .../Images/DarkSkin/TimelineAutokey_active@2x.png | Bin 0 -> 617 bytes .../DarkSkin/TimelineAutokey_active@2x.png.meta | 91 + .../TimelineCollapseMarkerButtonDisabled.png | Bin 0 -> 363 bytes .../TimelineCollapseMarkerButtonDisabled.png.meta | 88 + .../TimelineCollapseMarkerButtonEnabled.png | Bin 0 -> 360 bytes .../TimelineCollapseMarkerButtonEnabled.png.meta | 88 + .../Images/DarkSkin/TimelineContinue.png | Bin 0 -> 14651 bytes .../Images/DarkSkin/TimelineContinue.png.meta | 107 + .../Images/DarkSkin/TimelineCurvesOff.png | Bin 0 -> 14766 bytes .../Images/DarkSkin/TimelineCurvesOff.png.meta | 77 + .../Images/DarkSkin/TimelineCurvesOn.png | Bin 0 -> 14806 bytes .../Images/DarkSkin/TimelineCurvesOn.png.meta | 77 + .../Images/DarkSkin/TimelineDisabledBackground.png | Bin 0 -> 2323 bytes .../DarkSkin/TimelineDisabledBackground.png.meta | 119 + .../Images/DarkSkin/TimelineEndPlayback.png | Bin 0 -> 2816 bytes .../Images/DarkSkin/TimelineEndPlayback.png.meta | 77 + .../StyleSheets/Images/DarkSkin/TimelineEye.png | Bin 0 -> 470 bytes .../Images/DarkSkin/TimelineEye.png.meta | 77 + .../StyleSheets/Images/DarkSkin/TimelineEye@2x.png | Bin 0 -> 928 bytes .../Images/DarkSkin/TimelineEye@2x.png.meta | 91 + .../StyleSheets/Images/DarkSkin/TimelineHold.png | Bin 0 -> 14711 bytes .../Images/DarkSkin/TimelineHold.png.meta | 107 + .../Images/DarkSkin/TimelineIconClipIn.png | Bin 0 -> 227 bytes .../Images/DarkSkin/TimelineIconClipIn.png.meta | 77 + .../Images/DarkSkin/TimelineIconClipOut.png | Bin 0 -> 143 bytes .../Images/DarkSkin/TimelineIconClipOut.png.meta | 77 + .../DarkSkin/TimelineInfiniteTrackNoShadow.png | Bin 0 -> 15479 bytes .../TimelineInfiniteTrackNoShadow.png.meta | 107 + .../Images/DarkSkin/TimelineKeyframe.png | Bin 0 -> 15713 bytes .../Images/DarkSkin/TimelineKeyframe.png.meta | 107 + .../Images/DarkSkin/TimelineLockButton.png | Bin 0 -> 218 bytes .../Images/DarkSkin/TimelineLockButton.png.meta | 77 + .../Images/DarkSkin/TimelineLockButton@2x.png | Bin 0 -> 340 bytes .../Images/DarkSkin/TimelineLockButton@2x.png.meta | 91 + .../StyleSheets/Images/DarkSkin/TimelineLoop.png | Bin 0 -> 14738 bytes .../Images/DarkSkin/TimelineLoop.png.meta | 107 + .../Images/DarkSkin/TimelineMarkerItem.png | Bin 0 -> 357 bytes .../Images/DarkSkin/TimelineMarkerItem.png.meta | 90 + .../DarkSkin/TimelineMarkerItemCollapsed.png | Bin 0 -> 200 bytes .../DarkSkin/TimelineMarkerItemCollapsed.png.meta | 90 + .../Images/DarkSkin/TimelineMarkerItemSelected.png | Bin 0 -> 325 bytes .../DarkSkin/TimelineMarkerItemSelected.png.meta | 90 + .../Images/DarkSkin/TimelinePingPong.png | Bin 0 -> 14757 bytes .../Images/DarkSkin/TimelinePingPong.png.meta | 77 + .../Images/DarkSkin/TimelinePlayRange.png | Bin 0 -> 216 bytes .../Images/DarkSkin/TimelinePlayRange.png.meta | 77 + .../Images/DarkSkin/TimelineSignalCollapsed.png | Bin 0 -> 206 bytes .../DarkSkin/TimelineSignalCollapsed.png.meta | 83 + .../Images/DarkSkin/TimelineSignalSelected.png | Bin 0 -> 202 bytes .../DarkSkin/TimelineSignalSelected.png.meta | 88 + .../Images/DarkSkin/TimelineStartPlayback.png | Bin 0 -> 2822 bytes .../Images/DarkSkin/TimelineStartPlayback.png.meta | 77 + .../Images/DarkSkin/TimelineTimeCursor.png | Bin 0 -> 15465 bytes .../Images/DarkSkin/TimelineTimeCursor.png.meta | 77 + .../Editor/StyleSheets/Images/Icons.meta | 8 + .../Icons/Timeline-Marker-Warning-Overlay.png | Bin 0 -> 334 bytes .../Icons/Timeline-Marker-Warning-Overlay.png.meta | 115 + .../StyleSheets/Images/Icons/TimelineClipBG.png | Bin 0 -> 784 bytes .../Images/Icons/TimelineClipBG.png.meta | 115 + .../StyleSheets/Images/Icons/TimelineClipFG.png | Bin 0 -> 156 bytes .../Images/Icons/TimelineClipFG.png.meta | 115 + .../StyleSheets/Images/Icons/TimelineDigIn.png | Bin 0 -> 218 bytes .../Images/Icons/TimelineDigIn.png.meta | 115 + .../Images/Icons/TimelineEditModeMixOFF.png | Bin 0 -> 2776 bytes .../Images/Icons/TimelineEditModeMixOFF.png.meta | 115 + .../Images/Icons/TimelineEditModeMixON.png | Bin 0 -> 3244 bytes .../Images/Icons/TimelineEditModeMixON.png.meta | 115 + .../Images/Icons/TimelineEditModeReplaceOFF.png | Bin 0 -> 2747 bytes .../Icons/TimelineEditModeReplaceOFF.png.meta | 115 + .../Images/Icons/TimelineEditModeReplaceON.png | Bin 0 -> 3131 bytes .../Icons/TimelineEditModeReplaceON.png.meta | 115 + .../Images/Icons/TimelineEditModeRippleOFF.png | Bin 0 -> 3724 bytes .../Icons/TimelineEditModeRippleOFF.png.meta | 115 + .../Images/Icons/TimelineEditModeRippleON.png | Bin 0 -> 3376 bytes .../Images/Icons/TimelineEditModeRippleON.png.meta | 115 + .../Images/Icons/TimelineHeaderMarkerIcon.png | Bin 0 -> 410 bytes .../Images/Icons/TimelineHeaderMarkerIcon.png.meta | 115 + .../Icons/TimelineMarkerAreaButtonDisabled.png | Bin 0 -> 1533 bytes .../TimelineMarkerAreaButtonDisabled.png.meta | 115 + .../Icons/TimelineMarkerAreaButtonEnabled.png | Bin 0 -> 1533 bytes .../Icons/TimelineMarkerAreaButtonEnabled.png.meta | 115 + .../StyleSheets/Images/Icons/TimelineSelector.png | Bin 0 -> 15489 bytes .../Images/Icons/TimelineSelector.png.meta | 139 + .../StyleSheets/Images/Icons/TimelineSignal.png | Bin 0 -> 1724 bytes .../Images/Icons/TimelineSignal.png.meta | 88 + .../StyleSheets/Images/Icons/d_TimelineDigIn.png | Bin 0 -> 218 bytes .../Images/Icons/d_TimelineDigIn.png.meta | 115 + .../Images/Icons/d_TimelineEditModeMixOFF.png | Bin 0 -> 1755 bytes .../Images/Icons/d_TimelineEditModeMixOFF.png.meta | 115 + .../Images/Icons/d_TimelineEditModeMixON.png | Bin 0 -> 1745 bytes .../Images/Icons/d_TimelineEditModeMixON.png.meta | 115 + .../Images/Icons/d_TimelineEditModeReplaceOFF.png | Bin 0 -> 1518 bytes .../Icons/d_TimelineEditModeReplaceOFF.png.meta | 115 + .../Images/Icons/d_TimelineEditModeReplaceON.png | Bin 0 -> 1733 bytes .../Icons/d_TimelineEditModeReplaceON.png.meta | 115 + .../Images/Icons/d_TimelineEditModeRippleOFF.png | Bin 0 -> 2362 bytes .../Icons/d_TimelineEditModeRippleOFF.png.meta | 115 + .../Images/Icons/d_TimelineEditModeRippleON.png | Bin 0 -> 1997 bytes .../Icons/d_TimelineEditModeRippleON.png.meta | 115 + .../Images/Icons/d_TimelineHeaderMarkerIcon.png | Bin 0 -> 417 bytes .../Icons/d_TimelineHeaderMarkerIcon.png.meta | 115 + .../Icons/d_TimelineMarkerAreaButtonDisabled.png | Bin 0 -> 241 bytes .../d_TimelineMarkerAreaButtonDisabled.png.meta | 115 + .../Icons/d_TimelineMarkerAreaButtonEnabled.png | Bin 0 -> 242 bytes .../d_TimelineMarkerAreaButtonEnabled.png.meta | 115 + .../Images/Icons/d_TimelineSelector.png | Bin 0 -> 15489 bytes .../Images/Icons/d_TimelineSelector.png.meta | 139 + .../StyleSheets/Images/Icons/d_TimelineSignal.png | Bin 0 -> 207 bytes .../Images/Icons/d_TimelineSignal.png.meta | 88 + .../Editor/StyleSheets/Images/LightSkin.meta | 8 + .../Images/LightSkin/TimelineActivation.png | Bin 0 -> 14964 bytes .../Images/LightSkin/TimelineActivation.png.meta | 107 + .../Images/LightSkin/TimelineAutokey.png | Bin 0 -> 1323 bytes .../Images/LightSkin/TimelineAutokey.png.meta | 77 + .../Images/LightSkin/TimelineAutokey@2x.png | Bin 0 -> 2131 bytes .../Images/LightSkin/TimelineAutokey@2x.png.meta | 91 + .../Images/LightSkin/TimelineAutokey_active.png | Bin 0 -> 344 bytes .../LightSkin/TimelineAutokey_active.png.meta | 77 + .../Images/LightSkin/TimelineAutokey_active@2x.png | Bin 0 -> 647 bytes .../LightSkin/TimelineAutokey_active@2x.png.meta | 91 + .../TimelineCollapseMarkerButtonDisabled.png | Bin 0 -> 348 bytes .../TimelineCollapseMarkerButtonDisabled.png.meta | 88 + .../TimelineCollapseMarkerButtonEnabled.png | Bin 0 -> 356 bytes .../TimelineCollapseMarkerButtonEnabled.png.meta | 88 + .../Images/LightSkin/TimelineContinue.png | Bin 0 -> 15525 bytes .../Images/LightSkin/TimelineContinue.png.meta | 107 + .../Images/LightSkin/TimelineCurvesOff.png | Bin 0 -> 15681 bytes .../Images/LightSkin/TimelineCurvesOff.png.meta | 107 + .../Images/LightSkin/TimelineCurvesOn.png | Bin 0 -> 15653 bytes .../Images/LightSkin/TimelineCurvesOn.png.meta | 77 + .../LightSkin/TimelineDisabledBackground.png | Bin 0 -> 2139 bytes .../LightSkin/TimelineDisabledBackground.png.meta | 119 + .../Images/LightSkin/TimelineEndPlayback.png | Bin 0 -> 2816 bytes .../Images/LightSkin/TimelineEndPlayback.png.meta | 77 + .../StyleSheets/Images/LightSkin/TimelineEye.png | Bin 0 -> 457 bytes .../Images/LightSkin/TimelineEye.png.meta | 77 + .../Images/LightSkin/TimelineEye@2x.png | Bin 0 -> 889 bytes .../Images/LightSkin/TimelineEye@2x.png.meta | 91 + .../StyleSheets/Images/LightSkin/TimelineHold.png | Bin 0 -> 15597 bytes .../Images/LightSkin/TimelineHold.png.meta | 107 + .../Images/LightSkin/TimelineIconClipIn.png | Bin 0 -> 15065 bytes .../Images/LightSkin/TimelineIconClipIn.png.meta | 107 + .../Images/LightSkin/TimelineIconClipOut.png | Bin 0 -> 15695 bytes .../Images/LightSkin/TimelineIconClipOut.png.meta | 107 + .../LightSkin/TimelineInfiniteTrackNoShadow.png | Bin 0 -> 15486 bytes .../TimelineInfiniteTrackNoShadow.png.meta | 107 + .../Images/LightSkin/TimelineKeyframe.png | Bin 0 -> 15714 bytes .../Images/LightSkin/TimelineKeyframe.png.meta | 107 + .../Images/LightSkin/TimelineLockButton.png | Bin 0 -> 203 bytes .../Images/LightSkin/TimelineLockButton.png.meta | 77 + .../Images/LightSkin/TimelineLockButton@2x.png | Bin 0 -> 346 bytes .../LightSkin/TimelineLockButton@2x.png.meta | 91 + .../StyleSheets/Images/LightSkin/TimelineLoop.png | Bin 0 -> 15174 bytes .../Images/LightSkin/TimelineLoop.png.meta | 77 + .../Images/LightSkin/TimelineMarkerItem.png | Bin 0 -> 339 bytes .../Images/LightSkin/TimelineMarkerItem.png.meta | 90 + .../LightSkin/TimelineMarkerItemCollapsed.png | Bin 0 -> 191 bytes .../LightSkin/TimelineMarkerItemCollapsed.png.meta | 90 + .../LightSkin/TimelineMarkerItemSelected.png | Bin 0 -> 263 bytes .../LightSkin/TimelineMarkerItemSelected.png.meta | 90 + .../Images/LightSkin/TimelinePingPong.png | Bin 0 -> 15179 bytes .../Images/LightSkin/TimelinePingPong.png.meta | 77 + .../Images/LightSkin/TimelinePlayRange.png | Bin 0 -> 14680 bytes .../Images/LightSkin/TimelinePlayRange.png.meta | 77 + .../Images/LightSkin/TimelineSignalCollapsed.png | Bin 0 -> 203 bytes .../LightSkin/TimelineSignalCollapsed.png.meta | 86 + .../Images/LightSkin/TimelineSignalSelected.png | Bin 0 -> 184 bytes .../LightSkin/TimelineSignalSelected.png.meta | 88 + .../Images/LightSkin/TimelineStartPlayback.png | Bin 0 -> 2814 bytes .../LightSkin/TimelineStartPlayback.png.meta | 77 + .../Images/LightSkin/TimelineTimeCursor.png | Bin 0 -> 15479 bytes .../Images/LightSkin/TimelineTimeCursor.png.meta | 77 + .../Editor/StyleSheets/Images/Shared.meta | 8 + .../Shared/Timeline-Marker-Multi-Overlay.png | Bin 0 -> 126 bytes .../Shared/Timeline-Marker-Multi-Overlay.png.meta | 108 + .../Images/Shared/TimelineBottomShadow.png | Bin 0 -> 96 bytes .../Images/Shared/TimelineBottomShadow.png.meta | 117 + .../Images/Shared/TimelineConnector.png | Bin 0 -> 14566 bytes .../Images/Shared/TimelineConnector.png.meta | 107 + .../StyleSheets/Images/Shared/TimelineDisplay.png | Bin 0 -> 214 bytes .../Images/Shared/TimelineDisplay.png.meta | 104 + .../Images/Shared/TimelineGroupBackground.png | Bin 0 -> 149 bytes .../Images/Shared/TimelineGroupBackground.png.meta | 77 + .../StyleSheets/Images/Shared/TimelineOutline.png | Bin 0 -> 14678 bytes .../Images/Shared/TimelineOutline.png.meta | 77 + .../StyleSheets/Images/Shared/TimelineSeqEnd.png | Bin 0 -> 14981 bytes .../Images/Shared/TimelineSeqEnd.png.meta | 77 + .../StyleSheets/Images/Shared/TimelineSwatch.png | Bin 0 -> 14552 bytes .../Images/Shared/TimelineSwatch.png.meta | 117 + .../StyleSheets/Images/Shared/TimelineWarning.png | Bin 0 -> 361 bytes .../Images/Shared/TimelineWarning.png.meta | 77 + .../Editor/StyleSheets/res.meta | 8 + .../Editor/StyleSheets/res/HumanoidDefault.anim | 6683 +++++++ .../StyleSheets/res/HumanoidDefault.anim.meta | 10 + .../Editor/StyleSheets/res/Timeline_DarkSkin.txt | 52 + .../StyleSheets/res/Timeline_DarkSkin.txt.meta | 8 + .../Editor/StyleSheets/res/Timeline_LightSkin.txt | 52 + .../StyleSheets/res/Timeline_LightSkin.txt.meta | 8 + .../Editor/TimelineEditor.cs | 173 + .../Editor/TimelineEditor.cs.meta | 11 + .../Editor/TimelineHelpers.cs | 929 + .../Editor/TimelineHelpers.cs.meta | 11 + .../Editor/TimelineSelection.cs | 331 + .../Editor/TimelineSelection.cs.meta | 11 + .../Editor/TimelineUtility.cs | 315 + .../Editor/TimelineUtility.cs.meta | 11 + .../com.unity.timeline@1.2.13/Editor/Tooltip.cs | 110 + .../Editor/Tooltip.cs.meta | 11 + .../com.unity.timeline@1.2.13/Editor/Trackhead.cs | 363 + .../Editor/Trackhead.cs.meta | 11 + .../Editor/Unity.Timeline.Editor.asmdef | 10 + .../Editor/Unity.Timeline.Editor.asmdef.meta | 7 + .../Editor/UnityEditorInternals.cs | 19 + .../Editor/UnityEditorInternals.cs.meta | 3 + .../Editor/Utilities.meta | 8 + .../Editor/Utilities/AnimatedParameterCache.cs | 91 + .../Utilities/AnimatedParameterCache.cs.meta | 11 + .../Editor/Utilities/AnimatedParameterUtility.cs | 358 + .../Utilities/AnimatedParameterUtility.cs.meta | 11 + .../Editor/Utilities/BindingUtility.cs | 58 + .../Editor/Utilities/BindingUtility.cs.meta | 11 + .../Editor/Utilities/BreadcrumbDrawer.cs | 235 + .../Editor/Utilities/BreadcrumbDrawer.cs.meta | 11 + .../Editor/Utilities/ClipModifier.cs | 386 + .../Editor/Utilities/ClipModifier.cs.meta | 11 + .../Editor/Utilities/Clipboard.cs | 142 + .../Editor/Utilities/Clipboard.cs.meta | 11 + .../Editor/Utilities/ControlPlayableUtility.cs | 62 + .../Utilities/ControlPlayableUtility.cs.meta | 11 + .../Editor/Utilities/CustomTrackDrawerAttribute.cs | 47 + .../Utilities/CustomTrackDrawerAttribute.cs.meta | 11 + .../Editor/Utilities/DisplayNameHelper.cs | 33 + .../Editor/Utilities/DisplayNameHelper.cs.meta | 11 + .../Editor/Utilities/GUIColorOverride.cs | 21 + .../Editor/Utilities/GUIColorOverride.cs.meta | 11 + .../Editor/Utilities/GUIGroupScope.cs | 18 + .../Editor/Utilities/GUIGroupScope.cs.meta | 11 + .../Editor/Utilities/GUIMixedValueScope.cs | 20 + .../Editor/Utilities/GUIMixedValueScope.cs.meta | 11 + .../Editor/Utilities/GUIViewportScope.cs | 34 + .../Editor/Utilities/GUIViewportScope.cs.meta | 11 + .../Editor/Utilities/Graphics.cs | 109 + .../Editor/Utilities/Graphics.cs.meta | 11 + .../Editor/Utilities/KeyTraverser.cs | 203 + .../Editor/Utilities/KeyTraverser.cs.meta | 11 + .../Editor/Utilities/MarkerModifier.cs | 66 + .../Editor/Utilities/MarkerModifier.cs.meta | 11 + .../Editor/Utilities/ObjectExtension.cs | 28 + .../Editor/Utilities/ObjectExtension.cs.meta | 11 + .../Editor/Utilities/ObjectReferenceField.cs | 195 + .../Editor/Utilities/ObjectReferenceField.cs.meta | 11 + .../Editor/Utilities/PropertyCollector.cs | 226 + .../Editor/Utilities/PropertyCollector.cs.meta | 11 + .../Editor/Utilities/Range.cs | 49 + .../Editor/Utilities/Range.cs.meta | 11 + .../Utilities/SequenceSelectorNameFormater.cs | 32 + .../Utilities/SequenceSelectorNameFormater.cs.meta | 11 + .../Editor/Utilities/SpacePartitioner.cs | 127 + .../Editor/Utilities/SpacePartitioner.cs.meta | 11 + .../Editor/Utilities/StyleManager.cs | 60 + .../Editor/Utilities/StyleManager.cs.meta | 11 + .../Editor/Utilities/StyleNormalColorOverride.cs | 23 + .../Utilities/StyleNormalColorOverride.cs.meta | 11 + .../Editor/Utilities/TimeReferenceUtility.cs | 57 + .../Editor/Utilities/TimeReferenceUtility.cs.meta | 11 + .../Editor/Utilities/TimelineKeyboardNavigation.cs | 387 + .../Utilities/TimelineKeyboardNavigation.cs.meta | 11 + .../Editor/Utilities/TrackModifier.cs | 21 + .../Editor/Utilities/TrackModifier.cs.meta | 11 + .../Editor/Utilities/TrackResourceCache.cs | 121 + .../Editor/Utilities/TrackResourceCache.cs.meta | 11 + .../Editor/Utilities/TypeUtility.cs | 342 + .../Editor/Utilities/TypeUtility.cs.meta | 11 + .../com.unity.timeline@1.2.13/Editor/Window.meta | 8 + .../Editor/Window/Modes.meta | 8 + .../Editor/Window/Modes/TimeReferenceMode.cs | 8 + .../Editor/Window/Modes/TimeReferenceMode.cs.meta | 11 + .../Editor/Window/Modes/TimelineActiveMode.cs | 42 + .../Editor/Window/Modes/TimelineActiveMode.cs.meta | 11 + .../Window/Modes/TimelineAssetEditionMode.cs | 27 + .../Window/Modes/TimelineAssetEditionMode.cs.meta | 11 + .../Editor/Window/Modes/TimelineDisabledMode.cs | 44 + .../Window/Modes/TimelineDisabledMode.cs.meta | 11 + .../Editor/Window/Modes/TimelineInactiveMode.cs | 47 + .../Window/Modes/TimelineInactiveMode.cs.meta | 11 + .../Editor/Window/Modes/TimelineMode.cs | 71 + .../Editor/Window/Modes/TimelineMode.cs.meta | 11 + .../Editor/Window/Modes/TimelineReadOnlyMode.cs | 52 + .../Window/Modes/TimelineReadOnlyMode.cs.meta | 11 + .../Editor/Window/PlaybackScroller.cs | 54 + .../Editor/Window/PlaybackScroller.cs.meta | 11 + .../Editor/Window/TimelineMarkerHeaderGUI.cs | 201 + .../Editor/Window/TimelineMarkerHeaderGUI.cs.meta | 11 + .../Editor/Window/TimelineWindow.cs | 541 + .../Editor/Window/TimelineWindow.cs.meta | 11 + .../Editor/Window/TimelineWindowTimeControl.cs | 331 + .../Window/TimelineWindowTimeControl.cs.meta | 11 + .../Editor/Window/TimelineWindow_ActiveTimeline.cs | 80 + .../Window/TimelineWindow_ActiveTimeline.cs.meta | 11 + .../Editor/Window/TimelineWindow_Breadcrumbs.cs | 118 + .../Window/TimelineWindow_Breadcrumbs.cs.meta | 11 + .../Editor/Window/TimelineWindow_Duration.cs | 128 + .../Editor/Window/TimelineWindow_Duration.cs.meta | 11 + .../Window/TimelineWindow_EditorCallbacks.cs | 272 + .../Window/TimelineWindow_EditorCallbacks.cs.meta | 11 + .../Editor/Window/TimelineWindow_Gui.cs | 511 + .../Editor/Window/TimelineWindow_Gui.cs.meta | 11 + .../Editor/Window/TimelineWindow_HeaderGui.cs | 314 + .../Editor/Window/TimelineWindow_HeaderGui.cs.meta | 11 + .../Editor/Window/TimelineWindow_Manipulators.cs | 41 + .../Window/TimelineWindow_Manipulators.cs.meta | 11 + .../Editor/Window/TimelineWindow_PlayRange.cs | 131 + .../Editor/Window/TimelineWindow_PlayRange.cs.meta | 11 + .../Editor/Window/TimelineWindow_PlayableLookup.cs | 79 + .../Window/TimelineWindow_PlayableLookup.cs.meta | 11 + .../Window/TimelineWindow_PreviewPlayMode.cs | 80 + .../Window/TimelineWindow_PreviewPlayMode.cs.meta | 11 + .../Editor/Window/TimelineWindow_Selection.cs | 80 + .../Editor/Window/TimelineWindow_Selection.cs.meta | 11 + .../Editor/Window/TimelineWindow_StateChange.cs | 53 + .../Window/TimelineWindow_StateChange.cs.meta | 11 + .../Editor/Window/TimelineWindow_TimeArea.cs | 107 + .../Editor/Window/TimelineWindow_TimeArea.cs.meta | 11 + .../Editor/Window/TimelineWindow_TimeCursor.cs | 83 + .../Window/TimelineWindow_TimeCursor.cs.meta | 11 + .../Editor/Window/TimelineWindow_TrackGui.cs | 219 + .../Editor/Window/TimelineWindow_TrackGui.cs.meta | 11 + .../Editor/Window/ViewModel.meta | 8 + .../Window/ViewModel/ScriptableObjectViewPrefs.cs | 119 + .../ViewModel/ScriptableObjectViewPrefs.cs.meta | 11 + .../Window/ViewModel/TimelineAssetViewModel.cs | 116 + .../ViewModel/TimelineAssetViewModel.cs.meta | 11 + .../Window/ViewModel/TimelineWindowViewPrefs.cs | 170 + .../ViewModel/TimelineWindowViewPrefs.cs.meta | 11 + .../Editor/Window/WindowConstants.cs | 45 + .../Editor/Window/WindowConstants.cs.meta | 11 + .../Editor/inspectors.meta | 8 + .../inspectors/AnimationPlayableAssetInspector.cs | 341 + .../AnimationPlayableAssetInspector.cs.meta | 11 + .../Editor/inspectors/AnimationTrackInspector.cs | 504 + .../inspectors/AnimationTrackInspector.cs.meta | 11 + .../Editor/inspectors/BasicAssetInspector.cs | 41 + .../Editor/inspectors/BasicAssetInspector.cs.meta | 11 + .../Editor/inspectors/BuiltInCurvePresets.cs | 58 + .../Editor/inspectors/BuiltInCurvePresets.cs.meta | 11 + .../Editor/inspectors/ClipInspector.meta | 8 + .../inspectors/ClipInspector/ClipInspector.cs | 786 + .../inspectors/ClipInspector/ClipInspector.cs.meta | 11 + .../ClipInspector/ClipInspectorCurveEditor.cs | 348 + .../ClipInspector/ClipInspectorCurveEditor.cs.meta | 11 + .../ClipInspector/ClipInspectorSelectionInfo.cs | 132 + .../ClipInspectorSelectionInfo.cs.meta | 11 + .../Editor/inspectors/CurvesOwner.meta | 8 + .../CurvesOwner/CurvesOwnerInspectorHelper.cs | 109 + .../CurvesOwner/CurvesOwnerInspectorHelper.cs.meta | 11 + .../CurvesOwner/ICurvesOwnerInspectorWrapper.cs | 14 + .../ICurvesOwnerInspectorWrapper.cs.meta | 11 + .../inspectors/DirectorNamedColorInspector.cs | 27 + .../inspectors/DirectorNamedColorInspector.cs.meta | 11 + .../Editor/inspectors/EditorClip.cs | 24 + .../Editor/inspectors/EditorClip.cs.meta | 11 + .../Editor/inspectors/EditorClipFactory.cs | 53 + .../Editor/inspectors/EditorClipFactory.cs.meta | 11 + .../Editor/inspectors/GroupTrackInspector.cs | 107 + .../Editor/inspectors/GroupTrackInspector.cs.meta | 11 + .../Editor/inspectors/MarkerInspector.cs | 69 + .../Editor/inspectors/MarkerInspector.cs.meta | 11 + .../Editor/inspectors/TimeFieldDrawer.cs | 69 + .../Editor/inspectors/TimeFieldDrawer.cs.meta | 11 + .../Editor/inspectors/TimelineAssetInspector.cs | 78 + .../inspectors/TimelineAssetInspector.cs.meta | 11 + .../Editor/inspectors/TimelineInspectorUtility.cs | 353 + .../inspectors/TimelineInspectorUtility.cs.meta | 11 + .../Editor/inspectors/TrackAssetInspector.cs | 203 + .../Editor/inspectors/TrackAssetInspector.cs.meta | 11 + .../com.unity.timeline@1.2.13/Editor/treeview.meta | 8 + .../Editor/treeview/AnimationTrackKeyDataSource.cs | 25 + .../treeview/AnimationTrackKeyDataSource.cs.meta | 11 + .../Editor/treeview/Control.cs | 28 + .../Editor/treeview/Control.cs.meta | 11 + .../Editor/treeview/Drawers.meta | 8 + .../treeview/Drawers/AnimationTrackDrawer.cs | 86 + .../treeview/Drawers/AnimationTrackDrawer.cs.meta | 11 + .../Editor/treeview/Drawers/ClipDrawer.cs | 678 + .../Editor/treeview/Drawers/ClipDrawer.cs.meta | 11 + .../Editor/treeview/Drawers/InfiniteTrackDrawer.cs | 86 + .../treeview/Drawers/InfiniteTrackDrawer.cs.meta | 11 + .../Editor/treeview/Drawers/Layers.meta | 8 + .../Editor/treeview/Drawers/Layers/ClipsLayer.cs | 57 + .../treeview/Drawers/Layers/ClipsLayer.cs.meta | 11 + .../Editor/treeview/Drawers/Layers/ItemsLayer.cs | 134 + .../treeview/Drawers/Layers/ItemsLayer.cs.meta | 11 + .../Editor/treeview/Drawers/Layers/MarkersLayer.cs | 80 + .../treeview/Drawers/Layers/MarkersLayer.cs.meta | 11 + .../Editor/treeview/Drawers/TrackDrawer.cs | 51 + .../Editor/treeview/Drawers/TrackDrawer.cs.meta | 11 + .../Editor/treeview/Drawers/TrackItemsDrawer.cs | 42 + .../treeview/Drawers/TrackItemsDrawer.cs.meta | 11 + .../Editor/treeview/IPropertyKeyDataSource.cs | 71 + .../Editor/treeview/IPropertyKeyDataSource.cs.meta | 11 + .../Editor/treeview/IRowGUI.cs | 16 + .../Editor/treeview/IRowGUI.cs.meta | 11 + .../Editor/treeview/InlineCurveEditor.cs | 299 + .../Editor/treeview/InlineCurveEditor.cs.meta | 11 + .../Editor/treeview/ItemGui.meta | 8 + .../Editor/treeview/ItemGui/ISelectable.cs | 11 + .../Editor/treeview/ItemGui/ISelectable.cs.meta | 11 + .../Editor/treeview/ItemGui/TimelineClipGUI.cs | 760 + .../treeview/ItemGui/TimelineClipGUI.cs.meta | 11 + .../Editor/treeview/ItemGui/TimelineItemGUI.cs | 92 + .../treeview/ItemGui/TimelineItemGUI.cs.meta | 11 + .../treeview/ItemGui/TimelineMarkerClusterGUI.cs | 150 + .../ItemGui/TimelineMarkerClusterGUI.cs.meta | 11 + .../Editor/treeview/ItemGui/TimelineMarkerGUI.cs | 193 + .../treeview/ItemGui/TimelineMarkerGUI.cs.meta | 11 + .../Editor/treeview/ManipulationsClips.cs | 77 + .../Editor/treeview/ManipulationsClips.cs.meta | 11 + .../Editor/treeview/ManipulationsTimeline.cs | 287 + .../Editor/treeview/ManipulationsTimeline.cs.meta | 11 + .../Editor/treeview/ManipulationsTracks.cs | 103 + .../Editor/treeview/ManipulationsTracks.cs.meta | 11 + .../Editor/treeview/Manipulator.cs | 91 + .../Editor/treeview/Manipulator.cs.meta | 11 + .../Editor/treeview/PickerUtils.cs | 41 + .../Editor/treeview/PickerUtils.cs.meta | 11 + .../Editor/treeview/Snapping.meta | 8 + .../Editor/treeview/Snapping/IAttractable.cs | 21 + .../Editor/treeview/Snapping/IAttractable.cs.meta | 11 + .../Editor/treeview/Snapping/ISnappable.cs | 22 + .../Editor/treeview/Snapping/ISnappable.cs.meta | 11 + .../Editor/treeview/Snapping/SnapEngine.cs | 288 + .../Editor/treeview/Snapping/SnapEngine.cs.meta | 11 + .../Editor/treeview/TimelineClipHandle.cs | 53 + .../Editor/treeview/TimelineClipHandle.cs.meta | 11 + .../Editor/treeview/TimelineClipUnion.cs | 126 + .../Editor/treeview/TimelineClipUnion.cs.meta | 11 + .../Editor/treeview/TimelineDataSource.cs | 222 + .../Editor/treeview/TimelineDataSource.cs.meta | 11 + .../Editor/treeview/TimelineDragging.cs | 683 + .../Editor/treeview/TimelineDragging.cs.meta | 11 + .../Editor/treeview/TimelineGroupGUI.cs | 310 + .../Editor/treeview/TimelineGroupGUI.cs.meta | 11 + .../Editor/treeview/TimelineTrackBaseGUI.cs | 218 + .../Editor/treeview/TimelineTrackBaseGUI.cs.meta | 11 + .../Editor/treeview/TimelineTrackErrorGUI.cs | 185 + .../Editor/treeview/TimelineTrackErrorGUI.cs.meta | 11 + .../Editor/treeview/TimelineTrackGUI.cs | 812 + .../Editor/treeview/TimelineTrackGUI.cs.meta | 11 + .../Editor/treeview/TimelineTreeView.cs | 439 + .../Editor/treeview/TimelineTreeView.cs.meta | 11 + .../Editor/treeview/TimelineTreeViewGUI.cs | 182 + .../Editor/treeview/TimelineTreeViewGUI.cs.meta | 11 + .../treeview/TrackPropertyCurvesDataSource.cs | 15 + .../treeview/TrackPropertyCurvesDataSource.cs.meta | 11 + .../com.unity.timeline@1.2.13/LICENSE.md | 5 + .../com.unity.timeline@1.2.13/LICENSE.md.meta | 7 + .../com.unity.timeline@1.2.13/README.md | 37 + .../com.unity.timeline@1.2.13/README.md.meta | 7 + .../com.unity.timeline@1.2.13/Runtime.meta | 8 + .../Runtime/Activation.meta | 8 + .../Runtime/Activation/ActivationMixerPlayable.cs | 71 + .../Activation/ActivationMixerPlayable.cs.meta | 11 + .../Runtime/Activation/ActivationPlayableAsset.cs | 29 + .../Activation/ActivationPlayableAsset.cs.meta | 11 + .../Runtime/Activation/ActivationTrack.cs | 93 + .../Runtime/Activation/ActivationTrack.cs.meta | 11 + .../Runtime/Animation.meta | 8 + .../Animation/AnimationOutputWeightProcessor.cs | 93 + .../AnimationOutputWeightProcessor.cs.meta | 11 + .../Runtime/Animation/AnimationPlayableAsset.cs | 326 + .../Animation/AnimationPlayableAsset.cs.meta | 11 + .../Animation/AnimationPreviewUpdateCallback.cs | 54 + .../AnimationPreviewUpdateCallback.cs.meta | 11 + .../Runtime/Animation/AnimationTrack.cs | 971 + .../Runtime/Animation/AnimationTrack.cs.meta | 11 + .../Runtime/Animation/ICurvesOwner.cs | 15 + .../Runtime/Animation/ICurvesOwner.cs.meta | 11 + .../Runtime/AssetUpgrade.meta | 8 + .../AssetUpgrade/AnimationPlayableAssetUpgrade.cs | 47 + .../AnimationPlayableAssetUpgrade.cs.meta | 11 + .../Runtime/AssetUpgrade/AnimationTrackUpgrade.cs | 102 + .../AssetUpgrade/AnimationTrackUpgrade.cs.meta | 11 + .../Runtime/AssetUpgrade/ClipUpgrade.cs | 34 + .../Runtime/AssetUpgrade/ClipUpgrade.cs.meta | 11 + .../Runtime/AssetUpgrade/TimelineUpgrade.cs | 21 + .../Runtime/AssetUpgrade/TimelineUpgrade.cs.meta | 11 + .../Runtime/AssetUpgrade/TrackUpgrade.cs | 76 + .../Runtime/AssetUpgrade/TrackUpgrade.cs.meta | 11 + .../Runtime/Attributes.meta | 8 + .../Runtime/Attributes/TrackColorAttribute.cs | 33 + .../Runtime/Attributes/TrackColorAttribute.cs.meta | 11 + .../com.unity.timeline@1.2.13/Runtime/Audio.meta | 8 + .../Runtime/Audio/AudioClipProperties.cs | 13 + .../Runtime/Audio/AudioClipProperties.cs.meta | 11 + .../Runtime/Audio/AudioMixerProperties.cs | 45 + .../Runtime/Audio/AudioMixerProperties.cs.meta | 11 + .../Runtime/Audio/AudioPlayableAsset.cs | 133 + .../Runtime/Audio/AudioPlayableAsset.cs.meta | 11 + .../Runtime/Audio/AudioTrack.cs | 129 + .../Runtime/Audio/AudioTrack.cs.meta | 11 + .../com.unity.timeline@1.2.13/Runtime/ClipCaps.cs | 85 + .../Runtime/ClipCaps.cs.meta | 11 + .../com.unity.timeline@1.2.13/Runtime/Control.meta | 8 + .../Runtime/Control/ControlPlayableAsset.cs | 406 + .../Runtime/Control/ControlPlayableAsset.cs.meta | 11 + .../Runtime/Control/ControlTrack.cs | 14 + .../Runtime/Control/ControlTrack.cs.meta | 11 + .../Runtime/DiscreteTime.cs | 226 + .../Runtime/DiscreteTime.cs.meta | 11 + .../Runtime/Evaluation.meta | 8 + .../Runtime/Evaluation/InfiniteRuntimeClip.cs | 46 + .../Runtime/Evaluation/InfiniteRuntimeClip.cs.meta | 11 + .../Runtime/Evaluation/IntervalTree.cs | 271 + .../Runtime/Evaluation/IntervalTree.cs.meta | 11 + .../Runtime/Evaluation/RuntimeClip.cs | 110 + .../Runtime/Evaluation/RuntimeClip.cs.meta | 11 + .../Runtime/Evaluation/RuntimeClipBase.cs | 21 + .../Runtime/Evaluation/RuntimeClipBase.cs.meta | 11 + .../Runtime/Evaluation/RuntimeElement.cs | 17 + .../Runtime/Evaluation/RuntimeElement.cs.meta | 11 + .../Runtime/Evaluation/ScheduleRuntimeClip.cs | 111 + .../Runtime/Evaluation/ScheduleRuntimeClip.cs.meta | 11 + .../com.unity.timeline@1.2.13/Runtime/Events.meta | 8 + .../Runtime/Events/IMarker.cs | 31 + .../Runtime/Events/IMarker.cs.meta | 11 + .../Runtime/Events/INotificationOptionProvider.cs | 15 + .../Events/INotificationOptionProvider.cs.meta | 11 + .../Runtime/Events/Marker.cs | 53 + .../Runtime/Events/Marker.cs.meta | 11 + .../Runtime/Events/MarkerList.cs | 168 + .../Runtime/Events/MarkerList.cs.meta | 11 + .../Runtime/Events/MarkerTrack.cs | 28 + .../Runtime/Events/MarkerTrack.cs.meta | 11 + .../Runtime/Events/SignalTrack.cs | 19 + .../Runtime/Events/SignalTrack.cs.meta | 11 + .../Runtime/Events/Signals.meta | 8 + .../Events/Signals/CustomSignalEventDrawer.cs | 5 + .../Events/Signals/CustomSignalEventDrawer.cs.meta | 11 + .../Runtime/Events/Signals/SignalAsset.cs | 22 + .../Runtime/Events/Signals/SignalAsset.cs.meta | 11 + .../Runtime/Events/Signals/SignalEmitter.cs | 72 + .../Runtime/Events/Signals/SignalEmitter.cs.meta | 11 + .../Runtime/Events/Signals/SignalReceiver.cs | 248 + .../Runtime/Events/Signals/SignalReceiver.cs.meta | 11 + .../Runtime/Extensions.meta | 8 + .../Runtime/Extensions/TrackExtensions.cs | 76 + .../Runtime/Extensions/TrackExtensions.cs.meta | 11 + .../Runtime/GroupTrack.cs | 26 + .../Runtime/GroupTrack.cs.meta | 11 + .../Runtime/ILayerable.cs | 20 + .../Runtime/ILayerable.cs.meta | 11 + .../Runtime/Playables.meta | 8 + .../Runtime/Playables/ActivationControlPlayable.cs | 140 + .../Playables/ActivationControlPlayable.cs.meta | 11 + .../Runtime/Playables/BasicScriptPlayable.cs | 91 + .../Runtime/Playables/BasicScriptPlayable.cs.meta | 11 + .../Runtime/Playables/DirectorControlPlayable.cs | 206 + .../Playables/DirectorControlPlayable.cs.meta | 11 + .../Runtime/Playables/ITimeControl.cs | 27 + .../Runtime/Playables/ITimeControl.cs.meta | 11 + .../Runtime/Playables/NotificationFlags.cs | 31 + .../Runtime/Playables/NotificationFlags.cs.meta | 11 + .../Runtime/Playables/ParticleControlPlayable.cs | 177 + .../Playables/ParticleControlPlayable.cs.meta | 11 + .../Runtime/Playables/PrefabControlPlayable.cs | 158 + .../Playables/PrefabControlPlayable.cs.meta | 11 + .../Runtime/Playables/TimeControlPlayable.cs | 85 + .../Runtime/Playables/TimeControlPlayable.cs.meta | 11 + .../Runtime/Playables/TimeNotificationBehaviour.cs | 254 + .../Playables/TimeNotificationBehaviour.cs.meta | 11 + .../Runtime/Properties.meta | 8 + .../Runtime/Properties/AssemblyInfo.cs | 28 + .../Runtime/Properties/AssemblyInfo.cs.meta | 11 + .../Runtime/Scripting.meta | 8 + .../Runtime/Scripting/PlayableTrack.cs | 23 + .../Runtime/Scripting/PlayableTrack.cs.meta | 11 + .../Runtime/Timeline.deprecated.cs | 34 + .../Runtime/Timeline.deprecated.cs.meta | 11 + .../Runtime/TimelineAsset.cs | 455 + .../Runtime/TimelineAsset.cs.meta | 11 + .../Runtime/TimelineAsset_CreateRemove.cs | 255 + .../Runtime/TimelineAsset_CreateRemove.cs.meta | 11 + .../Runtime/TimelineAttributes.cs | 222 + .../Runtime/TimelineAttributes.cs.meta | 11 + .../Runtime/TimelineClip.cs | 821 + .../Runtime/TimelineClip.cs.meta | 11 + .../Runtime/TimelinePlayable.cs | 310 + .../Runtime/TimelinePlayable.cs.meta | 11 + .../Runtime/TrackAsset.cs | 1264 ++ .../Runtime/TrackAsset.cs.meta | 11 + .../Runtime/Unity.Timeline.asmdef | 6 + .../Runtime/Unity.Timeline.asmdef.meta | 7 + .../Runtime/Utilities.meta | 8 + .../Runtime/Utilities/AnimationPreviewUtilities.cs | 266 + .../Utilities/AnimationPreviewUtilities.cs.meta | 11 + .../Runtime/Utilities/AnimatorBindingCache.cs | 133 + .../Runtime/Utilities/AnimatorBindingCache.cs.meta | 11 + .../Runtime/Utilities/Extrapolation.cs | 92 + .../Runtime/Utilities/Extrapolation.cs.meta | 11 + .../Runtime/Utilities/HashUtility.cs | 51 + .../Runtime/Utilities/HashUtility.cs.meta | 11 + .../Runtime/Utilities/IPropertyCollector.cs | 102 + .../Runtime/Utilities/IPropertyCollector.cs.meta | 11 + .../Runtime/Utilities/IPropertyPreview.cs | 17 + .../Runtime/Utilities/IPropertyPreview.cs.meta | 11 + .../Runtime/Utilities/NotificationUtilities.cs | 54 + .../Utilities/NotificationUtilities.cs.meta | 11 + .../Runtime/Utilities/TimeUtility.cs | 212 + .../Runtime/Utilities/TimeUtility.cs.meta | 11 + .../Runtime/Utilities/TimelineCreateUtilities.cs | 131 + .../Utilities/TimelineCreateUtilities.cs.meta | 11 + .../Runtime/Utilities/TimelineUndo.cs | 90 + .../Runtime/Utilities/TimelineUndo.cs.meta | 11 + .../Runtime/Utilities/WeightUtility.cs | 30 + .../Runtime/Utilities/WeightUtility.cs.meta | 11 + .../com.unity.timeline@1.2.13/package.json | 24 + .../com.unity.timeline@1.2.13/package.json.meta | 8 + Library/ProtocolInstance.json | 1 + Library/SceneVisibilityState.asset | Bin 0 -> 4244 bytes Library/ScriptAssemblies/BuiltinAssemblies.stamp | 1 + .../ScriptAssemblies/Unity.CollabProxy.Editor.dll | Bin 0 -> 40960 bytes .../ScriptAssemblies/Unity.CollabProxy.Editor.pdb | Bin 0 -> 14200 bytes Library/ScriptAssemblies/Unity.Rider.Editor.dll | Bin 0 -> 64000 bytes Library/ScriptAssemblies/Unity.Rider.Editor.pdb | Bin 0 -> 22940 bytes .../ScriptAssemblies/Unity.TextMeshPro.Editor.dll | Bin 0 -> 212480 bytes .../ScriptAssemblies/Unity.TextMeshPro.Editor.pdb | Bin 0 -> 76980 bytes Library/ScriptAssemblies/Unity.TextMeshPro.dll | Bin 0 -> 389632 bytes Library/ScriptAssemblies/Unity.TextMeshPro.pdb | Bin 0 -> 191852 bytes Library/ScriptAssemblies/Unity.Timeline.Editor.dll | Bin 0 -> 684032 bytes Library/ScriptAssemblies/Unity.Timeline.Editor.pdb | Bin 0 -> 346236 bytes Library/ScriptAssemblies/Unity.Timeline.dll | Bin 0 -> 138240 bytes Library/ScriptAssemblies/Unity.Timeline.pdb | Bin 0 -> 67556 bytes Library/ScriptAssemblies/Unity.VSCode.Editor.dll | Bin 0 -> 39424 bytes Library/ScriptAssemblies/Unity.VSCode.Editor.pdb | Bin 0 -> 9920 bytes .../ScriptAssemblies/UnityEditor.TestRunner.dll | Bin 0 -> 191488 bytes .../ScriptAssemblies/UnityEditor.TestRunner.pdb | Bin 0 -> 78832 bytes Library/ScriptAssemblies/UnityEditor.UI.dll | Bin 0 -> 84480 bytes Library/ScriptAssemblies/UnityEditor.UI.pdb | Bin 0 -> 31132 bytes .../ScriptAssemblies/UnityEngine.TestRunner.dll | Bin 0 -> 113664 bytes .../ScriptAssemblies/UnityEngine.TestRunner.pdb | Bin 0 -> 47252 bytes Library/ScriptAssemblies/UnityEngine.UI.dll | Bin 0 -> 257536 bytes Library/ScriptAssemblies/UnityEngine.UI.pdb | Bin 0 -> 143164 bytes Library/ScriptMapper | Bin 0 -> 13273 bytes Library/ShaderCache.db | Bin 0 -> 3072 bytes .../0/076199bb1b39eda6f92627da1a9d3ff0.bin | Bin 0 -> 4248 bytes .../0/0b2c08b8ea2ec29cf485a575221febef.bin | Bin 0 -> 4248 bytes .../0/0b687e7d9f12ccea32e0133d20adc925.bin | Bin 0 -> 68 bytes .../1/193cc80d98eb6a7812da3d34eb8599f8.bin | Bin 0 -> 68 bytes .../1/1a1c08cf3c449d7a30f32b63508b812f.bin | Bin 0 -> 68 bytes .../2/2529b5ba67567d4e67eb4e4635838a94.bin | Bin 0 -> 4288 bytes .../2/28905464b3cc6f7befbaf1df11623e94.bin | Bin 0 -> 88 bytes .../2/28ae83f9ba6cf68d89905f907618866a.bin | Bin 0 -> 8732 bytes .../3/31522e2d585e6b20716ee936a4f907c6.bin | Bin 0 -> 8732 bytes .../3/328ef793e0eef2abf3f3236c5a0f0c88.bin | Bin 0 -> 68 bytes .../3/3c7684957eb137974f0890b99bcf3d34.bin | Bin 0 -> 68 bytes .../3/3d9c974eb3e7805856171c163fe3dd75.bin | Bin 0 -> 96 bytes .../3/3e40d73039691620062b9040a260ffc7.bin | Bin 0 -> 10888 bytes .../4/4b900e93d36d8f65218b345d84d3b0bb.bin | Bin 0 -> 68 bytes .../5/5103e86894128bd534bdabed65fca9de.bin | Bin 0 -> 3640 bytes .../5/5234af91bc18c06807baf5591ce2c8a9.bin | Bin 0 -> 3640 bytes .../5/583925f9ddac204b53c83a7676598b73.bin | Bin 0 -> 88 bytes .../6/60d13387d4e64a5b7491ba19bf70fd0d.bin | Bin 0 -> 2624 bytes .../6/65eae410e4fd7ca1235d1b9cc1020b45.bin | Bin 0 -> 68 bytes .../6/666ea7828bda3d87518bfbf605434ee8.bin | Bin 0 -> 88 bytes .../7/70fa9efa2ca58e8ec1e886b79bd3b19c.bin | Bin 0 -> 68 bytes .../7/7329c493a25538e7bd95f80b7d464767.bin | Bin 0 -> 68 bytes .../7/73856dfe4b8184520815339d2a15e753.bin | Bin 0 -> 68 bytes .../7/73b46269b7ef34e41c0453ab3cbd92a8.bin | Bin 0 -> 20244 bytes .../7/78566e4f55c9a88c929972de2796df84.bin | Bin 0 -> 14236 bytes .../7/7e9aa0df64c5e5c2ab1e30f6802d9c1c.bin | Bin 0 -> 68 bytes .../8/80bdffc7d49f8a758b5b1a3de66255c3.bin | Bin 0 -> 104 bytes .../8/8cd6d43093caef021fda96e506042801.bin | Bin 0 -> 10288 bytes .../9/950f0b252903d424df2214a18da8cd00.bin | Bin 0 -> 68 bytes .../9/9a5af8262fc3a114b690c725a4dc1e11.bin | Bin 0 -> 12020 bytes .../9/9bfb39235848b2f8833dc5392fdffd5e.bin | Bin 0 -> 68 bytes Library/ShaderCache/EditorEncounteredVariants | Bin 0 -> 4892 bytes .../a/a120ad69fad6ec460a9d9516c7c52e9d.bin | Bin 0 -> 2552 bytes .../b/b526986fffc5211f9e4829dca9b435ab.bin | Bin 0 -> 5588 bytes .../b/b9f61b6c791cfc1e898bf4c62e52b830.bin | Bin 0 -> 18984 bytes .../b/be41d0145d551f3a4502b99637311c8b.bin | Bin 0 -> 4288 bytes .../b/be630b7bdfd8a48e504a8733e2ca993b.bin | Bin 0 -> 84 bytes .../c/c3e2230f20eb87adf0fbf735d49606d9.bin | Bin 0 -> 68 bytes .../c/c4cdcd3b72e995e9eb6da089b91f2bcc.bin | Bin 0 -> 2552 bytes .../c/c76392117c83e26a967ca522165557e0.bin | Bin 0 -> 10888 bytes .../d/d6409b5288682b86bc5ec8f8ad98b3fe.bin | Bin 0 -> 3424 bytes .../d/dc4afe49b45b8aab7240ab76a0b48cb4.bin | Bin 0 -> 68 bytes .../e/e818670cb3953921ac0e44b3f4d9a79a.bin | Bin 0 -> 10268 bytes .../e/e9795d3db5639c067c5fd255c72edd3d.bin | Bin 0 -> 5128 bytes .../f/f177fc9dcc37299e857ea1db2d241763.bin | Bin 0 -> 124 bytes Library/SourceAssetDB | Bin 0 -> 1126400 bytes Library/SourceAssetDB-lock | Bin 0 -> 8192 bytes Library/SpriteAtlasDatabase.asset | Bin 0 -> 4116 bytes Library/StateCache/Hierarchy/e29b2b-mainStage.json | 1 + Library/StateCache/SceneView/f83069-mainStage.json | 1 + Library/expandedItems | Bin 0 -> 4152 bytes Library/shadercompiler-UnityShaderCompiler0.log | 2 + Library/shadercompiler-UnityShaderCompiler1.log | 10 + Library/shadercompiler-UnityShaderCompiler2.log | 10 + Library/shadercompiler-UnityShaderCompiler3.log | 8 + 3771 files changed, 176452 insertions(+) create mode 100644 Library/APIUpdater/project-dependencies.graph create mode 100644 Library/AnnotationManager create mode 100755 Library/ArtifactDB create mode 100755 Library/ArtifactDB-lock create mode 100644 Library/Artifacts/00/00057db738f056d550e298d6a53cd726 create mode 100644 Library/Artifacts/00/002cb4312ad9fd9916e60de1eb344301 create mode 100644 Library/Artifacts/00/007a9842ee32a428f5f4104b140069cd create mode 100644 Library/Artifacts/00/00978da3657d69e759b45be12067f085 create mode 100644 Library/Artifacts/01/011b2ea3818580f75f672da61138bd0e create mode 100644 Library/Artifacts/01/0125e6ce260e631a71b0406d78d45235 create mode 100644 Library/Artifacts/01/012c4e7ed80308b09d389444902dff1f create mode 100644 Library/Artifacts/01/013bdbf75cffa5a60558e7d7517e2b2c create mode 100644 Library/Artifacts/01/018b78e182b8812bc26f30f2e3dcd2d4 create mode 100644 Library/Artifacts/01/018dc2a83789885821bca4451fe86b54 create mode 100644 Library/Artifacts/01/01a3065b876e2c7820d503fceeadbf8e create mode 100644 Library/Artifacts/02/027a8245779a2c8cb22fb831344752f0 create mode 100644 Library/Artifacts/02/02c07103d8991a48e8905f63e20c0f1c create mode 100644 Library/Artifacts/02/02c7cbd8dd0a09e5b99891e32d47a24f create mode 100644 Library/Artifacts/02/02e947e710df71d4fa0f86cb2943bba7 create mode 100644 Library/Artifacts/03/032b4497b3acd5be58c7251c1eab678e create mode 100644 Library/Artifacts/03/03525d5240013130e1d48430a1eef426 create mode 100644 Library/Artifacts/03/035a2e3d7a47b2f21ea6b95966f93876 create mode 100644 Library/Artifacts/03/0376c6b0bae99335d035ab785ba23459 create mode 100644 Library/Artifacts/03/0395bd6376641fdbdf0b957f9b85bb2c create mode 100644 Library/Artifacts/03/03b5228ce96bc9a07a5b11940915c23d create mode 100644 Library/Artifacts/03/03e58ae902c8cb7265ffb7c75d95cdd6 create mode 100644 Library/Artifacts/04/040b0170638924ac4b43df4428991b94 create mode 100644 Library/Artifacts/04/04426e5f1d9f70f2a34fd2d4f969be49 create mode 100644 Library/Artifacts/04/046165bfb2141ae237c6d64498824ceb create mode 100644 Library/Artifacts/04/049981f0049adb13c09fbb4d4d9e4947 create mode 100644 Library/Artifacts/04/04b494b0c09380e78793e0264b5a33fc create mode 100644 Library/Artifacts/04/04f15bcaf3f90042afa1853ec71d03c2 create mode 100644 Library/Artifacts/04/04fe4063e0019afd5133772b69de9f54 create mode 100644 Library/Artifacts/05/0536ee5899bb04623ac87c74a6bebc45 create mode 100644 Library/Artifacts/05/055e70c6f791a12e38bfbd078f426a32 create mode 100644 Library/Artifacts/05/05a115f862ce77cc97d125c994c1e6b9 create mode 100644 Library/Artifacts/06/061166fa218424a7a9edd8ceb3e56811 create mode 100644 Library/Artifacts/06/06151ebc216634ca35cc7a359bb9a643 create mode 100644 Library/Artifacts/06/061919e7a8031897fad032a3cbdbe783 create mode 100644 Library/Artifacts/06/068692a47ecf4a3456501b41d82af735 create mode 100644 Library/Artifacts/06/068e84855cd24a63f2a46b2977e24ce0 create mode 100644 Library/Artifacts/06/069903a16064b2ed84794ee36b093274 create mode 100644 Library/Artifacts/06/06b40e7c7af436ba6f3c22b13e93e30a create mode 100644 Library/Artifacts/06/06f8205073103b50fe275b6ef0724194 create mode 100644 Library/Artifacts/07/0702464e97adc0973f9586b75b73cb51 create mode 100644 Library/Artifacts/07/070612484348d06ed5ad9e722523dccc create mode 100644 Library/Artifacts/07/0709a6e3753ab3d84d81c38364910215 create mode 100644 Library/Artifacts/07/072f6ebfdb73afcdf5b9adc41e41b183 create mode 100644 Library/Artifacts/07/0731a3ea702fbf1acb78de659ffd6044 create mode 100644 Library/Artifacts/07/075a33faff6e5f690c2449c1541f1c7f create mode 100644 Library/Artifacts/07/0793b03342f27777cdbd17c5c419e32b create mode 100644 Library/Artifacts/07/07c3ce7c307751aac70a694dcec8ed1d create mode 100644 Library/Artifacts/07/07c989d1c23c9285ba66b54e342f6e20 create mode 100644 Library/Artifacts/07/07eee7427ee5dcd029b87bc41714cf42 create mode 100644 Library/Artifacts/07/07f33fac7355977c14024cf1ce48cbd7 create mode 100644 Library/Artifacts/08/082623513202133b6a3eb7502e9b7110 create mode 100644 Library/Artifacts/08/084eb500b6236078dea4082745ee0d04 create mode 100644 Library/Artifacts/08/08570d2ee3f82596518e2dcea99220d7 create mode 100644 Library/Artifacts/08/08794a9a727465a58c545bccd09992e3 create mode 100644 Library/Artifacts/08/088c981647850502c4357ab0dc68deee create mode 100644 Library/Artifacts/08/088e4853a1994d32c485b273c2434956 create mode 100644 Library/Artifacts/08/08ae906a6245c03e157dd8cb5d8c6ec9 create mode 100644 Library/Artifacts/08/08b17d86c6a39b43dd775241d7338a7c create mode 100644 Library/Artifacts/08/08dcc3c7f28d9867db4e6d7e439b59e5 create mode 100644 Library/Artifacts/08/08eb76de12610620abe9aad42068fcf1 create mode 100644 Library/Artifacts/09/093c0bda42b3532f0e7dfb39d8929190 create mode 100644 Library/Artifacts/09/094a935b1350759174999e527a022287 create mode 100644 Library/Artifacts/09/09a3dd7fb1e84858de1c8fd2a6c3bd16 create mode 100644 Library/Artifacts/09/09aa8a2a01690df968c6cc97f0921cb3 create mode 100644 Library/Artifacts/09/09d078d15788a303c115b8deb636a4d4 create mode 100644 Library/Artifacts/0a/0a1eb237ef8f1469e36f1c3c32e4ce0a create mode 100644 Library/Artifacts/0a/0a3145d8872c01a9c7c534fdfee8fbf2 create mode 100644 Library/Artifacts/0a/0a5562c9a733f014ce21de07dac77c70 create mode 100644 Library/Artifacts/0a/0aca69c1956b6d260e02810c3df57c91 create mode 100644 Library/Artifacts/0b/0b5c586616b5a75ec4c22a8830edae72 create mode 100644 Library/Artifacts/0b/0b6a1af4e0209cebb3da8e66ece56e91 create mode 100644 Library/Artifacts/0b/0bd782678a2d7e9befcf43aa8f933131 create mode 100644 Library/Artifacts/0b/0be737900454458b0a970b6b5f649f29 create mode 100644 Library/Artifacts/0b/0be8d3753cedc192223060fb402f6787 create mode 100644 Library/Artifacts/0b/0bf713f90029202a2e9e134152ac0b4d create mode 100644 Library/Artifacts/0c/0c655749df0e52e3188739fd81f110b1 create mode 100644 Library/Artifacts/0c/0c93f18b8e5f9005f21ceae19588d158 create mode 100644 Library/Artifacts/0c/0c9e395db919c9e8b909bdbd98747c9c create mode 100644 Library/Artifacts/0c/0cb6c10b6bdf11ac2a5353745b243e08 create mode 100644 Library/Artifacts/0c/0cf0178a43b48004b8fe00cee767da54 create mode 100644 Library/Artifacts/0d/0d0233d92797a51725382048070bac0a create mode 100644 Library/Artifacts/0d/0d5ce261b7e45cc8899243d8a6f7e87e create mode 100644 Library/Artifacts/0d/0d743c0f5a375bc3ca888b8867006e49 create mode 100644 Library/Artifacts/0d/0d7b7d099d82456f43844ae9eaa78e62 create mode 100644 Library/Artifacts/0d/0d9f6e4cbfb4d3982f02e0323d214131 create mode 100644 Library/Artifacts/0d/0dcc5d1909a7460bcbbaee1b7b04e7b2 create mode 100644 Library/Artifacts/0d/0de61355159f594a8f3ab14ad65c4146 create mode 100644 Library/Artifacts/0e/0e044323b59ede42f254977e3873e646 create mode 100644 Library/Artifacts/0e/0e0de6c282e27fe18bd91f9e18fca7cd create mode 100644 Library/Artifacts/0e/0e3651aa8232fa11c3e0a521dcc3767d create mode 100644 Library/Artifacts/0e/0e880c7381507965ef9a608559f90061 create mode 100644 Library/Artifacts/0e/0ea624d8c8906705e986718437d624bf create mode 100644 Library/Artifacts/0e/0ec0feade09aba34d8d0ebb05aa662b4 create mode 100644 Library/Artifacts/0f/0f227d1c9377c78e8bea737df8513b31 create mode 100644 Library/Artifacts/0f/0f48605975c974e0bc6aaf8389808c58 create mode 100644 Library/Artifacts/0f/0f4a43ea026a025aa5739e744719d5c9 create mode 100644 Library/Artifacts/0f/0f888294cbe1e68d3f4ecfe0e0878c50 create mode 100644 Library/Artifacts/0f/0f91783f6a0131c0527a892bf77f672e create mode 100644 Library/Artifacts/0f/0fb3aa124f56798451065780a8223d8c create mode 100644 Library/Artifacts/10/10177a5cf1a0b4187d5905de209c9b38 create mode 100644 Library/Artifacts/10/1017c2bae733d360effe1e2bc7f2c682 create mode 100644 Library/Artifacts/10/103cb804c10848ef07e0f24a54d219f9 create mode 100644 Library/Artifacts/10/103ffb2582b8071ce0b25e0cc81e7704 create mode 100644 Library/Artifacts/10/105a930bba48f3817c7d58223138b3fb create mode 100644 Library/Artifacts/10/105ae5716c6fce261ac6a13243455f3e create mode 100644 Library/Artifacts/10/1093f012c61e27af69cb5a1f77738d61 create mode 100644 Library/Artifacts/11/114b9ce99b5928ba4f7a41fe5711cc07 create mode 100644 Library/Artifacts/11/1164db785c4922ea3ee67734cfe828c9 create mode 100644 Library/Artifacts/11/1168fef792db4334f912d6c5d1ee2a47 create mode 100644 Library/Artifacts/11/116a377105d9b6f696b1f5724dc0b3ab create mode 100644 Library/Artifacts/11/116dae3f447d35a386a452bb91ec9173 create mode 100644 Library/Artifacts/11/1174eff0d80d77fec06d4f0260e81308 create mode 100644 Library/Artifacts/11/11893022c46645582cd6743e65cbae72 create mode 100644 Library/Artifacts/11/11e57d8b048a42859ca0ba0d36868aff create mode 100644 Library/Artifacts/12/1256833e9c5fc4cc47cfcf5187eb7f33 create mode 100644 Library/Artifacts/13/130bf734cdd1dfa4a9bdd219379170f3 create mode 100644 Library/Artifacts/13/13320a2a3a6372e0b4f75b0a90dfcaef create mode 100644 Library/Artifacts/13/133e212eb8a27d33ad7a43d5c404b73d create mode 100644 Library/Artifacts/13/136c847b80044369b222529873c23cb3 create mode 100644 Library/Artifacts/13/1370c0969eb35c20b7f50041f2f0fcd8 create mode 100644 Library/Artifacts/13/13a0de93d84f07047a060d4bd63473f8 create mode 100644 Library/Artifacts/13/13be4eea363d75a6fbd00bfb2cff34ff create mode 100644 Library/Artifacts/13/13cbea42a4cde3d417a23940955deef6 create mode 100644 Library/Artifacts/13/13cbfb820e9cf9b87f66b7578a63057f create mode 100644 Library/Artifacts/13/13cd86d4d7ec86cf4e2e3adbcfded114 create mode 100644 Library/Artifacts/14/14297d792a3c90f72a690b61672de236 create mode 100644 Library/Artifacts/14/145e3ea1d8533e56e8100c2e2a71ab36 create mode 100644 Library/Artifacts/14/1487728f7ae26a881602677f16021516 create mode 100644 Library/Artifacts/14/14b2ddb6e47bb793b03dfee4563642e2 create mode 100644 Library/Artifacts/14/14c3ab8c980a1673ae5a73984f7ff7c0 create mode 100644 Library/Artifacts/14/14de5ede599b830a8b00830c76be20c7 create mode 100644 Library/Artifacts/14/14e9821b7d138a98f8254e91e775ad1f create mode 100644 Library/Artifacts/14/14f5e8cb99006a0c4e95004b555883da create mode 100644 Library/Artifacts/15/15dc39e20d51b5dab8c95a5f08ab1191 create mode 100644 Library/Artifacts/15/15e7848ee129333e1302f4c1c95230f9 create mode 100644 Library/Artifacts/16/16481cb72241093b8f7c25b7019a763c create mode 100644 Library/Artifacts/16/169a5d48eec409b750b0a3be178eeb39 create mode 100644 Library/Artifacts/16/16a090b1d5523b827aba5b9e32991965 create mode 100644 Library/Artifacts/16/16b4c7d7e04f4f41cb422a5fb81b46f4 create mode 100644 Library/Artifacts/16/16fb1827614ee17a8da2b1b4b2b4ad10 create mode 100644 Library/Artifacts/16/16fc15cb9ff5798656768ff243303b02 create mode 100644 Library/Artifacts/17/1724bb6af239c84ce42d9e3ef3394545 create mode 100644 Library/Artifacts/17/1735759485e4f1ee2aa56269ffcba793 create mode 100644 Library/Artifacts/17/17a11417aa10043693120cb6fef4ce60 create mode 100644 Library/Artifacts/17/17ac9fa7f17f0a6e420694cca655b35f create mode 100644 Library/Artifacts/17/17b2c32f969af2621abaef46533ac179 create mode 100644 Library/Artifacts/17/17e11bb2e560f698ec957aa4d2d7f680 create mode 100644 Library/Artifacts/17/17f7859138da5be07bff3ec4dbbbbc17 create mode 100644 Library/Artifacts/17/17fe37c2fa6dc25b7acb41e9e48f67ea create mode 100644 Library/Artifacts/18/181ac2bcc9fce649eb7a98db2918197b create mode 100644 Library/Artifacts/18/1834b78a05f7e17e856b17a00e33e0e4 create mode 100644 Library/Artifacts/18/183a6e99acaec4f07f6fad965be9d8d2 create mode 100644 Library/Artifacts/18/18578a3f3a9bc26619d5b605a228b75d create mode 100644 Library/Artifacts/18/18c0ad074a89e2fb1bee080e997d8bed create mode 100644 Library/Artifacts/18/18ca9f1f13422989f666be9a1cfd5f63 create mode 100644 Library/Artifacts/18/18d5463ae290c9dc82a7500813ffce20 create mode 100644 Library/Artifacts/18/18df75c5de965041fa069311a0423e3d create mode 100644 Library/Artifacts/18/18f6d5166b91c77a48c931a544e178e6 create mode 100644 Library/Artifacts/19/19015d460650db48bd30ed9dc1ac109b create mode 100644 Library/Artifacts/19/1916d0dc3ce72a38d0ba147374904b37 create mode 100644 Library/Artifacts/19/191ce0203456a7e6485877d6de150b40 create mode 100644 Library/Artifacts/19/1924337bb7f233a15abe206ee65697c8 create mode 100644 Library/Artifacts/19/194bbd6e650ae9c064e3042912be703b create mode 100644 Library/Artifacts/19/19978bf66e8ec2a0143336d2de6e0a86 create mode 100644 Library/Artifacts/19/19a83a896ca4e31324132dee4143cce1 create mode 100644 Library/Artifacts/19/19b4ccef956186ee6e24b1b72d920819 create mode 100644 Library/Artifacts/1a/1a01b5ef5fd588d89232fcb4708f646b create mode 100644 Library/Artifacts/1b/1b15c3147e2282863ba1f2e061624ee6 create mode 100644 Library/Artifacts/1b/1b41257dc5ee0cc30340b8e6333905e2 create mode 100644 Library/Artifacts/1b/1b718ca15611fcb26523f975b95d6e34 create mode 100644 Library/Artifacts/1b/1b94602ddaa9da103a7e57347731d27d create mode 100644 Library/Artifacts/1b/1b9f6f4abc93150f7ff07755262f4366 create mode 100644 Library/Artifacts/1b/1bb5d2469210148121310c8c2dac0dc6 create mode 100644 Library/Artifacts/1b/1bb7cc48b31276832d33e126811fd54c create mode 100644 Library/Artifacts/1b/1bbb1fef5079b5641fe65bd7f0b4780d create mode 100644 Library/Artifacts/1b/1bc4b89d20bf483362a1aaf9b6bd6d22 create mode 100644 Library/Artifacts/1c/1c4c141ebf9aa6abcefbf991134d1347 create mode 100644 Library/Artifacts/1c/1c80726bdf8dcec45972c5a0d8baff1b create mode 100644 Library/Artifacts/1c/1cacc5349758d9100d52f84cf2a1e955 create mode 100644 Library/Artifacts/1d/1d0148afb1f52a3c88e1ffa11545b44c create mode 100644 Library/Artifacts/1d/1d6a8ea309a24fa58f05c1729f849dd6 create mode 100644 Library/Artifacts/1d/1d6d9c52bb48758158daab8a92585b28 create mode 100644 Library/Artifacts/1d/1dcc788dde2aa2bfd9029ae77e79101b create mode 100644 Library/Artifacts/1d/1de643b3cff993daae626fea8bf21812 create mode 100644 Library/Artifacts/1e/1e2212b20080431765e248bf3032ccac create mode 100644 Library/Artifacts/1e/1e314a8e14b09644c88fa2d5bfcc19a6 create mode 100644 Library/Artifacts/1e/1e37d6006399506ed19c61a8020514e2 create mode 100644 Library/Artifacts/1e/1e4ba297ca17145bb4a2e5a5f9ac7c46 create mode 100644 Library/Artifacts/1e/1e4f16b733f5bbc80bc6ec23da1cdbf2 create mode 100644 Library/Artifacts/1e/1e81c7456c4b54438f63b6b501d4cc9f create mode 100644 Library/Artifacts/1e/1edd63957e79a9fe0b210840965b0936 create mode 100644 Library/Artifacts/1f/1f0f48dc7029cfefcb0c7e0a67ba4c42 create mode 100644 Library/Artifacts/1f/1f1fa245eaf3228b33d8eed6b37327bb create mode 100644 Library/Artifacts/1f/1f3e12217ecffbadb94b7fbf4f2f9a42 create mode 100644 Library/Artifacts/1f/1f4ea4a041c1544ec3f20752b6fdd7ae create mode 100644 Library/Artifacts/1f/1f7a9dcfafff4ed2a6315a0f68752b6e create mode 100644 Library/Artifacts/1f/1fec442c704ddf090ea5398d42d9df79 create mode 100644 Library/Artifacts/1f/1ff42aa232dcec7b6f69d1a17a6c2b50 create mode 100644 Library/Artifacts/1f/1ff5db9e1612d24316097c4f4cecb3d1 create mode 100644 Library/Artifacts/20/200319e64e448f326f640c14d60e10db create mode 100644 Library/Artifacts/20/20045b183a0c51709de2e1908c3ac9e2 create mode 100644 Library/Artifacts/20/205355baed36ab213d806e6a609e0647 create mode 100644 Library/Artifacts/20/207b1593e302ed35d2db3d2417d487dd create mode 100644 Library/Artifacts/21/218b4ab5ad84f6287d370def3e2ded8e create mode 100644 Library/Artifacts/21/219b725bb3538c7763cae2e53bf06e0b create mode 100644 Library/Artifacts/21/21becd126932ff2a657a24a321c4d829 create mode 100644 Library/Artifacts/22/220bc74d8011eca91f79b51f6fd37182 create mode 100644 Library/Artifacts/22/2247294585432f0269855d28d2abf32f create mode 100644 Library/Artifacts/22/226e882476642b871f980c039c04a312 create mode 100644 Library/Artifacts/22/22c06d355a09363a34441ff3ad0ae54b create mode 100644 Library/Artifacts/22/22f62a6415215fc37c3bffeb0cba860d create mode 100644 Library/Artifacts/23/2317e286c4b1d5638f42b8945c326b01 create mode 100644 Library/Artifacts/23/233f363fa672bfef3ef414b22363023e create mode 100644 Library/Artifacts/23/2341a138065a7ccca32f256ba0c20f0a create mode 100644 Library/Artifacts/23/23d3e8b41fe1cf54b67ca065fce4da9b create mode 100644 Library/Artifacts/23/23fb3e4912aa4a7b9cdc188453f49abf create mode 100644 Library/Artifacts/24/247747ec214893333942a4f3b4b150f7 create mode 100644 Library/Artifacts/24/248816608095f016d3c305a05d4e4cb8 create mode 100644 Library/Artifacts/24/24b4c1a8df63f27ce3f4a2c27a1cd433 create mode 100644 Library/Artifacts/24/24c464e9521e6412a0dd400a9ccd6ac3 create mode 100644 Library/Artifacts/24/24cb85b9573db8c936df1fe5440ee888 create mode 100644 Library/Artifacts/24/24d38a52757b6b312b7e3485e4bbd263 create mode 100644 Library/Artifacts/24/24e63f4d680476f836cf1f60cdaf786f create mode 100644 Library/Artifacts/25/250664040712eb06ef8405e1bcff9db7 create mode 100644 Library/Artifacts/25/25186a6ee24a6177a0849083ef4d3a30 create mode 100644 Library/Artifacts/25/2546cc9aa204da4d6142a9af70ddd4f1 create mode 100644 Library/Artifacts/25/256cbfae240578dd7bde6093ab398502 create mode 100644 Library/Artifacts/25/2595d28835bfbffea40eccab67bf9a82 create mode 100644 Library/Artifacts/25/25961b0971a84f00ae54ee36bcc78f9f create mode 100644 Library/Artifacts/25/25ac9ec6ed05e57d0d98a46a307e0516 create mode 100644 Library/Artifacts/25/25accf0f5e9002f98d6899513f27f515 create mode 100644 Library/Artifacts/25/25ed7b3cd62bdb6046b02d6ff30257ba create mode 100644 Library/Artifacts/26/2628688eb85ef2058da67257a75b4981 create mode 100644 Library/Artifacts/26/266cc5824f6611c89edc3ece1cfe7be7 create mode 100644 Library/Artifacts/26/26ea2c38b13d01efaa2833998dd23e6c create mode 100644 Library/Artifacts/26/26f82af7868bea6fbb6462d47fd188fd create mode 100644 Library/Artifacts/27/271ef67f52327eb3457e071ef678f286 create mode 100644 Library/Artifacts/27/27219a8b78a6f17f19cffea67ff08874 create mode 100644 Library/Artifacts/27/2775c8c172913c9152a755cac846e97a create mode 100644 Library/Artifacts/27/277c0cdd2b18ebaff4007489f1d027a0 create mode 100644 Library/Artifacts/27/2784a06f88a70adc7741815439768097 create mode 100644 Library/Artifacts/27/2785348ce422605f6596f3e0492d3b25 create mode 100644 Library/Artifacts/27/278bcf24e6b2788c6036c89c448b665b create mode 100644 Library/Artifacts/27/27b70df6462612a13877588dfe95eb35 create mode 100644 Library/Artifacts/27/27df247bcc272003545632c81309f869 create mode 100644 Library/Artifacts/27/27f5502b0619d78160a133dca0fcf6b1 create mode 100644 Library/Artifacts/28/28472b5d2225768aec0a8de21828e288 create mode 100644 Library/Artifacts/28/286509bbe4fe06c2e6375960f5b96bb0 create mode 100644 Library/Artifacts/29/2914a76c0ddf161247f5903c1991dee5 create mode 100644 Library/Artifacts/29/2942687c50c9841bb58dd72d0a95ad72 create mode 100644 Library/Artifacts/29/29dd072da8fe435cacc6b3713fffa489 create mode 100644 Library/Artifacts/29/29ec68f2f7648464365d68d39def74e4 create mode 100644 Library/Artifacts/2a/2a2e551f09c3eba4df249d1adbec5760 create mode 100644 Library/Artifacts/2a/2a4fc6e71962a80af60e19ab02c21e05 create mode 100644 Library/Artifacts/2a/2a8afb9fab61b464b4e5770072ccd548 create mode 100644 Library/Artifacts/2a/2a95bb581e5490254da375c4b74ab476 create mode 100644 Library/Artifacts/2a/2a9c6686ddddd0e0b29c56bd4b02cc3a create mode 100644 Library/Artifacts/2b/2b1919a049c99c063d209cb68ab9e59e create mode 100644 Library/Artifacts/2b/2b34a0a6a90a1f8f5db766dbf9bfac27 create mode 100644 Library/Artifacts/2b/2b3e994d33d068e12a0641d610089d53 create mode 100644 Library/Artifacts/2b/2b77ff3bd5b156e6c58ab7dff4e9ebcd create mode 100644 Library/Artifacts/2b/2b8a4ef43daa7415e586980f2f58c2ab create mode 100644 Library/Artifacts/2b/2bd177cef454da4a9b4611d6708d217e create mode 100644 Library/Artifacts/2b/2bd965ec74f65987a23916e21aac78a7 create mode 100644 Library/Artifacts/2b/2be31b1244ff6b55d548dbcc30f9bb30 create mode 100644 Library/Artifacts/2c/2c6dd9306b4480bef2804ab473875b1c create mode 100644 Library/Artifacts/2c/2cc026344a3f7ac8fcbb684e3400f107 create mode 100644 Library/Artifacts/2c/2cef9978f62f617bd9ff4d29c866e82e create mode 100644 Library/Artifacts/2c/2cfcf3ad7499bdc92aac7906fcbf63be create mode 100644 Library/Artifacts/2d/2d0c9ba5393dd45827455a22de050df2 create mode 100644 Library/Artifacts/2d/2d4dde0431f06d8375595c721bef50f8 create mode 100644 Library/Artifacts/2d/2d6d5a702b4ecb309820c77c43b99127 create mode 100644 Library/Artifacts/2d/2d847dd3486d270fd7722b360ac82738 create mode 100644 Library/Artifacts/2d/2dc885efa1616f0f342042326ab297e2 create mode 100644 Library/Artifacts/2d/2df19610510ec13acfbc8c62457148eb create mode 100644 Library/Artifacts/2e/2e1d175d940b1a9283568636497a5336 create mode 100644 Library/Artifacts/2e/2e4abef8906379b5411b1da85949de1c create mode 100644 Library/Artifacts/2e/2e679b17b0b8efc7d0d4c1fc1cdae31f create mode 100644 Library/Artifacts/2e/2e738c0f355787146f26a76c213d27d1 create mode 100644 Library/Artifacts/2e/2e9f38779a1430cd4a88da187621c6fc create mode 100644 Library/Artifacts/2e/2ed7ff2f210d273bc509557aa864005b create mode 100644 Library/Artifacts/2e/2ede6af250f365011b922fd5686ac12f create mode 100644 Library/Artifacts/2e/2eebd8965716d04a0db81dad12ebb10e create mode 100644 Library/Artifacts/2f/2f0e07adf97d2ebb4b04c37f95b0c44d create mode 100644 Library/Artifacts/2f/2f2db7c0157dba067747f8d98034f372 create mode 100644 Library/Artifacts/2f/2f400878daa66e8e6eb9ee1e93604f41 create mode 100644 Library/Artifacts/2f/2f608d203389663b14c4135d734c5b0e create mode 100644 Library/Artifacts/2f/2f93ad39ff11c66255f567253fe1422c create mode 100644 Library/Artifacts/2f/2fe0decdfc3139b3ab84bbacc46a38bc create mode 100644 Library/Artifacts/2f/2fe166dbed7fcf96295135530f730608 create mode 100644 Library/Artifacts/30/301d2a805b957408c729ce1b6d9d3f47 create mode 100644 Library/Artifacts/30/30481928779ae94a32b190383d554503 create mode 100644 Library/Artifacts/30/30f72ab43c8f926f5bd91dbd2c819ae2 create mode 100644 Library/Artifacts/31/31146bcd49110d52caf20dbcb7e2b935 create mode 100644 Library/Artifacts/31/312b64eac3d94c33680a326cfea4655e create mode 100644 Library/Artifacts/31/31390783c2ee09756420e9063c536d4b create mode 100644 Library/Artifacts/31/315061f97acaf5e610a505361e8e05df create mode 100644 Library/Artifacts/31/3155cba6b5a6876abd5dec7533a10619 create mode 100644 Library/Artifacts/31/31cebc11414109e30a84a47030293a58 create mode 100644 Library/Artifacts/32/321bdb0fcd5492bfed628b3efbd65363 create mode 100644 Library/Artifacts/32/3241a82fe37ab665133ca8f033dfcd84 create mode 100644 Library/Artifacts/32/3262099ce8726bb3ce307336aae8aac0 create mode 100644 Library/Artifacts/32/3292688fdcc9924b63eddb139bfe9671 create mode 100644 Library/Artifacts/33/332fb44b7ad1077a597334ac741ce5ff create mode 100644 Library/Artifacts/33/33472c490c225d5343d013f1a3e20561 create mode 100644 Library/Artifacts/33/339477e1a3003f05d4af66b41cedc27b create mode 100644 Library/Artifacts/33/339c85c2b3f188b9635880228b001560 create mode 100644 Library/Artifacts/33/33b5cfae4f2d213cd462890c91a6019d create mode 100644 Library/Artifacts/33/33bf94198f92d0692bf1c91140bcfba7 create mode 100644 Library/Artifacts/33/33f496b2c16cd018f3923e437aa15315 create mode 100644 Library/Artifacts/33/33f69ab3bef5640cca8f826129cb1312 create mode 100644 Library/Artifacts/33/33ffffbf0608628e11e75d8caae4a596 create mode 100644 Library/Artifacts/34/340cfcfa453d84a56b0fa34ebf44d470 create mode 100644 Library/Artifacts/34/343d7299db1e75ae05ef55e6b9766941 create mode 100644 Library/Artifacts/34/344f8b36c58be6e55f00d3fa63f04eff create mode 100644 Library/Artifacts/34/34d3ff1f22feb91fbca195cfa79ff4b8 create mode 100644 Library/Artifacts/35/352b251d3ab4062bf7ca1479893bf302 create mode 100644 Library/Artifacts/35/3585c4e7700e1f3fc6c42a4494e4df2b create mode 100644 Library/Artifacts/36/3610beeeb94a29f18f1c3da276d1d505 create mode 100644 Library/Artifacts/36/364ae3db70f9439cf0c33b0f076d5aff create mode 100644 Library/Artifacts/36/366f4254bfa8841a9f79bb19df84615b create mode 100644 Library/Artifacts/37/371bd1ae8b5402618e5d4fe40c2d5971 create mode 100644 Library/Artifacts/37/37313f43564307f2fd5b8b3a7bd29c09 create mode 100644 Library/Artifacts/37/375ab6d8e1bf7844f6624747eac9dc5a create mode 100644 Library/Artifacts/37/37682686e667db8bef104cfa664e14b2 create mode 100644 Library/Artifacts/37/37a5d2f21241146665b5a7f410c804c1 create mode 100644 Library/Artifacts/37/37bee9b8072e9e71f4af6ef5152ac205 create mode 100644 Library/Artifacts/37/37c5798009f101064246bc7c223f6201 create mode 100644 Library/Artifacts/37/37e5c582e0236894b2bf976a82cead92 create mode 100644 Library/Artifacts/38/3827829f1a9fa0085e8104e0a9c6dc94 create mode 100644 Library/Artifacts/38/3833f9815358e8bc9a26bac5585764d3 create mode 100644 Library/Artifacts/38/38458aeb7fffcd4316efc0b8e67370e8 create mode 100644 Library/Artifacts/38/38505357239ff7fb23bf8064e0e802ce create mode 100644 Library/Artifacts/38/38566d987fac5c3483753eebe1a92b1d create mode 100644 Library/Artifacts/38/38ac021ac38e8b225cc5d8a57522fb48 create mode 100644 Library/Artifacts/38/38bc7f27f8b6b7f12002a86ec48f9cdc create mode 100644 Library/Artifacts/38/38e4fd2958293ef0837fae83b4db6caf create mode 100644 Library/Artifacts/39/396135e9840caf759a6817c4ee0b3137 create mode 100644 Library/Artifacts/39/39781d2524cf795e9f7d37b7ebfc8b08 create mode 100644 Library/Artifacts/39/398a1087a52c111660f921caa271bf6d create mode 100644 Library/Artifacts/39/398a478dfe447f86b2329c1530b4ec93 create mode 100644 Library/Artifacts/39/39bfe240698f9ae953b5221c118fb4d6 create mode 100644 Library/Artifacts/39/39d15b1e409260b2205ede5f464ff657 create mode 100644 Library/Artifacts/39/39f090952b33e6ecb0fe3575a64c19d4 create mode 100644 Library/Artifacts/3a/3a05efd7e426d16ad96f12365120dd75 create mode 100644 Library/Artifacts/3a/3aae955f8b50367b0d4b8b4b3834a33b create mode 100644 Library/Artifacts/3a/3adb92abb227838a9bab0ea9923e4d33 create mode 100644 Library/Artifacts/3a/3ae5e68eacce4a66ed11b1794bbb1648 create mode 100644 Library/Artifacts/3a/3ae8754b6bed0275720700ed9cb19d02 create mode 100644 Library/Artifacts/3a/3af72cb6346d605ecf18faf57c6456e5 create mode 100644 Library/Artifacts/3b/3b1b7e5d9c9365f8b035af3235ffe278 create mode 100644 Library/Artifacts/3b/3b2cab0fd4fc17bbf1c6d75ba783bcdd create mode 100644 Library/Artifacts/3b/3b4ac39eb914b38f8d8806ad13472f8b create mode 100644 Library/Artifacts/3b/3b76e03cc6134422d4670a14dab598d2 create mode 100644 Library/Artifacts/3b/3b7e15b56126ad3d14570f62a9a8cc46 create mode 100644 Library/Artifacts/3b/3b96dc0f0ea78303f0b7ab4d9cccd835 create mode 100644 Library/Artifacts/3b/3bc73bae4b6a4f0cc33899c1e73acd50 create mode 100644 Library/Artifacts/3c/3c236318bb347fa9ba79fb12438d785c create mode 100644 Library/Artifacts/3c/3c77366c4e3f5a29bf7e73302c84e43e create mode 100644 Library/Artifacts/3c/3c86436b3e5e8159edca4aafedfd8567 create mode 100644 Library/Artifacts/3c/3c9a45d43eb1be73f55d3ac2753aa683 create mode 100644 Library/Artifacts/3c/3ccf9007523111492c8d627d665fbe27 create mode 100644 Library/Artifacts/3c/3cd3afe97ff43350a61afcd336f5f65f create mode 100644 Library/Artifacts/3c/3ce57eca4cf365e6dc044f95d67be609 create mode 100644 Library/Artifacts/3c/3ce6f6d7afb665438f210aac24ca1a85 create mode 100644 Library/Artifacts/3d/3d115495dc17f09c8f2788dfa2eb56f8 create mode 100644 Library/Artifacts/3d/3d31c6b2c910190d0d7f363af6fcbc4c create mode 100644 Library/Artifacts/3d/3d911c1d3897dc4e1a0225c79df7a233 create mode 100644 Library/Artifacts/3d/3da598fa08cfb9879b37424b8d3ca990 create mode 100644 Library/Artifacts/3d/3ddea8aa6936a7205f0bfa20b2cac625 create mode 100644 Library/Artifacts/3d/3de3ed75cfb71d38444a407d26b902d3 create mode 100644 Library/Artifacts/3e/3e020cda1c716423532d30d64208b20b create mode 100644 Library/Artifacts/3e/3e03e07310c190651021b7492700ee8c create mode 100644 Library/Artifacts/3e/3e224850573209509df7c1e38d89583c create mode 100644 Library/Artifacts/3e/3e45383b22dfa2ac849ce41663c5fe32 create mode 100644 Library/Artifacts/3e/3e9243594859df900e537d519f8d9907 create mode 100644 Library/Artifacts/3e/3eb2d80fa456faa904f56541e54ca951 create mode 100644 Library/Artifacts/3e/3eb87ad3267b1653dd4c96ed6f82db2f create mode 100644 Library/Artifacts/3e/3efccc31ea1cf09ffb73010a4a7f8b5a create mode 100644 Library/Artifacts/3f/3f144a7277bde67f0d5b6e627d967375 create mode 100644 Library/Artifacts/3f/3f1deb1a9b242f6f1579865c0e88f9cc create mode 100644 Library/Artifacts/3f/3f2feb78341c296675119898c3fa971e create mode 100644 Library/Artifacts/3f/3f553d38907b34dca437f1114b7bcec0 create mode 100644 Library/Artifacts/3f/3f644676149468493a20b9aeb11d128c create mode 100644 Library/Artifacts/3f/3f878ef34779674a3880a4f567a87ff5 create mode 100644 Library/Artifacts/40/40566722eb2c9f8739ebd7bade9a3bcf create mode 100644 Library/Artifacts/40/4059563320d3b945ca14ee33a794a451 create mode 100644 Library/Artifacts/40/406175b55a61baafb83393a18b4e4ec8 create mode 100644 Library/Artifacts/40/40a1263ae11a6d7b9071d4d7148cdfc3 create mode 100644 Library/Artifacts/40/40ad7ab4aff859ab0d0f8923325eda9a create mode 100644 Library/Artifacts/40/40f0d4138e9d28eaeadb35c6cd39c86a create mode 100644 Library/Artifacts/41/411a14de3f1b19ad2f222e92ac3ae475 create mode 100644 Library/Artifacts/41/413ac0edb76098ecb685082b760d716d create mode 100644 Library/Artifacts/41/417cb8baf25dd7818adced4177f67c52 create mode 100644 Library/Artifacts/41/41c6c5869236961c25aec4229d604fdb create mode 100644 Library/Artifacts/42/42036390230ed0c002a4aed8cd8e6304 create mode 100644 Library/Artifacts/42/4249bc41032c5f80e45e6315de8a2d03 create mode 100644 Library/Artifacts/43/4365ccb32b17bfa6d351f5bdb035f967 create mode 100644 Library/Artifacts/43/436ffcc900c5e7b4be42e1c930392557 create mode 100644 Library/Artifacts/43/43a98529fd7bc49cd930fda59cb73610 create mode 100644 Library/Artifacts/43/43e90fb3cd1f2326ec4f8a53ee11dcc9 create mode 100644 Library/Artifacts/43/43fb3343b0c5cd60ca853c2c4e346dd9 create mode 100644 Library/Artifacts/44/442268ac77101f73f2d60dea2dcd9462 create mode 100644 Library/Artifacts/44/44294f3ff12cac9dc5ce448752c37134 create mode 100644 Library/Artifacts/44/4438da17c2d0eaa885f4e29ff280d8c5 create mode 100644 Library/Artifacts/44/44b2c1aed0d141d614d2ba8fc90e1931 create mode 100644 Library/Artifacts/44/44cab0080c32dc3e056b8162bfd3943d create mode 100644 Library/Artifacts/44/44cb1bd6a3147f6b6209eb18f6f37125 create mode 100644 Library/Artifacts/44/44edd0e1ba367dfa588627ddd51cbdbb create mode 100644 Library/Artifacts/45/451ff88d0441d72891f1bd591f3b78b3 create mode 100644 Library/Artifacts/45/454264059d076c4cec018b695bafd849 create mode 100644 Library/Artifacts/45/454485bdb92306faae51fd6c123b43e7 create mode 100644 Library/Artifacts/45/4546b597d677a8ac9b799d4917ac18c1 create mode 100644 Library/Artifacts/45/45f530864d94527386aefcd90530bbf9 create mode 100644 Library/Artifacts/46/462ef9ed8535f6d5913a207cfa5dd6c3 create mode 100644 Library/Artifacts/46/465c4e6647578467015b63113fcb5e14 create mode 100644 Library/Artifacts/46/467e0343b8d2c05bc912479ddac7b013 create mode 100644 Library/Artifacts/46/469b2b15808088845e882a92f29a058d create mode 100644 Library/Artifacts/47/4775e4a018932639704c718b097c2432 create mode 100644 Library/Artifacts/47/4779b50a5741e0237ceec3c54a69cc79 create mode 100644 Library/Artifacts/48/4808638ca542ad4f1e20f49f8e542496 create mode 100644 Library/Artifacts/48/4837cc0c57804317f868ddfc992207a4 create mode 100644 Library/Artifacts/48/48980d2a4d7098bf0f2fa3461a5cdbc9 create mode 100644 Library/Artifacts/48/48c694e4fc8dd0a48192e05c360f6df9 create mode 100644 Library/Artifacts/48/48d22bc4a01e3e937330d6c1b0593a13 create mode 100644 Library/Artifacts/48/48d9068463917b7836754937b2d609ba create mode 100644 Library/Artifacts/49/4936e2daeca83e735493bcc0bdfe984c create mode 100644 Library/Artifacts/49/49429bea68cf54ba74d4176d1f28de86 create mode 100644 Library/Artifacts/49/49f8b0fc35f478f77a875914d38f33bb create mode 100644 Library/Artifacts/4a/4a042120097bfe296285e83c8b7899c7 create mode 100644 Library/Artifacts/4a/4a356541449d26eb51a237c19e80ede7 create mode 100644 Library/Artifacts/4a/4a4de2657de9b8aff890d1d5b249d11f create mode 100644 Library/Artifacts/4a/4ac1109ad262b244d44e70b40b203503 create mode 100644 Library/Artifacts/4a/4ad62df2299af830b8db48725ecd41a1 create mode 100644 Library/Artifacts/4b/4b3674b4c1589df0e36427eac150f9f1 create mode 100644 Library/Artifacts/4b/4b3829728616e2bc58352b701846f073 create mode 100644 Library/Artifacts/4b/4b4ebd23a856b35c661ce4a2f2f06850 create mode 100644 Library/Artifacts/4c/4c155400ed838f5b5e16c6db47ba0854 create mode 100644 Library/Artifacts/4c/4c2571e185d659e48fb0fbb3581ada42 create mode 100644 Library/Artifacts/4c/4c4c171ba9d917d629d35e9240aa1f3c create mode 100644 Library/Artifacts/4c/4c6a5f7480da208a689d660811616858 create mode 100644 Library/Artifacts/4c/4c9007fecfeda6c7fc210aa2121266ec create mode 100644 Library/Artifacts/4c/4ccc25b44e26626230faf2536a546867 create mode 100644 Library/Artifacts/4d/4d8bb8a79a93fb4cf87c555244e4e8bd create mode 100644 Library/Artifacts/4d/4dcac4a47171e454565878801c10f918 create mode 100644 Library/Artifacts/4d/4dd71ed385bf3887b4d8da6dde51562a create mode 100644 Library/Artifacts/4d/4ddc62ebb875a0329263463c7990d0b7 create mode 100644 Library/Artifacts/4d/4df34937b3cc79a33dee4738a07e3c79 create mode 100644 Library/Artifacts/4e/4e50898cf8a58245a0b7a618aa1bb19d create mode 100644 Library/Artifacts/4e/4ec692aba18fca8e419828ecca9c25b1 create mode 100644 Library/Artifacts/4f/4f0360ddfb8f67bcbba13fc814e9fc03 create mode 100644 Library/Artifacts/4f/4f45c4bf860a1e6648427e57dd7c4e74 create mode 100644 Library/Artifacts/4f/4f5d92a982d1334b70ca10c4a281a85e create mode 100644 Library/Artifacts/4f/4f7bd147a29ad6ffcc8c4afe20a4b88c create mode 100644 Library/Artifacts/4f/4f966a8de0501bb7120a2ee652d07932 create mode 100644 Library/Artifacts/4f/4f99e3426b30e5f6d4af7589713b0137 create mode 100644 Library/Artifacts/4f/4fa83977c1730e1a4ffedb07c85ae715 create mode 100644 Library/Artifacts/4f/4fd6909ded33fc5eca2b4453e21f72db create mode 100644 Library/Artifacts/4f/4fdb5b7176e2e81a694e55fa000299ad create mode 100644 Library/Artifacts/50/502279c4e4bbfbc5435d9a7a6bea3582 create mode 100644 Library/Artifacts/50/502b714d87197649fb5277e8a760aeef create mode 100644 Library/Artifacts/50/50aa1772ca8d54f465d6d928c4ac8797 create mode 100644 Library/Artifacts/51/51122b8691a581cdb93622b2d8874fde create mode 100644 Library/Artifacts/51/51295a7e97bff337ff0c94fd724ee488 create mode 100644 Library/Artifacts/51/5145d5ff7af5d60931e621a8dc92c057 create mode 100644 Library/Artifacts/51/514f565a1809cfce174ce5fb8392284e create mode 100644 Library/Artifacts/51/51964cf0f99c65a81eebb0b57bbfa797 create mode 100644 Library/Artifacts/52/521149520882f419f0ada94a3ad3ff17 create mode 100644 Library/Artifacts/52/5215db2bf259cf34c2700dbd1d7499db create mode 100644 Library/Artifacts/52/527293af630d04b0140205510b82b39f create mode 100644 Library/Artifacts/52/52df893db741112fa27d49688d2df523 create mode 100644 Library/Artifacts/53/5305e89e3760930633d52727b876e399 create mode 100644 Library/Artifacts/53/53192f0563788f0e6db8b33899d1ef2c create mode 100644 Library/Artifacts/53/53558c7c9be0ad7d5944fbc64227784a create mode 100644 Library/Artifacts/53/535be8475cd0df73ac933a758d3bafcc create mode 100644 Library/Artifacts/53/536626b65bd5b0c339852296b69154ba create mode 100644 Library/Artifacts/53/53c2a0ad45fe85b0fbc2aebe65153c65 create mode 100644 Library/Artifacts/53/53c85e67f72f414d8ccbc610f67e588b create mode 100644 Library/Artifacts/53/53eb767b9d79ac8ce6ef7c85d298eeb7 create mode 100644 Library/Artifacts/54/54d3d5c6ebd1f8d5c476a9a2a2cb2bc0 create mode 100644 Library/Artifacts/55/551291d85aad0eb5ce8fe9546b69d485 create mode 100644 Library/Artifacts/55/551aff0ee89bf98b5c9ad2ea7f728e25 create mode 100644 Library/Artifacts/55/552ab9ada313b11d69ed631fb5f9ead4 create mode 100644 Library/Artifacts/55/5562b23ccd4f6837374b6302b4513073 create mode 100644 Library/Artifacts/55/5588c78eafd12e6315a7bbbceb31fea5 create mode 100644 Library/Artifacts/55/55b794eaeff64c0b9c39a9ad03672f82 create mode 100644 Library/Artifacts/55/55beb4e4cd93a0b06c5f6dc4405c3b45 create mode 100644 Library/Artifacts/55/55ceda85023ca289c3d37a91dcaa001f create mode 100644 Library/Artifacts/56/5624f1d452218ce39002b6c0b237ae8e create mode 100644 Library/Artifacts/56/564393408b8ff5a4d9620b09ce654592 create mode 100644 Library/Artifacts/56/56745a5bf7d8f0aacae02714e3a61b0c create mode 100644 Library/Artifacts/57/5748e7f6bb407c2cfd65003a0f73a7dd create mode 100644 Library/Artifacts/57/5748fdf9f435eec400a60a35c25f0daf create mode 100644 Library/Artifacts/57/57519b689d1973090df572125fa70fe9 create mode 100644 Library/Artifacts/57/575dad0b76830720bd266cb3ff8e79e4 create mode 100644 Library/Artifacts/57/5763f562da4bba9fd73a7a06c65fc8ee create mode 100644 Library/Artifacts/57/577f59a2483efb2f425dbdf6b38378d8 create mode 100644 Library/Artifacts/57/57fe8c2dd5e6bb2d1e3f2038cd276985 create mode 100644 Library/Artifacts/58/580b4658bd4f60cc34e0a1cf68849524 create mode 100644 Library/Artifacts/58/58366a135971058b80c98e56a0996587 create mode 100644 Library/Artifacts/58/5865ed3475b72d6d0d252b66fe2ce81b create mode 100644 Library/Artifacts/58/58747095622feac4b52c10978dce1fc4 create mode 100644 Library/Artifacts/58/58bedc5fc7ca8b69448604423616a4ca create mode 100644 Library/Artifacts/58/58ca184cf1be70a178c03977f34c80df create mode 100644 Library/Artifacts/58/58e8b6ef79da9ad70738e53f3515abd4 create mode 100644 Library/Artifacts/59/59103e67d13fefa8f4a88e2de7a32d78 create mode 100644 Library/Artifacts/59/5910c0498bb42f231b836228e92cdfec create mode 100644 Library/Artifacts/59/5935009ea87d15c50b559c10f99e5f7d create mode 100644 Library/Artifacts/59/59aeaae9ffe5f738f5c74d026fce2975 create mode 100644 Library/Artifacts/59/59c9c5463b12991f4e11d09e39a0483c create mode 100644 Library/Artifacts/59/59f1d85cf27e8bec5ce0cd56532904b3 create mode 100644 Library/Artifacts/5a/5a2d1e17cda5644d9a7220134c9ed9de create mode 100644 Library/Artifacts/5a/5a94e85ca796d782eca80f32ec98b4a8 create mode 100644 Library/Artifacts/5a/5a97e5bd7103e95bb41a6f65cb7e8855 create mode 100644 Library/Artifacts/5b/5b0a8f01491318fa319be29a95cf72a9 create mode 100644 Library/Artifacts/5b/5b1fe8b490fe8a26991a3cc5687e3274 create mode 100644 Library/Artifacts/5b/5b32256edc856bb460bf03c073b4eccd create mode 100644 Library/Artifacts/5b/5b329590c4f31ea731fc3b8d2f965c2c create mode 100644 Library/Artifacts/5b/5b43a384abfe8945ff5ffac249db962b create mode 100644 Library/Artifacts/5b/5b5a359ff1658893ecc4c680031f380d create mode 100644 Library/Artifacts/5b/5b5d0c6aa186759d85d0e1a94ab4640f create mode 100644 Library/Artifacts/5b/5ba138abee1d3a0771adaa1eeb8958dd create mode 100644 Library/Artifacts/5b/5ba39ce7b5cc19c76e7a956c1b98a184 create mode 100644 Library/Artifacts/5b/5bc01b82d7f1bcd6f8be540c332d522a create mode 100644 Library/Artifacts/5b/5be56877ae78bd02816499902bf89e30 create mode 100644 Library/Artifacts/5c/5c0e133e4da6ed5cfed6a533050fda78 create mode 100644 Library/Artifacts/5c/5c11cc51b250073c5307ef63cdaeba62 create mode 100644 Library/Artifacts/5c/5c32988b3fc46acf74fe90c8bf634c94 create mode 100644 Library/Artifacts/5c/5c61e20f7303aa05b13494ea0e4b9c72 create mode 100644 Library/Artifacts/5c/5cbf44de0514f209568943bfff6c21d4 create mode 100644 Library/Artifacts/5c/5cfa3da79aa4dab36f602655801edf3d create mode 100644 Library/Artifacts/5d/5d06e3c010f5ced81f33b48d3e81f663 create mode 100644 Library/Artifacts/5d/5d5a5beeffcfcc507ffd1387075b7025 create mode 100644 Library/Artifacts/5d/5dd38e373c6c37f5850fc3531a3ba567 create mode 100644 Library/Artifacts/5d/5dfec150f74373f44874124436f92c04 create mode 100644 Library/Artifacts/5e/5e37bda525bd01a8c030a3f53ab478d8 create mode 100644 Library/Artifacts/5e/5e66faeba705fd417afa2db62bbb8fe1 create mode 100644 Library/Artifacts/5e/5e901c93d3e0e16b6e9de5d1ffb568d8 create mode 100644 Library/Artifacts/5e/5e944266dc13d9a64677fb2f3d396c58 create mode 100644 Library/Artifacts/5e/5eb1f04905ddf6831a16a428cf774073 create mode 100644 Library/Artifacts/5e/5eb4821df1b5f057df90c70be7deaa8c create mode 100644 Library/Artifacts/5e/5edeb8d8255690ae155beec45fa7a944 create mode 100644 Library/Artifacts/5e/5edf0930d97908aac39a6bc888e6c131 create mode 100644 Library/Artifacts/5e/5ee53216b8c909da9a6b566d20b9ca19 create mode 100644 Library/Artifacts/5e/5ee6cc55a6fbeb323aeab5d10e4f44c3 create mode 100644 Library/Artifacts/5e/5eee7fde725b48658abcb0aa8d2095fa create mode 100644 Library/Artifacts/5f/5f1d41586b1edf4e883f64eb6424c092 create mode 100644 Library/Artifacts/5f/5f2b93164f4e7a111490da36aa14aa17 create mode 100644 Library/Artifacts/5f/5fa58f431407b571f98d0f8a5a0dddd7 create mode 100644 Library/Artifacts/5f/5faa51ddf9e496c3c17c61d3d62b24fd create mode 100644 Library/Artifacts/5f/5fb3a387f5ed6967d2c990ff597c4a4c create mode 100644 Library/Artifacts/60/60a6077cb284d30827bf713a4659b0da create mode 100644 Library/Artifacts/60/60b7c318957bc946e6cad00e45dde00b create mode 100644 Library/Artifacts/60/60f9e26f59555426d2402cdfb2086039 create mode 100644 Library/Artifacts/61/615d14d9c1192e01ad1181a0f0c31a4a create mode 100644 Library/Artifacts/61/618afee15e2fc31c8ce6644f79a9fa5d create mode 100644 Library/Artifacts/61/61a0fd098858cf0a7dde28b73f10f1cf create mode 100644 Library/Artifacts/61/61a263939a8ba053c40ef9c710c1f971 create mode 100644 Library/Artifacts/61/61e432b67ebd113fd00cd89efc695eee create mode 100644 Library/Artifacts/62/6202331e9441c214084ec07db33eb041 create mode 100644 Library/Artifacts/62/6208e289d7f863f9f938afb0b3bd9a67 create mode 100644 Library/Artifacts/62/622338bfb0a46d6d90d9379c7ce1df83 create mode 100644 Library/Artifacts/62/622418842cc2f529daf8d32811e548fd create mode 100644 Library/Artifacts/62/622c302deccd66e11f90b75e09298215 create mode 100644 Library/Artifacts/62/6269503b12ea2485a06db6b286b6189c create mode 100644 Library/Artifacts/62/62ca00dbf6bd9f9b50e2bc4fd791a72d create mode 100644 Library/Artifacts/62/62d70b4e94b526e8b58483753fcaae3d create mode 100644 Library/Artifacts/62/62f596d1da6716be6c83f12e1772809a create mode 100644 Library/Artifacts/63/6308d8bfbf725bbfed6cedf20e4b772c create mode 100644 Library/Artifacts/63/631889f68262ee38fcaddb0b342975c3 create mode 100644 Library/Artifacts/63/6363d06ee22353af731332defac32e67 create mode 100644 Library/Artifacts/63/63a5754ad405033d964ee8a53ff96cc0 create mode 100644 Library/Artifacts/63/63c37411b1e45f434116a9941d945a80 create mode 100644 Library/Artifacts/63/63fc7a699e115aa43067f3bb8f21dcd5 create mode 100644 Library/Artifacts/64/64462e21802ab64dc91fad391d29ae2a create mode 100644 Library/Artifacts/64/64ad39e35207db034f09d47e62bb4ccd create mode 100644 Library/Artifacts/65/650cdc0700911265b1c759b129315bc9 create mode 100644 Library/Artifacts/65/65494baaf7a7b19fa4a6f53e97ac4e05 create mode 100644 Library/Artifacts/65/65af45b371e00d3446a8cd93ca60c86e create mode 100644 Library/Artifacts/65/65c249d7e4d66abcb5c0114a5d37a245 create mode 100644 Library/Artifacts/65/65d0b89df0ad5553ad3598f7f5b4497a create mode 100644 Library/Artifacts/65/65dce8bb15c0be1119a804725ac784e8 create mode 100644 Library/Artifacts/66/6618a33ea480ac61c334cefe955e7bd9 create mode 100644 Library/Artifacts/66/6625ff97dde6e0071a0837006a373527 create mode 100644 Library/Artifacts/66/66823fe9da5932bed8d63e32f3177a94 create mode 100644 Library/Artifacts/66/669b31c5da3aa426f0e806a5e23e61f8 create mode 100644 Library/Artifacts/66/66a6865073311067494bbe71fb8d6e3f create mode 100644 Library/Artifacts/66/66ef5a582ace0e988051303c2e199e28 create mode 100644 Library/Artifacts/66/66f5928ad36627139e1c423123a049b1 create mode 100644 Library/Artifacts/67/676aedeff52b3db763f153a37f89a2e2 create mode 100644 Library/Artifacts/67/67729dcddc436b5aee904a38522d8d63 create mode 100644 Library/Artifacts/67/67a48c829e4b93f9674ee7d50d3fccad create mode 100644 Library/Artifacts/67/67db65994390ee1da8d900684e242073 create mode 100644 Library/Artifacts/68/68c17e43a27d0930d84c07e4723c9182 create mode 100644 Library/Artifacts/68/68d5ac688d7858d49820c0fa0a8ff786 create mode 100644 Library/Artifacts/68/68f0073e2738ee88302c52df404b7b34 create mode 100644 Library/Artifacts/69/691e305da292c9fac124a8c0af61d457 create mode 100644 Library/Artifacts/69/693ae77f4d30f133831d06712244306d create mode 100644 Library/Artifacts/69/6942242044c3dfc17c7f97226924e09a create mode 100644 Library/Artifacts/69/6949060e27855c5ac10ef79d07e45fa9 create mode 100644 Library/Artifacts/69/698c83b2b64f653fb408c0c1356749fb create mode 100644 Library/Artifacts/69/69a87e09ad725ecdde7836c348d0aa09 create mode 100644 Library/Artifacts/69/69d7f4fe1eead23a6665179ee22b59c1 create mode 100644 Library/Artifacts/6a/6a7344d9167dcbfd15a745e05aaa8cc1 create mode 100644 Library/Artifacts/6b/6b08e773f80bbfe8989827a8b492b797 create mode 100644 Library/Artifacts/6b/6b38a0dcb8ff4ec8efd287a3b3f69688 create mode 100644 Library/Artifacts/6b/6b6f9b101d414cebea68be1b1929661f create mode 100644 Library/Artifacts/6b/6b975722bd4e0e4be3bab72cb51b6d25 create mode 100644 Library/Artifacts/6b/6bb559f2e0f1a4443dcec7ec42e30da6 create mode 100644 Library/Artifacts/6c/6c12a76306423b66a29681e32ac6d93a create mode 100644 Library/Artifacts/6c/6c2248de8d4d74d17e6cf05a7a661353 create mode 100644 Library/Artifacts/6c/6c3f8ec7c37858af5ed3b7fcf6d0516d create mode 100644 Library/Artifacts/6c/6c686931c56405543a7f5d6486598643 create mode 100644 Library/Artifacts/6c/6c68999f70f27ff7c436d7d5ebec0443 create mode 100644 Library/Artifacts/6c/6c70f9a6fe9074bf74427e7a69411f42 create mode 100644 Library/Artifacts/6c/6c924df507920c74f1f6b75280298ea9 create mode 100644 Library/Artifacts/6c/6c9b904976f3028ec3169f84b342d29d create mode 100644 Library/Artifacts/6c/6cf9b68aa8ad3324ff114591df23787e create mode 100644 Library/Artifacts/6d/6d501f7b766f7dc39eec7bb71255f39a create mode 100644 Library/Artifacts/6d/6d5f5aedcf69496321a5bbfe9bd36ee0 create mode 100644 Library/Artifacts/6d/6da60fabd675e8b942714d9237b848a6 create mode 100644 Library/Artifacts/6d/6dddb97df40a22a43a217125e7d69284 create mode 100644 Library/Artifacts/6e/6e08991de0b248f9f8249baf1f428ba9 create mode 100644 Library/Artifacts/6e/6e56941b8c7af2a0d4e5573399398eed create mode 100644 Library/Artifacts/6e/6e71a3e7c3073fa3560c6d042e85ff35 create mode 100644 Library/Artifacts/6e/6e8784873afecee8a690892646db6ad9 create mode 100644 Library/Artifacts/6e/6eb07d6a0c2a3054eab25473206aa87c create mode 100644 Library/Artifacts/6e/6ebcf318e28f331682cea976947a87b5 create mode 100644 Library/Artifacts/6e/6ece5606c0d91afb9cc6971d7156353c create mode 100644 Library/Artifacts/6f/6f55cf97331c52ddf94ad39b3eb6d33b create mode 100644 Library/Artifacts/6f/6f7c7466bbec7a587a93e6293bba5a75 create mode 100644 Library/Artifacts/6f/6f84dd051d64192fa930c59a8ed9db19 create mode 100644 Library/Artifacts/6f/6faaf401de9d925a06deb01031203d44 create mode 100644 Library/Artifacts/6f/6fb0adcbd9eb2944ae7e3a0cb8e39f96 create mode 100644 Library/Artifacts/6f/6fcccd790d7a9125fa72a8fbb1dc1de8 create mode 100644 Library/Artifacts/6f/6fda466bdbec95732a0ccad207525bc8 create mode 100644 Library/Artifacts/70/7024acf13e7e4139f19d2a673e87fca5 create mode 100644 Library/Artifacts/70/702cda8bf7571cc0df83b1a165e602d8 create mode 100644 Library/Artifacts/70/702df78a8a35a7b45a1470f52d7c7cc1 create mode 100644 Library/Artifacts/70/703e79cbe8ef2235dfde4aa48cc77202 create mode 100644 Library/Artifacts/70/70aa3dda62eef6110622f02f3db9cc5a create mode 100644 Library/Artifacts/70/70e261dc5360def38d34a74209b8fa05 create mode 100644 Library/Artifacts/71/713c4799aacb9f5d12ca35388807c44b create mode 100644 Library/Artifacts/71/7153b7a2111d4bf5726a5eb7514278ce create mode 100644 Library/Artifacts/71/71892e8c1689261ebc84773d0f5859f6 create mode 100644 Library/Artifacts/71/71b1cf657d94ff8b63b342602256db33 create mode 100644 Library/Artifacts/71/71de0fbc074bb68ff35599579f72ea80 create mode 100644 Library/Artifacts/72/726752a05dc630122ffc3ff634d1814a create mode 100644 Library/Artifacts/72/72a12d9c3324fd837daf984b2930de3b create mode 100644 Library/Artifacts/73/7316aef0ed15c140e0ffd84075e296d6 create mode 100644 Library/Artifacts/73/73d2ba5882fcb596897d7a73df2850fd create mode 100644 Library/Artifacts/73/73d6a34541bf0be7d477ec68db129ef2 create mode 100644 Library/Artifacts/73/73fc8c94c9e67e9b1736a1d860c882ba create mode 100644 Library/Artifacts/74/7443fc5c2c475e9093b5e74b0ac03067 create mode 100644 Library/Artifacts/74/747a0d0ead951ed640e01517af1ff277 create mode 100644 Library/Artifacts/74/7484ef34a270ddd1339055b83d613e31 create mode 100644 Library/Artifacts/74/749060369b3360446e08bce489e3b5f1 create mode 100644 Library/Artifacts/74/74b84aeb0abb92f8128e2858db348eb5 create mode 100644 Library/Artifacts/74/74db60ce9ad7d275d5b505e5a048185d create mode 100644 Library/Artifacts/74/74e8ae365aed8b147044d072c55b2099 create mode 100644 Library/Artifacts/74/74ef494d23eeef378846e242a13a4773 create mode 100644 Library/Artifacts/75/7503c542e60383cb3ca084903ff1c80a create mode 100644 Library/Artifacts/75/752478c410a7231db25077bbb5fee11d create mode 100644 Library/Artifacts/75/75840f5170d2745d533b7f09ce992698 create mode 100644 Library/Artifacts/75/759fa782a1a19355fc7154f167b8e057 create mode 100644 Library/Artifacts/75/75e21c68cf09ad3e6b2a16641a40f8e1 create mode 100644 Library/Artifacts/76/76430bbe2e87dea9fe177a06461efb57 create mode 100644 Library/Artifacts/76/7669aacc9a75af5d96de02d1231ca56b create mode 100644 Library/Artifacts/76/76a160f26096b93172b83e8940cbf317 create mode 100644 Library/Artifacts/76/76f24174143385d46342a13959b0bd5f create mode 100644 Library/Artifacts/76/76f37d74f72ab2c056c1813cd5e65271 create mode 100644 Library/Artifacts/77/7735f2887084f283eefe883f614ecf5f create mode 100644 Library/Artifacts/77/776a094b5f78ab161bf9e637c93c771d create mode 100644 Library/Artifacts/77/778b015b0c0fd03f9e6f34170a271c3f create mode 100644 Library/Artifacts/77/77903d5e0ecb4a9eaae20c8b28c70aac create mode 100644 Library/Artifacts/77/77ec011249b08fb17adf2e15a1e2672b create mode 100644 Library/Artifacts/78/7808c154cf09768b6b1b29474f47efc7 create mode 100644 Library/Artifacts/78/7843b95be2ac4e84e3f744dec1b6d2c3 create mode 100644 Library/Artifacts/78/78fdeea0557f822afa72e8e4e705e478 create mode 100644 Library/Artifacts/79/790e2f4010b119c6bd4bcd0dc3b4dad7 create mode 100644 Library/Artifacts/79/795749de7356577fc8de1fd84e3a4142 create mode 100644 Library/Artifacts/79/7988985fd148d818da8ff7c885c24727 create mode 100644 Library/Artifacts/79/79c584fe6dfaf532810dfaf10e0bd055 create mode 100644 Library/Artifacts/79/79d067a500a243c65170d4480ab0c41d create mode 100644 Library/Artifacts/79/79ec9924523cab891e1402fd42acd369 create mode 100644 Library/Artifacts/7a/7a0b4e95758087f04d9b96616a0a433b create mode 100644 Library/Artifacts/7a/7a1ddd4bb62494c94d9a519402133b72 create mode 100644 Library/Artifacts/7a/7a242b203ec1f87acb85a1bca6d92a05 create mode 100644 Library/Artifacts/7a/7a3812acbce337fede22a13d60be701d create mode 100644 Library/Artifacts/7a/7a422c42e8d1c35b63f76b33fda4d52f create mode 100644 Library/Artifacts/7a/7aa8381beae3d61f095839726d33821e create mode 100644 Library/Artifacts/7a/7ab697405347529d2c9651dfdd1c53fa create mode 100644 Library/Artifacts/7a/7ac6c1fdfe9b07e270619958ff49d50d create mode 100644 Library/Artifacts/7a/7ad154c61ec1fa2e037fbb66380436d0 create mode 100644 Library/Artifacts/7b/7b1c49ddf8ff7572a460daa2c0f7de27 create mode 100644 Library/Artifacts/7b/7b792571f5382aea7ae3bd5d1e066121 create mode 100644 Library/Artifacts/7b/7b9c7ec404f78f246398c5724e792baa create mode 100644 Library/Artifacts/7b/7bc20827162ddd36b541e61f0d2a3916 create mode 100644 Library/Artifacts/7b/7bcf1c1dac433557299f90223a6b1796 create mode 100644 Library/Artifacts/7c/7c06665d81fcfc7ef32834f386752a64 create mode 100644 Library/Artifacts/7c/7c0a52a9e25cbb89e389299b52a8a0c5 create mode 100644 Library/Artifacts/7c/7c319978c39a6eabd8452b5053851966 create mode 100644 Library/Artifacts/7c/7c536cc5e7e5cb82fe3b9db34ddefac8 create mode 100644 Library/Artifacts/7c/7c97c493dafce68bb2b711f1e7c82cc6 create mode 100644 Library/Artifacts/7d/7d117ab77a9affc127e4ab2ca0a3619d create mode 100644 Library/Artifacts/7d/7d23ff101b4f31c973e98948daeab65d create mode 100644 Library/Artifacts/7d/7d2b1b311591fc74b13b637f7eb260d9 create mode 100644 Library/Artifacts/7d/7d60037118799cadcd00a53424a11914 create mode 100644 Library/Artifacts/7d/7d6bf65b11c4d06ee51af0dd2fb4667c create mode 100644 Library/Artifacts/7d/7db5547321cc85d7df305fae9f8ae5c3 create mode 100644 Library/Artifacts/7d/7dfd312258bf4dd10f5aa04dfc49aff1 create mode 100644 Library/Artifacts/7d/7dfde6001575602515bb12f126c02a3d create mode 100644 Library/Artifacts/7e/7e01561233644e028ea51dfa90cdfa74 create mode 100644 Library/Artifacts/7e/7e25ba33d99337c285eb311a33bfe647 create mode 100644 Library/Artifacts/7e/7e335d9490c3fb2363bbc720cde3f22d create mode 100644 Library/Artifacts/7e/7e6e85dbbfa209b3f4170edf11d834a2 create mode 100644 Library/Artifacts/7e/7e911d8e752695abfefd019fb4619bbb create mode 100644 Library/Artifacts/7e/7eeb70a79371aa81fec02fe01411a904 create mode 100644 Library/Artifacts/7f/7f14077002b925e48d80eca5ccaedbdc create mode 100644 Library/Artifacts/7f/7f507f0c334389839cef89a0c4271b0e create mode 100644 Library/Artifacts/7f/7f62a967c11665b160fc2cb207ce7daa create mode 100644 Library/Artifacts/7f/7f6c421855079c70ff6023b5a61a31fd create mode 100644 Library/Artifacts/7f/7fa05f6b7bd227f6a2ca0a59ade48bb0 create mode 100644 Library/Artifacts/80/8073ba681b42589118f63bd0851c5dc6 create mode 100644 Library/Artifacts/81/81071f95f4859a115cf058e3964e2702 create mode 100644 Library/Artifacts/81/81094cdc9e247641f8619199761b0e02 create mode 100644 Library/Artifacts/81/815fd7d8a04cac0cbfee40bdbdd9bcaf create mode 100644 Library/Artifacts/81/817caa01300665b61cff5d37e4cfb1b5 create mode 100644 Library/Artifacts/82/8224ae79f92713e3454f398739191270 create mode 100644 Library/Artifacts/82/8226c87cbe69d2b971c1bdda552d9524 create mode 100644 Library/Artifacts/82/826f933060fc58333bd19621634d9298 create mode 100644 Library/Artifacts/83/8336cfbfe61eb3393bb106e67f83b638 create mode 100644 Library/Artifacts/83/834d0ef10d20f0d5b7d9b07a46bc0953 create mode 100644 Library/Artifacts/83/83a43593ec482460c58dc2754ac908aa create mode 100644 Library/Artifacts/83/83aeda4e541db0b1484ae460215b4c07 create mode 100644 Library/Artifacts/83/83fad0618fc64941150c9f368f499b74 create mode 100644 Library/Artifacts/84/84884f82cd25440718d5eeffcdad9b94 create mode 100644 Library/Artifacts/84/849014c6ed94cdc3a815c303ee0becac create mode 100644 Library/Artifacts/84/84c82b460875aeab10c1c43ad0e2b357 create mode 100644 Library/Artifacts/85/8523f9937b95b1272478fff88305b2b8 create mode 100644 Library/Artifacts/85/852c0b05a99d0f9897dcf7732499524e create mode 100644 Library/Artifacts/85/85336340c6ba1a102aad7fad6870b9f1 create mode 100644 Library/Artifacts/85/854398386571a7fb475846bd1d83d2b4 create mode 100644 Library/Artifacts/85/855c88b3bee12b55dd6440009e160437 create mode 100644 Library/Artifacts/85/856288e33efa9a5b36a89c6204e892dd create mode 100644 Library/Artifacts/85/857c4cc6aa48a750906094bfa06271cc create mode 100644 Library/Artifacts/85/85c9b223384f2d321bad364b289bee33 create mode 100644 Library/Artifacts/86/868034333448e420ee1dd66bbb07f407 create mode 100644 Library/Artifacts/86/86fc0131e87972257d106d4dfd761159 create mode 100644 Library/Artifacts/87/8713dc15cc165093e05c266cf692cb93 create mode 100644 Library/Artifacts/87/87273590159094d1d4154ac869b364eb create mode 100644 Library/Artifacts/87/8739134dd280de00190fb7e1cb8cfbb6 create mode 100644 Library/Artifacts/87/87463bf1e8c30ec72c3948a11c5ee163 create mode 100644 Library/Artifacts/87/8764f37e6a7c178dffc723938d6fe920 create mode 100644 Library/Artifacts/87/877ef686af4274bf1b9de831caf670eb create mode 100644 Library/Artifacts/87/8798b9ecb8ae8f4165f045e68ff61189 create mode 100644 Library/Artifacts/87/87bf9ac2942b239f85ecedb016ccdc4d create mode 100644 Library/Artifacts/87/87c2ee8fbb7ce90211274b7293b98198 create mode 100644 Library/Artifacts/88/8848a061a1d6dfbf64b6b6ec121a979c create mode 100644 Library/Artifacts/88/88ac36b1851404c3bd3f6c6d020ac687 create mode 100644 Library/Artifacts/88/88b9a5470365b9a61d548368e61ed968 create mode 100644 Library/Artifacts/89/892196e23ce17dc43d89177274a3d82f create mode 100644 Library/Artifacts/89/89af7bdbf91378c7bab6a7b63512f86c create mode 100644 Library/Artifacts/89/89b733d617afb44c6756010b85fc9d07 create mode 100644 Library/Artifacts/89/89e87464d9bfb1d39e531ee233514044 create mode 100644 Library/Artifacts/89/89f0cd22c886efa64fe257103a45cab6 create mode 100644 Library/Artifacts/89/89f2cbc6a5c4abfe3f35849547a5ed0a create mode 100644 Library/Artifacts/89/89fa36df881bad490537fc016610fba2 create mode 100644 Library/Artifacts/8a/8a06ecb9f523ce50f0fce38faa1fc787 create mode 100644 Library/Artifacts/8a/8a09c1f9e2a48fefc79d41abae79eec7 create mode 100644 Library/Artifacts/8a/8a0fca11be8512159b6f9ef02ecdc80b create mode 100644 Library/Artifacts/8a/8a36f42e7b419b54c6d521084d3b7293 create mode 100644 Library/Artifacts/8a/8a3ff46a9124cd2be97cb6c561b289ce create mode 100644 Library/Artifacts/8a/8a409d938b07becfd9da1148893fee7d create mode 100644 Library/Artifacts/8a/8a6142b913fdbe4b2dc963276425f49e create mode 100644 Library/Artifacts/8a/8a629165807ca997bd6eeb23f40653e6 create mode 100644 Library/Artifacts/8a/8a9907ca198749bf8f6c6f8102a71cb1 create mode 100644 Library/Artifacts/8a/8aaaf125375d09b902c5528becb63c43 create mode 100644 Library/Artifacts/8a/8abbeafce631859262ecd41a01510dc9 create mode 100644 Library/Artifacts/8a/8ae045d3835d10d47b7891ffcc8a0c91 create mode 100644 Library/Artifacts/8a/8afa58ea83687c2455397b60b90d176c create mode 100644 Library/Artifacts/8b/8bcff60f555328b375ddc8d862779ea6 create mode 100644 Library/Artifacts/8b/8bd1b163127f6b79ca69030723456213 create mode 100644 Library/Artifacts/8b/8bebf1ba877c9d62b73e11245fe84598 create mode 100644 Library/Artifacts/8b/8bf8e732855c5dc1e2b4d57b2ed5e428 create mode 100644 Library/Artifacts/8c/8c15c2316fd8ba05c3443bc60fc91281 create mode 100644 Library/Artifacts/8c/8c46c3b1276bc2c71724c37c02e6ce8f create mode 100644 Library/Artifacts/8c/8c4daf5a108f8bbf9c7368d8b1fa3f0c create mode 100644 Library/Artifacts/8c/8c8e7251810edc4e96b770fca41af577 create mode 100644 Library/Artifacts/8c/8cb3f902786d355898a8af140b3d1664 create mode 100644 Library/Artifacts/8c/8cdc86be282fafbf192607c2e9d8e494 create mode 100644 Library/Artifacts/8c/8cf74902f6d9d5f1c571e436985f1d5e create mode 100644 Library/Artifacts/8c/8cff1894069595b8e033a3d17d2becc8 create mode 100644 Library/Artifacts/8d/8d0801fcf7f26d5d412898b43baebce2 create mode 100644 Library/Artifacts/8d/8d286137869f9d96db4c15d40e5d951f create mode 100644 Library/Artifacts/8d/8d39534b3c1d947347b9711e91528cb6 create mode 100644 Library/Artifacts/8d/8d5e70331d9ea6a22de0949864f0357b create mode 100644 Library/Artifacts/8d/8d664fa051ddbbf168abd2d4614aca49 create mode 100644 Library/Artifacts/8d/8da4e8fb7fec26e042aee4f34904ffca create mode 100644 Library/Artifacts/8d/8ddd85595b1c0cc286479c06a3ea3431 create mode 100644 Library/Artifacts/8d/8de243c8ca4268f7bb501747dc539a82 create mode 100644 Library/Artifacts/8e/8e18d58959e715934a44d59b6b8f3f8b create mode 100644 Library/Artifacts/8e/8e372c5e92f7b0bfb7d0a5fef938248c create mode 100644 Library/Artifacts/8e/8e8e40bb2d8e96fbbedb01fedb510a14 create mode 100644 Library/Artifacts/8e/8eb75a2efdb30665c0a52463aec0c17c create mode 100644 Library/Artifacts/8e/8eb76a42afae8e89ef3ef3aef76e606e create mode 100644 Library/Artifacts/8e/8eda04c26bb13c4694134a610c0d38fa create mode 100644 Library/Artifacts/8f/8f0925f56adbdc3fee17b6df8a169922 create mode 100644 Library/Artifacts/8f/8f6812f54a6b6e49f4bed890f5f9176e create mode 100644 Library/Artifacts/8f/8f838212508562883cfcbef17c82cc9e create mode 100644 Library/Artifacts/8f/8f95959182198c3c72bc59d10ac7d8f2 create mode 100644 Library/Artifacts/8f/8f9dbb2793f69ef234744711b5ea35e7 create mode 100644 Library/Artifacts/8f/8f9e2cdca34df14379060b508e59b54f create mode 100644 Library/Artifacts/8f/8ff0cf28a635bd109ba29799c4571c48 create mode 100644 Library/Artifacts/90/900622c3fedf32ec1720646f1bc4db5c create mode 100644 Library/Artifacts/90/9006c289fffe30f8410e0682f9e194c1 create mode 100644 Library/Artifacts/90/9009a9f358587ea7df739bd7088566ec create mode 100644 Library/Artifacts/90/900a8f1038c53f1afe8426596e4b7725 create mode 100644 Library/Artifacts/90/9010ba15340f6fd5444bf7f2f8108a33 create mode 100644 Library/Artifacts/90/902a040e1eba897d13197d4510598ba8 create mode 100644 Library/Artifacts/90/9046ad8215c1698a9fb3996a34ff69cc create mode 100644 Library/Artifacts/90/907319a906b2f2b6de467eb1c09f29a8 create mode 100644 Library/Artifacts/90/9075a5f314abfc3101397c8bb8a88c1c create mode 100644 Library/Artifacts/90/90cde701a4678164ef50fec65657e3ae create mode 100644 Library/Artifacts/91/91139490a29e2309d4dc0b127a8cd570 create mode 100644 Library/Artifacts/91/91c31e01cd3c29d28a0067a0c793046b create mode 100644 Library/Artifacts/91/91fecae32804fc3fbb8656b441aabb2a create mode 100644 Library/Artifacts/92/92072c5a775eac8e33f08356479de5ec create mode 100644 Library/Artifacts/92/9240bef35ce6372268140860230fa0b2 create mode 100644 Library/Artifacts/92/92622e385c22e2091b3c5cbdbe038634 create mode 100644 Library/Artifacts/92/92a9aa33366eef109f0d80c62a36b3d8 create mode 100644 Library/Artifacts/92/92dee1db808c5e60801da837ad6a3123 create mode 100644 Library/Artifacts/92/92fe3c52a7a2453e7b5db929ca83ee7a create mode 100644 Library/Artifacts/93/9303925937c0b89346e1dad263fc6d1e create mode 100644 Library/Artifacts/93/9305022daf29dc2226da0a2c871f98a5 create mode 100644 Library/Artifacts/93/932bb18c3f3c3b70e40355e8a5239e1c create mode 100644 Library/Artifacts/93/932e760195be1e29952b74e977f84c48 create mode 100644 Library/Artifacts/93/936f0c68ac9736a8b8de3ede600379cb create mode 100644 Library/Artifacts/93/93e9f6455f8cdaf5329b6d5dd8671c7e create mode 100644 Library/Artifacts/93/93fc3012d797b749abde15f373285520 create mode 100644 Library/Artifacts/94/94748c671f784a58941712688cb25813 create mode 100644 Library/Artifacts/94/94d9bc095b851f32e50356e3f503303d create mode 100644 Library/Artifacts/94/94e43cf8d55b33fc5b2c3a667ee57bd4 create mode 100644 Library/Artifacts/94/94f4f55b54979971d5db002fca11cd7c create mode 100644 Library/Artifacts/95/9502f066eb43f9ed0a0dc4919124265b create mode 100644 Library/Artifacts/95/951e3421546c6134031949550dd42a81 create mode 100644 Library/Artifacts/95/9520906471aa7398f5424d4d343037c2 create mode 100644 Library/Artifacts/95/9529b372962ea71120d67ccc83bceec5 create mode 100644 Library/Artifacts/95/95327805ca23660c29237dc9c119cdde create mode 100644 Library/Artifacts/95/953a0b360f275eb35b9ad951c27134d0 create mode 100644 Library/Artifacts/95/956650161e347c06fe53aa5954ff4914 create mode 100644 Library/Artifacts/95/95e724a0169c926c843cd22e4d8ae3d0 create mode 100644 Library/Artifacts/96/9604f556fd34631d2a1d5740ee14447e create mode 100644 Library/Artifacts/96/961d14e3348f311dbde12b16215abc4a create mode 100644 Library/Artifacts/96/963d06d34bf7af7e8f9f3a5306fe4eee create mode 100644 Library/Artifacts/96/96635cff2d3f721bfaf2a99a1d5d918d create mode 100644 Library/Artifacts/96/9692664e6d036de2396aee564b3f2545 create mode 100644 Library/Artifacts/96/96ef0ccba43ea84a6e44dd5371545378 create mode 100644 Library/Artifacts/96/96f91d89df3205caf9f08b173d043c7e create mode 100644 Library/Artifacts/97/9703c660578894d41f69fff4efef2d3d create mode 100644 Library/Artifacts/97/97226edd5293a98a6736040bac40c1f0 create mode 100644 Library/Artifacts/97/972395cd897c09352bb200a9263bd12e create mode 100644 Library/Artifacts/97/973601b7fb19b039cfc2f8f505a88427 create mode 100644 Library/Artifacts/97/9744bb3062f12528f07619cc604bb657 create mode 100644 Library/Artifacts/97/976b56cbcaab96388b44403ae48a7997 create mode 100644 Library/Artifacts/97/97a18865d5c1462667ce32f8c9e702de create mode 100644 Library/Artifacts/97/97d1ef000220acfb803a21d08026b4fd create mode 100644 Library/Artifacts/97/97fd452720adece62961bb3e1e5c3c6a create mode 100644 Library/Artifacts/97/97ff85b225fba9d0d5312a57a705aebe create mode 100644 Library/Artifacts/98/9817031d61a8df5862c25d726c4f4852 create mode 100644 Library/Artifacts/98/983b42378d1da2f1a6f21eddf6c4d878 create mode 100644 Library/Artifacts/98/987b5f74c6f84620146880183f2e66dd create mode 100644 Library/Artifacts/98/989c0ccd64500e45277315a7f0f7ca32 create mode 100644 Library/Artifacts/98/98edc19a6caba26df079dccb72c665af create mode 100644 Library/Artifacts/99/999cacb2f6d0854d22fadc90a50cafd6 create mode 100644 Library/Artifacts/9a/9a62b3fea1fd20a9d0177af7f06f2dcb create mode 100644 Library/Artifacts/9b/9b20c14620d49fed8b8a3a023ca9aa54 create mode 100644 Library/Artifacts/9b/9bb61e4064cce20fff242d8719ec225f create mode 100644 Library/Artifacts/9b/9bb938071e738eb550dfd7ad509d7b14 create mode 100644 Library/Artifacts/9b/9be1433935a255e4b38617684d733da0 create mode 100644 Library/Artifacts/9b/9be59f3f2d77e094229e8df95b8c42b4 create mode 100644 Library/Artifacts/9c/9c085aacb1fce8ccae436d9933f664c7 create mode 100644 Library/Artifacts/9c/9c4c60e93b5a2ae014f1cdd5a66b3a3e create mode 100644 Library/Artifacts/9c/9c9e00b78870804508c306d4744c94a4 create mode 100644 Library/Artifacts/9c/9c9f84d493c412ccd7f753ed29b2e4b9 create mode 100644 Library/Artifacts/9c/9ce4fd4d50c8c1e062c3988dbba327e5 create mode 100644 Library/Artifacts/9c/9cf44a21959e4d8ed78ab349c103737f create mode 100644 Library/Artifacts/9c/9cfd70194cef1114c1625ed8f615164f create mode 100644 Library/Artifacts/9d/9d088a584d16c67a31d358c61910e1a7 create mode 100644 Library/Artifacts/9d/9d6228701a76d83a70b4132f253128fd create mode 100644 Library/Artifacts/9d/9d7ea056f0f12b74f5594fd628e49703 create mode 100644 Library/Artifacts/9d/9d9fb15ff18d4685f65ff1a61e1487fc create mode 100644 Library/Artifacts/9d/9de04a6476b1d5d374a7048f56ebcdc9 create mode 100644 Library/Artifacts/9e/9e6ff3dc1d12050a76b6d227807b9889 create mode 100644 Library/Artifacts/9e/9e9739897b4a943d394a5467b90e9744 create mode 100644 Library/Artifacts/9e/9ebf085a886bdbd9da2df5ad725b11af create mode 100644 Library/Artifacts/9f/9f145098b4dbc4267d9bae715e229cdd create mode 100644 Library/Artifacts/9f/9f16170f5333e79c523daadbfdbb7d47 create mode 100644 Library/Artifacts/9f/9f2979b5085f68337fbda73acfa49ef7 create mode 100644 Library/Artifacts/9f/9fae2c8c4bbdab5de16e73f80b1f5456 create mode 100644 Library/Artifacts/9f/9fc705d46f9612cae556fccb830ce649 create mode 100644 Library/Artifacts/a0/a03bc0bdbc877b66a50f914049972126 create mode 100644 Library/Artifacts/a0/a055a1e3667d97d0da344d7bd76081aa create mode 100644 Library/Artifacts/a0/a0e272a8f53c1e104b38a12643810e9e create mode 100644 Library/Artifacts/a0/a0ea3d713b130379c1b4898aa0091b07 create mode 100644 Library/Artifacts/a1/a173f675b1a718fd762d512a8435184b create mode 100644 Library/Artifacts/a1/a174b6c078952cea72d51ec23d65f65a create mode 100644 Library/Artifacts/a1/a182ebf82964867220ec38eda6f7e37a create mode 100644 Library/Artifacts/a1/a198d7df6485c3b48412481bc397b71c create mode 100644 Library/Artifacts/a1/a1a294416679c08fa1a7b5b720883416 create mode 100644 Library/Artifacts/a1/a1b4f0d1b5651d2108ff50b46759b6f4 create mode 100644 Library/Artifacts/a1/a1c47b691a3d86f3d01fc3a33564f0e0 create mode 100644 Library/Artifacts/a2/a20c82e0a749c6b894001a6793b36ec4 create mode 100644 Library/Artifacts/a2/a27914a21368c924fb41bebcc796878e create mode 100644 Library/Artifacts/a2/a28326e3b426573c4ece5b5546fe6aae create mode 100644 Library/Artifacts/a2/a2b99cf16497146d66907601f3fb7950 create mode 100644 Library/Artifacts/a2/a2bdae819236bed2f5d1a376b1ac806c create mode 100644 Library/Artifacts/a2/a2eaa29705734b445601f3ea47035583 create mode 100644 Library/Artifacts/a3/a309d5bfe793cd5ce926c08078978f42 create mode 100644 Library/Artifacts/a3/a3ceb2b88442d42a811751f55aa3fd5d create mode 100644 Library/Artifacts/a4/a4234e603b1904fdefc554a9f7f4bfd4 create mode 100644 Library/Artifacts/a4/a42692062cc8681f1a049cbcccfdf89b create mode 100644 Library/Artifacts/a4/a43f9501357e34a5adeaac80ca7c0570 create mode 100644 Library/Artifacts/a4/a452743b738895df865f79ce4d1c1e4a create mode 100644 Library/Artifacts/a4/a47a6ab6e39aca5f688cb12e75dd1234 create mode 100644 Library/Artifacts/a4/a48288b04d015ed37b51bf351b082b16 create mode 100644 Library/Artifacts/a4/a48db16728c740688041d7afb61d3dbc create mode 100644 Library/Artifacts/a4/a4c8505bd1ae66c9f25966e1ec5de98a create mode 100644 Library/Artifacts/a4/a4e35cee96664444608111b27ff83d01 create mode 100644 Library/Artifacts/a5/a536340a8d321f5ce17e22fae0f29af8 create mode 100644 Library/Artifacts/a5/a536b3ef3318f04d442a66ef43f26493 create mode 100644 Library/Artifacts/a5/a543358ea704cbbc3e1244f2addd5b96 create mode 100644 Library/Artifacts/a5/a556871c7a4ac4952d518e6f2586d65a create mode 100644 Library/Artifacts/a5/a56974b110f9f4085b82f18f9189d722 create mode 100644 Library/Artifacts/a5/a56a6de2d28c624086fe1de4e90460ef create mode 100644 Library/Artifacts/a5/a57d9adf5d15b84b6460f65b7bc45a9c create mode 100644 Library/Artifacts/a5/a57ed357458aad4c010bd645426ec835 create mode 100644 Library/Artifacts/a5/a599fac17b9e5287b8db74af5bac51d3 create mode 100644 Library/Artifacts/a5/a5af40fc8133af3f0fda801211fe7bb2 create mode 100644 Library/Artifacts/a5/a5b10609ed054c0a1ce5349c611638eb create mode 100644 Library/Artifacts/a5/a5db9ddbc7ebf1a0d63c1deff9c7a345 create mode 100644 Library/Artifacts/a6/a661ce0ee0d4c35598d550085d935143 create mode 100644 Library/Artifacts/a6/a66d0ee2726dccaa5178579f5bb5063c create mode 100644 Library/Artifacts/a7/a7106456c6eec96fbd8b1e9d903e603b create mode 100644 Library/Artifacts/a7/a719e260306d77f54f320d7ca0278615 create mode 100644 Library/Artifacts/a7/a71c03723bda49f9c3851a8fe5487814 create mode 100644 Library/Artifacts/a7/a730ed9a2cb7cfdaba5adb41d9049bbc create mode 100644 Library/Artifacts/a7/a73257752b3bb8d7ce052b37b4fac1d3 create mode 100644 Library/Artifacts/a7/a732607c67c785d501297d0666c5694c create mode 100644 Library/Artifacts/a7/a783099ce3a2c530fb68abba01b27479 create mode 100644 Library/Artifacts/a7/a7868ad8e1aa10b2d50af705c4e734ec create mode 100644 Library/Artifacts/a7/a7a4ee02bc1b0e150788026900588db0 create mode 100644 Library/Artifacts/a8/a8014cdca57d1eff2ace3edb75edd2f2 create mode 100644 Library/Artifacts/a8/a816e6844275c01c976eb66f067b14dc create mode 100644 Library/Artifacts/a8/a8580efda4dd10a91b74c031e0b72367 create mode 100644 Library/Artifacts/a8/a86ca8cbe4cda5fadff2e1fb8684d0e0 create mode 100644 Library/Artifacts/a8/a874ca0c76735119e876c74c25c6d6a7 create mode 100644 Library/Artifacts/a8/a88945e36db003008694203e77d76134 create mode 100644 Library/Artifacts/a8/a8c4a6d7c2227ea56ba4bba9cec47a5c create mode 100644 Library/Artifacts/a8/a8c5364a023716ef6f0eb1543b87cb91 create mode 100644 Library/Artifacts/a9/a91e925f57859fca59972219d231203e create mode 100644 Library/Artifacts/a9/a924085270b785fe53dae2bd3f99d749 create mode 100644 Library/Artifacts/a9/a9ac59ebcb1d799bcb6a09aea8228307 create mode 100644 Library/Artifacts/a9/a9adcff3b5388a1600770321548dcb5a create mode 100644 Library/Artifacts/a9/a9fcf1f8ef794a0b38366361c5cdb5d8 create mode 100644 Library/Artifacts/aa/aa0dd8baf411cec4f63462f16328a182 create mode 100644 Library/Artifacts/aa/aa43f883b6b73df61662e5445a6262d7 create mode 100644 Library/Artifacts/aa/aa648354bba1a81903f335aacb48eb40 create mode 100644 Library/Artifacts/aa/aa77488b6315c9622ee1ee8ae3ca8c2e create mode 100644 Library/Artifacts/ab/aba2ca1e1bed12e1083837c86194e81e create mode 100644 Library/Artifacts/ab/abf1c012ec71f544a78e5cf0144d9d2b create mode 100644 Library/Artifacts/ab/abfe0ca15be088b9dcfe631fe450304c create mode 100644 Library/Artifacts/ac/ac15d391e049c47aa072eeb31cf369b7 create mode 100644 Library/Artifacts/ac/ac4b42de4cbb4984ce2e4fd47573b5f2 create mode 100644 Library/Artifacts/ac/ac760665cf6b2023cf416a48735e80d6 create mode 100644 Library/Artifacts/ac/acca287896a78089ed800172d0026f7c create mode 100644 Library/Artifacts/ac/acfd73463df39ef34d66bea3d59a0617 create mode 100644 Library/Artifacts/ad/ad0d3f4f42d5bbabcc2d81f4fedd1ec1 create mode 100644 Library/Artifacts/ad/ad30472f25e6464d1f5daf3079993770 create mode 100644 Library/Artifacts/ad/ad3a5b4adac97592f027716f0c265e1b create mode 100644 Library/Artifacts/ad/ad3c252c6f26bca017c1a8d7b2db570c create mode 100644 Library/Artifacts/ad/ad40db2c3f251c401a10af5340bb1eee create mode 100644 Library/Artifacts/ad/ad4129a6eb7bd917a6e89ff54697d23b create mode 100644 Library/Artifacts/ad/ad99347677ba421cfb8345cb7ae2da0e create mode 100644 Library/Artifacts/ad/adb25bcfb31a6ebee8249b49d8f01d1a create mode 100644 Library/Artifacts/ad/adb7a17b8ba9afb98404edb5a5303670 create mode 100644 Library/Artifacts/ad/add3807966f73f68a10333821d37c06b create mode 100644 Library/Artifacts/ad/adff4cdd22a8a4476279acdfda8afd2d create mode 100644 Library/Artifacts/ae/ae33e47ca2c8247394a6fbf66585009f create mode 100644 Library/Artifacts/ae/ae51b0c92e4d654271834a49adca9ea4 create mode 100644 Library/Artifacts/ae/ae553695fa0082e3c593d7b18bb7482b create mode 100644 Library/Artifacts/ae/ae832c745d4cd1a1bd15e33493e0c3e0 create mode 100644 Library/Artifacts/ae/aef22008ced9f57dd3968b86b406ff1c create mode 100644 Library/Artifacts/af/af1d9af421a02c239e509b023edbbc57 create mode 100644 Library/Artifacts/af/af68e98d0b459eadcbc8282ef94f832a create mode 100644 Library/Artifacts/af/af83c08a647ca78ab3d105731b2ed0f0 create mode 100644 Library/Artifacts/af/afaea85e4c79ada04491ed23c12d8cd2 create mode 100644 Library/Artifacts/af/aff4496fb280df0d2b0993b55728707c create mode 100644 Library/Artifacts/b0/b05ad80f807411f662d3e1b856f8e7f8 create mode 100644 Library/Artifacts/b0/b066bea681dce09ce59f12c41a68c8be create mode 100644 Library/Artifacts/b0/b06996ce1dc7cf5d5cfb5cc214ab50ce create mode 100644 Library/Artifacts/b0/b08f87f4a3bea1decfb616c7b2a741f0 create mode 100644 Library/Artifacts/b0/b0add22e794b6e1fbca3d706b87fec9a create mode 100644 Library/Artifacts/b0/b0fb937cb79b644dc5478c7c7fca0e1c create mode 100644 Library/Artifacts/b1/b12ef856f2b242744125f9b6f3fddfb4 create mode 100644 Library/Artifacts/b1/b16ca91621fd724b93e1d2d91d51071e create mode 100644 Library/Artifacts/b1/b1c68c34027c8b52233575d7b4007a93 create mode 100644 Library/Artifacts/b1/b1d49623a0eb2a1a3d8ec3d32c4bef82 create mode 100644 Library/Artifacts/b1/b1e12061672d43e7115eb08b3e0b83cc create mode 100644 Library/Artifacts/b1/b1f660c96d3f712abb0b88b3ddca3a7c create mode 100644 Library/Artifacts/b2/b2472b873d16922b3fa9b914232f6695 create mode 100644 Library/Artifacts/b2/b260797475f170774e2388f3f9eaacef create mode 100644 Library/Artifacts/b2/b296ac0d566349d1193188d9d1a11ded create mode 100644 Library/Artifacts/b3/b329cb8363f190ba181a42e3867b2960 create mode 100644 Library/Artifacts/b3/b32f90e5e9a12b0f1634dc12660970fd create mode 100644 Library/Artifacts/b3/b33af3da5c05f1383d2d97f7e1275fbd create mode 100644 Library/Artifacts/b3/b35e8197d9d938512178012047e13f39 create mode 100644 Library/Artifacts/b3/b3666aa279a57adbfa2eaea6843e1886 create mode 100644 Library/Artifacts/b3/b37e16b4a95ef9d8d3f348300aa50eb4 create mode 100644 Library/Artifacts/b3/b3951734078bfe369f6d7ee9aa768172 create mode 100644 Library/Artifacts/b3/b3cf7702e8cc8cc4261dbf045dbb1add create mode 100644 Library/Artifacts/b3/b3d10c17496ca75517d15883f9d259a9 create mode 100644 Library/Artifacts/b4/b402b8875d5566fb394754bc1faaf3aa create mode 100644 Library/Artifacts/b4/b41a89a67a53a369b7d00aa18765ba96 create mode 100644 Library/Artifacts/b4/b443be225c94546aa8d7c67496610894 create mode 100644 Library/Artifacts/b4/b47d018719465cad9db43b127bf84d49 create mode 100644 Library/Artifacts/b4/b47f42c14baa103aabd3b0dc63f07fa5 create mode 100644 Library/Artifacts/b4/b4bff0e99eb3155e799c9a0ffa9ddece create mode 100644 Library/Artifacts/b5/b5106995bfd63b5d938fa1f1fa511b63 create mode 100644 Library/Artifacts/b5/b59c52b030077e57d3b9393da2b6fe56 create mode 100644 Library/Artifacts/b5/b5cc8de37bcc6a691538762ba376e303 create mode 100644 Library/Artifacts/b5/b5d0825b8c93269a8fd1970d8977cb91 create mode 100644 Library/Artifacts/b6/b61ee712b3aaadf1abb9803fd3135642 create mode 100644 Library/Artifacts/b6/b63826d77830a89c8e502842626fdc72 create mode 100644 Library/Artifacts/b6/b6384d43178c47eb9b30763920a2a048 create mode 100644 Library/Artifacts/b6/b6c69b33548e4bfee14bccd85dcc82f5 create mode 100644 Library/Artifacts/b6/b6d99485d33c1dd8078a99ef8e16701d create mode 100644 Library/Artifacts/b6/b6ef332695a20822e76b316979f045d4 create mode 100644 Library/Artifacts/b7/b73d9c638857d5d1d791f7ff4c1f1af3 create mode 100644 Library/Artifacts/b7/b75b2c5958a8c5320f0a60a56321970a create mode 100644 Library/Artifacts/b7/b78411ac3f447b304f2801865df3d8c6 create mode 100644 Library/Artifacts/b7/b7be73ab80deeaa6190bb0c5269a39fb create mode 100644 Library/Artifacts/b7/b7f5bc2ddcf2f3601f708fbb0080856f create mode 100644 Library/Artifacts/b8/b837d75cdd88bc229c848e372f43c0f9 create mode 100644 Library/Artifacts/b8/b872f644fd77d16fda508a1f31ef21c7 create mode 100644 Library/Artifacts/b8/b88552fe70de20ed4275e35e2e63f8ed create mode 100644 Library/Artifacts/b8/b8b1aca5071b991720424a9797489120 create mode 100644 Library/Artifacts/b8/b8bc59989068d6b2664c4deb0990e71c create mode 100644 Library/Artifacts/b8/b8cd5e93132d2cc0235f64529fbaf76c create mode 100644 Library/Artifacts/b9/b90823f71533a3f65eb41014bba9a124 create mode 100644 Library/Artifacts/b9/b90a4e9afe4cf3bffab687f3015c8e7d create mode 100644 Library/Artifacts/b9/b91c3765407b5220abcde8fb42b6d012 create mode 100644 Library/Artifacts/b9/b9518f59bbc4a434b58e0eaed0945ad0 create mode 100644 Library/Artifacts/b9/b96111ce792adb0fa28c4af280a7f821 create mode 100644 Library/Artifacts/b9/b96261b441e77a658e9f207b2b093792 create mode 100644 Library/Artifacts/b9/b9d49b9056f8cd6613eb19150050f3f2 create mode 100644 Library/Artifacts/b9/b9fa0e1af69285c31560390ee73e2c48 create mode 100644 Library/Artifacts/ba/ba6e9805ddf4a02f2f81c1a0aab74930 create mode 100644 Library/Artifacts/bb/bb1b5a4a3d36d87ee144faabf20efb5f create mode 100644 Library/Artifacts/bb/bb208bc9b9741793155674c66ee00971 create mode 100644 Library/Artifacts/bb/bb5df611eae7894e2c19846670f3d045 create mode 100644 Library/Artifacts/bb/bbd219f6060928cb59aeb0bac7e67ff6 create mode 100644 Library/Artifacts/bc/bc1640324cdf975413bfa9d6d5c93f2a create mode 100644 Library/Artifacts/bc/bc726ef2ec848db1db538924b9077742 create mode 100644 Library/Artifacts/bc/bc7e4894048020c92f4569ef4ae5ce72 create mode 100644 Library/Artifacts/bc/bcaf87258b9727bc12ccbc5050b2bee9 create mode 100644 Library/Artifacts/bc/bcc16bd27df58f53f0f663a2c85e3b24 create mode 100644 Library/Artifacts/bd/bd0ada6585c7869267e05fc588e5c73a create mode 100644 Library/Artifacts/bd/bd1d2486c2e3b755fa4ae32a4e6dd1bc create mode 100644 Library/Artifacts/bd/bd232a566d0b0efbb4c7d4fe6a077a66 create mode 100644 Library/Artifacts/bd/bd2d47745dba1290a985893cc6513d9d create mode 100644 Library/Artifacts/bd/bd3900606aba5a9404efa187e3b8ba73 create mode 100644 Library/Artifacts/bd/bd4f7de9b3931e4eb9382e97292448f4 create mode 100644 Library/Artifacts/bd/bd877d7ebb9bf43b6b59396f5bea3a8c create mode 100644 Library/Artifacts/bd/bd92d2f908ecb8dcaa72df11062d824e create mode 100644 Library/Artifacts/be/be03839eb3cb223ca502477b2a243af1 create mode 100644 Library/Artifacts/be/be7bd3982d0ca8a5808c19f6d915a6a6 create mode 100644 Library/Artifacts/be/be9ffb9825df404dffbae799eb3dcd67 create mode 100644 Library/Artifacts/be/bea5ae61f8e9b9da6915603e45f11e8f create mode 100644 Library/Artifacts/be/bedc0fe37a3b7c3970c5de84f7e21fcc create mode 100644 Library/Artifacts/be/befffb678fd5f238b11ae9e468473733 create mode 100644 Library/Artifacts/bf/bf3f32d45d921946ba4e3f44f5f0bdb5 create mode 100644 Library/Artifacts/bf/bf8f8c63c6f7dd01f4f13dde3a23f85a create mode 100644 Library/Artifacts/bf/bf969cb2be5689c6d9b1d9aa43da0711 create mode 100644 Library/Artifacts/bf/bf9bf3e35bae89fdca54c6938e134288 create mode 100644 Library/Artifacts/bf/bfabdff2bcb824d6b6613892a0698a0f create mode 100644 Library/Artifacts/bf/bfe8cb190a2048078e96c3e4185cfd24 create mode 100644 Library/Artifacts/bf/bffc6e850a8e42000d83d7a240701b4d create mode 100644 Library/Artifacts/c0/c000af77a2462df7e74f63c841c68b82 create mode 100644 Library/Artifacts/c0/c02d21da5ad8e0fbefddba6dee1cedb1 create mode 100644 Library/Artifacts/c0/c03c5a55edb8174c8a03b88c99f2b204 create mode 100644 Library/Artifacts/c0/c0c25d4d2ade855fd5815b42af5c4a3c create mode 100644 Library/Artifacts/c0/c0e29ea71e40731636e0801294404c36 create mode 100644 Library/Artifacts/c0/c0e511a0a1faa6378e8424ebb7d7ea10 create mode 100644 Library/Artifacts/c0/c0f59b89087dc1922987cd039f851124 create mode 100644 Library/Artifacts/c1/c123df76fcdaf44c67223a3b14aced04 create mode 100644 Library/Artifacts/c1/c184a4e8589b85cb75da1173289b48c2 create mode 100644 Library/Artifacts/c1/c18aea3e2dd51c1713e7be0a5f5f70c4 create mode 100644 Library/Artifacts/c1/c1b2ca7dcc4155099ba1ac33fe8897cc create mode 100644 Library/Artifacts/c1/c1bab8ca598865822d118c3c78b88a2b create mode 100644 Library/Artifacts/c2/c25d40aa53d75d427be961b299599ac2 create mode 100644 Library/Artifacts/c2/c280ef53536efb0ec70d666cfb57888f create mode 100644 Library/Artifacts/c2/c288468df3ad9c92e3c42033873c586f create mode 100644 Library/Artifacts/c2/c2958ac0dae99c60e1bea2630023ea8c create mode 100644 Library/Artifacts/c2/c2d759d97107fac8e629836eeac0a26a create mode 100644 Library/Artifacts/c2/c2d99e99f8a5d94b4fb68bbbee87f1dc create mode 100644 Library/Artifacts/c3/c3af1140aab68c8ee7f5ea4e852941d4 create mode 100644 Library/Artifacts/c3/c3ba8ef07cf814ccfc3e7e1164940819 create mode 100644 Library/Artifacts/c4/c403afe8b8ed5ea21907dd48527445d2 create mode 100644 Library/Artifacts/c4/c40b9ab794fd3e2e26302c8e547e6fe0 create mode 100644 Library/Artifacts/c4/c4213815aee509acb982a1d404f879c4 create mode 100644 Library/Artifacts/c4/c4239e6b4cbce6cb9b40937e5f999d7f create mode 100644 Library/Artifacts/c4/c445d040cfe1c1f6c088cad69d4fcd4f create mode 100644 Library/Artifacts/c4/c45fe0abd33d44a029a77bff85919fb0 create mode 100644 Library/Artifacts/c4/c47c7180c04ec7b1c4f66beaca64ef59 create mode 100644 Library/Artifacts/c4/c4b76feedf7786114f0b706635195371 create mode 100644 Library/Artifacts/c4/c4c031adfb6ae3972a64cfc7d0d6c6ab create mode 100644 Library/Artifacts/c4/c4d2355281a9f58e213e306546027c1d create mode 100644 Library/Artifacts/c4/c4dede6665f81bf4318252b4b9a1f4b7 create mode 100644 Library/Artifacts/c4/c4e2403273a5f505b39ebdc93f25634b create mode 100644 Library/Artifacts/c4/c4f00870f74854c20ab247fc0a0321ed create mode 100644 Library/Artifacts/c5/c516f75c2cd4f581b4d73f3329b1bda4 create mode 100644 Library/Artifacts/c5/c5c0a8ddfe92a93198578c0419140148 create mode 100644 Library/Artifacts/c5/c5e47458ffe48ba4318fa66fc64fdf1a create mode 100644 Library/Artifacts/c5/c5ef4406066fa155df064ba50454a72b create mode 100644 Library/Artifacts/c5/c5f96409b5fd0f3c92343b3122b5f111 create mode 100644 Library/Artifacts/c6/c65a4453ee4799328a83abb3f218ab63 create mode 100644 Library/Artifacts/c6/c675417799691275f1e93bfa48836e0e create mode 100644 Library/Artifacts/c6/c6a32356b2483e8cdacf0497356b1d76 create mode 100644 Library/Artifacts/c6/c6c5da05174896636c766f6cda02d4cd create mode 100644 Library/Artifacts/c7/c74efdbe1c8a0289aeec2abfb631a05e create mode 100644 Library/Artifacts/c7/c7b20fd442f5d0beaab4aa1592abb26a create mode 100644 Library/Artifacts/c7/c7b9784a93b4ba12d2958fa5b6e1f2a4 create mode 100644 Library/Artifacts/c7/c7e0a3e486f111229ede597eb4a09ef3 create mode 100644 Library/Artifacts/c8/c8248da421fbb59ca32014a1b0ecae67 create mode 100644 Library/Artifacts/c8/c8377849addd8ed4928d9d56c9948379 create mode 100644 Library/Artifacts/c8/c85185b7f98b211e643173cd3e330809 create mode 100644 Library/Artifacts/c8/c88a737a9bdd05281bfe71bcb0e372ee create mode 100644 Library/Artifacts/c8/c89212d8c43b2b459d9707566203c3da create mode 100644 Library/Artifacts/c8/c8a1c7b5c8495c21db74cd739fcbbdb2 create mode 100644 Library/Artifacts/c8/c8a2249caddc210c5c3339be0698cb5b create mode 100644 Library/Artifacts/c9/c90b781a10be3a15cd1f90e9c8c70ad3 create mode 100644 Library/Artifacts/c9/c9555d518cccd471153d86583e048c07 create mode 100644 Library/Artifacts/c9/c9aee2450e8e1ea2973f3ab704ba8da8 create mode 100644 Library/Artifacts/c9/c9c676058b9d43b8d2704601c68cf21a create mode 100644 Library/Artifacts/c9/c9e237319b48e61b86ff8132a3f97e1d create mode 100644 Library/Artifacts/c9/c9e787721ded611279286e6025384901 create mode 100644 Library/Artifacts/ca/ca4de5b7044b4279c5dfdf824fcd4218 create mode 100644 Library/Artifacts/ca/ca868d1985c84418faf6e68ae469a686 create mode 100644 Library/Artifacts/ca/cae9a67064f8cb226c41d5a1eaa7b882 create mode 100644 Library/Artifacts/cb/cb0da58eae538c5ec3e70dbb6c733363 create mode 100644 Library/Artifacts/cb/cb5dd9756fdf8998465b25018ba3ec83 create mode 100644 Library/Artifacts/cb/cb8856fddd0f6f637f24b1238c65e354 create mode 100644 Library/Artifacts/cb/cb8c48ecb6ff36e31f577f04eb18fe67 create mode 100644 Library/Artifacts/cb/cb9382c04c0f8d397c0c9786e33c9048 create mode 100644 Library/Artifacts/cb/cbae3560326b96c5ef1e7dd3540a7b94 create mode 100644 Library/Artifacts/cc/cc2951ba97366949f9bf49d70b47f2e4 create mode 100644 Library/Artifacts/cc/cc5188f5cebb7a41dcb7ea698d7cf2e4 create mode 100644 Library/Artifacts/cc/cc7d8979d89051c85a368d74870b60a4 create mode 100644 Library/Artifacts/cc/cc9322d99bb9b592ae8e79343d487d69 create mode 100644 Library/Artifacts/cc/cca7317a6755216cc90c25f504d968bf create mode 100644 Library/Artifacts/cc/cca81affe2b310d6deb2f7a3155800f5 create mode 100644 Library/Artifacts/cc/ccb92074633786cef5dceb21ceacbd9e create mode 100644 Library/Artifacts/cc/ccef22031d7753f0ce8ed5ed976ec45d create mode 100644 Library/Artifacts/cd/cd02e3a54e26683dd58600cbef4f77c9 create mode 100644 Library/Artifacts/cd/cd09abf6fedca002279dd92b45c97508 create mode 100644 Library/Artifacts/cd/cd17dbc07ce039ce531bdde9f50c37c7 create mode 100644 Library/Artifacts/cd/cd17f307321fd295b10dc888ddafed29 create mode 100644 Library/Artifacts/cd/cd48ad71cd577d4a458b0263c7a59306 create mode 100644 Library/Artifacts/cd/cd4cf463ed04c4433f508368ba9d9b34 create mode 100644 Library/Artifacts/cd/cdd06ca54553a0cbe49f4fb2f15a25d3 create mode 100644 Library/Artifacts/cd/cde600cb1006e8b1f5b104c61d1e27e9 create mode 100644 Library/Artifacts/cd/cdf16e277cac3e4124865031f3ba973b create mode 100644 Library/Artifacts/ce/ce00fbfd073665b7de72972046a5f832 create mode 100644 Library/Artifacts/ce/cea46d380acddf5912e80b083e1298bb create mode 100644 Library/Artifacts/ce/ceb27ce710cf14b9febe8df1554151dd create mode 100644 Library/Artifacts/ce/cec8805ea0721ca87b030ad6e9e4e653 create mode 100644 Library/Artifacts/ce/cee6c31082cae8646122afec98bda5b1 create mode 100644 Library/Artifacts/cf/cf4d8c398c8135ccd6a5235a7910f457 create mode 100644 Library/Artifacts/cf/cfafbfecc495b8494e0f81f6840bd6d0 create mode 100644 Library/Artifacts/d0/d0526ad96371206ff9b1b6a06d6e9028 create mode 100644 Library/Artifacts/d0/d0c0fd0154cf9f4b8b4139912e01cc99 create mode 100644 Library/Artifacts/d0/d0e696c5568a31366d1875e8bb59c1f1 create mode 100644 Library/Artifacts/d0/d0f6bc32179709481774e859625e45e2 create mode 100644 Library/Artifacts/d0/d0f8009143a3b6cc50799a2803307eb1 create mode 100644 Library/Artifacts/d1/d1188f32f8f5016c73f0da90c710627c create mode 100644 Library/Artifacts/d1/d119256577cf7cad2a895c84d2819479 create mode 100644 Library/Artifacts/d1/d138442754e882a3516e083c1713ba79 create mode 100644 Library/Artifacts/d1/d15fbecd6f34b5f226133f4e341020ad create mode 100644 Library/Artifacts/d2/d2159b9033692f38f394b0a910762c32 create mode 100644 Library/Artifacts/d2/d2466661530f464e67b8b5576e2dec15 create mode 100644 Library/Artifacts/d2/d2a7996852b215974a1268132f7d78d9 create mode 100644 Library/Artifacts/d3/d3396113c33b733c16ed9e6ee59c4b17 create mode 100644 Library/Artifacts/d3/d372708d311574e9c8207bcf2fa307aa create mode 100644 Library/Artifacts/d3/d37583263881840fe5a41f44ff2e192e create mode 100644 Library/Artifacts/d4/d40f57679420e867dc83ca5f60a59466 create mode 100644 Library/Artifacts/d4/d4301541567e392908f4fb9cf8abdfa0 create mode 100644 Library/Artifacts/d4/d439ad08b576d4fa29fd950a64bbcf3f create mode 100644 Library/Artifacts/d4/d49e6642f4f68eac410099efeb257722 create mode 100644 Library/Artifacts/d4/d4b1ab398c5f6953bb3f64ed5f8958bc create mode 100644 Library/Artifacts/d4/d4ce3846ae486afa1e42714b97352d48 create mode 100644 Library/Artifacts/d4/d4e2547b82b32d8396f1c6ccab964ae8 create mode 100644 Library/Artifacts/d5/d56334dd996b19dd072507994ea0a6a9 create mode 100644 Library/Artifacts/d5/d57c293529371c810c7030973994d948 create mode 100644 Library/Artifacts/d5/d5cd18b888f9eada307d0b83e1f244cf create mode 100644 Library/Artifacts/d5/d5d22c15fc7ffedadcf81ff618adb2f4 create mode 100644 Library/Artifacts/d6/d60270576172625e2e048e46ca449016 create mode 100644 Library/Artifacts/d6/d682b7596cbda0b38927733530bc4c6f create mode 100644 Library/Artifacts/d6/d6a12c0555571313f96d467b60cf7bc4 create mode 100644 Library/Artifacts/d6/d6e396c1a96d83e1a449508eb8684514 create mode 100644 Library/Artifacts/d6/d6e5e9dac86d157abdbd16d7168e2d8b create mode 100644 Library/Artifacts/d6/d6f6336441cae7a964ec56ec04a6ed4e create mode 100644 Library/Artifacts/d7/d713e8814597bec52676879fab37b720 create mode 100644 Library/Artifacts/d7/d7686d13fc24aa9db0698a2f644f9509 create mode 100644 Library/Artifacts/d7/d78d790320909c1bad434396febf9aab create mode 100644 Library/Artifacts/d7/d79cebd4ad27ad5d9602db1550d652ba create mode 100644 Library/Artifacts/d7/d7f63fcd72d39a0e14bab4fadd6d0bfb create mode 100644 Library/Artifacts/d8/d809c4801360de223762f6d5ad4f4879 create mode 100644 Library/Artifacts/d8/d827c0b1a27120d2ae31e99da06c183c create mode 100644 Library/Artifacts/d8/d82813bbd61ef92cb58acaf893357a39 create mode 100644 Library/Artifacts/d8/d8a5984afe996c91954da8724f5713b9 create mode 100644 Library/Artifacts/d9/d914ebc090ffd04d9b9e68134e280633 create mode 100644 Library/Artifacts/d9/d97e1402057da410b8a24d66779a7500 create mode 100644 Library/Artifacts/d9/d99637805c9b6f7be83e8a919c28dc67 create mode 100644 Library/Artifacts/d9/d9ba977bf0c7a271f94ce05f0cddc504 create mode 100644 Library/Artifacts/d9/d9c0f490433492e03d94ae02ccd9800a create mode 100644 Library/Artifacts/da/da1c0086cb229c89d4574deacfc198d6 create mode 100644 Library/Artifacts/da/da2d23eb774685f982194d6d64c0127d create mode 100644 Library/Artifacts/da/da86d27b5e8deb1460c8cf1610edcc39 create mode 100644 Library/Artifacts/da/daa0ea2ff39f6b380596da17d225fd61 create mode 100644 Library/Artifacts/da/dab79ac96246b49286d8a92c01fa5baa create mode 100644 Library/Artifacts/da/daf37dca5534788dcf79d9d697f7e54b create mode 100644 Library/Artifacts/db/db0c92868ce168ac5912d30f1d2fdf88 create mode 100644 Library/Artifacts/db/db3e7628085f3799160cd2b05c743c39 create mode 100644 Library/Artifacts/db/db44f277b7f3e328efcf1f6cb377bdad create mode 100644 Library/Artifacts/db/db5dcf28173ec141dd8fa57c5f070d2f create mode 100644 Library/Artifacts/db/db6fe11f13ce881b7b3cc558ce5e4804 create mode 100644 Library/Artifacts/db/dbb4a02322cb4710e44a7367ad17b241 create mode 100644 Library/Artifacts/db/dbd6fe679dbc0202b9c3acfca9a4fc5b create mode 100644 Library/Artifacts/db/dbea5e9afb86dbee9eeded21dbb7ef75 create mode 100644 Library/Artifacts/dc/dc153a3a4a254caaed6cc5b505b37234 create mode 100644 Library/Artifacts/dc/dc1b5146ea6d50ed11cade83d6258c25 create mode 100644 Library/Artifacts/dc/dc35865836b7b59ae5888ed4adfee5e2 create mode 100644 Library/Artifacts/dc/dc53024c97c1f4d15b0830663c2677ca create mode 100644 Library/Artifacts/dc/dca03a080c479c7defc937b230c47a80 create mode 100644 Library/Artifacts/dc/dca4c2de29598b6ebec5316b25f98ce6 create mode 100644 Library/Artifacts/dc/dcb8562a5c42cdca6e940cc77ee693ce create mode 100644 Library/Artifacts/dc/dcc7e915b0819b28ba0ed4522a8245c8 create mode 100644 Library/Artifacts/dc/dcd1bf78179cb965a1380bfe2b0e1998 create mode 100644 Library/Artifacts/dd/dd0f57be1fd882f19974ab37e56a81ab create mode 100644 Library/Artifacts/dd/dd14d2f4c53fbe1c4c495dd676ec8701 create mode 100644 Library/Artifacts/dd/dd59c653ae4a6e02fb471b96238ec97b create mode 100644 Library/Artifacts/dd/dd8753932fffdbb3f3e750f68cf4af87 create mode 100644 Library/Artifacts/dd/dd8a33c8b125ee4cbf8adcb714f9ef68 create mode 100644 Library/Artifacts/dd/ddb185f5135eb1976d6c201af01d3234 create mode 100644 Library/Artifacts/dd/ddf78f32cd974afa8b9f62d347802b50 create mode 100644 Library/Artifacts/de/de5a5c3b27ae52c4f383cd380dff6375 create mode 100644 Library/Artifacts/de/deba3daf780992f9232063b1af88d8e9 create mode 100644 Library/Artifacts/de/dec8af187b15f45ea9a84901c57bdb60 create mode 100644 Library/Artifacts/de/ded6d0c9d86f4a44166616a85a39be1b create mode 100644 Library/Artifacts/de/deff4e65a32d8802e73de4451d1c788e create mode 100644 Library/Artifacts/df/df07eb2f20ef59a93ecd0191b3b8eae1 create mode 100644 Library/Artifacts/df/df497d53d15903a90aa122624bf56019 create mode 100644 Library/Artifacts/df/df57635a752f4e60301d884803ffe606 create mode 100644 Library/Artifacts/df/dfc226e88f37d655fc48e7ef66cc37fe create mode 100644 Library/Artifacts/df/dfc7adf9df39411babd81d45010ea7e7 create mode 100644 Library/Artifacts/df/dff19d3e9cf019f71a5b1677cea4d278 create mode 100644 Library/Artifacts/e0/e01e9b6584fac8da6c2f08e1fdea5c46 create mode 100644 Library/Artifacts/e0/e023ce0744fe41a41564d967a531c2f0 create mode 100644 Library/Artifacts/e0/e031e5bee2c8d29154cbdeb01832e1e4 create mode 100644 Library/Artifacts/e0/e0347ae0bfcdbb67eb2d3da0655a4c6a create mode 100644 Library/Artifacts/e0/e0b45164e035c0ba30abd1108c114cfa create mode 100644 Library/Artifacts/e0/e0bf5f0b70fcdb4505aed7ba4437677f create mode 100644 Library/Artifacts/e0/e0d458b6a07c88220f7e8b8207d304d5 create mode 100644 Library/Artifacts/e1/e11c3e001490abdc9d957327df4c1028 create mode 100644 Library/Artifacts/e1/e12623ee4468c48608a004a8ebaee603 create mode 100644 Library/Artifacts/e1/e1465d7df5db5d115090b98216d37ccb create mode 100644 Library/Artifacts/e1/e16bb4d98688b3d502a100f105aa402f create mode 100644 Library/Artifacts/e1/e187f225c021c8f49a0b557fe3550389 create mode 100644 Library/Artifacts/e1/e189a9d0aa2942a3d5d1c414b238a18a create mode 100644 Library/Artifacts/e1/e190efd2d7895a40a58d755b449cafc8 create mode 100644 Library/Artifacts/e1/e198676a85374a586de1211245c13b72 create mode 100644 Library/Artifacts/e1/e1a78986a3fa21efdf05bc55cb662c53 create mode 100644 Library/Artifacts/e1/e1d5ab37385319c26fc51951f82c1651 create mode 100644 Library/Artifacts/e1/e1dcf20658be178ede6b66815a5d490a create mode 100644 Library/Artifacts/e1/e1e1f89b9bcac396af4fd01a91405be5 create mode 100644 Library/Artifacts/e2/e22899741b11d0711ebbe2126f192ba0 create mode 100644 Library/Artifacts/e2/e2357474dcedbd4bc2be95ae25f4bab4 create mode 100644 Library/Artifacts/e2/e244c36d3e7c1464fa404b44608fbd8c create mode 100644 Library/Artifacts/e2/e27f3ae93eb265726caf28d0df630bd3 create mode 100644 Library/Artifacts/e2/e29368fef9285bf0d5f40941c6b6c9ba create mode 100644 Library/Artifacts/e2/e2ea13252e9b942ea4ecac30a87f6630 create mode 100644 Library/Artifacts/e3/e33aaeccbd400f4d30f59f4530af52ae create mode 100644 Library/Artifacts/e3/e3646238fe5406eaa9623c9a528b97c6 create mode 100644 Library/Artifacts/e3/e378f97f8726e88f7d858535d3769287 create mode 100644 Library/Artifacts/e3/e3919844da7f36809d45f56fa8f32d0c create mode 100644 Library/Artifacts/e3/e3a4931c8fe51a88fd486db36b1ed15d create mode 100644 Library/Artifacts/e4/e4452c20bab7ad62b3b575439299fe7d create mode 100644 Library/Artifacts/e4/e49e545eefa9725717a08165c60864ee create mode 100644 Library/Artifacts/e4/e4a94be5dc17896bc897bf948f4f94cd create mode 100644 Library/Artifacts/e4/e4ddfd1c0efc534be4a3eda2517e87de create mode 100644 Library/Artifacts/e4/e4de0ee64eddfdfcd793a8abb633403b create mode 100644 Library/Artifacts/e4/e4ec926ca10e25268f787182b3a0e60d create mode 100644 Library/Artifacts/e5/e52cf813e74128d189711032a0583b8a create mode 100644 Library/Artifacts/e5/e559409d727cde09a4765221d2b95d72 create mode 100644 Library/Artifacts/e5/e59d60c5e90acbe241ba6e89eebf04cb create mode 100644 Library/Artifacts/e6/e60b7a8416f474fadea61bcdf8d8704f create mode 100644 Library/Artifacts/e6/e65bf8c65c685cec06bd8e52a16d52c0 create mode 100644 Library/Artifacts/e6/e66460cafd5074b19289137d535ecb6e create mode 100644 Library/Artifacts/e6/e6764e31b9c2b1a875cded0e44168719 create mode 100644 Library/Artifacts/e6/e6c32083ae5f3f1910e36209a987b8f1 create mode 100644 Library/Artifacts/e6/e6d1d32a4cba3803f3d250f1e9abe1b2 create mode 100644 Library/Artifacts/e6/e6feff700718ddc97f31aef35f811459 create mode 100644 Library/Artifacts/e7/e70ca86e0c854f62ab61e8c937b4760c create mode 100644 Library/Artifacts/e7/e783d72a4160348ee709022995f23226 create mode 100644 Library/Artifacts/e7/e7aa20835e0b9d4a62f1435847fcd794 create mode 100644 Library/Artifacts/e7/e7c30ed989f7df32a5f20551bfd47b88 create mode 100644 Library/Artifacts/e7/e7cca011a97d21319dcea9646ecf2949 create mode 100644 Library/Artifacts/e8/e8194503f58f07da5a97290070b0df24 create mode 100644 Library/Artifacts/e8/e82e55c7179662fde8816917c4917cd4 create mode 100644 Library/Artifacts/e8/e8d450ab598c6a73e256e113e78d358b create mode 100644 Library/Artifacts/e8/e8f38ee6d33088758518f46acb0b5c0e create mode 100644 Library/Artifacts/e9/e941f5f0eda6eeba892d57fe9db6a402 create mode 100644 Library/Artifacts/e9/e991fd12ef37b3f5bade394c16d51325 create mode 100644 Library/Artifacts/e9/e9c2520b3ec17c8cd8e974e289a7dfcf create mode 100644 Library/Artifacts/ea/ea16376b91ff5b5af20db923e86f2a05 create mode 100644 Library/Artifacts/ea/ea4da0a98a81c65a7fd9b5905518d30f create mode 100644 Library/Artifacts/ea/ea6113efb4b0d8a77264c5432ba7d9f1 create mode 100644 Library/Artifacts/ea/ea86462cae07169cf0fd8cf35ef3698c create mode 100644 Library/Artifacts/ea/ea90c983af50c230b1470c6f13e797e2 create mode 100644 Library/Artifacts/eb/eb2b2b94cdc3eca3b61a08e19ab1960e create mode 100644 Library/Artifacts/eb/eb2ef1ef7ccecc64b09ce4b0f4e94ed5 create mode 100644 Library/Artifacts/eb/eb40e1ef1bebbea796ab0281b6bf93d0 create mode 100644 Library/Artifacts/eb/ebacb01de631643e62870a8447ed9989 create mode 100644 Library/Artifacts/eb/ebb4b0dbe5f11d4ca77af7662640294d create mode 100644 Library/Artifacts/eb/ebbaad72db72151d56809436976cb367 create mode 100644 Library/Artifacts/ec/ec0e1900ca922318728059a658f72f83 create mode 100644 Library/Artifacts/ec/ec100a8f14d8434ff2dfdc6b069dcf06 create mode 100644 Library/Artifacts/ec/ec324142b98f1b50a85515e23eea79b5 create mode 100644 Library/Artifacts/ec/ec393438ac0fcbc140a4c50bbcde889f create mode 100644 Library/Artifacts/ec/ec89bf3bc08eca1067d150b93a372750 create mode 100644 Library/Artifacts/ec/eca2e6d2698b57d5752962b5dd48d5d2 create mode 100644 Library/Artifacts/ec/ecab0c39cc68609c1ea5e959ae285cf0 create mode 100644 Library/Artifacts/ec/ecc28ca6ae917935f5e0817ed39f41a8 create mode 100644 Library/Artifacts/ed/ed174cd4c0b0a4635328d00ee9f394dc create mode 100644 Library/Artifacts/ed/ed2b3a54e4624e040397dfd8d5de8769 create mode 100644 Library/Artifacts/ed/ed2cd5080e843489499db3bbaf3e74f4 create mode 100644 Library/Artifacts/ed/ed4ce8bd29f5e75e0e3386698de68cb5 create mode 100644 Library/Artifacts/ed/ed609e69f07580d66438891767b62ea2 create mode 100644 Library/Artifacts/ed/ed85736a2d9823b12bf12a23542731d5 create mode 100644 Library/Artifacts/ed/edc4db287d9c3b8b403c806cb83cf91c create mode 100644 Library/Artifacts/ee/ee2d8f69e2a3a1b1b41addcc761b58fd create mode 100644 Library/Artifacts/ee/ee98b5001fdca78c3d74fb7a01ed69b0 create mode 100644 Library/Artifacts/ee/eea40b7cb464982cf394f045254f6c3c create mode 100644 Library/Artifacts/ee/eeb5859b126bc5acb95dbcd2e8c65f84 create mode 100644 Library/Artifacts/ee/eee8108f285f18cd81cec9ad7dd02ee2 create mode 100644 Library/Artifacts/ef/ef1cf0f1e552f9fcc5cef32223a1aa08 create mode 100644 Library/Artifacts/ef/ef52cd2ba6b05811876983db84b2b00e create mode 100644 Library/Artifacts/ef/ef5fe5e004095bb518cc43d22f82dc47 create mode 100644 Library/Artifacts/ef/ef8550ad667f72d844cce149329684d3 create mode 100644 Library/Artifacts/ef/ef9befa8d6dcdff535dc28debd189e67 create mode 100644 Library/Artifacts/ef/efaca569410f0a05404ee97da7ea835c create mode 100644 Library/Artifacts/ef/efaeb4971e3c1af3515a74fa1259ba4c create mode 100644 Library/Artifacts/ef/efba4d8565414107a3779bbb515e972b create mode 100644 Library/Artifacts/f0/f01684ed5999a3a5eb843ac4f2328836 create mode 100644 Library/Artifacts/f0/f0388ce27d963c7fabdf4b1d6f12f3e5 create mode 100644 Library/Artifacts/f0/f0de91db71ed8bd56f3b8eff58293177 create mode 100644 Library/Artifacts/f0/f0dfb6630509a0d28175a90f5e50b566 create mode 100644 Library/Artifacts/f0/f0fa0699813b9656ab55d42b7bed2403 create mode 100644 Library/Artifacts/f0/f0fe129666ec72f621acb88c4a892947 create mode 100644 Library/Artifacts/f1/f13f1b67708aabd54b78249702fc15a7 create mode 100644 Library/Artifacts/f1/f16e70af94c920eb7e7da3844e42014b create mode 100644 Library/Artifacts/f1/f18edf9646b634e31c6d7a9c17a85e19 create mode 100644 Library/Artifacts/f1/f1ac08e48411f7b06fe4af16fb4d9db5 create mode 100644 Library/Artifacts/f1/f1c3f8101783f5987427af33e3f4a26d create mode 100644 Library/Artifacts/f1/f1cffc0b2a2daa7e162ff6dc74f84d12 create mode 100644 Library/Artifacts/f1/f1e2170e3efdb865fdc160f6c6074013 create mode 100644 Library/Artifacts/f2/f261393bac64078980e5d91da9c26dc9 create mode 100644 Library/Artifacts/f2/f26cd6a6ae74b44403b7fd6ba41dce59 create mode 100644 Library/Artifacts/f2/f2a9441bdf1dc83ffb09e31c77be6f33 create mode 100644 Library/Artifacts/f2/f2c423cb4a60a50c1227b1263e8b6c34 create mode 100644 Library/Artifacts/f3/f32d83f3188521d3aadd11401a5b9151 create mode 100644 Library/Artifacts/f3/f33935967180b679aa810f93ac2c4a45 create mode 100644 Library/Artifacts/f3/f33eaad45a73c6e86675f9df9930c513 create mode 100644 Library/Artifacts/f3/f34192e8854b6e20266785deb990b2c6 create mode 100644 Library/Artifacts/f3/f364772462b0281b084c12674f41121a create mode 100644 Library/Artifacts/f3/f3671a4430c48b7306d215b6a1e853fd create mode 100644 Library/Artifacts/f3/f3ac993363685eb9993b8bfe7b1b8465 create mode 100644 Library/Artifacts/f3/f3f275f81d5a4c0ece2a419e7f30244e create mode 100644 Library/Artifacts/f4/f4142e56c8453b0dd21e64fb06187085 create mode 100644 Library/Artifacts/f4/f4628fff7c1b920b44957a583419dcdb create mode 100644 Library/Artifacts/f4/f4e0050c7e28dd774d5e9a1b6cbddffe create mode 100644 Library/Artifacts/f5/f52ae9be1fba6024571338d2557825fe create mode 100644 Library/Artifacts/f5/f5382c9ef52f74c33e516fc3fe6399a1 create mode 100644 Library/Artifacts/f5/f53a5306cddc01174f019ada7e1db5c7 create mode 100644 Library/Artifacts/f5/f579596d42eac7e38c1b6ab35b497745 create mode 100644 Library/Artifacts/f5/f57c8e76981f6f46d9bbc48ee7f56814 create mode 100644 Library/Artifacts/f5/f5c1ff90eb9b091c9915bf01cab367e3 create mode 100644 Library/Artifacts/f5/f5c3008e79e9b471ff8bb48468ee91de create mode 100644 Library/Artifacts/f5/f5c4fa80c70126fba5f8dc08d9cddcfe create mode 100644 Library/Artifacts/f5/f5df2d39804f712c7d0f8909b9287e7f create mode 100644 Library/Artifacts/f6/f664a6018847f5285585dafe5322ad3e create mode 100644 Library/Artifacts/f6/f674fd3c37aff71b44b6715d0df513f5 create mode 100644 Library/Artifacts/f6/f68d261146da6ae8c08a852352b2b5bb create mode 100644 Library/Artifacts/f6/f6c1caf6c9794dd24820567077386608 create mode 100644 Library/Artifacts/f7/f719fabda1b810db2c2630cd7a2047fc create mode 100644 Library/Artifacts/f7/f7274cf6ca8b359c12d58e6e7e7408f4 create mode 100644 Library/Artifacts/f7/f73fed6995ef9e5d2d252581fdcc43d6 create mode 100644 Library/Artifacts/f8/f81ff60a008ee725a26c22bfcc3a52e7 create mode 100644 Library/Artifacts/f8/f83e93e6e06d2a8a5718d2bf52032450 create mode 100644 Library/Artifacts/f8/f85d5f79e65d426f0abd0679d18fd389 create mode 100644 Library/Artifacts/f8/f8699ec491a3366d31a273e27607e8c4 create mode 100644 Library/Artifacts/f8/f86b84f20f524a9983701da22f138544 create mode 100644 Library/Artifacts/f8/f8c2dba26200c96ea7bd86f6fcaa24f8 create mode 100644 Library/Artifacts/f9/f9075ce0f07b40dfddb2790f6e1c2eb5 create mode 100644 Library/Artifacts/f9/f934ad3ec259e442045763fa27043bf7 create mode 100644 Library/Artifacts/f9/f95223af7d8813b4830c5e17f69160b6 create mode 100644 Library/Artifacts/f9/f95574743641fb2e880d80188f966da8 create mode 100644 Library/Artifacts/fa/fa77148024477a78de4d816de0517715 create mode 100644 Library/Artifacts/fa/fa8dd58c7f291bf068a05be27e2ec2fe create mode 100644 Library/Artifacts/fa/faafb2fc3be02fec46cfa5c129fd57b6 create mode 100644 Library/Artifacts/fa/fac4af718d22f9b76b43ebc44745b7fa create mode 100644 Library/Artifacts/fa/fac9d0290c2ffad7802d9968e7fd4e29 create mode 100644 Library/Artifacts/fa/fad4d0eaeae112d867393eecf09817e7 create mode 100644 Library/Artifacts/fa/fae4d9546e07eb2685665fe87e8ce239 create mode 100644 Library/Artifacts/fb/fb1cc7cbad4562387a1174426cb799a2 create mode 100644 Library/Artifacts/fb/fb92a26e82fd66371b47b099b01e7012 create mode 100644 Library/Artifacts/fb/fbb063317893721bfa0c84cce982110b create mode 100644 Library/Artifacts/fc/fc4cc3be367234bb822ee543eccc4952 create mode 100644 Library/Artifacts/fc/fc5c48865328817cce5184b071c6dcff create mode 100644 Library/Artifacts/fc/fc6feb7626df851817e1612c43a23680 create mode 100644 Library/Artifacts/fc/fcaf0faa46c483eb90b65c3e523ee32a create mode 100644 Library/Artifacts/fc/fcbdb7b86e2090e1d82a337063a7b3f7 create mode 100644 Library/Artifacts/fc/fcefe457280e1b20bf2912badccf6bf8 create mode 100644 Library/Artifacts/fd/fd50e8c50ae1da0d88a9ac3c74470f67 create mode 100644 Library/Artifacts/fd/fd93684f9450cd03c20e9d96dd7c5600 create mode 100644 Library/Artifacts/fd/fdb916ce46ea2256c85375dedbc0775c create mode 100644 Library/Artifacts/fe/fe15ddcfc1938c1ec7224704f7b89e35 create mode 100644 Library/Artifacts/fe/fe1ab1a2ce7b4f0f2186da8e46dbe5de create mode 100644 Library/Artifacts/fe/fe1ba0376bfbb4c4e00390611bb552ce create mode 100644 Library/Artifacts/fe/fe324fa7d2bc294f258f7dbd390e3d7b create mode 100644 Library/Artifacts/fe/fe6c76bd4254fd74532d6e9a62e828e7 create mode 100644 Library/Artifacts/fe/fea473043e6ba40a4165c61fd03a285b create mode 100644 Library/Artifacts/fe/febeb198631c777e1cfa2313bc844fa4 create mode 100644 Library/Artifacts/fe/fefdc39679b19ad34572626df52894d0 create mode 100644 Library/Artifacts/ff/ff3508cc37eb3e2b8a3568804a0d2030 create mode 100644 Library/Artifacts/ff/ff47b1b2f93218bee583c92542510735 create mode 100644 Library/Artifacts/ff/ff56e161db4ff3c12b974974a9000564 create mode 100644 Library/Artifacts/ff/ff7d021e5203cd110f7667af9942ff92 create mode 100644 Library/Artifacts/ff/ffcc32305b9bbd1fa75894b0c16a6204 create mode 100644 Library/Artifacts/ff/ffe2248a370a4b91ba42e56249cd6cf6 create mode 100644 Library/Artifacts/ff/ffeadcb07ddeb68139b1a66e2e87eb82 create mode 100644 Library/Artifacts/ff/fff999cab6df30b2b0a55830319c6dcb create mode 100644 Library/AssetImportState create mode 100644 Library/BuildPlayer.prefs create mode 100644 Library/BuildSettings.asset create mode 100644 Library/Collab/CollabSnapshot_2d367089-5505-4276-9de6-6530a5b7eec5.txt create mode 100644 Library/CurrentLayout-default.dwlt create mode 100644 Library/EditorInstance.json create mode 100644 Library/EditorOnlyScriptingSettings.json create mode 100644 Library/EditorSnapSettings.asset create mode 100644 Library/EditorUserBuildSettings.asset create mode 100644 Library/EditorUserSettings.asset create mode 100644 Library/InspectorExpandedItems.asset create mode 100644 Library/LastSceneManagerSetup.txt create mode 100644 Library/LibraryFormatVersion.txt create mode 100644 Library/MonoManager.asset create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/.npmignore create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/CHANGELOG.md create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/CHANGELOG.md.meta create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/DEPENDENCIES.md create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/DEPENDENCIES.md.meta create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/Documentation~/collab-proxy.md create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor.meta create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/AssemblyInfo.cs create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/AssemblyInfo.cs.meta create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab.meta create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Bootstrap.cs create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Bootstrap.cs.meta create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabAnalytics.cs create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabAnalytics.cs.meta create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabHistoryWindow.cs create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabHistoryWindow.cs.meta create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabToolbarButton.cs create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabToolbarButton.cs.meta create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabToolbarWindow.cs create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabToolbarWindow.cs.meta create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Presenters.meta create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Presenters/CollabHistoryPresenter.cs create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Presenters/CollabHistoryPresenter.cs.meta create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views.meta create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/BuildStatusButton.cs create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/BuildStatusButton.cs.meta create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryDropDown.cs create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryDropDown.cs.meta create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryDropDownItem.cs create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryDropDownItem.cs.meta create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryItem.cs create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryItem.cs.meta create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryItemFactory.cs create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryItemFactory.cs.meta create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryRevisionLine.cs create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryRevisionLine.cs.meta create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/HistoryProgressSpinner.cs create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/HistoryProgressSpinner.cs.meta create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/ICollabHistoryItemFactory.cs create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/ICollabHistoryItemFactory.cs.meta create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/PagedListView.cs create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/PagedListView.cs.meta create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/StatusView.cs create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/StatusView.cs.meta create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources.meta create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles.meta create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryCommon.uss create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryCommon.uss.meta create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryDark.uss create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryDark.uss.meta create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryLight.uss create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryLight.uss.meta create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Unity.CollabProxy.Editor.asmdef create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Unity.CollabProxy.Editor.asmdef.meta create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/LICENSE.md create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/LICENSE.md.meta create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/README.md create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/README.md.meta create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests.meta create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests/Editor.meta create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests/Editor/HistoryTests.cs create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests/Editor/HistoryTests.cs.meta create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests/Editor/Unity.CollabProxy.EditorTests.asmdef create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests/Editor/Unity.CollabProxy.EditorTests.asmdef.meta create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/package.json create mode 100644 Library/PackageCache/com.unity.collab-proxy@1.2.16/package.json.meta create mode 100644 Library/PackageCache/com.unity.ext.nunit@1.0.0/.gitlab-ci.yml create mode 100644 Library/PackageCache/com.unity.ext.nunit@1.0.0/CHANGELOG.md create mode 100644 Library/PackageCache/com.unity.ext.nunit@1.0.0/CHANGELOG.md.meta create mode 100644 Library/PackageCache/com.unity.ext.nunit@1.0.0/Documentation~/ext.nunit.md create mode 100644 Library/PackageCache/com.unity.ext.nunit@1.0.0/LICENSE.md create mode 100644 Library/PackageCache/com.unity.ext.nunit@1.0.0/LICENSE.md.meta create mode 100644 Library/PackageCache/com.unity.ext.nunit@1.0.0/README.md create mode 100644 Library/PackageCache/com.unity.ext.nunit@1.0.0/README.md.meta create mode 100644 Library/PackageCache/com.unity.ext.nunit@1.0.0/net35.meta create mode 100644 Library/PackageCache/com.unity.ext.nunit@1.0.0/net35/unity-custom.meta create mode 100644 Library/PackageCache/com.unity.ext.nunit@1.0.0/net35/unity-custom/This is a custom build DONT include.txt create mode 100644 Library/PackageCache/com.unity.ext.nunit@1.0.0/net35/unity-custom/This is a custom build DONT include.txt.meta create mode 100644 Library/PackageCache/com.unity.ext.nunit@1.0.0/net35/unity-custom/nunit.framework.dll create mode 100644 Library/PackageCache/com.unity.ext.nunit@1.0.0/net35/unity-custom/nunit.framework.dll.mdb create mode 100644 Library/PackageCache/com.unity.ext.nunit@1.0.0/net35/unity-custom/nunit.framework.dll.mdb.meta create mode 100644 Library/PackageCache/com.unity.ext.nunit@1.0.0/net35/unity-custom/nunit.framework.dll.meta create mode 100644 Library/PackageCache/com.unity.ext.nunit@1.0.0/net35/unity-custom/nunit.framework.pdb create mode 100644 Library/PackageCache/com.unity.ext.nunit@1.0.0/net35/unity-custom/nunit.framework.pdb.meta create mode 100644 Library/PackageCache/com.unity.ext.nunit@1.0.0/net35/unity-custom/nunit.framework.xml create mode 100644 Library/PackageCache/com.unity.ext.nunit@1.0.0/net35/unity-custom/nunit.framework.xml.meta create mode 100644 Library/PackageCache/com.unity.ext.nunit@1.0.0/package.json create mode 100644 Library/PackageCache/com.unity.ext.nunit@1.0.0/package.json.meta create mode 100644 Library/PackageCache/com.unity.ide.rider@1.1.4/.editorconfig create mode 100644 Library/PackageCache/com.unity.ide.rider@1.1.4/CHANGELOG.md create mode 100644 Library/PackageCache/com.unity.ide.rider@1.1.4/CHANGELOG.md.meta create mode 100644 Library/PackageCache/com.unity.ide.rider@1.1.4/CONTRIBUTING.md create mode 100644 Library/PackageCache/com.unity.ide.rider@1.1.4/CONTRIBUTING.md.meta create mode 100644 Library/PackageCache/com.unity.ide.rider@1.1.4/Documentation~/README.md create mode 100644 Library/PackageCache/com.unity.ide.rider@1.1.4/LICENSE.md create mode 100644 Library/PackageCache/com.unity.ide.rider@1.1.4/LICENSE.md.meta create mode 100644 Library/PackageCache/com.unity.ide.rider@1.1.4/Rider.meta create mode 100644 Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor.meta create mode 100644 Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Discovery.cs create mode 100644 Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Discovery.cs.meta create mode 100644 Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/EditorPluginInterop.cs create mode 100644 Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/EditorPluginInterop.cs.meta create mode 100644 Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/LoggingLevel.cs create mode 100644 Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/LoggingLevel.cs.meta create mode 100644 Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/PluginSettings.cs create mode 100644 Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/PluginSettings.cs.meta create mode 100644 Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/PostProcessors.meta create mode 100644 Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/PostProcessors/RiderAssetPostprocessor.cs create mode 100644 Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/PostProcessors/RiderAssetPostprocessor.cs.meta create mode 100644 Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration.meta create mode 100644 Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration/FileIOProvider.cs create mode 100644 Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration/FileIOProvider.cs.meta create mode 100644 Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration/GUIDProvider.cs create mode 100644 Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration/GUIDProvider.cs.meta create mode 100644 Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration/ProjectGeneration.cs create mode 100644 Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration/ProjectGeneration.cs.meta create mode 100644 Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/RiderInitializer.cs create mode 100644 Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/RiderInitializer.cs.meta create mode 100644 Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/RiderScriptEditor.cs create mode 100644 Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/RiderScriptEditor.cs.meta create mode 100644 Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/RiderScriptEditorData.cs create mode 100644 Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/RiderScriptEditorData.cs.meta create mode 100644 Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting.meta create mode 100644 Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/CallbackData.cs create mode 100644 Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/CallbackData.cs.meta create mode 100644 Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/CallbackInitializer.cs create mode 100644 Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/CallbackInitializer.cs.meta create mode 100644 Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/RiderTestRunner.cs create mode 100644 Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/RiderTestRunner.cs.meta create mode 100644 Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/TestEvent.cs create mode 100644 Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/TestEvent.cs.meta create mode 100644 Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/TestsCallback.cs create mode 100644 Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/TestsCallback.cs.meta create mode 100644 Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util.meta create mode 100644 Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/CommandLineParser.cs create mode 100644 Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/CommandLineParser.cs.meta create mode 100644 Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/FileSystemUtil.cs create mode 100644 Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/FileSystemUtil.cs.meta create mode 100644 Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/LibcNativeInterop.cs create mode 100644 Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/LibcNativeInterop.cs.meta create mode 100644 Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/RiderMenu.cs create mode 100644 Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/RiderMenu.cs.meta create mode 100644 Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/UnityUtils.cs create mode 100644 Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/UnityUtils.cs.meta create mode 100644 Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/com.unity.ide.rider.asmdef create mode 100644 Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/com.unity.ide.rider.asmdef.meta create mode 100755 Library/PackageCache/com.unity.ide.rider@1.1.4/package.json create mode 100644 Library/PackageCache/com.unity.ide.rider@1.1.4/package.json.meta create mode 100644 Library/PackageCache/com.unity.ide.vscode@1.1.4/CHANGELOG.md create mode 100644 Library/PackageCache/com.unity.ide.vscode@1.1.4/CHANGELOG.md.meta create mode 100644 Library/PackageCache/com.unity.ide.vscode@1.1.4/CONTRIBUTING.md create mode 100644 Library/PackageCache/com.unity.ide.vscode@1.1.4/CONTRIBUTING.md.meta create mode 100644 Library/PackageCache/com.unity.ide.vscode@1.1.4/Documentation~/README.md create mode 100644 Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor.meta create mode 100644 Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor/ProjectGeneration.meta create mode 100644 Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor/ProjectGeneration/AssemblyNameProvider.cs create mode 100644 Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor/ProjectGeneration/AssemblyNameProvider.cs.meta create mode 100644 Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor/ProjectGeneration/FileIO.cs create mode 100644 Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor/ProjectGeneration/FileIO.cs.meta create mode 100644 Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor/ProjectGeneration/GUIDGenerator.cs create mode 100644 Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor/ProjectGeneration/GUIDGenerator.cs.meta create mode 100644 Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor/ProjectGeneration/ProjectGeneration.cs create mode 100644 Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor/ProjectGeneration/ProjectGeneration.cs.meta create mode 100644 Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor/Unity.com.unity.vscode.Editor.asmdef create mode 100644 Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor/Unity.com.unity.vscode.Editor.asmdef.meta create mode 100644 Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor/VSCodeDiscovery.cs create mode 100644 Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor/VSCodeDiscovery.cs.meta create mode 100644 Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor/VSCodeScriptEditor.cs create mode 100644 Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor/VSCodeScriptEditor.cs.meta create mode 100644 Library/PackageCache/com.unity.ide.vscode@1.1.4/LICENSE.md create mode 100644 Library/PackageCache/com.unity.ide.vscode@1.1.4/LICENSE.md.meta create mode 100644 Library/PackageCache/com.unity.ide.vscode@1.1.4/package.json create mode 100644 Library/PackageCache/com.unity.ide.vscode@1.1.4/package.json.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/CHANGELOG.md create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/CHANGELOG.md.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/CONTRIBUTING.md create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/CONTRIBUTING.md.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/TableOfContents.md create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/edit-mode-vs-play-mode-tests.md create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/extending.md create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/extension-get-test-results.md create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/extension-retrieve-test-list.md create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/extension-run-tests.md create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/getting-started.md create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/images/editmode-create-test-script.png create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/images/editmode-run-test.png create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/images/editmode-run-tests.png create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/images/editmode-tab.png create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/images/import-settings.png create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/images/new-test-script.png create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/images/playmode-enable-all.png create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/images/playmode-results-standalone.png create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/images/playmode-run-standalone.png create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/images/playmode-tab.png create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/images/test-runner-window.png create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/images/test-templates.png create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/images/tests-folder-assembly.png create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/index.md create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/manual.md create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-actions-outside-tests.md create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-attribute-conditionalignore.md create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-attribute-testmustexpectalllogs.md create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-attribute-testplayerbuildmodifier.md create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-attribute-testruncallback.md create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-attribute-unityplatform.md create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-attribute-unitytest.md create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-command-line.md create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-comparer-color.md create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-comparer-equals.md create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-comparer-float.md create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-comparer-quaternion.md create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-comparer-vector2.md create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-comparer-vector3.md create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-comparer-vector4.md create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-custom-assertion.md create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-custom-attributes.md create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-custom-constraints.md create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-custom-equality-comparers.md create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-custom-yield-instructions.md create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-execution-settings.md create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-filter.md create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-icallbacks.md create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-ierror-callbacks.md create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-itest-adaptor.md create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-itest-result-adaptor.md create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-itest-run-settings.md create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-recompile-scripts.md create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-setup-and-cleanup.md create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-test-runner-api.md create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-test-utils.md create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-tests-monobehaviour.md create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-tests-parameterized.md create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-wait-for-domain-reload.md create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/resources.md create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/workflow-create-playmode-test.md create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/workflow-create-test-assembly.md create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/workflow-create-test.md create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/workflow-run-playmode-test-standalone.md create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/workflow-run-test.md create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/LICENSE.md create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/LICENSE.md.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/CallbacksDelegator.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/CallbacksDelegator.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/CallbacksDelegatorListener.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/CallbacksDelegatorListener.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/CallbacksHolder.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/CallbacksHolder.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ExecutionSettings.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ExecutionSettings.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/Filter.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/Filter.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ICallbacks.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ICallbacks.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ICallbacksDelegator.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ICallbacksDelegator.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ICallbacksHolder.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ICallbacksHolder.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/IErrorCallbacks.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/IErrorCallbacks.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ITestAdaptor.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ITestAdaptor.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ITestAdaptorFactory.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ITestAdaptorFactory.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ITestResultAdaptor.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ITestResultAdaptor.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ITestRunSettings.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ITestRunSettings.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ITestRunnerApi.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ITestRunnerApi.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ITestTreeRebuildCallbacks.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ITestTreeRebuildCallbacks.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/RunState.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/RunState.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/TestAdaptor.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/TestAdaptor.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/TestAdaptorFactory.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/TestAdaptorFactory.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/TestMode.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/TestMode.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/TestResultAdaptor.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/TestResultAdaptor.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/TestRunnerApi.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/TestRunnerApi.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/TestStatus.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/TestStatus.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/AssemblyInfo.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/AssemblyInfo.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineParser.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineParser/CommandLineOption.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineParser/CommandLineOption.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineParser/CommandLineOptionSet.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineParser/CommandLineOptionSet.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineParser/ICommandLineOption.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineParser/ICommandLineOption.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/Executer.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/Executer.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/ExecutionSettings.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/ExecutionSettings.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/ExitCallbacks.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/ExitCallbacks.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/ISettingsBuilder.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/ISettingsBuilder.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/LogSavingCallbacks.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/LogSavingCallbacks.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/LogWriter.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/LogWriter.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/ResultsSavingCallbacks.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/ResultsSavingCallbacks.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/ResultsWriter.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/ResultsWriter.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/RunData.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/RunData.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/RunSettings.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/RunSettings.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/SettingsBuilder.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/SettingsBuilder.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/SetupException.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/SetupException.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/TestStarter.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/TestStarter.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/AssetsDatabaseHelper.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/AssetsDatabaseHelper.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/GuiHelper.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/GuiHelper.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/IAssetsDatabaseHelper.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/IAssetsDatabaseHelper.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/IGuiHelper.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/IGuiHelper.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListBuilder.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListBuilder/RenderingOptions.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListBuilder/RenderingOptions.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListBuilder/ResultSummarizer.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListBuilder/ResultSummarizer.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListBuilder/TestFilterSettings.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListBuilder/TestFilterSettings.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListBuilder/TestTreeViewBuilder.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListBuilder/TestTreeViewBuilder.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListGuiHelper.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListGuiHelper.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListTreeView.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListTreeView/Icons.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListTreeView/Icons.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListTreeView/TestListTreeViewDataSource.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListTreeView/TestListTreeViewDataSource.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListTreeView/TestListTreeViewGUI.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListTreeView/TestListTreeViewGUI.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListTreeView/TestTreeViewItem.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListTreeView/TestTreeViewItem.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestRunnerResult.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestRunnerResult.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestRunnerUIFilter.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestRunnerUIFilter.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/Views.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/Views/EditModeTestListGUI.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/Views/EditModeTestListGUI.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/Views/PlayModeTestListGUI.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/Views/PlayModeTestListGUI.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/Views/TestListGUIBase.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/Views/TestListGUIBase.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/Attributes.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/Attributes/AssetPipelineIgnore.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/Attributes/AssetPipelineIgnore.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/Attributes/ITestPlayerBuildModifier.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/Attributes/ITestPlayerBuildModifier.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/Attributes/TestPlayerBuildModifierAttribute.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/Attributes/TestPlayerBuildModifierAttribute.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/TestRunnerStateSerializer.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/TestRunnerStateSerializer.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/RequireApiProfileAttribute.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/RequireApiProfileAttribute.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/RequirePlatformSupportAttribute.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/RequirePlatformSupportAttribute.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestBuildAssemblyFilter.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestBuildAssemblyFilter.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/AttributeFinderBase.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/AttributeFinderBase.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/EditModeLauncher.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/EditModeLauncher.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/EditModeLauncherContextSettings.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/EditModeLauncherContextSettings.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/AndroidPlatformSetup.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/AndroidPlatformSetup.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/ApplePlatformSetup.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/ApplePlatformSetup.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/IPlatformSetup.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/IPlatformSetup.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/LuminPlatformSetup.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/LuminPlatformSetup.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/PlatformSpecificSetup.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/PlatformSpecificSetup.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/SwitchPlatformSetup.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/SwitchPlatformSetup.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/UwpPlatformSetup.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/UwpPlatformSetup.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/XboxOnePlatformSetup.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/XboxOnePlatformSetup.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlayerLauncher.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlayerLauncher.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlayerLauncherBuildOptions.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlayerLauncherBuildOptions.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlayerLauncherContextSettings.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlayerLauncherContextSettings.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlaymodeLauncher.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlaymodeLauncher.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PostbuildCleanupAttributeFinder.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PostbuildCleanupAttributeFinder.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PrebuildSetupAttributeFinder.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PrebuildSetupAttributeFinder.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/RemotePlayerLogController.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/RemotePlayerLogController.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/RemotePlayerTestController.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/RemotePlayerTestController.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/RemoteTestResultReciever.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/RemoteTestResultReciever.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/RuntimeTestLauncherBase.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/RuntimeTestLauncherBase.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/TestLauncherBase.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/TestLauncherBase.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestResultSerializer.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestResultSerializer.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/BuildActionTaskBase.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/BuildActionTaskBase.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/BuildTestTreeTask.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/BuildTestTreeTask.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/CleanupVerificationTask.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/CleanupVerificationTask.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/FileCleanupVerifierTaskBase.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/FileCleanupVerifierTaskBase.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/LegacyEditModeRunTask.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/LegacyEditModeRunTask.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/LegacyPlayModeRunTask.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/LegacyPlayModeRunTask.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/LegacyPlayerRunTask.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/LegacyPlayerRunTask.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/PerformUndoTask.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/PerformUndoTask.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/PrebuildSetupTask.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/PrebuildSetupTask.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/RegisterFilesForCleanupVerificationTask.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/RegisterFilesForCleanupVerificationTask.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/SaveModiedSceneTask.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/SaveModiedSceneTask.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/SaveUndoIndexTask.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/SaveUndoIndexTask.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/TestTaskBase.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/TestTaskBase.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/TestJobData.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/TestJobData.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/TestJobDataHolder.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/TestJobDataHolder.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/TestJobRunner.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/TestJobRunner.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/TestRunCanceledException.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/TestRunCanceledException.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Callbacks.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Callbacks/EditModeRunnerCallback.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Callbacks/EditModeRunnerCallback.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Callbacks/RerunCallback.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Callbacks/RerunCallback.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Callbacks/RerunCallbackData.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Callbacks/RerunCallbackData.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Callbacks/RerunCallbackInitializer.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Callbacks/RerunCallbackInitializer.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Callbacks/TestRunnerCallback.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Callbacks/TestRunnerCallback.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Callbacks/WindowResultUpdater.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Callbacks/WindowResultUpdater.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/EditModePCHelper.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/EditModePCHelper.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/EditModeRunner.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/EditModeRunner.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/EditmodeWorkItemFactory.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/EditmodeWorkItemFactory.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/EditorEnumeratorTestWorkItem.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/EditorEnumeratorTestWorkItem.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/EnumeratorStepHelper.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/EnumeratorStepHelper.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Messages.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Messages/EnterPlayMode.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Messages/EnterPlayMode.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Messages/ExitPlayMode.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Messages/ExitPlayMode.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Messages/RecompileScripts.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Messages/RecompileScripts.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Messages/WaitForDomainReload.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Messages/WaitForDomainReload.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/CachingTestListProvider.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/CachingTestListProvider.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/EditorAssembliesProxy.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/EditorAssembliesProxy.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/EditorAssemblyWrapper.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/EditorAssemblyWrapper.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/EditorCompilationInterfaceProxy.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/EditorCompilationInterfaceProxy.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/EditorLoadedTestAssemblyProvider.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/EditorLoadedTestAssemblyProvider.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/IEditorAssembliesProxy.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/IEditorAssembliesProxy.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/IEditorCompilationInterfaceProxy.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/IEditorCompilationInterfaceProxy.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/IEditorLoadedTestAssemblyProvider.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/IEditorLoadedTestAssemblyProvider.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/ITestListCache.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/ITestListCache.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/ITestListCacheData.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/ITestListCacheData.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/ITestListProvider.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/ITestListProvider.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/TestListCache.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/TestListCache.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/TestListCacheData.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/TestListCacheData.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/TestListJob.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/TestListJob.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/TestListProvider.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/TestListProvider.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunnerWindow.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunnerWindow.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunnerWindowSettings.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunnerWindowSettings.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestSettings.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestSettings/ITestSettings.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestSettings/ITestSettings.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestSettings/ITestSettingsDeserializer.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestSettings/ITestSettingsDeserializer.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestSettings/TestSettings.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestSettings/TestSettings.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestSettings/TestSettingsDeserializer.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestSettings/TestSettingsDeserializer.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityEditor.TestRunner.asmdef create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityEditor.TestRunner.asmdef.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/AssemblyCompilationErrorsMessage.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/AssemblyCompilationErrorsMessage.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/ITestRunnerApiMapper.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/ITestRunnerApiMapper.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/IUtpLogger.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/IUtpLogger.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/IUtpMessageReporter.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/IUtpMessageReporter.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/Message.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/Message.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/TestFinishedMessage.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/TestFinishedMessage.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/TestPlanMessage.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/TestPlanMessage.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/TestRunnerApiMapper.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/TestRunnerApiMapper.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/TestStartedMessage.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/TestStartedMessage.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/TestState.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/TestState.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/UnityTestProtocolListener.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/UnityTestProtocolListener.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/UnityTestProtocolStarter.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/UnityTestProtocolStarter.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/UtpDebuglogger.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/UtpDebuglogger.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/UtpMessageReporter.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/UtpMessageReporter.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/AssemblyInfo.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/AssemblyInfo.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/AllocatingGCMemoryConstraint.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/AllocatingGCMemoryConstraint.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/ConstraintsExtensions.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/ConstraintsExtensions.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/InvalidSignatureException.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/InvalidSignatureException.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/Is.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/Is.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/LogAssert.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/LogAssert.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/LogScope.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/LogScope/ILogScope.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/LogScope/ILogScope.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/LogScope/LogEvent.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/LogScope/LogEvent.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/LogScope/LogMatch.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/LogScope/LogMatch.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/LogScope/LogScope.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/LogScope/LogScope.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/UnexpectedLogMessageException.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/UnexpectedLogMessageException.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/UnhandledLogMessageException.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/UnhandledLogMessageException.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/UnityTestTimeoutException.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/UnityTestTimeoutException.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/ActionDelegator.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/ActionDelegator.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/ConditionalIgnoreAttribute.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/ConditionalIgnoreAttribute.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/TestEnumerator.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/TestEnumerator.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/TestMustExpectAllLogsAttribute.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/TestMustExpectAllLogsAttribute.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnityCombinatorialStrategy.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnityCombinatorialStrategy.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnityPlatformAttribute.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnityPlatformAttribute.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnitySetUpAttribute.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnitySetUpAttribute.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnityTearDownAttribute.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnityTearDownAttribute.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnityTestAttribute.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnityTestAttribute.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/BaseDelegator.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/BaseDelegator.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/BeforeAfterTestCommandBase.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/BeforeAfterTestCommandBase.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/BeforeAfterTestCommandState.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/BeforeAfterTestCommandState.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableApplyChangesToContextCommand.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableApplyChangesToContextCommand.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableRepeatedTestCommand.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableRepeatedTestCommand.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableRetryTestCommand.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableRetryTestCommand.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableSetUpTearDownCommand.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableSetUpTearDownCommand.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableTestMethodCommand.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableTestMethodCommand.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/ImmediateEnumerableCommand.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/ImmediateEnumerableCommand.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/OuterUnityTestActionCommand.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/OuterUnityTestActionCommand.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/SetUpTearDownCommand.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/SetUpTearDownCommand.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/TestActionCommand.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/TestActionCommand.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/TestCommandPcHelper.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/TestCommandPcHelper.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/ConstructDelegator.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/ConstructDelegator.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Filters.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Filters/AssemblyNameFilter.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Filters/AssemblyNameFilter.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Filters/CategoryFilterExtended.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Filters/CategoryFilterExtended.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/IAsyncTestAssemblyBuilder.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/IAsyncTestAssemblyBuilder.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/IStateSerializer.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/IStateSerializer.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/CompositeWorkItem.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/CompositeWorkItem.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/CoroutineTestWorkItem.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/CoroutineTestWorkItem.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/DefaultTestWorkItem.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/DefaultTestWorkItem.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/FailCommand.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/FailCommand.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/IEnumerableTestMethodCommand.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/IEnumerableTestMethodCommand.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/PlaymodeWorkItemFactory.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/PlaymodeWorkItemFactory.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/RestoreTestContextAfterDomainReload.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/RestoreTestContextAfterDomainReload.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/TestCommandBuilder.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/TestCommandBuilder.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityLogCheckDelegatingCommand.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityLogCheckDelegatingCommand.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityTestAssemblyRunner.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityTestAssemblyRunner.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityTestExecutionContext.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityTestExecutionContext.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityWorkItem.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityWorkItem.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityWorkItemDataHolder.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityWorkItemDataHolder.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/WorkItemFactory.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/WorkItemFactory.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/TestExtensions.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/TestExtensions.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/TestResultExtensions.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/TestResultExtensions.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/UnityTestAssemblyBuilder.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/UnityTestAssemblyBuilder.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/Callbacks.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/Callbacks/PlayModeRunnerCallback.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/Callbacks/PlayModeRunnerCallback.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/Callbacks/RemoteTestResultSender.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/Callbacks/RemoteTestResultSender.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/Callbacks/TestResultRenderer.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/Callbacks/TestResultRenderer.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/Callbacks/TestResultRendererCallback.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/Callbacks/TestResultRendererCallback.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/ITestRunnerListener.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/ITestRunnerListener.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/Messages.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/Messages/IEditModeTestYieldInstruction.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/Messages/IEditModeTestYieldInstruction.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/PlaymodeTestsController.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/PlaymodeTestsController.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/PlaymodeTestsControllerSettings.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/PlaymodeTestsControllerSettings.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/RemoteHelpers.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/RemoteHelpers/IRemoteTestResultDataFactory.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/RemoteHelpers/IRemoteTestResultDataFactory.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/RemoteHelpers/PlayerConnectionMessageIds.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/RemoteHelpers/PlayerConnectionMessageIds.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/RemoteHelpers/RemoteTestData.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/RemoteHelpers/RemoteTestData.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/RemoteHelpers/RemoteTestResultData.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/RemoteHelpers/RemoteTestResultData.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/RemoteHelpers/RemoteTestResultDataFactory.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/RemoteHelpers/RemoteTestResultDataFactory.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/RemoteHelpers/RemoteTestResultDataWithTestData.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/RemoteHelpers/RemoteTestResultDataWithTestData.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/SynchronousFilter.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/SynchronousFilter.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/TestEnumeratorWrapper.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/TestEnumeratorWrapper.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/TestListenerWrapper.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/TestListenerWrapper.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/TestPlatform.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/TestPlatform.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/TestRunnerFilter.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/TestRunnerFilter.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/UnityEngine.TestRunner.asmdef create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/UnityEngine.TestRunner.asmdef.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/AssemblyLoadProxy.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/AssemblyLoadProxy.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/AssemblyWrapper.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/AssemblyWrapper.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/IAssemblyLoadProxy.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/IAssemblyLoadProxy.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/IAssemblyWrapper.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/IAssemblyWrapper.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/IScriptingRuntimeProxy.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/IScriptingRuntimeProxy.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/ITestAssemblyProvider.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/ITestAssemblyProvider.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/PlayerTestAssemblyProvider.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/PlayerTestAssemblyProvider.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/ScriptingRuntimeProxy.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/ScriptingRuntimeProxy.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AttributeHelper.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AttributeHelper.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/ColorEqualityComparer.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/ColorEqualityComparer.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/CoroutineRunner.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/CoroutineRunner.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/FloatEqualityComparer.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/FloatEqualityComparer.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/IOuterUnityTestAction.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/IOuterUnityTestAction.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/IPostBuildCleanup.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/IPostBuildCleanup.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/IPrebuildSceneSetup.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/IPrebuildSceneSetup.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/ITestRunCallback.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/ITestRunCallback.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/MonoBehaviourTest.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/MonoBehaviourTest/IMonoBehaviourTest.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/MonoBehaviourTest/IMonoBehaviourTest.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/MonoBehaviourTest/MonoBehaviourTest.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/MonoBehaviourTest/MonoBehaviourTest.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/PostBuildCleanupAttribute.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/PostBuildCleanupAttribute.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/PrebuildSceneSetupAttribute.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/PrebuildSceneSetupAttribute.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/QuaternionEqualityComparer.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/QuaternionEqualityComparer.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/StacktraceFilter.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/StacktraceFilter.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/TestRunCallbackAttribute.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/TestRunCallbackAttribute.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/TestRunCallbackListener.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/TestRunCallbackListener.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/Utils.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/Utils.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/Vector2ComparerWithEqualsOperator.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/Vector2ComparerWithEqualsOperator.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/Vector2EqualityComparer.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/Vector2EqualityComparer.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/Vector3ComparerWithEqualsOperator.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/Vector3ComparerWithEqualsOperator.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/Vector3EqualityComparer.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/Vector3EqualityComparer.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/Vector4ComparerWithEqualsOperator.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/Vector4ComparerWithEqualsOperator.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/Vector4EqualityComparer.cs create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/Vector4EqualityComparer.cs.meta create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/package.json create mode 100644 Library/PackageCache/com.unity.test-framework@1.1.11/package.json.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/.gitlab-ci.yml create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/CHANGELOG.md create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/CHANGELOG.md.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Documentation~/TextMeshPro.md create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Documentation~/TextMeshPro.md.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Gizmos.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Gizmos/TMP - Dropdown Icon.psd create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Gizmos/TMP - Dropdown Icon.psd.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Gizmos/TMP - Font Asset Icon.psd create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Gizmos/TMP - Font Asset Icon.psd.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Gizmos/TMP - Input Field Icon.psd create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Gizmos/TMP - Input Field Icon.psd.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Gizmos/TMP - Sprite Asset Icon.psd create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Gizmos/TMP - Sprite Asset Icon.psd.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Gizmos/TMP - Text Component Icon.psd create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Gizmos/TMP - Text Component Icon.psd.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Shaders.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Shaders/TMP_Properties.cginc create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Shaders/TMP_Properties.cginc.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Shaders/TMP_SDF Internal SSD.shader create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Shaders/TMP_SDF Internal SSD.shader.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/SectionHeader_Dark.psd create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/SectionHeader_Dark.psd.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/SectionHeader_Light.psd create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/SectionHeader_Light.psd.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignBaseLine.psd create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignBaseLine.psd.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignBaseLine_Light.psd create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignBaseLine_Light.psd.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignBottom.psd create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignBottom.psd.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignBottom_Light.psd create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignBottom_Light.psd.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignCapLine.psd create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignCapLine.psd.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignCapLine_Light.psd create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignCapLine_Light.psd.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignCenter.psd create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignCenter.psd.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignCenterGeo.psd create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignCenterGeo.psd.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignCenterGeo_Light.psd create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignCenterGeo_Light.psd.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignCenter_Light.psd create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignCenter_Light.psd.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignFlush.psd create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignFlush.psd.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignFlush_Light.psd create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignFlush_Light.psd.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignJustified.psd create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignJustified.psd.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignJustified_Light.psd create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignJustified_Light.psd.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignLeft.psd create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignLeft.psd.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignLeft_Light.psd create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignLeft_Light.psd.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignMidLine.psd create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignMidLine.psd.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignMiddle.psd create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignMiddle.psd.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignMiddle_Light.psd create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignMiddle_Light.psd.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignMidline_Light.psd create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignMidline_Light.psd.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignRight.psd create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignRight.psd.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignRight_Light.psd create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignRight_Light.psd.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignTop.psd create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignTop.psd.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignTop_Light.psd create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignTop_Light.psd.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/LICENSE.md create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/LICENSE.md.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Package Resources.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Package Resources/TMP Essential Resources.unitypackage create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Package Resources/TMP Essential Resources.unitypackage.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Package Resources/TMP Examples & Extras.unitypackage create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Package Resources/TMP Examples & Extras.unitypackage.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/PackageConversionData.json create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/PackageConversionData.json.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/PackageConversionData_Assets.json create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/PackageConversionData_Assets.json.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/DropdownOptionListDrawer.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/DropdownOptionListDrawer.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/GlyphInfoDrawer.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/GlyphInfoDrawer.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/GlyphMetricsPropertyDrawer.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/GlyphMetricsPropertyDrawer.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/GlyphRectPropertyDrawer.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/GlyphRectPropertyDrawer.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_BaseEditorPanel.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_BaseEditorPanel.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_BaseShaderGUI.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_BaseShaderGUI.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_BitmapShaderGUI.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_BitmapShaderGUI.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_CharacterPropertyDrawer.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_CharacterPropertyDrawer.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_ColorGradientAssetMenu.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_ColorGradientAssetMenu.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_ColorGradientEditor.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_ColorGradientEditor.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_DropdownEditor.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_DropdownEditor.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_EditorCoroutine.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_EditorCoroutine.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_EditorPanel.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_EditorPanel.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_EditorUtility.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_EditorUtility.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_FontAssetEditor.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_FontAssetEditor.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_FontAsset_CreationMenu.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_FontAsset_CreationMenu.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_GlyphPairAdjustmentRecordPropertyDrawer.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_GlyphPairAdjustmentRecordPropertyDrawer.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_GlyphPropertyDrawer.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_GlyphPropertyDrawer.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_InputFieldEditor.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_InputFieldEditor.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_MeshRendererEditor.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_MeshRendererEditor.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_PackageUtilities.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_PackageUtilities.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_PostBuildProcessHandler.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_PostBuildProcessHandler.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_ProjectTextSettings.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_ProjectTextSettings.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_ResourcesLoader.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_ResourcesLoader.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SDFShaderGUI.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SDFShaderGUI.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SerializedPropertyHolder.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SerializedPropertyHolder.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SettingsEditor.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SettingsEditor.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SpriteAssetEditor.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SpriteAssetEditor.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SpriteAssetImporter.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SpriteAssetImporter.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SpriteAssetMenu.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SpriteAssetMenu.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SpriteCharacterPropertyDrawer.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SpriteCharacterPropertyDrawer.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SpriteGlyphPropertyDrawer.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SpriteGlyphPropertyDrawer.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_StyleAssetMenu.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_StyleAssetMenu.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_StyleSheetEditor.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_StyleSheetEditor.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SubMeshUI_Editor.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SubMeshUI_Editor.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SubMesh_Editor.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SubMesh_Editor.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_TextAlignmentDrawer.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_TextAlignmentDrawer.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_UIStyleManager.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_UIStyleManager.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_UiEditorPanel.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_UiEditorPanel.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_ContextMenus.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_ContextMenus.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_CreateObjectMenu.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_CreateObjectMenu.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_EditorShaderUtilities.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_EditorShaderUtilities.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_FontAssetCreatorWindow.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_FontAssetCreatorWindow.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_FontPlugin.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_FontPlugin.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_SortingLayerHelper.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_SortingLayerHelper.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_TextContainerEditor.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_TextContainerEditor.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_TexturePostProcessor.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_TexturePostProcessor.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/Unity.TextMeshPro.Editor.asmdef create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/Unity.TextMeshPro.Editor.asmdef.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/AssemblyInfo.cs.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/AssemblyInfo.cs.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/FastAction.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/FastAction.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/MaterialReferenceManager.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/MaterialReferenceManager.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_Asset.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_Asset.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_Character.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_Character.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_CharacterInfo.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_CharacterInfo.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_ColorGradient.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_ColorGradient.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_CoroutineTween.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_CoroutineTween.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_DefaultControls.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_DefaultControls.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_Dropdown.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_Dropdown.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_EditorResourceManager.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_EditorResourceManager.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_FontAsset.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_FontAsset.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_FontAssetCommon.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_FontAssetCommon.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_FontAssetUtilities.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_FontAssetUtilities.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_FontFeatureTable.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_FontFeatureTable.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_FontFeaturesCommon.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_FontFeaturesCommon.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_InputField.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_InputField.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_InputValidator.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_InputValidator.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_LineInfo.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_LineInfo.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_ListPool.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_ListPool.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_MaterialManager.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_MaterialManager.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_MeshInfo.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_MeshInfo.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_ObjectPool.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_ObjectPool.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_PackageResourceImporter.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_PackageResourceImporter.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_RichTextTagStack.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_RichTextTagStack.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_RichTextTagsCommon.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_RichTextTagsCommon.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_ScrollbarEventHandler.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_ScrollbarEventHandler.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_SelectionCaret.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_SelectionCaret.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_Settings.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_Settings.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_ShaderUtilities.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_ShaderUtilities.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_Sprite.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_Sprite.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_SpriteAnimator.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_SpriteAnimator.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_SpriteAsset.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_SpriteAsset.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_SpriteAssetImportFormats.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_SpriteAssetImportFormats.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_SpriteCharacter.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_SpriteCharacter.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_SpriteGlyph.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_SpriteGlyph.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_Style.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_Style.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_StyleSheet.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_StyleSheet.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_SubMesh.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_SubMesh.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_SubMeshUI.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_SubMeshUI.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_Text.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_Text.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_TextElement.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_TextElement.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_TextElement_Legacy.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_TextElement_Legacy.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_TextInfo.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_TextInfo.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_TextParsingUtilities.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_TextParsingUtilities.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_TextUtilities.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_TextUtilities.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_UpdateManager.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_UpdateManager.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_UpdateRegistery.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_UpdateRegistery.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMPro_EventManager.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMPro_EventManager.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMPro_ExtensionMethods.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMPro_ExtensionMethods.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMPro_MeshUtilities.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMPro_MeshUtilities.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMPro_Private.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMPro_Private.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMPro_UGUI_Private.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMPro_UGUI_Private.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TextContainer.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TextContainer.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TextMeshPro.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TextMeshPro.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TextMeshProUGUI.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TextMeshProUGUI.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/Unity.TextMeshPro.asmdef create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/Unity.TextMeshPro.asmdef.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Tests.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Tests/Editor.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Tests/Editor/TMP_EditorTests.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Tests/Editor/TMP_EditorTests.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Tests/Editor/Unity.TextMeshPro.Editor.Tests.asmdef create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Tests/Editor/Unity.TextMeshPro.Editor.Tests.asmdef.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Tests/Runtime.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Tests/Runtime/TMP_RuntimeTests.cs create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Tests/Runtime/TMP_RuntimeTests.cs.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Tests/Runtime/Unity.TextMeshPro.Tests.asmdef create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Tests/Runtime/Unity.TextMeshPro.Tests.asmdef.meta create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/package.json create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/package.json.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/CHANGELOG.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/CHANGELOG.md.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/TableOfContents.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/clp_about.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/clp_add.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/clp_blend.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/clp_dup.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/clp_ease.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/clp_gap_extrap.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/clp_insert.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/clp_match.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/clp_pan_zoom.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/clp_position.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/clp_reset.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/clp_select.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/clp_speed.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/clp_split.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/clp_tile.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/clp_trim.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/crv_about.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/crv_hide.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/crv_keys_add.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/crv_keys_del.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/crv_keys_edit.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/crv_keys_interp.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/crv_keys_sel.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/crv_nav.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/grp_hide.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/grp_lock.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/grp_use.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_add_track_menu.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_animation_window_locked.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_cinematic_example.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_clip_blend_area.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_clip_double_speed.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_clip_duplicate_before.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_clip_duplicate_clip_after.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_clip_duplicate_clip_before.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_clip_duplicate_project.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_clip_ease_in_bad_gap.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_clip_ease_in_good_gap.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_clip_ease_in_out.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_clip_ease_in_override_scene.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_clip_ease_in_override_track.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_clip_split_after.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_clip_split_before.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_clip_trim_end_keys.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_clip_trim_loop.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_clip_trim_start_keys.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_clips_anim_clip_timing.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_clips_arrows.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_clips_position_invalid.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_clips_positioning.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_clips_select_first.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_clips_select_last.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_clips_split_after.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_clips_split_before.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_clips_tile_result.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_clips_tile_selection.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_clips_view.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_clips_view_adding.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_clips_view_inserting_after.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_clips_view_inserting_before.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_cog_menu.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_curves_first_last_tangent.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_curves_interp_menu.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_curves_tangent_joined.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_curves_view_icon.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_curves_view_position_x.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_curves_view_select_contiguous.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_curves_view_select_key.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_duration_mode.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_editor_bindings.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_editor_create.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_editor_project.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_editor_to_start.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_end_button.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_frames_subframes.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_gap_extrap_icons.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_gap_extrap_two_tracks.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_humanoid_after_match.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_humanoid_before_match.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_humanoid_blend.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_humanoid_idle.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_humanoid_manual.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_humanoid_match_menu.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_humanoid_runleft.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_humanoid_start.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_inspector_activation_clip.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_inspector_activation_track.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_inspector_anim_extrap.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_inspector_animation_clip.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_inspector_animation_clip_common.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_inspector_animation_clip_playable.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_inspector_animation_track.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_inspector_audio_clip.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_inspector_blend_curves.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_inspector_clip_speed.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_inspector_clip_timing.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_inspector_control_clip_common.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_inspector_control_clip_playable.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_inspector_curve_editor.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_inspector_ease_in_blend_out.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_inspector_ease_in_out.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_inspector_multiple_selection.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_inspector_narrow_selection.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_inspector_playable_director.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_inspector_timeline.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_last_loop_before.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_last_loop_complete.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_last_loop_trim.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_masking_avatar_inspector.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_masking_avatar_off.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_masking_avatar_on.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_masking_override.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_masking_override_selected.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_masking_start.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_masking_waving.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_match_clip_many.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_match_clip_two.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_match_prematch_clips.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_match_prematch_scene.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_mix_mode_blend_arrow.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_mix_mode_position_cursor.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_move_track_after copy.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_move_track_after.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_move_track_before.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_nesting_editing.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_nesting_example.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_nesting_global.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_nesting_local.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_next_frame_button.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_overview_asset.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_overview_enemy.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_overview_instance.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_overview_player.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_play_button.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_play_range.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_play_range_button.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_playback_controls.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_playhead_insert_100_after.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_playhead_insert_before.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_playhead_insert_menu.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_playhead_location.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_playhead_select_menu.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_playhead_trim_after.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_playhead_trim_before.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_preview_selector.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_previous_frame_button.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_property_red.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_replace_mode.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_replace_mode_red_cut.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_ripple_mode.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_ripple_mode_yellow_arrow.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_splash.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_start_button.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_track_alert_icon.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_track_duplicate.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_track_group_add.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_track_group_hidden.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_track_group_locked.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_track_group_plus.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_track_list.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_track_locked.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_track_muted.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_track_priority.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_track_reorder.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_track_select_first.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_track_select_last.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_workflow_clip_in_project.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_workflow_converted_clip.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_workflow_dopesheet.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_workflow_keyframing_menu.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_workflow_record_button.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_workflow_recorded_clip_track_menu.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_workflow_recording.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_workflow_recording_diamonds.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_zoombar.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/timeline_zoomed_clip_edit_modes.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/workflow_inspector_animation_clip_playable.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/workflow_nesting_control_disabled.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/workflow_nesting_done.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/workflow_nesting_double_click.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/workflow_nesting_drag_board.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/workflow_nesting_edit_warning.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/images/workflow_nesting_master.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/index.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/insp_about.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/insp_clp.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/insp_clp_act.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/insp_clp_anim_com.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/insp_clp_anim_plyb.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/insp_clp_aud.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/insp_clp_ctrl_com.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/insp_clp_ctrl_plyb.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/insp_tl.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/insp_trk.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/insp_trk_act.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/insp_trk_anim.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/play_director.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/tl_about.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/tl_gloss.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/tl_play_cntrls.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/tl_selector.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/tl_settings.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/tl_window.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/trk_add.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/trk_delete.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/trk_dup.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/trk_list_about.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/trk_lock.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/trk_mute.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/trk_reorder.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/trk_select.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/wf_about.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/wf_char_anim.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/wf_conv_infinite.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/wf_instance.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/wf_mask.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/wf_nested.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Documentation~/wf_rec_anim.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Actions.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Actions/ClipsActions.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Actions/ClipsActions.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Actions/ItemAction.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Actions/ItemAction.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Actions/MarkerActions.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Actions/MarkerActions.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Actions/Menus.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Actions/Menus/MenuItemActionBase.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Actions/Menus/MenuItemActionBase.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Actions/Menus/TimelineContextMenu.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Actions/Menus/TimelineContextMenu.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Actions/TimelineActions.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Actions/TimelineActions.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Actions/TrackActions.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Actions/TrackActions.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Activation.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Activation/ActivationTrackEditor.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Activation/ActivationTrackEditor.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Activation/ActivationTrackInspector.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Activation/ActivationTrackInspector.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Analytics.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Analytics/TimelineAnalytics.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Analytics/TimelineAnalytics.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Animation.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Animation/AnimationClipActions.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Animation/AnimationClipActions.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Animation/AnimationClipCurveCache.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Animation/AnimationClipCurveCache.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Animation/AnimationOffsetMenu.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Animation/AnimationOffsetMenu.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Animation/AnimationPlayableAssetEditor.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Animation/AnimationPlayableAssetEditor.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Animation/AnimationTrackActions.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Animation/AnimationTrackActions.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Animation/BindingSelector.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Animation/BindingSelector.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Animation/BindingTreeViewDataSource.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Animation/BindingTreeViewDataSource.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Animation/BindingTreeViewDataSourceGUI.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Animation/BindingTreeViewDataSourceGUI.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Animation/ClipCurveEditor.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Animation/ClipCurveEditor.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Animation/CurveDataSource.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Animation/CurveDataSource.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Animation/CurvesProxy.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Animation/CurvesProxy.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Animation/TimelineAnimationUtilities.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Animation/TimelineAnimationUtilities.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Attributes.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Attributes/ActiveInModeAttribute.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Attributes/ActiveInModeAttribute.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Attributes/MenuEntryAttribute.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Attributes/MenuEntryAttribute.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Attributes/ShortcutAttribute.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Attributes/ShortcutAttribute.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Audio.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Audio/AudioClipPropertiesDrawer.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Audio/AudioClipPropertiesDrawer.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Audio/AudioPlayableAssetEditor.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Audio/AudioPlayableAssetEditor.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Audio/AudioPlayableAssetInspector.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Audio/AudioPlayableAssetInspector.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Audio/AudioTrackInspector.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Audio/AudioTrackInspector.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/ControlTrack.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/ControlTrack/ControlPlayableAssetEditor.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/ControlTrack/ControlPlayableAssetEditor.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/CurveEditUtility.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/CurveEditUtility.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/CustomEditors.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/CustomEditors/ClipEditor.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/CustomEditors/ClipEditor.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/CustomEditors/CustomTimelineEditorCache.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/CustomEditors/CustomTimelineEditorCache.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/CustomEditors/MarkerEditor.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/CustomEditors/MarkerEditor.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/CustomEditors/MarkerTrackEditor.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/CustomEditors/MarkerTrackEditor.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/CustomEditors/TrackEditor.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/CustomEditors/TrackEditor.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/DirectorNamedColor.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/DirectorNamedColor.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/DirectorStyles.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/DirectorStyles.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Extensions.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Extensions/AnimatedParameterExtensions.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Extensions/AnimatedParameterExtensions.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Extensions/AnimationTrackExtensions.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Extensions/AnimationTrackExtensions.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Extensions/TrackExtensions.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Extensions/TrackExtensions.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Items.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Items/ClipItem.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Items/ClipItem.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Items/ITimelineItem.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Items/ITimelineItem.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Items/ItemsGroup.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Items/ItemsGroup.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Items/ItemsPerTrack.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Items/ItemsPerTrack.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Items/ItemsUtils.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Items/ItemsUtils.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Items/MarkerItem.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Items/MarkerItem.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/AddDelete.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/AddDelete/AddDeleteItemModeMix.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/AddDelete/AddDeleteItemModeMix.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/AddDelete/AddDeleteItemModeReplace.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/AddDelete/AddDeleteItemModeReplace.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/AddDelete/AddDeleteItemModeRipple.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/AddDelete/AddDeleteItemModeRipple.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/AddDelete/IAddDeleteItemMode.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/AddDelete/IAddDeleteItemMode.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Cursors.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Cursors/TimelineCursors.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Cursors/TimelineCursors.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/EditMode.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/EditMode.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/EditModeInputHandler.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/EditModeInputHandler.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Move.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Move/IMoveItemMode.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Move/IMoveItemMode.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Move/MoveItemHandler.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Move/MoveItemHandler.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Move/MoveItemModeMix.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Move/MoveItemModeMix.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Move/MoveItemModeReplace.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Move/MoveItemModeReplace.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Move/MoveItemModeRipple.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Move/MoveItemModeRipple.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Move/MovingItems.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Move/MovingItems.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Sequence.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Sequence/EaseClip.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Sequence/EaseClip.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Sequence/Jog.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Sequence/Jog.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Sequence/MarkerHeaderContextMenu.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Sequence/MarkerHeaderContextMenu.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Sequence/RectangleSelect.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Sequence/RectangleSelect.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Sequence/RectangleTool.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Sequence/RectangleTool.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Sequence/RectangleZoom.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Sequence/RectangleZoom.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Sequence/SelectAndMoveItem.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Sequence/SelectAndMoveItem.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Sequence/TrackZoom.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Sequence/TrackZoom.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Sequence/TrimClip.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Sequence/TrimClip.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/TimeAreaAutoPanner.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/TimeAreaAutoPanner.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/TimeIndicator.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/TimeIndicator.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/TimelineClipGroup.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/TimelineClipGroup.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Trim.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Trim/ITrimItemMode.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Trim/ITrimItemMode.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Trim/TrimItemModeMix.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Trim/TrimItemModeMix.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Trim/TrimItemModeReplace.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Trim/TrimItemModeReplace.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Trim/TrimItemModeRipple.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Trim/TrimItemModeRipple.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Utils.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Utils/EditModeGUIUtils.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Utils/EditModeGUIUtils.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Utils/EditModeMixUtils.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Utils/EditModeMixUtils.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Utils/EditModeReplaceUtils.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Utils/EditModeReplaceUtils.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Utils/EditModeRippleUtils.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Utils/EditModeRippleUtils.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Utils/EditModeUtils.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Utils/EditModeUtils.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Utils/ManipulatorsUtils.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Utils/ManipulatorsUtils.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Utils/PlacementValidity.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/Utils/PlacementValidity.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/MenuOrder.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/MenuOrder.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Playables.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Playables/ControlPlayableInspector.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Playables/ControlPlayableInspector.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Properties.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Properties/AssemblyInfo.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Properties/AssemblyInfo.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Recording.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Recording/AnimationTrackRecorder.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Recording/AnimationTrackRecorder.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Recording/TimelineRecording.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Recording/TimelineRecording.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Recording/TimelineRecordingContextualResponder.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Recording/TimelineRecordingContextualResponder.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Recording/TimelineRecording_Monobehaviour.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Recording/TimelineRecording_Monobehaviour.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Recording/TimelineRecording_PlayableAsset.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Recording/TimelineRecording_PlayableAsset.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Recording/TrackAssetRecordingExtensions.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Recording/TrackAssetRecordingExtensions.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Shortcuts.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Shortcuts.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/SignalAssetInspector.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/SignalAssetInspector.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/SignalEmitterEditor.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/SignalEmitterEditor.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/SignalEmitterInspector.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/SignalEmitterInspector.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/SignalEventDrawer.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/SignalEventDrawer.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/SignalManager.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/SignalManager.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/SignalReceiverHeader.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/SignalReceiverHeader.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/SignalReceiverInspector.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/SignalReceiverInspector.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/SignalUtility.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/SignalUtility.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/Styles.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/Styles.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/TreeView.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/TreeView/SignalListFactory.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/TreeView/SignalListFactory.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/TreeView/SignalReceiverItem.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/TreeView/SignalReceiverItem.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/TreeView/SignalReceiverTreeView.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Signals/TreeView/SignalReceiverTreeView.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/State.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/State/ISequenceState.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/State/ISequenceState.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/State/SequenceHierarchy.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/State/SequenceHierarchy.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/State/SequencePath.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/State/SequencePath.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/State/SequenceState.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/State/SequenceState.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/State/WindowState.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/State/WindowState.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Extensions.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Extensions/common.uss create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Extensions/common.uss.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Extensions/dark.uss create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Extensions/dark.uss.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Extensions/light.uss create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Extensions/light.uss.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelineActivation.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelineActivation.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelineAutokey.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelineAutokey.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelineAutokey@2x.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelineAutokey@2x.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelineAutokey_active.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelineAutokey_active.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelineAutokey_active@2x.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelineAutokey_active@2x.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelineCollapseMarkerButtonDisabled.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelineCollapseMarkerButtonDisabled.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelineCollapseMarkerButtonEnabled.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelineCollapseMarkerButtonEnabled.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelineContinue.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelineContinue.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelineCurvesOff.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelineCurvesOff.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelineCurvesOn.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelineCurvesOn.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelineDisabledBackground.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelineDisabledBackground.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelineEndPlayback.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelineEndPlayback.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelineEye.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelineEye.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelineEye@2x.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelineEye@2x.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelineHold.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelineHold.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelineIconClipIn.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelineIconClipIn.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelineIconClipOut.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelineIconClipOut.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelineInfiniteTrackNoShadow.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelineInfiniteTrackNoShadow.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelineKeyframe.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelineKeyframe.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelineLockButton.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelineLockButton.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelineLockButton@2x.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelineLockButton@2x.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelineLoop.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelineLoop.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelineMarkerItem.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelineMarkerItem.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelineMarkerItemCollapsed.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelineMarkerItemCollapsed.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelineMarkerItemSelected.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelineMarkerItemSelected.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelinePingPong.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelinePingPong.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelinePlayRange.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelinePlayRange.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelineSignalCollapsed.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelineSignalCollapsed.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelineSignalSelected.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelineSignalSelected.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelineStartPlayback.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelineStartPlayback.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelineTimeCursor.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/DarkSkin/TimelineTimeCursor.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Icons.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Icons/Timeline-Marker-Warning-Overlay.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Icons/Timeline-Marker-Warning-Overlay.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Icons/TimelineClipBG.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Icons/TimelineClipBG.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Icons/TimelineClipFG.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Icons/TimelineClipFG.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Icons/TimelineDigIn.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Icons/TimelineDigIn.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Icons/TimelineEditModeMixOFF.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Icons/TimelineEditModeMixOFF.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Icons/TimelineEditModeMixON.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Icons/TimelineEditModeMixON.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Icons/TimelineEditModeReplaceOFF.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Icons/TimelineEditModeReplaceOFF.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Icons/TimelineEditModeReplaceON.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Icons/TimelineEditModeReplaceON.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Icons/TimelineEditModeRippleOFF.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Icons/TimelineEditModeRippleOFF.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Icons/TimelineEditModeRippleON.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Icons/TimelineEditModeRippleON.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Icons/TimelineHeaderMarkerIcon.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Icons/TimelineHeaderMarkerIcon.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Icons/TimelineMarkerAreaButtonDisabled.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Icons/TimelineMarkerAreaButtonDisabled.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Icons/TimelineMarkerAreaButtonEnabled.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Icons/TimelineMarkerAreaButtonEnabled.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Icons/TimelineSelector.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Icons/TimelineSelector.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Icons/TimelineSignal.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Icons/TimelineSignal.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Icons/d_TimelineDigIn.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Icons/d_TimelineDigIn.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Icons/d_TimelineEditModeMixOFF.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Icons/d_TimelineEditModeMixOFF.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Icons/d_TimelineEditModeMixON.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Icons/d_TimelineEditModeMixON.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Icons/d_TimelineEditModeReplaceOFF.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Icons/d_TimelineEditModeReplaceOFF.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Icons/d_TimelineEditModeReplaceON.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Icons/d_TimelineEditModeReplaceON.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Icons/d_TimelineEditModeRippleOFF.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Icons/d_TimelineEditModeRippleOFF.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Icons/d_TimelineEditModeRippleON.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Icons/d_TimelineEditModeRippleON.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Icons/d_TimelineHeaderMarkerIcon.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Icons/d_TimelineHeaderMarkerIcon.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Icons/d_TimelineMarkerAreaButtonDisabled.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Icons/d_TimelineMarkerAreaButtonDisabled.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Icons/d_TimelineMarkerAreaButtonEnabled.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Icons/d_TimelineMarkerAreaButtonEnabled.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Icons/d_TimelineSelector.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Icons/d_TimelineSelector.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Icons/d_TimelineSignal.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Icons/d_TimelineSignal.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelineActivation.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelineActivation.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelineAutokey.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelineAutokey.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelineAutokey@2x.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelineAutokey@2x.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelineAutokey_active.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelineAutokey_active.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelineAutokey_active@2x.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelineAutokey_active@2x.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelineCollapseMarkerButtonDisabled.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelineCollapseMarkerButtonDisabled.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelineCollapseMarkerButtonEnabled.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelineCollapseMarkerButtonEnabled.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelineContinue.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelineContinue.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelineCurvesOff.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelineCurvesOff.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelineCurvesOn.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelineCurvesOn.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelineDisabledBackground.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelineDisabledBackground.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelineEndPlayback.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelineEndPlayback.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelineEye.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelineEye.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelineEye@2x.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelineEye@2x.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelineHold.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelineHold.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelineIconClipIn.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelineIconClipIn.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelineIconClipOut.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelineIconClipOut.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelineInfiniteTrackNoShadow.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelineInfiniteTrackNoShadow.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelineKeyframe.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelineKeyframe.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelineLockButton.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelineLockButton.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelineLockButton@2x.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelineLockButton@2x.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelineLoop.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelineLoop.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelineMarkerItem.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelineMarkerItem.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelineMarkerItemCollapsed.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelineMarkerItemCollapsed.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelineMarkerItemSelected.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelineMarkerItemSelected.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelinePingPong.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelinePingPong.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelinePlayRange.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelinePlayRange.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelineSignalCollapsed.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelineSignalCollapsed.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelineSignalSelected.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelineSignalSelected.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelineStartPlayback.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelineStartPlayback.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelineTimeCursor.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/LightSkin/TimelineTimeCursor.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Shared.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Shared/Timeline-Marker-Multi-Overlay.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Shared/Timeline-Marker-Multi-Overlay.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Shared/TimelineBottomShadow.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Shared/TimelineBottomShadow.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Shared/TimelineConnector.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Shared/TimelineConnector.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Shared/TimelineDisplay.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Shared/TimelineDisplay.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Shared/TimelineGroupBackground.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Shared/TimelineGroupBackground.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Shared/TimelineOutline.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Shared/TimelineOutline.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Shared/TimelineSeqEnd.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Shared/TimelineSeqEnd.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Shared/TimelineSwatch.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Shared/TimelineSwatch.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Shared/TimelineWarning.png create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/Images/Shared/TimelineWarning.png.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/res.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/res/HumanoidDefault.anim create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/res/HumanoidDefault.anim.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/res/Timeline_DarkSkin.txt create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/res/Timeline_DarkSkin.txt.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/res/Timeline_LightSkin.txt create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/StyleSheets/res/Timeline_LightSkin.txt.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/TimelineEditor.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/TimelineEditor.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/TimelineHelpers.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/TimelineHelpers.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/TimelineSelection.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/TimelineSelection.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/TimelineUtility.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/TimelineUtility.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Tooltip.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Tooltip.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Trackhead.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Trackhead.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Unity.Timeline.Editor.asmdef create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Unity.Timeline.Editor.asmdef.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/UnityEditorInternals.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/UnityEditorInternals.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/AnimatedParameterCache.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/AnimatedParameterCache.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/AnimatedParameterUtility.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/AnimatedParameterUtility.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/BindingUtility.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/BindingUtility.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/BreadcrumbDrawer.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/BreadcrumbDrawer.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/ClipModifier.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/ClipModifier.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/Clipboard.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/Clipboard.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/ControlPlayableUtility.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/ControlPlayableUtility.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/CustomTrackDrawerAttribute.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/CustomTrackDrawerAttribute.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/DisplayNameHelper.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/DisplayNameHelper.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/GUIColorOverride.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/GUIColorOverride.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/GUIGroupScope.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/GUIGroupScope.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/GUIMixedValueScope.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/GUIMixedValueScope.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/GUIViewportScope.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/GUIViewportScope.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/Graphics.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/Graphics.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/KeyTraverser.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/KeyTraverser.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/MarkerModifier.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/MarkerModifier.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/ObjectExtension.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/ObjectExtension.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/ObjectReferenceField.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/ObjectReferenceField.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/PropertyCollector.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/PropertyCollector.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/Range.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/Range.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/SequenceSelectorNameFormater.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/SequenceSelectorNameFormater.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/SpacePartitioner.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/SpacePartitioner.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/StyleManager.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/StyleManager.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/StyleNormalColorOverride.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/StyleNormalColorOverride.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/TimeReferenceUtility.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/TimeReferenceUtility.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/TimelineKeyboardNavigation.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/TimelineKeyboardNavigation.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/TrackModifier.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/TrackModifier.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/TrackResourceCache.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/TrackResourceCache.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/TypeUtility.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/TypeUtility.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/Modes.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/Modes/TimeReferenceMode.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/Modes/TimeReferenceMode.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/Modes/TimelineActiveMode.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/Modes/TimelineActiveMode.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/Modes/TimelineAssetEditionMode.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/Modes/TimelineAssetEditionMode.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/Modes/TimelineDisabledMode.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/Modes/TimelineDisabledMode.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/Modes/TimelineInactiveMode.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/Modes/TimelineInactiveMode.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/Modes/TimelineMode.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/Modes/TimelineMode.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/Modes/TimelineReadOnlyMode.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/Modes/TimelineReadOnlyMode.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/PlaybackScroller.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/PlaybackScroller.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineMarkerHeaderGUI.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineMarkerHeaderGUI.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindowTimeControl.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindowTimeControl.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow_ActiveTimeline.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow_ActiveTimeline.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow_Breadcrumbs.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow_Breadcrumbs.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow_Duration.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow_Duration.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow_EditorCallbacks.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow_EditorCallbacks.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow_Gui.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow_Gui.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow_HeaderGui.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow_HeaderGui.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow_Manipulators.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow_Manipulators.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow_PlayRange.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow_PlayRange.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow_PlayableLookup.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow_PlayableLookup.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow_PreviewPlayMode.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow_PreviewPlayMode.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow_Selection.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow_Selection.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow_StateChange.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow_StateChange.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow_TimeArea.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow_TimeArea.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow_TimeCursor.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow_TimeCursor.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow_TrackGui.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow_TrackGui.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/ViewModel.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/ViewModel/ScriptableObjectViewPrefs.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/ViewModel/ScriptableObjectViewPrefs.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/ViewModel/TimelineAssetViewModel.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/ViewModel/TimelineAssetViewModel.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/ViewModel/TimelineWindowViewPrefs.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/ViewModel/TimelineWindowViewPrefs.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/WindowConstants.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/WindowConstants.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/inspectors.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/inspectors/AnimationPlayableAssetInspector.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/inspectors/AnimationPlayableAssetInspector.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/inspectors/AnimationTrackInspector.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/inspectors/AnimationTrackInspector.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/inspectors/BasicAssetInspector.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/inspectors/BasicAssetInspector.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/inspectors/BuiltInCurvePresets.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/inspectors/BuiltInCurvePresets.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/inspectors/ClipInspector.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/inspectors/ClipInspector/ClipInspector.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/inspectors/ClipInspector/ClipInspector.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/inspectors/ClipInspector/ClipInspectorCurveEditor.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/inspectors/ClipInspector/ClipInspectorCurveEditor.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/inspectors/ClipInspector/ClipInspectorSelectionInfo.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/inspectors/ClipInspector/ClipInspectorSelectionInfo.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/inspectors/CurvesOwner.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/inspectors/CurvesOwner/CurvesOwnerInspectorHelper.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/inspectors/CurvesOwner/CurvesOwnerInspectorHelper.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/inspectors/CurvesOwner/ICurvesOwnerInspectorWrapper.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/inspectors/CurvesOwner/ICurvesOwnerInspectorWrapper.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/inspectors/DirectorNamedColorInspector.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/inspectors/DirectorNamedColorInspector.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/inspectors/EditorClip.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/inspectors/EditorClip.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/inspectors/EditorClipFactory.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/inspectors/EditorClipFactory.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/inspectors/GroupTrackInspector.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/inspectors/GroupTrackInspector.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/inspectors/MarkerInspector.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/inspectors/MarkerInspector.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/inspectors/TimeFieldDrawer.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/inspectors/TimeFieldDrawer.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/inspectors/TimelineAssetInspector.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/inspectors/TimelineAssetInspector.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/inspectors/TimelineInspectorUtility.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/inspectors/TimelineInspectorUtility.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/inspectors/TrackAssetInspector.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/inspectors/TrackAssetInspector.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/AnimationTrackKeyDataSource.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/AnimationTrackKeyDataSource.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/Control.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/Control.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/Drawers.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/Drawers/AnimationTrackDrawer.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/Drawers/AnimationTrackDrawer.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/Drawers/ClipDrawer.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/Drawers/ClipDrawer.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/Drawers/InfiniteTrackDrawer.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/Drawers/InfiniteTrackDrawer.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/Drawers/Layers.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/Drawers/Layers/ClipsLayer.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/Drawers/Layers/ClipsLayer.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/Drawers/Layers/ItemsLayer.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/Drawers/Layers/ItemsLayer.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/Drawers/Layers/MarkersLayer.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/Drawers/Layers/MarkersLayer.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/Drawers/TrackDrawer.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/Drawers/TrackDrawer.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/Drawers/TrackItemsDrawer.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/Drawers/TrackItemsDrawer.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/IPropertyKeyDataSource.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/IPropertyKeyDataSource.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/IRowGUI.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/IRowGUI.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/InlineCurveEditor.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/InlineCurveEditor.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/ItemGui.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/ItemGui/ISelectable.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/ItemGui/ISelectable.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/ItemGui/TimelineClipGUI.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/ItemGui/TimelineClipGUI.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/ItemGui/TimelineItemGUI.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/ItemGui/TimelineItemGUI.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/ItemGui/TimelineMarkerClusterGUI.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/ItemGui/TimelineMarkerClusterGUI.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/ItemGui/TimelineMarkerGUI.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/ItemGui/TimelineMarkerGUI.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/ManipulationsClips.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/ManipulationsClips.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/ManipulationsTimeline.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/ManipulationsTimeline.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/ManipulationsTracks.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/ManipulationsTracks.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/Manipulator.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/Manipulator.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/PickerUtils.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/PickerUtils.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/Snapping.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/Snapping/IAttractable.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/Snapping/IAttractable.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/Snapping/ISnappable.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/Snapping/ISnappable.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/Snapping/SnapEngine.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/Snapping/SnapEngine.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/TimelineClipHandle.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/TimelineClipHandle.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/TimelineClipUnion.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/TimelineClipUnion.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/TimelineDataSource.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/TimelineDataSource.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/TimelineDragging.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/TimelineDragging.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/TimelineGroupGUI.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/TimelineGroupGUI.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/TimelineTrackBaseGUI.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/TimelineTrackBaseGUI.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/TimelineTrackErrorGUI.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/TimelineTrackErrorGUI.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/TimelineTrackGUI.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/TimelineTrackGUI.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/TimelineTreeView.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/TimelineTreeView.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/TimelineTreeViewGUI.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/TimelineTreeViewGUI.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/TrackPropertyCurvesDataSource.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/TrackPropertyCurvesDataSource.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/LICENSE.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/LICENSE.md.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/README.md create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/README.md.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Activation.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Activation/ActivationMixerPlayable.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Activation/ActivationMixerPlayable.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Activation/ActivationPlayableAsset.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Activation/ActivationPlayableAsset.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Activation/ActivationTrack.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Activation/ActivationTrack.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Animation.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Animation/AnimationOutputWeightProcessor.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Animation/AnimationOutputWeightProcessor.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Animation/AnimationPlayableAsset.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Animation/AnimationPlayableAsset.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Animation/AnimationPreviewUpdateCallback.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Animation/AnimationPreviewUpdateCallback.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Animation/AnimationTrack.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Animation/AnimationTrack.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Animation/ICurvesOwner.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Animation/ICurvesOwner.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/AssetUpgrade.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/AssetUpgrade/AnimationPlayableAssetUpgrade.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/AssetUpgrade/AnimationPlayableAssetUpgrade.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/AssetUpgrade/AnimationTrackUpgrade.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/AssetUpgrade/AnimationTrackUpgrade.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/AssetUpgrade/ClipUpgrade.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/AssetUpgrade/ClipUpgrade.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/AssetUpgrade/TimelineUpgrade.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/AssetUpgrade/TimelineUpgrade.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/AssetUpgrade/TrackUpgrade.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/AssetUpgrade/TrackUpgrade.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Attributes.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Attributes/TrackColorAttribute.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Attributes/TrackColorAttribute.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Audio.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Audio/AudioClipProperties.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Audio/AudioClipProperties.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Audio/AudioMixerProperties.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Audio/AudioMixerProperties.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Audio/AudioPlayableAsset.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Audio/AudioPlayableAsset.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Audio/AudioTrack.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Audio/AudioTrack.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/ClipCaps.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/ClipCaps.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Control.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Control/ControlPlayableAsset.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Control/ControlPlayableAsset.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Control/ControlTrack.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Control/ControlTrack.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/DiscreteTime.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/DiscreteTime.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Evaluation.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Evaluation/InfiniteRuntimeClip.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Evaluation/InfiniteRuntimeClip.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Evaluation/IntervalTree.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Evaluation/IntervalTree.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Evaluation/RuntimeClip.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Evaluation/RuntimeClip.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Evaluation/RuntimeClipBase.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Evaluation/RuntimeClipBase.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Evaluation/RuntimeElement.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Evaluation/RuntimeElement.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Evaluation/ScheduleRuntimeClip.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Evaluation/ScheduleRuntimeClip.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Events.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Events/IMarker.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Events/IMarker.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Events/INotificationOptionProvider.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Events/INotificationOptionProvider.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Events/Marker.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Events/Marker.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Events/MarkerList.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Events/MarkerList.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Events/MarkerTrack.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Events/MarkerTrack.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Events/SignalTrack.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Events/SignalTrack.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Events/Signals.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Events/Signals/CustomSignalEventDrawer.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Events/Signals/CustomSignalEventDrawer.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Events/Signals/SignalAsset.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Events/Signals/SignalAsset.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Events/Signals/SignalEmitter.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Events/Signals/SignalEmitter.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Events/Signals/SignalReceiver.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Events/Signals/SignalReceiver.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Extensions.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Extensions/TrackExtensions.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Extensions/TrackExtensions.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/GroupTrack.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/GroupTrack.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/ILayerable.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/ILayerable.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Playables.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Playables/ActivationControlPlayable.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Playables/ActivationControlPlayable.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Playables/BasicScriptPlayable.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Playables/BasicScriptPlayable.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Playables/DirectorControlPlayable.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Playables/DirectorControlPlayable.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Playables/ITimeControl.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Playables/ITimeControl.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Playables/NotificationFlags.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Playables/NotificationFlags.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Playables/ParticleControlPlayable.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Playables/ParticleControlPlayable.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Playables/PrefabControlPlayable.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Playables/PrefabControlPlayable.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Playables/TimeControlPlayable.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Playables/TimeControlPlayable.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Playables/TimeNotificationBehaviour.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Playables/TimeNotificationBehaviour.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Properties.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Properties/AssemblyInfo.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Properties/AssemblyInfo.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Scripting.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Scripting/PlayableTrack.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Scripting/PlayableTrack.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Timeline.deprecated.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Timeline.deprecated.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/TimelineAsset.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/TimelineAsset.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/TimelineAsset_CreateRemove.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/TimelineAsset_CreateRemove.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/TimelineAttributes.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/TimelineAttributes.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/TimelineClip.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/TimelineClip.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/TimelinePlayable.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/TimelinePlayable.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/TrackAsset.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/TrackAsset.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Unity.Timeline.asmdef create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Unity.Timeline.asmdef.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Utilities.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Utilities/AnimationPreviewUtilities.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Utilities/AnimationPreviewUtilities.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Utilities/AnimatorBindingCache.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Utilities/AnimatorBindingCache.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Utilities/Extrapolation.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Utilities/Extrapolation.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Utilities/HashUtility.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Utilities/HashUtility.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Utilities/IPropertyCollector.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Utilities/IPropertyCollector.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Utilities/IPropertyPreview.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Utilities/IPropertyPreview.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Utilities/NotificationUtilities.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Utilities/NotificationUtilities.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Utilities/TimeUtility.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Utilities/TimeUtility.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Utilities/TimelineCreateUtilities.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Utilities/TimelineCreateUtilities.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Utilities/TimelineUndo.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Utilities/TimelineUndo.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Utilities/WeightUtility.cs create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Runtime/Utilities/WeightUtility.cs.meta create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/package.json create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/package.json.meta create mode 100644 Library/ProtocolInstance.json create mode 100644 Library/SceneVisibilityState.asset create mode 100644 Library/ScriptAssemblies/BuiltinAssemblies.stamp create mode 100644 Library/ScriptAssemblies/Unity.CollabProxy.Editor.dll create mode 100644 Library/ScriptAssemblies/Unity.CollabProxy.Editor.pdb create mode 100644 Library/ScriptAssemblies/Unity.Rider.Editor.dll create mode 100644 Library/ScriptAssemblies/Unity.Rider.Editor.pdb create mode 100644 Library/ScriptAssemblies/Unity.TextMeshPro.Editor.dll create mode 100644 Library/ScriptAssemblies/Unity.TextMeshPro.Editor.pdb create mode 100644 Library/ScriptAssemblies/Unity.TextMeshPro.dll create mode 100644 Library/ScriptAssemblies/Unity.TextMeshPro.pdb create mode 100644 Library/ScriptAssemblies/Unity.Timeline.Editor.dll create mode 100644 Library/ScriptAssemblies/Unity.Timeline.Editor.pdb create mode 100644 Library/ScriptAssemblies/Unity.Timeline.dll create mode 100644 Library/ScriptAssemblies/Unity.Timeline.pdb create mode 100644 Library/ScriptAssemblies/Unity.VSCode.Editor.dll create mode 100644 Library/ScriptAssemblies/Unity.VSCode.Editor.pdb create mode 100644 Library/ScriptAssemblies/UnityEditor.TestRunner.dll create mode 100644 Library/ScriptAssemblies/UnityEditor.TestRunner.pdb create mode 100644 Library/ScriptAssemblies/UnityEditor.UI.dll create mode 100644 Library/ScriptAssemblies/UnityEditor.UI.pdb create mode 100644 Library/ScriptAssemblies/UnityEngine.TestRunner.dll create mode 100644 Library/ScriptAssemblies/UnityEngine.TestRunner.pdb create mode 100644 Library/ScriptAssemblies/UnityEngine.UI.dll create mode 100644 Library/ScriptAssemblies/UnityEngine.UI.pdb create mode 100644 Library/ScriptMapper create mode 100644 Library/ShaderCache.db create mode 100644 Library/ShaderCache/0/076199bb1b39eda6f92627da1a9d3ff0.bin create mode 100644 Library/ShaderCache/0/0b2c08b8ea2ec29cf485a575221febef.bin create mode 100644 Library/ShaderCache/0/0b687e7d9f12ccea32e0133d20adc925.bin create mode 100644 Library/ShaderCache/1/193cc80d98eb6a7812da3d34eb8599f8.bin create mode 100644 Library/ShaderCache/1/1a1c08cf3c449d7a30f32b63508b812f.bin create mode 100644 Library/ShaderCache/2/2529b5ba67567d4e67eb4e4635838a94.bin create mode 100644 Library/ShaderCache/2/28905464b3cc6f7befbaf1df11623e94.bin create mode 100644 Library/ShaderCache/2/28ae83f9ba6cf68d89905f907618866a.bin create mode 100644 Library/ShaderCache/3/31522e2d585e6b20716ee936a4f907c6.bin create mode 100644 Library/ShaderCache/3/328ef793e0eef2abf3f3236c5a0f0c88.bin create mode 100644 Library/ShaderCache/3/3c7684957eb137974f0890b99bcf3d34.bin create mode 100644 Library/ShaderCache/3/3d9c974eb3e7805856171c163fe3dd75.bin create mode 100644 Library/ShaderCache/3/3e40d73039691620062b9040a260ffc7.bin create mode 100644 Library/ShaderCache/4/4b900e93d36d8f65218b345d84d3b0bb.bin create mode 100644 Library/ShaderCache/5/5103e86894128bd534bdabed65fca9de.bin create mode 100644 Library/ShaderCache/5/5234af91bc18c06807baf5591ce2c8a9.bin create mode 100644 Library/ShaderCache/5/583925f9ddac204b53c83a7676598b73.bin create mode 100644 Library/ShaderCache/6/60d13387d4e64a5b7491ba19bf70fd0d.bin create mode 100644 Library/ShaderCache/6/65eae410e4fd7ca1235d1b9cc1020b45.bin create mode 100644 Library/ShaderCache/6/666ea7828bda3d87518bfbf605434ee8.bin create mode 100644 Library/ShaderCache/7/70fa9efa2ca58e8ec1e886b79bd3b19c.bin create mode 100644 Library/ShaderCache/7/7329c493a25538e7bd95f80b7d464767.bin create mode 100644 Library/ShaderCache/7/73856dfe4b8184520815339d2a15e753.bin create mode 100644 Library/ShaderCache/7/73b46269b7ef34e41c0453ab3cbd92a8.bin create mode 100644 Library/ShaderCache/7/78566e4f55c9a88c929972de2796df84.bin create mode 100644 Library/ShaderCache/7/7e9aa0df64c5e5c2ab1e30f6802d9c1c.bin create mode 100644 Library/ShaderCache/8/80bdffc7d49f8a758b5b1a3de66255c3.bin create mode 100644 Library/ShaderCache/8/8cd6d43093caef021fda96e506042801.bin create mode 100644 Library/ShaderCache/9/950f0b252903d424df2214a18da8cd00.bin create mode 100644 Library/ShaderCache/9/9a5af8262fc3a114b690c725a4dc1e11.bin create mode 100644 Library/ShaderCache/9/9bfb39235848b2f8833dc5392fdffd5e.bin create mode 100644 Library/ShaderCache/EditorEncounteredVariants create mode 100644 Library/ShaderCache/a/a120ad69fad6ec460a9d9516c7c52e9d.bin create mode 100644 Library/ShaderCache/b/b526986fffc5211f9e4829dca9b435ab.bin create mode 100644 Library/ShaderCache/b/b9f61b6c791cfc1e898bf4c62e52b830.bin create mode 100644 Library/ShaderCache/b/be41d0145d551f3a4502b99637311c8b.bin create mode 100644 Library/ShaderCache/b/be630b7bdfd8a48e504a8733e2ca993b.bin create mode 100644 Library/ShaderCache/c/c3e2230f20eb87adf0fbf735d49606d9.bin create mode 100644 Library/ShaderCache/c/c4cdcd3b72e995e9eb6da089b91f2bcc.bin create mode 100644 Library/ShaderCache/c/c76392117c83e26a967ca522165557e0.bin create mode 100644 Library/ShaderCache/d/d6409b5288682b86bc5ec8f8ad98b3fe.bin create mode 100644 Library/ShaderCache/d/dc4afe49b45b8aab7240ab76a0b48cb4.bin create mode 100644 Library/ShaderCache/e/e818670cb3953921ac0e44b3f4d9a79a.bin create mode 100644 Library/ShaderCache/e/e9795d3db5639c067c5fd255c72edd3d.bin create mode 100644 Library/ShaderCache/f/f177fc9dcc37299e857ea1db2d241763.bin create mode 100755 Library/SourceAssetDB create mode 100755 Library/SourceAssetDB-lock create mode 100644 Library/SpriteAtlasDatabase.asset create mode 100644 Library/StateCache/Hierarchy/e29b2b-mainStage.json create mode 100644 Library/StateCache/SceneView/f83069-mainStage.json create mode 100644 Library/expandedItems create mode 100644 Library/shadercompiler-UnityShaderCompiler0.log create mode 100644 Library/shadercompiler-UnityShaderCompiler1.log create mode 100644 Library/shadercompiler-UnityShaderCompiler2.log create mode 100644 Library/shadercompiler-UnityShaderCompiler3.log (limited to 'Library') diff --git a/Library/APIUpdater/project-dependencies.graph b/Library/APIUpdater/project-dependencies.graph new file mode 100644 index 0000000..22ddf88 Binary files /dev/null and b/Library/APIUpdater/project-dependencies.graph differ diff --git a/Library/AnnotationManager b/Library/AnnotationManager new file mode 100644 index 0000000..ff5a83f Binary files /dev/null and b/Library/AnnotationManager differ diff --git a/Library/ArtifactDB b/Library/ArtifactDB new file mode 100755 index 0000000..518f733 Binary files /dev/null and b/Library/ArtifactDB differ diff --git a/Library/ArtifactDB-lock b/Library/ArtifactDB-lock new file mode 100755 index 0000000..47d1c30 Binary files /dev/null and b/Library/ArtifactDB-lock differ diff --git a/Library/Artifacts/00/00057db738f056d550e298d6a53cd726 b/Library/Artifacts/00/00057db738f056d550e298d6a53cd726 new file mode 100644 index 0000000..96f59b0 Binary files /dev/null and b/Library/Artifacts/00/00057db738f056d550e298d6a53cd726 differ diff --git a/Library/Artifacts/00/002cb4312ad9fd9916e60de1eb344301 b/Library/Artifacts/00/002cb4312ad9fd9916e60de1eb344301 new file mode 100644 index 0000000..c0d193b Binary files /dev/null and b/Library/Artifacts/00/002cb4312ad9fd9916e60de1eb344301 differ diff --git a/Library/Artifacts/00/007a9842ee32a428f5f4104b140069cd b/Library/Artifacts/00/007a9842ee32a428f5f4104b140069cd new file mode 100644 index 0000000..515ae31 Binary files /dev/null and b/Library/Artifacts/00/007a9842ee32a428f5f4104b140069cd differ diff --git a/Library/Artifacts/00/00978da3657d69e759b45be12067f085 b/Library/Artifacts/00/00978da3657d69e759b45be12067f085 new file mode 100644 index 0000000..cbaa7cc Binary files /dev/null and b/Library/Artifacts/00/00978da3657d69e759b45be12067f085 differ diff --git a/Library/Artifacts/01/011b2ea3818580f75f672da61138bd0e b/Library/Artifacts/01/011b2ea3818580f75f672da61138bd0e new file mode 100644 index 0000000..0963c17 Binary files /dev/null and b/Library/Artifacts/01/011b2ea3818580f75f672da61138bd0e differ diff --git a/Library/Artifacts/01/0125e6ce260e631a71b0406d78d45235 b/Library/Artifacts/01/0125e6ce260e631a71b0406d78d45235 new file mode 100644 index 0000000..3eb1ad1 Binary files /dev/null and b/Library/Artifacts/01/0125e6ce260e631a71b0406d78d45235 differ diff --git a/Library/Artifacts/01/012c4e7ed80308b09d389444902dff1f b/Library/Artifacts/01/012c4e7ed80308b09d389444902dff1f new file mode 100644 index 0000000..b659762 Binary files /dev/null and b/Library/Artifacts/01/012c4e7ed80308b09d389444902dff1f differ diff --git a/Library/Artifacts/01/013bdbf75cffa5a60558e7d7517e2b2c b/Library/Artifacts/01/013bdbf75cffa5a60558e7d7517e2b2c new file mode 100644 index 0000000..4cf27e9 Binary files /dev/null and b/Library/Artifacts/01/013bdbf75cffa5a60558e7d7517e2b2c differ diff --git a/Library/Artifacts/01/018b78e182b8812bc26f30f2e3dcd2d4 b/Library/Artifacts/01/018b78e182b8812bc26f30f2e3dcd2d4 new file mode 100644 index 0000000..800ce9e Binary files /dev/null and b/Library/Artifacts/01/018b78e182b8812bc26f30f2e3dcd2d4 differ diff --git a/Library/Artifacts/01/018dc2a83789885821bca4451fe86b54 b/Library/Artifacts/01/018dc2a83789885821bca4451fe86b54 new file mode 100644 index 0000000..c6e7b7b Binary files /dev/null and b/Library/Artifacts/01/018dc2a83789885821bca4451fe86b54 differ diff --git a/Library/Artifacts/01/01a3065b876e2c7820d503fceeadbf8e b/Library/Artifacts/01/01a3065b876e2c7820d503fceeadbf8e new file mode 100644 index 0000000..b0c3216 Binary files /dev/null and b/Library/Artifacts/01/01a3065b876e2c7820d503fceeadbf8e differ diff --git a/Library/Artifacts/02/027a8245779a2c8cb22fb831344752f0 b/Library/Artifacts/02/027a8245779a2c8cb22fb831344752f0 new file mode 100644 index 0000000..0f4f1ae Binary files /dev/null and b/Library/Artifacts/02/027a8245779a2c8cb22fb831344752f0 differ diff --git a/Library/Artifacts/02/02c07103d8991a48e8905f63e20c0f1c b/Library/Artifacts/02/02c07103d8991a48e8905f63e20c0f1c new file mode 100644 index 0000000..5ef73be Binary files /dev/null and b/Library/Artifacts/02/02c07103d8991a48e8905f63e20c0f1c differ diff --git a/Library/Artifacts/02/02c7cbd8dd0a09e5b99891e32d47a24f b/Library/Artifacts/02/02c7cbd8dd0a09e5b99891e32d47a24f new file mode 100644 index 0000000..52ce792 Binary files /dev/null and b/Library/Artifacts/02/02c7cbd8dd0a09e5b99891e32d47a24f differ diff --git a/Library/Artifacts/02/02e947e710df71d4fa0f86cb2943bba7 b/Library/Artifacts/02/02e947e710df71d4fa0f86cb2943bba7 new file mode 100644 index 0000000..8c1b882 Binary files /dev/null and b/Library/Artifacts/02/02e947e710df71d4fa0f86cb2943bba7 differ diff --git a/Library/Artifacts/03/032b4497b3acd5be58c7251c1eab678e b/Library/Artifacts/03/032b4497b3acd5be58c7251c1eab678e new file mode 100644 index 0000000..1828fed Binary files /dev/null and b/Library/Artifacts/03/032b4497b3acd5be58c7251c1eab678e differ diff --git a/Library/Artifacts/03/03525d5240013130e1d48430a1eef426 b/Library/Artifacts/03/03525d5240013130e1d48430a1eef426 new file mode 100644 index 0000000..3ea6003 Binary files /dev/null and b/Library/Artifacts/03/03525d5240013130e1d48430a1eef426 differ diff --git a/Library/Artifacts/03/035a2e3d7a47b2f21ea6b95966f93876 b/Library/Artifacts/03/035a2e3d7a47b2f21ea6b95966f93876 new file mode 100644 index 0000000..ab8b4f6 Binary files /dev/null and b/Library/Artifacts/03/035a2e3d7a47b2f21ea6b95966f93876 differ diff --git a/Library/Artifacts/03/0376c6b0bae99335d035ab785ba23459 b/Library/Artifacts/03/0376c6b0bae99335d035ab785ba23459 new file mode 100644 index 0000000..8f6687a Binary files /dev/null and b/Library/Artifacts/03/0376c6b0bae99335d035ab785ba23459 differ diff --git a/Library/Artifacts/03/0395bd6376641fdbdf0b957f9b85bb2c b/Library/Artifacts/03/0395bd6376641fdbdf0b957f9b85bb2c new file mode 100644 index 0000000..b8145cb Binary files /dev/null and b/Library/Artifacts/03/0395bd6376641fdbdf0b957f9b85bb2c differ diff --git a/Library/Artifacts/03/03b5228ce96bc9a07a5b11940915c23d b/Library/Artifacts/03/03b5228ce96bc9a07a5b11940915c23d new file mode 100644 index 0000000..931c96c Binary files /dev/null and b/Library/Artifacts/03/03b5228ce96bc9a07a5b11940915c23d differ diff --git a/Library/Artifacts/03/03e58ae902c8cb7265ffb7c75d95cdd6 b/Library/Artifacts/03/03e58ae902c8cb7265ffb7c75d95cdd6 new file mode 100644 index 0000000..a1cb964 Binary files /dev/null and b/Library/Artifacts/03/03e58ae902c8cb7265ffb7c75d95cdd6 differ diff --git a/Library/Artifacts/04/040b0170638924ac4b43df4428991b94 b/Library/Artifacts/04/040b0170638924ac4b43df4428991b94 new file mode 100644 index 0000000..2e0d011 Binary files /dev/null and b/Library/Artifacts/04/040b0170638924ac4b43df4428991b94 differ diff --git a/Library/Artifacts/04/04426e5f1d9f70f2a34fd2d4f969be49 b/Library/Artifacts/04/04426e5f1d9f70f2a34fd2d4f969be49 new file mode 100644 index 0000000..0b87e7d Binary files /dev/null and b/Library/Artifacts/04/04426e5f1d9f70f2a34fd2d4f969be49 differ diff --git a/Library/Artifacts/04/046165bfb2141ae237c6d64498824ceb b/Library/Artifacts/04/046165bfb2141ae237c6d64498824ceb new file mode 100644 index 0000000..73e9e0a Binary files /dev/null and b/Library/Artifacts/04/046165bfb2141ae237c6d64498824ceb differ diff --git a/Library/Artifacts/04/049981f0049adb13c09fbb4d4d9e4947 b/Library/Artifacts/04/049981f0049adb13c09fbb4d4d9e4947 new file mode 100644 index 0000000..db05d87 Binary files /dev/null and b/Library/Artifacts/04/049981f0049adb13c09fbb4d4d9e4947 differ diff --git a/Library/Artifacts/04/04b494b0c09380e78793e0264b5a33fc b/Library/Artifacts/04/04b494b0c09380e78793e0264b5a33fc new file mode 100644 index 0000000..71d0cff Binary files /dev/null and b/Library/Artifacts/04/04b494b0c09380e78793e0264b5a33fc differ diff --git a/Library/Artifacts/04/04f15bcaf3f90042afa1853ec71d03c2 b/Library/Artifacts/04/04f15bcaf3f90042afa1853ec71d03c2 new file mode 100644 index 0000000..f85a3d3 Binary files /dev/null and b/Library/Artifacts/04/04f15bcaf3f90042afa1853ec71d03c2 differ diff --git a/Library/Artifacts/04/04fe4063e0019afd5133772b69de9f54 b/Library/Artifacts/04/04fe4063e0019afd5133772b69de9f54 new file mode 100644 index 0000000..3b5dd6e Binary files /dev/null and b/Library/Artifacts/04/04fe4063e0019afd5133772b69de9f54 differ diff --git a/Library/Artifacts/05/0536ee5899bb04623ac87c74a6bebc45 b/Library/Artifacts/05/0536ee5899bb04623ac87c74a6bebc45 new file mode 100644 index 0000000..f6cdacb Binary files /dev/null and b/Library/Artifacts/05/0536ee5899bb04623ac87c74a6bebc45 differ diff --git a/Library/Artifacts/05/055e70c6f791a12e38bfbd078f426a32 b/Library/Artifacts/05/055e70c6f791a12e38bfbd078f426a32 new file mode 100644 index 0000000..d1d4170 Binary files /dev/null and b/Library/Artifacts/05/055e70c6f791a12e38bfbd078f426a32 differ diff --git a/Library/Artifacts/05/05a115f862ce77cc97d125c994c1e6b9 b/Library/Artifacts/05/05a115f862ce77cc97d125c994c1e6b9 new file mode 100644 index 0000000..5295700 Binary files /dev/null and b/Library/Artifacts/05/05a115f862ce77cc97d125c994c1e6b9 differ diff --git a/Library/Artifacts/06/061166fa218424a7a9edd8ceb3e56811 b/Library/Artifacts/06/061166fa218424a7a9edd8ceb3e56811 new file mode 100644 index 0000000..777393d Binary files /dev/null and b/Library/Artifacts/06/061166fa218424a7a9edd8ceb3e56811 differ diff --git a/Library/Artifacts/06/06151ebc216634ca35cc7a359bb9a643 b/Library/Artifacts/06/06151ebc216634ca35cc7a359bb9a643 new file mode 100644 index 0000000..19fc139 Binary files /dev/null and b/Library/Artifacts/06/06151ebc216634ca35cc7a359bb9a643 differ diff --git a/Library/Artifacts/06/061919e7a8031897fad032a3cbdbe783 b/Library/Artifacts/06/061919e7a8031897fad032a3cbdbe783 new file mode 100644 index 0000000..27118c3 Binary files /dev/null and b/Library/Artifacts/06/061919e7a8031897fad032a3cbdbe783 differ diff --git a/Library/Artifacts/06/068692a47ecf4a3456501b41d82af735 b/Library/Artifacts/06/068692a47ecf4a3456501b41d82af735 new file mode 100644 index 0000000..b02ea68 Binary files /dev/null and b/Library/Artifacts/06/068692a47ecf4a3456501b41d82af735 differ diff --git a/Library/Artifacts/06/068e84855cd24a63f2a46b2977e24ce0 b/Library/Artifacts/06/068e84855cd24a63f2a46b2977e24ce0 new file mode 100644 index 0000000..d3ad9d7 Binary files /dev/null and b/Library/Artifacts/06/068e84855cd24a63f2a46b2977e24ce0 differ diff --git a/Library/Artifacts/06/069903a16064b2ed84794ee36b093274 b/Library/Artifacts/06/069903a16064b2ed84794ee36b093274 new file mode 100644 index 0000000..59212ce Binary files /dev/null and b/Library/Artifacts/06/069903a16064b2ed84794ee36b093274 differ diff --git a/Library/Artifacts/06/06b40e7c7af436ba6f3c22b13e93e30a b/Library/Artifacts/06/06b40e7c7af436ba6f3c22b13e93e30a new file mode 100644 index 0000000..d7641c5 Binary files /dev/null and b/Library/Artifacts/06/06b40e7c7af436ba6f3c22b13e93e30a differ diff --git a/Library/Artifacts/06/06f8205073103b50fe275b6ef0724194 b/Library/Artifacts/06/06f8205073103b50fe275b6ef0724194 new file mode 100644 index 0000000..27480ac Binary files /dev/null and b/Library/Artifacts/06/06f8205073103b50fe275b6ef0724194 differ diff --git a/Library/Artifacts/07/0702464e97adc0973f9586b75b73cb51 b/Library/Artifacts/07/0702464e97adc0973f9586b75b73cb51 new file mode 100644 index 0000000..8ed122e Binary files /dev/null and b/Library/Artifacts/07/0702464e97adc0973f9586b75b73cb51 differ diff --git a/Library/Artifacts/07/070612484348d06ed5ad9e722523dccc b/Library/Artifacts/07/070612484348d06ed5ad9e722523dccc new file mode 100644 index 0000000..50e42d6 Binary files /dev/null and b/Library/Artifacts/07/070612484348d06ed5ad9e722523dccc differ diff --git a/Library/Artifacts/07/0709a6e3753ab3d84d81c38364910215 b/Library/Artifacts/07/0709a6e3753ab3d84d81c38364910215 new file mode 100644 index 0000000..ed38fd5 Binary files /dev/null and b/Library/Artifacts/07/0709a6e3753ab3d84d81c38364910215 differ diff --git a/Library/Artifacts/07/072f6ebfdb73afcdf5b9adc41e41b183 b/Library/Artifacts/07/072f6ebfdb73afcdf5b9adc41e41b183 new file mode 100644 index 0000000..6884feb Binary files /dev/null and b/Library/Artifacts/07/072f6ebfdb73afcdf5b9adc41e41b183 differ diff --git a/Library/Artifacts/07/0731a3ea702fbf1acb78de659ffd6044 b/Library/Artifacts/07/0731a3ea702fbf1acb78de659ffd6044 new file mode 100644 index 0000000..bfee928 Binary files /dev/null and b/Library/Artifacts/07/0731a3ea702fbf1acb78de659ffd6044 differ diff --git a/Library/Artifacts/07/075a33faff6e5f690c2449c1541f1c7f b/Library/Artifacts/07/075a33faff6e5f690c2449c1541f1c7f new file mode 100644 index 0000000..54b002d Binary files /dev/null and b/Library/Artifacts/07/075a33faff6e5f690c2449c1541f1c7f differ diff --git a/Library/Artifacts/07/0793b03342f27777cdbd17c5c419e32b b/Library/Artifacts/07/0793b03342f27777cdbd17c5c419e32b new file mode 100644 index 0000000..e4d7510 Binary files /dev/null and b/Library/Artifacts/07/0793b03342f27777cdbd17c5c419e32b differ diff --git a/Library/Artifacts/07/07c3ce7c307751aac70a694dcec8ed1d b/Library/Artifacts/07/07c3ce7c307751aac70a694dcec8ed1d new file mode 100644 index 0000000..7ac2fa0 Binary files /dev/null and b/Library/Artifacts/07/07c3ce7c307751aac70a694dcec8ed1d differ diff --git a/Library/Artifacts/07/07c989d1c23c9285ba66b54e342f6e20 b/Library/Artifacts/07/07c989d1c23c9285ba66b54e342f6e20 new file mode 100644 index 0000000..c4ca8a7 Binary files /dev/null and b/Library/Artifacts/07/07c989d1c23c9285ba66b54e342f6e20 differ diff --git a/Library/Artifacts/07/07eee7427ee5dcd029b87bc41714cf42 b/Library/Artifacts/07/07eee7427ee5dcd029b87bc41714cf42 new file mode 100644 index 0000000..d6a6183 Binary files /dev/null and b/Library/Artifacts/07/07eee7427ee5dcd029b87bc41714cf42 differ diff --git a/Library/Artifacts/07/07f33fac7355977c14024cf1ce48cbd7 b/Library/Artifacts/07/07f33fac7355977c14024cf1ce48cbd7 new file mode 100644 index 0000000..ce8e96e Binary files /dev/null and b/Library/Artifacts/07/07f33fac7355977c14024cf1ce48cbd7 differ diff --git a/Library/Artifacts/08/082623513202133b6a3eb7502e9b7110 b/Library/Artifacts/08/082623513202133b6a3eb7502e9b7110 new file mode 100644 index 0000000..92705f0 Binary files /dev/null and b/Library/Artifacts/08/082623513202133b6a3eb7502e9b7110 differ diff --git a/Library/Artifacts/08/084eb500b6236078dea4082745ee0d04 b/Library/Artifacts/08/084eb500b6236078dea4082745ee0d04 new file mode 100644 index 0000000..7af734f Binary files /dev/null and b/Library/Artifacts/08/084eb500b6236078dea4082745ee0d04 differ diff --git a/Library/Artifacts/08/08570d2ee3f82596518e2dcea99220d7 b/Library/Artifacts/08/08570d2ee3f82596518e2dcea99220d7 new file mode 100644 index 0000000..21df490 Binary files /dev/null and b/Library/Artifacts/08/08570d2ee3f82596518e2dcea99220d7 differ diff --git a/Library/Artifacts/08/08794a9a727465a58c545bccd09992e3 b/Library/Artifacts/08/08794a9a727465a58c545bccd09992e3 new file mode 100644 index 0000000..f75bc2a Binary files /dev/null and b/Library/Artifacts/08/08794a9a727465a58c545bccd09992e3 differ diff --git a/Library/Artifacts/08/088c981647850502c4357ab0dc68deee b/Library/Artifacts/08/088c981647850502c4357ab0dc68deee new file mode 100644 index 0000000..6c8493a Binary files /dev/null and b/Library/Artifacts/08/088c981647850502c4357ab0dc68deee differ diff --git a/Library/Artifacts/08/088e4853a1994d32c485b273c2434956 b/Library/Artifacts/08/088e4853a1994d32c485b273c2434956 new file mode 100644 index 0000000..97c96c5 Binary files /dev/null and b/Library/Artifacts/08/088e4853a1994d32c485b273c2434956 differ diff --git a/Library/Artifacts/08/08ae906a6245c03e157dd8cb5d8c6ec9 b/Library/Artifacts/08/08ae906a6245c03e157dd8cb5d8c6ec9 new file mode 100644 index 0000000..fcfe871 Binary files /dev/null and b/Library/Artifacts/08/08ae906a6245c03e157dd8cb5d8c6ec9 differ diff --git a/Library/Artifacts/08/08b17d86c6a39b43dd775241d7338a7c b/Library/Artifacts/08/08b17d86c6a39b43dd775241d7338a7c new file mode 100644 index 0000000..7833c0a Binary files /dev/null and b/Library/Artifacts/08/08b17d86c6a39b43dd775241d7338a7c differ diff --git a/Library/Artifacts/08/08dcc3c7f28d9867db4e6d7e439b59e5 b/Library/Artifacts/08/08dcc3c7f28d9867db4e6d7e439b59e5 new file mode 100644 index 0000000..917dbe8 Binary files /dev/null and b/Library/Artifacts/08/08dcc3c7f28d9867db4e6d7e439b59e5 differ diff --git a/Library/Artifacts/08/08eb76de12610620abe9aad42068fcf1 b/Library/Artifacts/08/08eb76de12610620abe9aad42068fcf1 new file mode 100644 index 0000000..778cacf Binary files /dev/null and b/Library/Artifacts/08/08eb76de12610620abe9aad42068fcf1 differ diff --git a/Library/Artifacts/09/093c0bda42b3532f0e7dfb39d8929190 b/Library/Artifacts/09/093c0bda42b3532f0e7dfb39d8929190 new file mode 100644 index 0000000..d322420 Binary files /dev/null and b/Library/Artifacts/09/093c0bda42b3532f0e7dfb39d8929190 differ diff --git a/Library/Artifacts/09/094a935b1350759174999e527a022287 b/Library/Artifacts/09/094a935b1350759174999e527a022287 new file mode 100644 index 0000000..6ff0cdf Binary files /dev/null and b/Library/Artifacts/09/094a935b1350759174999e527a022287 differ diff --git a/Library/Artifacts/09/09a3dd7fb1e84858de1c8fd2a6c3bd16 b/Library/Artifacts/09/09a3dd7fb1e84858de1c8fd2a6c3bd16 new file mode 100644 index 0000000..ea0c11d Binary files /dev/null and b/Library/Artifacts/09/09a3dd7fb1e84858de1c8fd2a6c3bd16 differ diff --git a/Library/Artifacts/09/09aa8a2a01690df968c6cc97f0921cb3 b/Library/Artifacts/09/09aa8a2a01690df968c6cc97f0921cb3 new file mode 100644 index 0000000..4fda75e Binary files /dev/null and b/Library/Artifacts/09/09aa8a2a01690df968c6cc97f0921cb3 differ diff --git a/Library/Artifacts/09/09d078d15788a303c115b8deb636a4d4 b/Library/Artifacts/09/09d078d15788a303c115b8deb636a4d4 new file mode 100644 index 0000000..c801f56 Binary files /dev/null and b/Library/Artifacts/09/09d078d15788a303c115b8deb636a4d4 differ diff --git a/Library/Artifacts/0a/0a1eb237ef8f1469e36f1c3c32e4ce0a b/Library/Artifacts/0a/0a1eb237ef8f1469e36f1c3c32e4ce0a new file mode 100644 index 0000000..6c2e571 Binary files /dev/null and b/Library/Artifacts/0a/0a1eb237ef8f1469e36f1c3c32e4ce0a differ diff --git a/Library/Artifacts/0a/0a3145d8872c01a9c7c534fdfee8fbf2 b/Library/Artifacts/0a/0a3145d8872c01a9c7c534fdfee8fbf2 new file mode 100644 index 0000000..dcd6f64 Binary files /dev/null and b/Library/Artifacts/0a/0a3145d8872c01a9c7c534fdfee8fbf2 differ diff --git a/Library/Artifacts/0a/0a5562c9a733f014ce21de07dac77c70 b/Library/Artifacts/0a/0a5562c9a733f014ce21de07dac77c70 new file mode 100644 index 0000000..c7dbb36 Binary files /dev/null and b/Library/Artifacts/0a/0a5562c9a733f014ce21de07dac77c70 differ diff --git a/Library/Artifacts/0a/0aca69c1956b6d260e02810c3df57c91 b/Library/Artifacts/0a/0aca69c1956b6d260e02810c3df57c91 new file mode 100644 index 0000000..579eabc Binary files /dev/null and b/Library/Artifacts/0a/0aca69c1956b6d260e02810c3df57c91 differ diff --git a/Library/Artifacts/0b/0b5c586616b5a75ec4c22a8830edae72 b/Library/Artifacts/0b/0b5c586616b5a75ec4c22a8830edae72 new file mode 100644 index 0000000..2b03594 Binary files /dev/null and b/Library/Artifacts/0b/0b5c586616b5a75ec4c22a8830edae72 differ diff --git a/Library/Artifacts/0b/0b6a1af4e0209cebb3da8e66ece56e91 b/Library/Artifacts/0b/0b6a1af4e0209cebb3da8e66ece56e91 new file mode 100644 index 0000000..5d04f2b Binary files /dev/null and b/Library/Artifacts/0b/0b6a1af4e0209cebb3da8e66ece56e91 differ diff --git a/Library/Artifacts/0b/0bd782678a2d7e9befcf43aa8f933131 b/Library/Artifacts/0b/0bd782678a2d7e9befcf43aa8f933131 new file mode 100644 index 0000000..02b235f Binary files /dev/null and b/Library/Artifacts/0b/0bd782678a2d7e9befcf43aa8f933131 differ diff --git a/Library/Artifacts/0b/0be737900454458b0a970b6b5f649f29 b/Library/Artifacts/0b/0be737900454458b0a970b6b5f649f29 new file mode 100644 index 0000000..5f84713 Binary files /dev/null and b/Library/Artifacts/0b/0be737900454458b0a970b6b5f649f29 differ diff --git a/Library/Artifacts/0b/0be8d3753cedc192223060fb402f6787 b/Library/Artifacts/0b/0be8d3753cedc192223060fb402f6787 new file mode 100644 index 0000000..9428ee2 Binary files /dev/null and b/Library/Artifacts/0b/0be8d3753cedc192223060fb402f6787 differ diff --git a/Library/Artifacts/0b/0bf713f90029202a2e9e134152ac0b4d b/Library/Artifacts/0b/0bf713f90029202a2e9e134152ac0b4d new file mode 100644 index 0000000..b98477a Binary files /dev/null and b/Library/Artifacts/0b/0bf713f90029202a2e9e134152ac0b4d differ diff --git a/Library/Artifacts/0c/0c655749df0e52e3188739fd81f110b1 b/Library/Artifacts/0c/0c655749df0e52e3188739fd81f110b1 new file mode 100644 index 0000000..71d01de Binary files /dev/null and b/Library/Artifacts/0c/0c655749df0e52e3188739fd81f110b1 differ diff --git a/Library/Artifacts/0c/0c93f18b8e5f9005f21ceae19588d158 b/Library/Artifacts/0c/0c93f18b8e5f9005f21ceae19588d158 new file mode 100644 index 0000000..019e876 Binary files /dev/null and b/Library/Artifacts/0c/0c93f18b8e5f9005f21ceae19588d158 differ diff --git a/Library/Artifacts/0c/0c9e395db919c9e8b909bdbd98747c9c b/Library/Artifacts/0c/0c9e395db919c9e8b909bdbd98747c9c new file mode 100644 index 0000000..faccda3 Binary files /dev/null and b/Library/Artifacts/0c/0c9e395db919c9e8b909bdbd98747c9c differ diff --git a/Library/Artifacts/0c/0cb6c10b6bdf11ac2a5353745b243e08 b/Library/Artifacts/0c/0cb6c10b6bdf11ac2a5353745b243e08 new file mode 100644 index 0000000..9a11253 Binary files /dev/null and b/Library/Artifacts/0c/0cb6c10b6bdf11ac2a5353745b243e08 differ diff --git a/Library/Artifacts/0c/0cf0178a43b48004b8fe00cee767da54 b/Library/Artifacts/0c/0cf0178a43b48004b8fe00cee767da54 new file mode 100644 index 0000000..316b46f Binary files /dev/null and b/Library/Artifacts/0c/0cf0178a43b48004b8fe00cee767da54 differ diff --git a/Library/Artifacts/0d/0d0233d92797a51725382048070bac0a b/Library/Artifacts/0d/0d0233d92797a51725382048070bac0a new file mode 100644 index 0000000..01e12cf Binary files /dev/null and b/Library/Artifacts/0d/0d0233d92797a51725382048070bac0a differ diff --git a/Library/Artifacts/0d/0d5ce261b7e45cc8899243d8a6f7e87e b/Library/Artifacts/0d/0d5ce261b7e45cc8899243d8a6f7e87e new file mode 100644 index 0000000..d62f0c6 Binary files /dev/null and b/Library/Artifacts/0d/0d5ce261b7e45cc8899243d8a6f7e87e differ diff --git a/Library/Artifacts/0d/0d743c0f5a375bc3ca888b8867006e49 b/Library/Artifacts/0d/0d743c0f5a375bc3ca888b8867006e49 new file mode 100644 index 0000000..e05f0a0 Binary files /dev/null and b/Library/Artifacts/0d/0d743c0f5a375bc3ca888b8867006e49 differ diff --git a/Library/Artifacts/0d/0d7b7d099d82456f43844ae9eaa78e62 b/Library/Artifacts/0d/0d7b7d099d82456f43844ae9eaa78e62 new file mode 100644 index 0000000..3f93384 Binary files /dev/null and b/Library/Artifacts/0d/0d7b7d099d82456f43844ae9eaa78e62 differ diff --git a/Library/Artifacts/0d/0d9f6e4cbfb4d3982f02e0323d214131 b/Library/Artifacts/0d/0d9f6e4cbfb4d3982f02e0323d214131 new file mode 100644 index 0000000..83180cd Binary files /dev/null and b/Library/Artifacts/0d/0d9f6e4cbfb4d3982f02e0323d214131 differ diff --git a/Library/Artifacts/0d/0dcc5d1909a7460bcbbaee1b7b04e7b2 b/Library/Artifacts/0d/0dcc5d1909a7460bcbbaee1b7b04e7b2 new file mode 100644 index 0000000..bba0f2a Binary files /dev/null and b/Library/Artifacts/0d/0dcc5d1909a7460bcbbaee1b7b04e7b2 differ diff --git a/Library/Artifacts/0d/0de61355159f594a8f3ab14ad65c4146 b/Library/Artifacts/0d/0de61355159f594a8f3ab14ad65c4146 new file mode 100644 index 0000000..5d5f867 Binary files /dev/null and b/Library/Artifacts/0d/0de61355159f594a8f3ab14ad65c4146 differ diff --git a/Library/Artifacts/0e/0e044323b59ede42f254977e3873e646 b/Library/Artifacts/0e/0e044323b59ede42f254977e3873e646 new file mode 100644 index 0000000..04382b4 Binary files /dev/null and b/Library/Artifacts/0e/0e044323b59ede42f254977e3873e646 differ diff --git a/Library/Artifacts/0e/0e0de6c282e27fe18bd91f9e18fca7cd b/Library/Artifacts/0e/0e0de6c282e27fe18bd91f9e18fca7cd new file mode 100644 index 0000000..02d999b Binary files /dev/null and b/Library/Artifacts/0e/0e0de6c282e27fe18bd91f9e18fca7cd differ diff --git a/Library/Artifacts/0e/0e3651aa8232fa11c3e0a521dcc3767d b/Library/Artifacts/0e/0e3651aa8232fa11c3e0a521dcc3767d new file mode 100644 index 0000000..0a6d2ef Binary files /dev/null and b/Library/Artifacts/0e/0e3651aa8232fa11c3e0a521dcc3767d differ diff --git a/Library/Artifacts/0e/0e880c7381507965ef9a608559f90061 b/Library/Artifacts/0e/0e880c7381507965ef9a608559f90061 new file mode 100644 index 0000000..eb4d4c5 Binary files /dev/null and b/Library/Artifacts/0e/0e880c7381507965ef9a608559f90061 differ diff --git a/Library/Artifacts/0e/0ea624d8c8906705e986718437d624bf b/Library/Artifacts/0e/0ea624d8c8906705e986718437d624bf new file mode 100644 index 0000000..098ece4 Binary files /dev/null and b/Library/Artifacts/0e/0ea624d8c8906705e986718437d624bf differ diff --git a/Library/Artifacts/0e/0ec0feade09aba34d8d0ebb05aa662b4 b/Library/Artifacts/0e/0ec0feade09aba34d8d0ebb05aa662b4 new file mode 100644 index 0000000..0a764f2 Binary files /dev/null and b/Library/Artifacts/0e/0ec0feade09aba34d8d0ebb05aa662b4 differ diff --git a/Library/Artifacts/0f/0f227d1c9377c78e8bea737df8513b31 b/Library/Artifacts/0f/0f227d1c9377c78e8bea737df8513b31 new file mode 100644 index 0000000..2949616 Binary files /dev/null and b/Library/Artifacts/0f/0f227d1c9377c78e8bea737df8513b31 differ diff --git a/Library/Artifacts/0f/0f48605975c974e0bc6aaf8389808c58 b/Library/Artifacts/0f/0f48605975c974e0bc6aaf8389808c58 new file mode 100644 index 0000000..ef9d3f8 Binary files /dev/null and b/Library/Artifacts/0f/0f48605975c974e0bc6aaf8389808c58 differ diff --git a/Library/Artifacts/0f/0f4a43ea026a025aa5739e744719d5c9 b/Library/Artifacts/0f/0f4a43ea026a025aa5739e744719d5c9 new file mode 100644 index 0000000..1ba64f8 Binary files /dev/null and b/Library/Artifacts/0f/0f4a43ea026a025aa5739e744719d5c9 differ diff --git a/Library/Artifacts/0f/0f888294cbe1e68d3f4ecfe0e0878c50 b/Library/Artifacts/0f/0f888294cbe1e68d3f4ecfe0e0878c50 new file mode 100644 index 0000000..8e094f4 Binary files /dev/null and b/Library/Artifacts/0f/0f888294cbe1e68d3f4ecfe0e0878c50 differ diff --git a/Library/Artifacts/0f/0f91783f6a0131c0527a892bf77f672e b/Library/Artifacts/0f/0f91783f6a0131c0527a892bf77f672e new file mode 100644 index 0000000..0a07fb7 Binary files /dev/null and b/Library/Artifacts/0f/0f91783f6a0131c0527a892bf77f672e differ diff --git a/Library/Artifacts/0f/0fb3aa124f56798451065780a8223d8c b/Library/Artifacts/0f/0fb3aa124f56798451065780a8223d8c new file mode 100644 index 0000000..f8ead19 Binary files /dev/null and b/Library/Artifacts/0f/0fb3aa124f56798451065780a8223d8c differ diff --git a/Library/Artifacts/10/10177a5cf1a0b4187d5905de209c9b38 b/Library/Artifacts/10/10177a5cf1a0b4187d5905de209c9b38 new file mode 100644 index 0000000..44d8930 Binary files /dev/null and b/Library/Artifacts/10/10177a5cf1a0b4187d5905de209c9b38 differ diff --git a/Library/Artifacts/10/1017c2bae733d360effe1e2bc7f2c682 b/Library/Artifacts/10/1017c2bae733d360effe1e2bc7f2c682 new file mode 100644 index 0000000..498e9a4 Binary files /dev/null and b/Library/Artifacts/10/1017c2bae733d360effe1e2bc7f2c682 differ diff --git a/Library/Artifacts/10/103cb804c10848ef07e0f24a54d219f9 b/Library/Artifacts/10/103cb804c10848ef07e0f24a54d219f9 new file mode 100644 index 0000000..1e45ad0 Binary files /dev/null and b/Library/Artifacts/10/103cb804c10848ef07e0f24a54d219f9 differ diff --git a/Library/Artifacts/10/103ffb2582b8071ce0b25e0cc81e7704 b/Library/Artifacts/10/103ffb2582b8071ce0b25e0cc81e7704 new file mode 100644 index 0000000..132fdb0 Binary files /dev/null and b/Library/Artifacts/10/103ffb2582b8071ce0b25e0cc81e7704 differ diff --git a/Library/Artifacts/10/105a930bba48f3817c7d58223138b3fb b/Library/Artifacts/10/105a930bba48f3817c7d58223138b3fb new file mode 100644 index 0000000..c10427b Binary files /dev/null and b/Library/Artifacts/10/105a930bba48f3817c7d58223138b3fb differ diff --git a/Library/Artifacts/10/105ae5716c6fce261ac6a13243455f3e b/Library/Artifacts/10/105ae5716c6fce261ac6a13243455f3e new file mode 100644 index 0000000..571643c Binary files /dev/null and b/Library/Artifacts/10/105ae5716c6fce261ac6a13243455f3e differ diff --git a/Library/Artifacts/10/1093f012c61e27af69cb5a1f77738d61 b/Library/Artifacts/10/1093f012c61e27af69cb5a1f77738d61 new file mode 100644 index 0000000..d6b0d75 Binary files /dev/null and b/Library/Artifacts/10/1093f012c61e27af69cb5a1f77738d61 differ diff --git a/Library/Artifacts/11/114b9ce99b5928ba4f7a41fe5711cc07 b/Library/Artifacts/11/114b9ce99b5928ba4f7a41fe5711cc07 new file mode 100644 index 0000000..a34e1df Binary files /dev/null and b/Library/Artifacts/11/114b9ce99b5928ba4f7a41fe5711cc07 differ diff --git a/Library/Artifacts/11/1164db785c4922ea3ee67734cfe828c9 b/Library/Artifacts/11/1164db785c4922ea3ee67734cfe828c9 new file mode 100644 index 0000000..d482158 Binary files /dev/null and b/Library/Artifacts/11/1164db785c4922ea3ee67734cfe828c9 differ diff --git a/Library/Artifacts/11/1168fef792db4334f912d6c5d1ee2a47 b/Library/Artifacts/11/1168fef792db4334f912d6c5d1ee2a47 new file mode 100644 index 0000000..85edd56 Binary files /dev/null and b/Library/Artifacts/11/1168fef792db4334f912d6c5d1ee2a47 differ diff --git a/Library/Artifacts/11/116a377105d9b6f696b1f5724dc0b3ab b/Library/Artifacts/11/116a377105d9b6f696b1f5724dc0b3ab new file mode 100644 index 0000000..5bfd292 Binary files /dev/null and b/Library/Artifacts/11/116a377105d9b6f696b1f5724dc0b3ab differ diff --git a/Library/Artifacts/11/116dae3f447d35a386a452bb91ec9173 b/Library/Artifacts/11/116dae3f447d35a386a452bb91ec9173 new file mode 100644 index 0000000..971f412 Binary files /dev/null and b/Library/Artifacts/11/116dae3f447d35a386a452bb91ec9173 differ diff --git a/Library/Artifacts/11/1174eff0d80d77fec06d4f0260e81308 b/Library/Artifacts/11/1174eff0d80d77fec06d4f0260e81308 new file mode 100644 index 0000000..3d88a6d Binary files /dev/null and b/Library/Artifacts/11/1174eff0d80d77fec06d4f0260e81308 differ diff --git a/Library/Artifacts/11/11893022c46645582cd6743e65cbae72 b/Library/Artifacts/11/11893022c46645582cd6743e65cbae72 new file mode 100644 index 0000000..6d9b313 Binary files /dev/null and b/Library/Artifacts/11/11893022c46645582cd6743e65cbae72 differ diff --git a/Library/Artifacts/11/11e57d8b048a42859ca0ba0d36868aff b/Library/Artifacts/11/11e57d8b048a42859ca0ba0d36868aff new file mode 100644 index 0000000..6ec934a Binary files /dev/null and b/Library/Artifacts/11/11e57d8b048a42859ca0ba0d36868aff differ diff --git a/Library/Artifacts/12/1256833e9c5fc4cc47cfcf5187eb7f33 b/Library/Artifacts/12/1256833e9c5fc4cc47cfcf5187eb7f33 new file mode 100644 index 0000000..9e46d14 Binary files /dev/null and b/Library/Artifacts/12/1256833e9c5fc4cc47cfcf5187eb7f33 differ diff --git a/Library/Artifacts/13/130bf734cdd1dfa4a9bdd219379170f3 b/Library/Artifacts/13/130bf734cdd1dfa4a9bdd219379170f3 new file mode 100644 index 0000000..50c3ced Binary files /dev/null and b/Library/Artifacts/13/130bf734cdd1dfa4a9bdd219379170f3 differ diff --git a/Library/Artifacts/13/13320a2a3a6372e0b4f75b0a90dfcaef b/Library/Artifacts/13/13320a2a3a6372e0b4f75b0a90dfcaef new file mode 100644 index 0000000..45094ed Binary files /dev/null and b/Library/Artifacts/13/13320a2a3a6372e0b4f75b0a90dfcaef differ diff --git a/Library/Artifacts/13/133e212eb8a27d33ad7a43d5c404b73d b/Library/Artifacts/13/133e212eb8a27d33ad7a43d5c404b73d new file mode 100644 index 0000000..285d371 Binary files /dev/null and b/Library/Artifacts/13/133e212eb8a27d33ad7a43d5c404b73d differ diff --git a/Library/Artifacts/13/136c847b80044369b222529873c23cb3 b/Library/Artifacts/13/136c847b80044369b222529873c23cb3 new file mode 100644 index 0000000..88f22a1 Binary files /dev/null and b/Library/Artifacts/13/136c847b80044369b222529873c23cb3 differ diff --git a/Library/Artifacts/13/1370c0969eb35c20b7f50041f2f0fcd8 b/Library/Artifacts/13/1370c0969eb35c20b7f50041f2f0fcd8 new file mode 100644 index 0000000..fa07a08 Binary files /dev/null and b/Library/Artifacts/13/1370c0969eb35c20b7f50041f2f0fcd8 differ diff --git a/Library/Artifacts/13/13a0de93d84f07047a060d4bd63473f8 b/Library/Artifacts/13/13a0de93d84f07047a060d4bd63473f8 new file mode 100644 index 0000000..a5724cc Binary files /dev/null and b/Library/Artifacts/13/13a0de93d84f07047a060d4bd63473f8 differ diff --git a/Library/Artifacts/13/13be4eea363d75a6fbd00bfb2cff34ff b/Library/Artifacts/13/13be4eea363d75a6fbd00bfb2cff34ff new file mode 100644 index 0000000..873ff0a Binary files /dev/null and b/Library/Artifacts/13/13be4eea363d75a6fbd00bfb2cff34ff differ diff --git a/Library/Artifacts/13/13cbea42a4cde3d417a23940955deef6 b/Library/Artifacts/13/13cbea42a4cde3d417a23940955deef6 new file mode 100644 index 0000000..1974474 Binary files /dev/null and b/Library/Artifacts/13/13cbea42a4cde3d417a23940955deef6 differ diff --git a/Library/Artifacts/13/13cbfb820e9cf9b87f66b7578a63057f b/Library/Artifacts/13/13cbfb820e9cf9b87f66b7578a63057f new file mode 100644 index 0000000..4201c02 Binary files /dev/null and b/Library/Artifacts/13/13cbfb820e9cf9b87f66b7578a63057f differ diff --git a/Library/Artifacts/13/13cd86d4d7ec86cf4e2e3adbcfded114 b/Library/Artifacts/13/13cd86d4d7ec86cf4e2e3adbcfded114 new file mode 100644 index 0000000..169cad1 Binary files /dev/null and b/Library/Artifacts/13/13cd86d4d7ec86cf4e2e3adbcfded114 differ diff --git a/Library/Artifacts/14/14297d792a3c90f72a690b61672de236 b/Library/Artifacts/14/14297d792a3c90f72a690b61672de236 new file mode 100644 index 0000000..00dfb48 Binary files /dev/null and b/Library/Artifacts/14/14297d792a3c90f72a690b61672de236 differ diff --git a/Library/Artifacts/14/145e3ea1d8533e56e8100c2e2a71ab36 b/Library/Artifacts/14/145e3ea1d8533e56e8100c2e2a71ab36 new file mode 100644 index 0000000..f331581 Binary files /dev/null and b/Library/Artifacts/14/145e3ea1d8533e56e8100c2e2a71ab36 differ diff --git a/Library/Artifacts/14/1487728f7ae26a881602677f16021516 b/Library/Artifacts/14/1487728f7ae26a881602677f16021516 new file mode 100644 index 0000000..a36757e Binary files /dev/null and b/Library/Artifacts/14/1487728f7ae26a881602677f16021516 differ diff --git a/Library/Artifacts/14/14b2ddb6e47bb793b03dfee4563642e2 b/Library/Artifacts/14/14b2ddb6e47bb793b03dfee4563642e2 new file mode 100644 index 0000000..8842f16 Binary files /dev/null and b/Library/Artifacts/14/14b2ddb6e47bb793b03dfee4563642e2 differ diff --git a/Library/Artifacts/14/14c3ab8c980a1673ae5a73984f7ff7c0 b/Library/Artifacts/14/14c3ab8c980a1673ae5a73984f7ff7c0 new file mode 100644 index 0000000..da35bff Binary files /dev/null and b/Library/Artifacts/14/14c3ab8c980a1673ae5a73984f7ff7c0 differ diff --git a/Library/Artifacts/14/14de5ede599b830a8b00830c76be20c7 b/Library/Artifacts/14/14de5ede599b830a8b00830c76be20c7 new file mode 100644 index 0000000..55c9aa2 Binary files /dev/null and b/Library/Artifacts/14/14de5ede599b830a8b00830c76be20c7 differ diff --git a/Library/Artifacts/14/14e9821b7d138a98f8254e91e775ad1f b/Library/Artifacts/14/14e9821b7d138a98f8254e91e775ad1f new file mode 100644 index 0000000..5af5614 Binary files /dev/null and b/Library/Artifacts/14/14e9821b7d138a98f8254e91e775ad1f differ diff --git a/Library/Artifacts/14/14f5e8cb99006a0c4e95004b555883da b/Library/Artifacts/14/14f5e8cb99006a0c4e95004b555883da new file mode 100644 index 0000000..3007f13 Binary files /dev/null and b/Library/Artifacts/14/14f5e8cb99006a0c4e95004b555883da differ diff --git a/Library/Artifacts/15/15dc39e20d51b5dab8c95a5f08ab1191 b/Library/Artifacts/15/15dc39e20d51b5dab8c95a5f08ab1191 new file mode 100644 index 0000000..c6baf2a Binary files /dev/null and b/Library/Artifacts/15/15dc39e20d51b5dab8c95a5f08ab1191 differ diff --git a/Library/Artifacts/15/15e7848ee129333e1302f4c1c95230f9 b/Library/Artifacts/15/15e7848ee129333e1302f4c1c95230f9 new file mode 100644 index 0000000..ca6d23a Binary files /dev/null and b/Library/Artifacts/15/15e7848ee129333e1302f4c1c95230f9 differ diff --git a/Library/Artifacts/16/16481cb72241093b8f7c25b7019a763c b/Library/Artifacts/16/16481cb72241093b8f7c25b7019a763c new file mode 100644 index 0000000..5ce24af Binary files /dev/null and b/Library/Artifacts/16/16481cb72241093b8f7c25b7019a763c differ diff --git a/Library/Artifacts/16/169a5d48eec409b750b0a3be178eeb39 b/Library/Artifacts/16/169a5d48eec409b750b0a3be178eeb39 new file mode 100644 index 0000000..f724b7e Binary files /dev/null and b/Library/Artifacts/16/169a5d48eec409b750b0a3be178eeb39 differ diff --git a/Library/Artifacts/16/16a090b1d5523b827aba5b9e32991965 b/Library/Artifacts/16/16a090b1d5523b827aba5b9e32991965 new file mode 100644 index 0000000..3dcc910 Binary files /dev/null and b/Library/Artifacts/16/16a090b1d5523b827aba5b9e32991965 differ diff --git a/Library/Artifacts/16/16b4c7d7e04f4f41cb422a5fb81b46f4 b/Library/Artifacts/16/16b4c7d7e04f4f41cb422a5fb81b46f4 new file mode 100644 index 0000000..13dd7a1 Binary files /dev/null and b/Library/Artifacts/16/16b4c7d7e04f4f41cb422a5fb81b46f4 differ diff --git a/Library/Artifacts/16/16fb1827614ee17a8da2b1b4b2b4ad10 b/Library/Artifacts/16/16fb1827614ee17a8da2b1b4b2b4ad10 new file mode 100644 index 0000000..52749fd Binary files /dev/null and b/Library/Artifacts/16/16fb1827614ee17a8da2b1b4b2b4ad10 differ diff --git a/Library/Artifacts/16/16fc15cb9ff5798656768ff243303b02 b/Library/Artifacts/16/16fc15cb9ff5798656768ff243303b02 new file mode 100644 index 0000000..f9e9a3e Binary files /dev/null and b/Library/Artifacts/16/16fc15cb9ff5798656768ff243303b02 differ diff --git a/Library/Artifacts/17/1724bb6af239c84ce42d9e3ef3394545 b/Library/Artifacts/17/1724bb6af239c84ce42d9e3ef3394545 new file mode 100644 index 0000000..833445f Binary files /dev/null and b/Library/Artifacts/17/1724bb6af239c84ce42d9e3ef3394545 differ diff --git a/Library/Artifacts/17/1735759485e4f1ee2aa56269ffcba793 b/Library/Artifacts/17/1735759485e4f1ee2aa56269ffcba793 new file mode 100644 index 0000000..26ed746 Binary files /dev/null and b/Library/Artifacts/17/1735759485e4f1ee2aa56269ffcba793 differ diff --git a/Library/Artifacts/17/17a11417aa10043693120cb6fef4ce60 b/Library/Artifacts/17/17a11417aa10043693120cb6fef4ce60 new file mode 100644 index 0000000..64d879e Binary files /dev/null and b/Library/Artifacts/17/17a11417aa10043693120cb6fef4ce60 differ diff --git a/Library/Artifacts/17/17ac9fa7f17f0a6e420694cca655b35f b/Library/Artifacts/17/17ac9fa7f17f0a6e420694cca655b35f new file mode 100644 index 0000000..a474e0b Binary files /dev/null and b/Library/Artifacts/17/17ac9fa7f17f0a6e420694cca655b35f differ diff --git a/Library/Artifacts/17/17b2c32f969af2621abaef46533ac179 b/Library/Artifacts/17/17b2c32f969af2621abaef46533ac179 new file mode 100644 index 0000000..91b4d24 Binary files /dev/null and b/Library/Artifacts/17/17b2c32f969af2621abaef46533ac179 differ diff --git a/Library/Artifacts/17/17e11bb2e560f698ec957aa4d2d7f680 b/Library/Artifacts/17/17e11bb2e560f698ec957aa4d2d7f680 new file mode 100644 index 0000000..aae50e5 Binary files /dev/null and b/Library/Artifacts/17/17e11bb2e560f698ec957aa4d2d7f680 differ diff --git a/Library/Artifacts/17/17f7859138da5be07bff3ec4dbbbbc17 b/Library/Artifacts/17/17f7859138da5be07bff3ec4dbbbbc17 new file mode 100644 index 0000000..b973f19 Binary files /dev/null and b/Library/Artifacts/17/17f7859138da5be07bff3ec4dbbbbc17 differ diff --git a/Library/Artifacts/17/17fe37c2fa6dc25b7acb41e9e48f67ea b/Library/Artifacts/17/17fe37c2fa6dc25b7acb41e9e48f67ea new file mode 100644 index 0000000..b466885 Binary files /dev/null and b/Library/Artifacts/17/17fe37c2fa6dc25b7acb41e9e48f67ea differ diff --git a/Library/Artifacts/18/181ac2bcc9fce649eb7a98db2918197b b/Library/Artifacts/18/181ac2bcc9fce649eb7a98db2918197b new file mode 100644 index 0000000..c601514 Binary files /dev/null and b/Library/Artifacts/18/181ac2bcc9fce649eb7a98db2918197b differ diff --git a/Library/Artifacts/18/1834b78a05f7e17e856b17a00e33e0e4 b/Library/Artifacts/18/1834b78a05f7e17e856b17a00e33e0e4 new file mode 100644 index 0000000..fd34afd Binary files /dev/null and b/Library/Artifacts/18/1834b78a05f7e17e856b17a00e33e0e4 differ diff --git a/Library/Artifacts/18/183a6e99acaec4f07f6fad965be9d8d2 b/Library/Artifacts/18/183a6e99acaec4f07f6fad965be9d8d2 new file mode 100644 index 0000000..255a529 Binary files /dev/null and b/Library/Artifacts/18/183a6e99acaec4f07f6fad965be9d8d2 differ diff --git a/Library/Artifacts/18/18578a3f3a9bc26619d5b605a228b75d b/Library/Artifacts/18/18578a3f3a9bc26619d5b605a228b75d new file mode 100644 index 0000000..6c5292d Binary files /dev/null and b/Library/Artifacts/18/18578a3f3a9bc26619d5b605a228b75d differ diff --git a/Library/Artifacts/18/18c0ad074a89e2fb1bee080e997d8bed b/Library/Artifacts/18/18c0ad074a89e2fb1bee080e997d8bed new file mode 100644 index 0000000..78297d5 Binary files /dev/null and b/Library/Artifacts/18/18c0ad074a89e2fb1bee080e997d8bed differ diff --git a/Library/Artifacts/18/18ca9f1f13422989f666be9a1cfd5f63 b/Library/Artifacts/18/18ca9f1f13422989f666be9a1cfd5f63 new file mode 100644 index 0000000..c819bf4 Binary files /dev/null and b/Library/Artifacts/18/18ca9f1f13422989f666be9a1cfd5f63 differ diff --git a/Library/Artifacts/18/18d5463ae290c9dc82a7500813ffce20 b/Library/Artifacts/18/18d5463ae290c9dc82a7500813ffce20 new file mode 100644 index 0000000..cb5f322 Binary files /dev/null and b/Library/Artifacts/18/18d5463ae290c9dc82a7500813ffce20 differ diff --git a/Library/Artifacts/18/18df75c5de965041fa069311a0423e3d b/Library/Artifacts/18/18df75c5de965041fa069311a0423e3d new file mode 100644 index 0000000..934e9d6 Binary files /dev/null and b/Library/Artifacts/18/18df75c5de965041fa069311a0423e3d differ diff --git a/Library/Artifacts/18/18f6d5166b91c77a48c931a544e178e6 b/Library/Artifacts/18/18f6d5166b91c77a48c931a544e178e6 new file mode 100644 index 0000000..14041fc Binary files /dev/null and b/Library/Artifacts/18/18f6d5166b91c77a48c931a544e178e6 differ diff --git a/Library/Artifacts/19/19015d460650db48bd30ed9dc1ac109b b/Library/Artifacts/19/19015d460650db48bd30ed9dc1ac109b new file mode 100644 index 0000000..a828c1b Binary files /dev/null and b/Library/Artifacts/19/19015d460650db48bd30ed9dc1ac109b differ diff --git a/Library/Artifacts/19/1916d0dc3ce72a38d0ba147374904b37 b/Library/Artifacts/19/1916d0dc3ce72a38d0ba147374904b37 new file mode 100644 index 0000000..c2588de Binary files /dev/null and b/Library/Artifacts/19/1916d0dc3ce72a38d0ba147374904b37 differ diff --git a/Library/Artifacts/19/191ce0203456a7e6485877d6de150b40 b/Library/Artifacts/19/191ce0203456a7e6485877d6de150b40 new file mode 100644 index 0000000..170eb33 Binary files /dev/null and b/Library/Artifacts/19/191ce0203456a7e6485877d6de150b40 differ diff --git a/Library/Artifacts/19/1924337bb7f233a15abe206ee65697c8 b/Library/Artifacts/19/1924337bb7f233a15abe206ee65697c8 new file mode 100644 index 0000000..57ce4a0 Binary files /dev/null and b/Library/Artifacts/19/1924337bb7f233a15abe206ee65697c8 differ diff --git a/Library/Artifacts/19/194bbd6e650ae9c064e3042912be703b b/Library/Artifacts/19/194bbd6e650ae9c064e3042912be703b new file mode 100644 index 0000000..5e6cd02 Binary files /dev/null and b/Library/Artifacts/19/194bbd6e650ae9c064e3042912be703b differ diff --git a/Library/Artifacts/19/19978bf66e8ec2a0143336d2de6e0a86 b/Library/Artifacts/19/19978bf66e8ec2a0143336d2de6e0a86 new file mode 100644 index 0000000..feb9d1a Binary files /dev/null and b/Library/Artifacts/19/19978bf66e8ec2a0143336d2de6e0a86 differ diff --git a/Library/Artifacts/19/19a83a896ca4e31324132dee4143cce1 b/Library/Artifacts/19/19a83a896ca4e31324132dee4143cce1 new file mode 100644 index 0000000..83a512b Binary files /dev/null and b/Library/Artifacts/19/19a83a896ca4e31324132dee4143cce1 differ diff --git a/Library/Artifacts/19/19b4ccef956186ee6e24b1b72d920819 b/Library/Artifacts/19/19b4ccef956186ee6e24b1b72d920819 new file mode 100644 index 0000000..ccfb8d6 Binary files /dev/null and b/Library/Artifacts/19/19b4ccef956186ee6e24b1b72d920819 differ diff --git a/Library/Artifacts/1a/1a01b5ef5fd588d89232fcb4708f646b b/Library/Artifacts/1a/1a01b5ef5fd588d89232fcb4708f646b new file mode 100644 index 0000000..9a8a716 Binary files /dev/null and b/Library/Artifacts/1a/1a01b5ef5fd588d89232fcb4708f646b differ diff --git a/Library/Artifacts/1b/1b15c3147e2282863ba1f2e061624ee6 b/Library/Artifacts/1b/1b15c3147e2282863ba1f2e061624ee6 new file mode 100644 index 0000000..9892297 Binary files /dev/null and b/Library/Artifacts/1b/1b15c3147e2282863ba1f2e061624ee6 differ diff --git a/Library/Artifacts/1b/1b41257dc5ee0cc30340b8e6333905e2 b/Library/Artifacts/1b/1b41257dc5ee0cc30340b8e6333905e2 new file mode 100644 index 0000000..c4c54e5 Binary files /dev/null and b/Library/Artifacts/1b/1b41257dc5ee0cc30340b8e6333905e2 differ diff --git a/Library/Artifacts/1b/1b718ca15611fcb26523f975b95d6e34 b/Library/Artifacts/1b/1b718ca15611fcb26523f975b95d6e34 new file mode 100644 index 0000000..cea2d17 Binary files /dev/null and b/Library/Artifacts/1b/1b718ca15611fcb26523f975b95d6e34 differ diff --git a/Library/Artifacts/1b/1b94602ddaa9da103a7e57347731d27d b/Library/Artifacts/1b/1b94602ddaa9da103a7e57347731d27d new file mode 100644 index 0000000..3265791 Binary files /dev/null and b/Library/Artifacts/1b/1b94602ddaa9da103a7e57347731d27d differ diff --git a/Library/Artifacts/1b/1b9f6f4abc93150f7ff07755262f4366 b/Library/Artifacts/1b/1b9f6f4abc93150f7ff07755262f4366 new file mode 100644 index 0000000..b1bbc14 Binary files /dev/null and b/Library/Artifacts/1b/1b9f6f4abc93150f7ff07755262f4366 differ diff --git a/Library/Artifacts/1b/1bb5d2469210148121310c8c2dac0dc6 b/Library/Artifacts/1b/1bb5d2469210148121310c8c2dac0dc6 new file mode 100644 index 0000000..95aeb08 Binary files /dev/null and b/Library/Artifacts/1b/1bb5d2469210148121310c8c2dac0dc6 differ diff --git a/Library/Artifacts/1b/1bb7cc48b31276832d33e126811fd54c b/Library/Artifacts/1b/1bb7cc48b31276832d33e126811fd54c new file mode 100644 index 0000000..4ce4cea Binary files /dev/null and b/Library/Artifacts/1b/1bb7cc48b31276832d33e126811fd54c differ diff --git a/Library/Artifacts/1b/1bbb1fef5079b5641fe65bd7f0b4780d b/Library/Artifacts/1b/1bbb1fef5079b5641fe65bd7f0b4780d new file mode 100644 index 0000000..7b2f73c Binary files /dev/null and b/Library/Artifacts/1b/1bbb1fef5079b5641fe65bd7f0b4780d differ diff --git a/Library/Artifacts/1b/1bc4b89d20bf483362a1aaf9b6bd6d22 b/Library/Artifacts/1b/1bc4b89d20bf483362a1aaf9b6bd6d22 new file mode 100644 index 0000000..51328cf Binary files /dev/null and b/Library/Artifacts/1b/1bc4b89d20bf483362a1aaf9b6bd6d22 differ diff --git a/Library/Artifacts/1c/1c4c141ebf9aa6abcefbf991134d1347 b/Library/Artifacts/1c/1c4c141ebf9aa6abcefbf991134d1347 new file mode 100644 index 0000000..947e1f8 Binary files /dev/null and b/Library/Artifacts/1c/1c4c141ebf9aa6abcefbf991134d1347 differ diff --git a/Library/Artifacts/1c/1c80726bdf8dcec45972c5a0d8baff1b b/Library/Artifacts/1c/1c80726bdf8dcec45972c5a0d8baff1b new file mode 100644 index 0000000..42fad80 Binary files /dev/null and b/Library/Artifacts/1c/1c80726bdf8dcec45972c5a0d8baff1b differ diff --git a/Library/Artifacts/1c/1cacc5349758d9100d52f84cf2a1e955 b/Library/Artifacts/1c/1cacc5349758d9100d52f84cf2a1e955 new file mode 100644 index 0000000..a1706fb Binary files /dev/null and b/Library/Artifacts/1c/1cacc5349758d9100d52f84cf2a1e955 differ diff --git a/Library/Artifacts/1d/1d0148afb1f52a3c88e1ffa11545b44c b/Library/Artifacts/1d/1d0148afb1f52a3c88e1ffa11545b44c new file mode 100644 index 0000000..cdec8e5 Binary files /dev/null and b/Library/Artifacts/1d/1d0148afb1f52a3c88e1ffa11545b44c differ diff --git a/Library/Artifacts/1d/1d6a8ea309a24fa58f05c1729f849dd6 b/Library/Artifacts/1d/1d6a8ea309a24fa58f05c1729f849dd6 new file mode 100644 index 0000000..6b0119a Binary files /dev/null and b/Library/Artifacts/1d/1d6a8ea309a24fa58f05c1729f849dd6 differ diff --git a/Library/Artifacts/1d/1d6d9c52bb48758158daab8a92585b28 b/Library/Artifacts/1d/1d6d9c52bb48758158daab8a92585b28 new file mode 100644 index 0000000..8a3c189 Binary files /dev/null and b/Library/Artifacts/1d/1d6d9c52bb48758158daab8a92585b28 differ diff --git a/Library/Artifacts/1d/1dcc788dde2aa2bfd9029ae77e79101b b/Library/Artifacts/1d/1dcc788dde2aa2bfd9029ae77e79101b new file mode 100644 index 0000000..97bd849 Binary files /dev/null and b/Library/Artifacts/1d/1dcc788dde2aa2bfd9029ae77e79101b differ diff --git a/Library/Artifacts/1d/1de643b3cff993daae626fea8bf21812 b/Library/Artifacts/1d/1de643b3cff993daae626fea8bf21812 new file mode 100644 index 0000000..b1ff76c Binary files /dev/null and b/Library/Artifacts/1d/1de643b3cff993daae626fea8bf21812 differ diff --git a/Library/Artifacts/1e/1e2212b20080431765e248bf3032ccac b/Library/Artifacts/1e/1e2212b20080431765e248bf3032ccac new file mode 100644 index 0000000..bc2a5a7 Binary files /dev/null and b/Library/Artifacts/1e/1e2212b20080431765e248bf3032ccac differ diff --git a/Library/Artifacts/1e/1e314a8e14b09644c88fa2d5bfcc19a6 b/Library/Artifacts/1e/1e314a8e14b09644c88fa2d5bfcc19a6 new file mode 100644 index 0000000..c96d671 Binary files /dev/null and b/Library/Artifacts/1e/1e314a8e14b09644c88fa2d5bfcc19a6 differ diff --git a/Library/Artifacts/1e/1e37d6006399506ed19c61a8020514e2 b/Library/Artifacts/1e/1e37d6006399506ed19c61a8020514e2 new file mode 100644 index 0000000..fcd6090 Binary files /dev/null and b/Library/Artifacts/1e/1e37d6006399506ed19c61a8020514e2 differ diff --git a/Library/Artifacts/1e/1e4ba297ca17145bb4a2e5a5f9ac7c46 b/Library/Artifacts/1e/1e4ba297ca17145bb4a2e5a5f9ac7c46 new file mode 100644 index 0000000..31b6b2a Binary files /dev/null and b/Library/Artifacts/1e/1e4ba297ca17145bb4a2e5a5f9ac7c46 differ diff --git a/Library/Artifacts/1e/1e4f16b733f5bbc80bc6ec23da1cdbf2 b/Library/Artifacts/1e/1e4f16b733f5bbc80bc6ec23da1cdbf2 new file mode 100644 index 0000000..0a11b46 Binary files /dev/null and b/Library/Artifacts/1e/1e4f16b733f5bbc80bc6ec23da1cdbf2 differ diff --git a/Library/Artifacts/1e/1e81c7456c4b54438f63b6b501d4cc9f b/Library/Artifacts/1e/1e81c7456c4b54438f63b6b501d4cc9f new file mode 100644 index 0000000..caf85e5 Binary files /dev/null and b/Library/Artifacts/1e/1e81c7456c4b54438f63b6b501d4cc9f differ diff --git a/Library/Artifacts/1e/1edd63957e79a9fe0b210840965b0936 b/Library/Artifacts/1e/1edd63957e79a9fe0b210840965b0936 new file mode 100644 index 0000000..2469585 Binary files /dev/null and b/Library/Artifacts/1e/1edd63957e79a9fe0b210840965b0936 differ diff --git a/Library/Artifacts/1f/1f0f48dc7029cfefcb0c7e0a67ba4c42 b/Library/Artifacts/1f/1f0f48dc7029cfefcb0c7e0a67ba4c42 new file mode 100644 index 0000000..058d5e0 Binary files /dev/null and b/Library/Artifacts/1f/1f0f48dc7029cfefcb0c7e0a67ba4c42 differ diff --git a/Library/Artifacts/1f/1f1fa245eaf3228b33d8eed6b37327bb b/Library/Artifacts/1f/1f1fa245eaf3228b33d8eed6b37327bb new file mode 100644 index 0000000..d653c37 Binary files /dev/null and b/Library/Artifacts/1f/1f1fa245eaf3228b33d8eed6b37327bb differ diff --git a/Library/Artifacts/1f/1f3e12217ecffbadb94b7fbf4f2f9a42 b/Library/Artifacts/1f/1f3e12217ecffbadb94b7fbf4f2f9a42 new file mode 100644 index 0000000..24bd2f7 Binary files /dev/null and b/Library/Artifacts/1f/1f3e12217ecffbadb94b7fbf4f2f9a42 differ diff --git a/Library/Artifacts/1f/1f4ea4a041c1544ec3f20752b6fdd7ae b/Library/Artifacts/1f/1f4ea4a041c1544ec3f20752b6fdd7ae new file mode 100644 index 0000000..61e3771 Binary files /dev/null and b/Library/Artifacts/1f/1f4ea4a041c1544ec3f20752b6fdd7ae differ diff --git a/Library/Artifacts/1f/1f7a9dcfafff4ed2a6315a0f68752b6e b/Library/Artifacts/1f/1f7a9dcfafff4ed2a6315a0f68752b6e new file mode 100644 index 0000000..8f1fe45 Binary files /dev/null and b/Library/Artifacts/1f/1f7a9dcfafff4ed2a6315a0f68752b6e differ diff --git a/Library/Artifacts/1f/1fec442c704ddf090ea5398d42d9df79 b/Library/Artifacts/1f/1fec442c704ddf090ea5398d42d9df79 new file mode 100644 index 0000000..67ce8dd Binary files /dev/null and b/Library/Artifacts/1f/1fec442c704ddf090ea5398d42d9df79 differ diff --git a/Library/Artifacts/1f/1ff42aa232dcec7b6f69d1a17a6c2b50 b/Library/Artifacts/1f/1ff42aa232dcec7b6f69d1a17a6c2b50 new file mode 100644 index 0000000..5d1e8c8 Binary files /dev/null and b/Library/Artifacts/1f/1ff42aa232dcec7b6f69d1a17a6c2b50 differ diff --git a/Library/Artifacts/1f/1ff5db9e1612d24316097c4f4cecb3d1 b/Library/Artifacts/1f/1ff5db9e1612d24316097c4f4cecb3d1 new file mode 100644 index 0000000..7f8878d Binary files /dev/null and b/Library/Artifacts/1f/1ff5db9e1612d24316097c4f4cecb3d1 differ diff --git a/Library/Artifacts/20/200319e64e448f326f640c14d60e10db b/Library/Artifacts/20/200319e64e448f326f640c14d60e10db new file mode 100644 index 0000000..1c45ad7 Binary files /dev/null and b/Library/Artifacts/20/200319e64e448f326f640c14d60e10db differ diff --git a/Library/Artifacts/20/20045b183a0c51709de2e1908c3ac9e2 b/Library/Artifacts/20/20045b183a0c51709de2e1908c3ac9e2 new file mode 100644 index 0000000..de4acce Binary files /dev/null and b/Library/Artifacts/20/20045b183a0c51709de2e1908c3ac9e2 differ diff --git a/Library/Artifacts/20/205355baed36ab213d806e6a609e0647 b/Library/Artifacts/20/205355baed36ab213d806e6a609e0647 new file mode 100644 index 0000000..9bc20c4 Binary files /dev/null and b/Library/Artifacts/20/205355baed36ab213d806e6a609e0647 differ diff --git a/Library/Artifacts/20/207b1593e302ed35d2db3d2417d487dd b/Library/Artifacts/20/207b1593e302ed35d2db3d2417d487dd new file mode 100644 index 0000000..7a56128 Binary files /dev/null and b/Library/Artifacts/20/207b1593e302ed35d2db3d2417d487dd differ diff --git a/Library/Artifacts/21/218b4ab5ad84f6287d370def3e2ded8e b/Library/Artifacts/21/218b4ab5ad84f6287d370def3e2ded8e new file mode 100644 index 0000000..131dd5e Binary files /dev/null and b/Library/Artifacts/21/218b4ab5ad84f6287d370def3e2ded8e differ diff --git a/Library/Artifacts/21/219b725bb3538c7763cae2e53bf06e0b b/Library/Artifacts/21/219b725bb3538c7763cae2e53bf06e0b new file mode 100644 index 0000000..08e1cf1 Binary files /dev/null and b/Library/Artifacts/21/219b725bb3538c7763cae2e53bf06e0b differ diff --git a/Library/Artifacts/21/21becd126932ff2a657a24a321c4d829 b/Library/Artifacts/21/21becd126932ff2a657a24a321c4d829 new file mode 100644 index 0000000..cec3049 Binary files /dev/null and b/Library/Artifacts/21/21becd126932ff2a657a24a321c4d829 differ diff --git a/Library/Artifacts/22/220bc74d8011eca91f79b51f6fd37182 b/Library/Artifacts/22/220bc74d8011eca91f79b51f6fd37182 new file mode 100644 index 0000000..f1c66bd Binary files /dev/null and b/Library/Artifacts/22/220bc74d8011eca91f79b51f6fd37182 differ diff --git a/Library/Artifacts/22/2247294585432f0269855d28d2abf32f b/Library/Artifacts/22/2247294585432f0269855d28d2abf32f new file mode 100644 index 0000000..1597cc2 Binary files /dev/null and b/Library/Artifacts/22/2247294585432f0269855d28d2abf32f differ diff --git a/Library/Artifacts/22/226e882476642b871f980c039c04a312 b/Library/Artifacts/22/226e882476642b871f980c039c04a312 new file mode 100644 index 0000000..3347b60 Binary files /dev/null and b/Library/Artifacts/22/226e882476642b871f980c039c04a312 differ diff --git a/Library/Artifacts/22/22c06d355a09363a34441ff3ad0ae54b b/Library/Artifacts/22/22c06d355a09363a34441ff3ad0ae54b new file mode 100644 index 0000000..966c17a Binary files /dev/null and b/Library/Artifacts/22/22c06d355a09363a34441ff3ad0ae54b differ diff --git a/Library/Artifacts/22/22f62a6415215fc37c3bffeb0cba860d b/Library/Artifacts/22/22f62a6415215fc37c3bffeb0cba860d new file mode 100644 index 0000000..07e5569 Binary files /dev/null and b/Library/Artifacts/22/22f62a6415215fc37c3bffeb0cba860d differ diff --git a/Library/Artifacts/23/2317e286c4b1d5638f42b8945c326b01 b/Library/Artifacts/23/2317e286c4b1d5638f42b8945c326b01 new file mode 100644 index 0000000..7774738 Binary files /dev/null and b/Library/Artifacts/23/2317e286c4b1d5638f42b8945c326b01 differ diff --git a/Library/Artifacts/23/233f363fa672bfef3ef414b22363023e b/Library/Artifacts/23/233f363fa672bfef3ef414b22363023e new file mode 100644 index 0000000..2e4972d Binary files /dev/null and b/Library/Artifacts/23/233f363fa672bfef3ef414b22363023e differ diff --git a/Library/Artifacts/23/2341a138065a7ccca32f256ba0c20f0a b/Library/Artifacts/23/2341a138065a7ccca32f256ba0c20f0a new file mode 100644 index 0000000..06703b9 Binary files /dev/null and b/Library/Artifacts/23/2341a138065a7ccca32f256ba0c20f0a differ diff --git a/Library/Artifacts/23/23d3e8b41fe1cf54b67ca065fce4da9b b/Library/Artifacts/23/23d3e8b41fe1cf54b67ca065fce4da9b new file mode 100644 index 0000000..c10766d Binary files /dev/null and b/Library/Artifacts/23/23d3e8b41fe1cf54b67ca065fce4da9b differ diff --git a/Library/Artifacts/23/23fb3e4912aa4a7b9cdc188453f49abf b/Library/Artifacts/23/23fb3e4912aa4a7b9cdc188453f49abf new file mode 100644 index 0000000..5ee5041 Binary files /dev/null and b/Library/Artifacts/23/23fb3e4912aa4a7b9cdc188453f49abf differ diff --git a/Library/Artifacts/24/247747ec214893333942a4f3b4b150f7 b/Library/Artifacts/24/247747ec214893333942a4f3b4b150f7 new file mode 100644 index 0000000..4775174 Binary files /dev/null and b/Library/Artifacts/24/247747ec214893333942a4f3b4b150f7 differ diff --git a/Library/Artifacts/24/248816608095f016d3c305a05d4e4cb8 b/Library/Artifacts/24/248816608095f016d3c305a05d4e4cb8 new file mode 100644 index 0000000..27e7cb5 Binary files /dev/null and b/Library/Artifacts/24/248816608095f016d3c305a05d4e4cb8 differ diff --git a/Library/Artifacts/24/24b4c1a8df63f27ce3f4a2c27a1cd433 b/Library/Artifacts/24/24b4c1a8df63f27ce3f4a2c27a1cd433 new file mode 100644 index 0000000..d2c05d9 Binary files /dev/null and b/Library/Artifacts/24/24b4c1a8df63f27ce3f4a2c27a1cd433 differ diff --git a/Library/Artifacts/24/24c464e9521e6412a0dd400a9ccd6ac3 b/Library/Artifacts/24/24c464e9521e6412a0dd400a9ccd6ac3 new file mode 100644 index 0000000..562389d Binary files /dev/null and b/Library/Artifacts/24/24c464e9521e6412a0dd400a9ccd6ac3 differ diff --git a/Library/Artifacts/24/24cb85b9573db8c936df1fe5440ee888 b/Library/Artifacts/24/24cb85b9573db8c936df1fe5440ee888 new file mode 100644 index 0000000..0b8db1d Binary files /dev/null and b/Library/Artifacts/24/24cb85b9573db8c936df1fe5440ee888 differ diff --git a/Library/Artifacts/24/24d38a52757b6b312b7e3485e4bbd263 b/Library/Artifacts/24/24d38a52757b6b312b7e3485e4bbd263 new file mode 100644 index 0000000..da4dc88 Binary files /dev/null and b/Library/Artifacts/24/24d38a52757b6b312b7e3485e4bbd263 differ diff --git a/Library/Artifacts/24/24e63f4d680476f836cf1f60cdaf786f b/Library/Artifacts/24/24e63f4d680476f836cf1f60cdaf786f new file mode 100644 index 0000000..69acf3d Binary files /dev/null and b/Library/Artifacts/24/24e63f4d680476f836cf1f60cdaf786f differ diff --git a/Library/Artifacts/25/250664040712eb06ef8405e1bcff9db7 b/Library/Artifacts/25/250664040712eb06ef8405e1bcff9db7 new file mode 100644 index 0000000..ac6f43b Binary files /dev/null and b/Library/Artifacts/25/250664040712eb06ef8405e1bcff9db7 differ diff --git a/Library/Artifacts/25/25186a6ee24a6177a0849083ef4d3a30 b/Library/Artifacts/25/25186a6ee24a6177a0849083ef4d3a30 new file mode 100644 index 0000000..9770144 Binary files /dev/null and b/Library/Artifacts/25/25186a6ee24a6177a0849083ef4d3a30 differ diff --git a/Library/Artifacts/25/2546cc9aa204da4d6142a9af70ddd4f1 b/Library/Artifacts/25/2546cc9aa204da4d6142a9af70ddd4f1 new file mode 100644 index 0000000..dc47c92 Binary files /dev/null and b/Library/Artifacts/25/2546cc9aa204da4d6142a9af70ddd4f1 differ diff --git a/Library/Artifacts/25/256cbfae240578dd7bde6093ab398502 b/Library/Artifacts/25/256cbfae240578dd7bde6093ab398502 new file mode 100644 index 0000000..708fff9 Binary files /dev/null and b/Library/Artifacts/25/256cbfae240578dd7bde6093ab398502 differ diff --git a/Library/Artifacts/25/2595d28835bfbffea40eccab67bf9a82 b/Library/Artifacts/25/2595d28835bfbffea40eccab67bf9a82 new file mode 100644 index 0000000..bb6b219 Binary files /dev/null and b/Library/Artifacts/25/2595d28835bfbffea40eccab67bf9a82 differ diff --git a/Library/Artifacts/25/25961b0971a84f00ae54ee36bcc78f9f b/Library/Artifacts/25/25961b0971a84f00ae54ee36bcc78f9f new file mode 100644 index 0000000..806692c Binary files /dev/null and b/Library/Artifacts/25/25961b0971a84f00ae54ee36bcc78f9f differ diff --git a/Library/Artifacts/25/25ac9ec6ed05e57d0d98a46a307e0516 b/Library/Artifacts/25/25ac9ec6ed05e57d0d98a46a307e0516 new file mode 100644 index 0000000..bab8532 Binary files /dev/null and b/Library/Artifacts/25/25ac9ec6ed05e57d0d98a46a307e0516 differ diff --git a/Library/Artifacts/25/25accf0f5e9002f98d6899513f27f515 b/Library/Artifacts/25/25accf0f5e9002f98d6899513f27f515 new file mode 100644 index 0000000..e467897 Binary files /dev/null and b/Library/Artifacts/25/25accf0f5e9002f98d6899513f27f515 differ diff --git a/Library/Artifacts/25/25ed7b3cd62bdb6046b02d6ff30257ba b/Library/Artifacts/25/25ed7b3cd62bdb6046b02d6ff30257ba new file mode 100644 index 0000000..68f5991 Binary files /dev/null and b/Library/Artifacts/25/25ed7b3cd62bdb6046b02d6ff30257ba differ diff --git a/Library/Artifacts/26/2628688eb85ef2058da67257a75b4981 b/Library/Artifacts/26/2628688eb85ef2058da67257a75b4981 new file mode 100644 index 0000000..5c2fb6c Binary files /dev/null and b/Library/Artifacts/26/2628688eb85ef2058da67257a75b4981 differ diff --git a/Library/Artifacts/26/266cc5824f6611c89edc3ece1cfe7be7 b/Library/Artifacts/26/266cc5824f6611c89edc3ece1cfe7be7 new file mode 100644 index 0000000..7498ebe Binary files /dev/null and b/Library/Artifacts/26/266cc5824f6611c89edc3ece1cfe7be7 differ diff --git a/Library/Artifacts/26/26ea2c38b13d01efaa2833998dd23e6c b/Library/Artifacts/26/26ea2c38b13d01efaa2833998dd23e6c new file mode 100644 index 0000000..f363657 Binary files /dev/null and b/Library/Artifacts/26/26ea2c38b13d01efaa2833998dd23e6c differ diff --git a/Library/Artifacts/26/26f82af7868bea6fbb6462d47fd188fd b/Library/Artifacts/26/26f82af7868bea6fbb6462d47fd188fd new file mode 100644 index 0000000..56ddbb0 Binary files /dev/null and b/Library/Artifacts/26/26f82af7868bea6fbb6462d47fd188fd differ diff --git a/Library/Artifacts/27/271ef67f52327eb3457e071ef678f286 b/Library/Artifacts/27/271ef67f52327eb3457e071ef678f286 new file mode 100644 index 0000000..fe221d4 Binary files /dev/null and b/Library/Artifacts/27/271ef67f52327eb3457e071ef678f286 differ diff --git a/Library/Artifacts/27/27219a8b78a6f17f19cffea67ff08874 b/Library/Artifacts/27/27219a8b78a6f17f19cffea67ff08874 new file mode 100644 index 0000000..20a6152 Binary files /dev/null and b/Library/Artifacts/27/27219a8b78a6f17f19cffea67ff08874 differ diff --git a/Library/Artifacts/27/2775c8c172913c9152a755cac846e97a b/Library/Artifacts/27/2775c8c172913c9152a755cac846e97a new file mode 100644 index 0000000..c245388 Binary files /dev/null and b/Library/Artifacts/27/2775c8c172913c9152a755cac846e97a differ diff --git a/Library/Artifacts/27/277c0cdd2b18ebaff4007489f1d027a0 b/Library/Artifacts/27/277c0cdd2b18ebaff4007489f1d027a0 new file mode 100644 index 0000000..2f0e89b Binary files /dev/null and b/Library/Artifacts/27/277c0cdd2b18ebaff4007489f1d027a0 differ diff --git a/Library/Artifacts/27/2784a06f88a70adc7741815439768097 b/Library/Artifacts/27/2784a06f88a70adc7741815439768097 new file mode 100644 index 0000000..809c756 Binary files /dev/null and b/Library/Artifacts/27/2784a06f88a70adc7741815439768097 differ diff --git a/Library/Artifacts/27/2785348ce422605f6596f3e0492d3b25 b/Library/Artifacts/27/2785348ce422605f6596f3e0492d3b25 new file mode 100644 index 0000000..3a37b0e Binary files /dev/null and b/Library/Artifacts/27/2785348ce422605f6596f3e0492d3b25 differ diff --git a/Library/Artifacts/27/278bcf24e6b2788c6036c89c448b665b b/Library/Artifacts/27/278bcf24e6b2788c6036c89c448b665b new file mode 100644 index 0000000..a60556e Binary files /dev/null and b/Library/Artifacts/27/278bcf24e6b2788c6036c89c448b665b differ diff --git a/Library/Artifacts/27/27b70df6462612a13877588dfe95eb35 b/Library/Artifacts/27/27b70df6462612a13877588dfe95eb35 new file mode 100644 index 0000000..4546c47 Binary files /dev/null and b/Library/Artifacts/27/27b70df6462612a13877588dfe95eb35 differ diff --git a/Library/Artifacts/27/27df247bcc272003545632c81309f869 b/Library/Artifacts/27/27df247bcc272003545632c81309f869 new file mode 100644 index 0000000..dea820a Binary files /dev/null and b/Library/Artifacts/27/27df247bcc272003545632c81309f869 differ diff --git a/Library/Artifacts/27/27f5502b0619d78160a133dca0fcf6b1 b/Library/Artifacts/27/27f5502b0619d78160a133dca0fcf6b1 new file mode 100644 index 0000000..c4c4f90 Binary files /dev/null and b/Library/Artifacts/27/27f5502b0619d78160a133dca0fcf6b1 differ diff --git a/Library/Artifacts/28/28472b5d2225768aec0a8de21828e288 b/Library/Artifacts/28/28472b5d2225768aec0a8de21828e288 new file mode 100644 index 0000000..6177546 Binary files /dev/null and b/Library/Artifacts/28/28472b5d2225768aec0a8de21828e288 differ diff --git a/Library/Artifacts/28/286509bbe4fe06c2e6375960f5b96bb0 b/Library/Artifacts/28/286509bbe4fe06c2e6375960f5b96bb0 new file mode 100644 index 0000000..cdcd659 Binary files /dev/null and b/Library/Artifacts/28/286509bbe4fe06c2e6375960f5b96bb0 differ diff --git a/Library/Artifacts/29/2914a76c0ddf161247f5903c1991dee5 b/Library/Artifacts/29/2914a76c0ddf161247f5903c1991dee5 new file mode 100644 index 0000000..cfb5178 Binary files /dev/null and b/Library/Artifacts/29/2914a76c0ddf161247f5903c1991dee5 differ diff --git a/Library/Artifacts/29/2942687c50c9841bb58dd72d0a95ad72 b/Library/Artifacts/29/2942687c50c9841bb58dd72d0a95ad72 new file mode 100644 index 0000000..571b577 Binary files /dev/null and b/Library/Artifacts/29/2942687c50c9841bb58dd72d0a95ad72 differ diff --git a/Library/Artifacts/29/29dd072da8fe435cacc6b3713fffa489 b/Library/Artifacts/29/29dd072da8fe435cacc6b3713fffa489 new file mode 100644 index 0000000..85f0e2a Binary files /dev/null and b/Library/Artifacts/29/29dd072da8fe435cacc6b3713fffa489 differ diff --git a/Library/Artifacts/29/29ec68f2f7648464365d68d39def74e4 b/Library/Artifacts/29/29ec68f2f7648464365d68d39def74e4 new file mode 100644 index 0000000..3d02734 Binary files /dev/null and b/Library/Artifacts/29/29ec68f2f7648464365d68d39def74e4 differ diff --git a/Library/Artifacts/2a/2a2e551f09c3eba4df249d1adbec5760 b/Library/Artifacts/2a/2a2e551f09c3eba4df249d1adbec5760 new file mode 100644 index 0000000..33fb50d Binary files /dev/null and b/Library/Artifacts/2a/2a2e551f09c3eba4df249d1adbec5760 differ diff --git a/Library/Artifacts/2a/2a4fc6e71962a80af60e19ab02c21e05 b/Library/Artifacts/2a/2a4fc6e71962a80af60e19ab02c21e05 new file mode 100644 index 0000000..b70fff4 Binary files /dev/null and b/Library/Artifacts/2a/2a4fc6e71962a80af60e19ab02c21e05 differ diff --git a/Library/Artifacts/2a/2a8afb9fab61b464b4e5770072ccd548 b/Library/Artifacts/2a/2a8afb9fab61b464b4e5770072ccd548 new file mode 100644 index 0000000..afc7195 Binary files /dev/null and b/Library/Artifacts/2a/2a8afb9fab61b464b4e5770072ccd548 differ diff --git a/Library/Artifacts/2a/2a95bb581e5490254da375c4b74ab476 b/Library/Artifacts/2a/2a95bb581e5490254da375c4b74ab476 new file mode 100644 index 0000000..d98c755 Binary files /dev/null and b/Library/Artifacts/2a/2a95bb581e5490254da375c4b74ab476 differ diff --git a/Library/Artifacts/2a/2a9c6686ddddd0e0b29c56bd4b02cc3a b/Library/Artifacts/2a/2a9c6686ddddd0e0b29c56bd4b02cc3a new file mode 100644 index 0000000..72fba76 Binary files /dev/null and b/Library/Artifacts/2a/2a9c6686ddddd0e0b29c56bd4b02cc3a differ diff --git a/Library/Artifacts/2b/2b1919a049c99c063d209cb68ab9e59e b/Library/Artifacts/2b/2b1919a049c99c063d209cb68ab9e59e new file mode 100644 index 0000000..82a0803 Binary files /dev/null and b/Library/Artifacts/2b/2b1919a049c99c063d209cb68ab9e59e differ diff --git a/Library/Artifacts/2b/2b34a0a6a90a1f8f5db766dbf9bfac27 b/Library/Artifacts/2b/2b34a0a6a90a1f8f5db766dbf9bfac27 new file mode 100644 index 0000000..5a1bee3 Binary files /dev/null and b/Library/Artifacts/2b/2b34a0a6a90a1f8f5db766dbf9bfac27 differ diff --git a/Library/Artifacts/2b/2b3e994d33d068e12a0641d610089d53 b/Library/Artifacts/2b/2b3e994d33d068e12a0641d610089d53 new file mode 100644 index 0000000..7fc4f30 Binary files /dev/null and b/Library/Artifacts/2b/2b3e994d33d068e12a0641d610089d53 differ diff --git a/Library/Artifacts/2b/2b77ff3bd5b156e6c58ab7dff4e9ebcd b/Library/Artifacts/2b/2b77ff3bd5b156e6c58ab7dff4e9ebcd new file mode 100644 index 0000000..ac0ab62 Binary files /dev/null and b/Library/Artifacts/2b/2b77ff3bd5b156e6c58ab7dff4e9ebcd differ diff --git a/Library/Artifacts/2b/2b8a4ef43daa7415e586980f2f58c2ab b/Library/Artifacts/2b/2b8a4ef43daa7415e586980f2f58c2ab new file mode 100644 index 0000000..f088377 Binary files /dev/null and b/Library/Artifacts/2b/2b8a4ef43daa7415e586980f2f58c2ab differ diff --git a/Library/Artifacts/2b/2bd177cef454da4a9b4611d6708d217e b/Library/Artifacts/2b/2bd177cef454da4a9b4611d6708d217e new file mode 100644 index 0000000..1799742 Binary files /dev/null and b/Library/Artifacts/2b/2bd177cef454da4a9b4611d6708d217e differ diff --git a/Library/Artifacts/2b/2bd965ec74f65987a23916e21aac78a7 b/Library/Artifacts/2b/2bd965ec74f65987a23916e21aac78a7 new file mode 100644 index 0000000..376c090 Binary files /dev/null and b/Library/Artifacts/2b/2bd965ec74f65987a23916e21aac78a7 differ diff --git a/Library/Artifacts/2b/2be31b1244ff6b55d548dbcc30f9bb30 b/Library/Artifacts/2b/2be31b1244ff6b55d548dbcc30f9bb30 new file mode 100644 index 0000000..e859619 Binary files /dev/null and b/Library/Artifacts/2b/2be31b1244ff6b55d548dbcc30f9bb30 differ diff --git a/Library/Artifacts/2c/2c6dd9306b4480bef2804ab473875b1c b/Library/Artifacts/2c/2c6dd9306b4480bef2804ab473875b1c new file mode 100644 index 0000000..643b44e Binary files /dev/null and b/Library/Artifacts/2c/2c6dd9306b4480bef2804ab473875b1c differ diff --git a/Library/Artifacts/2c/2cc026344a3f7ac8fcbb684e3400f107 b/Library/Artifacts/2c/2cc026344a3f7ac8fcbb684e3400f107 new file mode 100644 index 0000000..a1e13b8 Binary files /dev/null and b/Library/Artifacts/2c/2cc026344a3f7ac8fcbb684e3400f107 differ diff --git a/Library/Artifacts/2c/2cef9978f62f617bd9ff4d29c866e82e b/Library/Artifacts/2c/2cef9978f62f617bd9ff4d29c866e82e new file mode 100644 index 0000000..4d10d3c Binary files /dev/null and b/Library/Artifacts/2c/2cef9978f62f617bd9ff4d29c866e82e differ diff --git a/Library/Artifacts/2c/2cfcf3ad7499bdc92aac7906fcbf63be b/Library/Artifacts/2c/2cfcf3ad7499bdc92aac7906fcbf63be new file mode 100644 index 0000000..25c6df9 Binary files /dev/null and b/Library/Artifacts/2c/2cfcf3ad7499bdc92aac7906fcbf63be differ diff --git a/Library/Artifacts/2d/2d0c9ba5393dd45827455a22de050df2 b/Library/Artifacts/2d/2d0c9ba5393dd45827455a22de050df2 new file mode 100644 index 0000000..d08c08b Binary files /dev/null and b/Library/Artifacts/2d/2d0c9ba5393dd45827455a22de050df2 differ diff --git a/Library/Artifacts/2d/2d4dde0431f06d8375595c721bef50f8 b/Library/Artifacts/2d/2d4dde0431f06d8375595c721bef50f8 new file mode 100644 index 0000000..48cfe43 Binary files /dev/null and b/Library/Artifacts/2d/2d4dde0431f06d8375595c721bef50f8 differ diff --git a/Library/Artifacts/2d/2d6d5a702b4ecb309820c77c43b99127 b/Library/Artifacts/2d/2d6d5a702b4ecb309820c77c43b99127 new file mode 100644 index 0000000..570ca7c Binary files /dev/null and b/Library/Artifacts/2d/2d6d5a702b4ecb309820c77c43b99127 differ diff --git a/Library/Artifacts/2d/2d847dd3486d270fd7722b360ac82738 b/Library/Artifacts/2d/2d847dd3486d270fd7722b360ac82738 new file mode 100644 index 0000000..05802aa Binary files /dev/null and b/Library/Artifacts/2d/2d847dd3486d270fd7722b360ac82738 differ diff --git a/Library/Artifacts/2d/2dc885efa1616f0f342042326ab297e2 b/Library/Artifacts/2d/2dc885efa1616f0f342042326ab297e2 new file mode 100644 index 0000000..6467c4b Binary files /dev/null and b/Library/Artifacts/2d/2dc885efa1616f0f342042326ab297e2 differ diff --git a/Library/Artifacts/2d/2df19610510ec13acfbc8c62457148eb b/Library/Artifacts/2d/2df19610510ec13acfbc8c62457148eb new file mode 100644 index 0000000..0640208 Binary files /dev/null and b/Library/Artifacts/2d/2df19610510ec13acfbc8c62457148eb differ diff --git a/Library/Artifacts/2e/2e1d175d940b1a9283568636497a5336 b/Library/Artifacts/2e/2e1d175d940b1a9283568636497a5336 new file mode 100644 index 0000000..d3c410a Binary files /dev/null and b/Library/Artifacts/2e/2e1d175d940b1a9283568636497a5336 differ diff --git a/Library/Artifacts/2e/2e4abef8906379b5411b1da85949de1c b/Library/Artifacts/2e/2e4abef8906379b5411b1da85949de1c new file mode 100644 index 0000000..9c5bc16 Binary files /dev/null and b/Library/Artifacts/2e/2e4abef8906379b5411b1da85949de1c differ diff --git a/Library/Artifacts/2e/2e679b17b0b8efc7d0d4c1fc1cdae31f b/Library/Artifacts/2e/2e679b17b0b8efc7d0d4c1fc1cdae31f new file mode 100644 index 0000000..45ed57e Binary files /dev/null and b/Library/Artifacts/2e/2e679b17b0b8efc7d0d4c1fc1cdae31f differ diff --git a/Library/Artifacts/2e/2e738c0f355787146f26a76c213d27d1 b/Library/Artifacts/2e/2e738c0f355787146f26a76c213d27d1 new file mode 100644 index 0000000..4c7784f Binary files /dev/null and b/Library/Artifacts/2e/2e738c0f355787146f26a76c213d27d1 differ diff --git a/Library/Artifacts/2e/2e9f38779a1430cd4a88da187621c6fc b/Library/Artifacts/2e/2e9f38779a1430cd4a88da187621c6fc new file mode 100644 index 0000000..2756b11 Binary files /dev/null and b/Library/Artifacts/2e/2e9f38779a1430cd4a88da187621c6fc differ diff --git a/Library/Artifacts/2e/2ed7ff2f210d273bc509557aa864005b b/Library/Artifacts/2e/2ed7ff2f210d273bc509557aa864005b new file mode 100644 index 0000000..c93b4a0 Binary files /dev/null and b/Library/Artifacts/2e/2ed7ff2f210d273bc509557aa864005b differ diff --git a/Library/Artifacts/2e/2ede6af250f365011b922fd5686ac12f b/Library/Artifacts/2e/2ede6af250f365011b922fd5686ac12f new file mode 100644 index 0000000..09dae98 Binary files /dev/null and b/Library/Artifacts/2e/2ede6af250f365011b922fd5686ac12f differ diff --git a/Library/Artifacts/2e/2eebd8965716d04a0db81dad12ebb10e b/Library/Artifacts/2e/2eebd8965716d04a0db81dad12ebb10e new file mode 100644 index 0000000..93fe0f5 Binary files /dev/null and b/Library/Artifacts/2e/2eebd8965716d04a0db81dad12ebb10e differ diff --git a/Library/Artifacts/2f/2f0e07adf97d2ebb4b04c37f95b0c44d b/Library/Artifacts/2f/2f0e07adf97d2ebb4b04c37f95b0c44d new file mode 100644 index 0000000..8dd2456 Binary files /dev/null and b/Library/Artifacts/2f/2f0e07adf97d2ebb4b04c37f95b0c44d differ diff --git a/Library/Artifacts/2f/2f2db7c0157dba067747f8d98034f372 b/Library/Artifacts/2f/2f2db7c0157dba067747f8d98034f372 new file mode 100644 index 0000000..0296c25 Binary files /dev/null and b/Library/Artifacts/2f/2f2db7c0157dba067747f8d98034f372 differ diff --git a/Library/Artifacts/2f/2f400878daa66e8e6eb9ee1e93604f41 b/Library/Artifacts/2f/2f400878daa66e8e6eb9ee1e93604f41 new file mode 100644 index 0000000..af279f7 Binary files /dev/null and b/Library/Artifacts/2f/2f400878daa66e8e6eb9ee1e93604f41 differ diff --git a/Library/Artifacts/2f/2f608d203389663b14c4135d734c5b0e b/Library/Artifacts/2f/2f608d203389663b14c4135d734c5b0e new file mode 100644 index 0000000..5cc0f2d Binary files /dev/null and b/Library/Artifacts/2f/2f608d203389663b14c4135d734c5b0e differ diff --git a/Library/Artifacts/2f/2f93ad39ff11c66255f567253fe1422c b/Library/Artifacts/2f/2f93ad39ff11c66255f567253fe1422c new file mode 100644 index 0000000..2c0ef2b Binary files /dev/null and b/Library/Artifacts/2f/2f93ad39ff11c66255f567253fe1422c differ diff --git a/Library/Artifacts/2f/2fe0decdfc3139b3ab84bbacc46a38bc b/Library/Artifacts/2f/2fe0decdfc3139b3ab84bbacc46a38bc new file mode 100644 index 0000000..35224a7 Binary files /dev/null and b/Library/Artifacts/2f/2fe0decdfc3139b3ab84bbacc46a38bc differ diff --git a/Library/Artifacts/2f/2fe166dbed7fcf96295135530f730608 b/Library/Artifacts/2f/2fe166dbed7fcf96295135530f730608 new file mode 100644 index 0000000..22aadbd Binary files /dev/null and b/Library/Artifacts/2f/2fe166dbed7fcf96295135530f730608 differ diff --git a/Library/Artifacts/30/301d2a805b957408c729ce1b6d9d3f47 b/Library/Artifacts/30/301d2a805b957408c729ce1b6d9d3f47 new file mode 100644 index 0000000..162bf34 Binary files /dev/null and b/Library/Artifacts/30/301d2a805b957408c729ce1b6d9d3f47 differ diff --git a/Library/Artifacts/30/30481928779ae94a32b190383d554503 b/Library/Artifacts/30/30481928779ae94a32b190383d554503 new file mode 100644 index 0000000..d78c044 Binary files /dev/null and b/Library/Artifacts/30/30481928779ae94a32b190383d554503 differ diff --git a/Library/Artifacts/30/30f72ab43c8f926f5bd91dbd2c819ae2 b/Library/Artifacts/30/30f72ab43c8f926f5bd91dbd2c819ae2 new file mode 100644 index 0000000..207968b Binary files /dev/null and b/Library/Artifacts/30/30f72ab43c8f926f5bd91dbd2c819ae2 differ diff --git a/Library/Artifacts/31/31146bcd49110d52caf20dbcb7e2b935 b/Library/Artifacts/31/31146bcd49110d52caf20dbcb7e2b935 new file mode 100644 index 0000000..a87c7f4 Binary files /dev/null and b/Library/Artifacts/31/31146bcd49110d52caf20dbcb7e2b935 differ diff --git a/Library/Artifacts/31/312b64eac3d94c33680a326cfea4655e b/Library/Artifacts/31/312b64eac3d94c33680a326cfea4655e new file mode 100644 index 0000000..d8e83e7 Binary files /dev/null and b/Library/Artifacts/31/312b64eac3d94c33680a326cfea4655e differ diff --git a/Library/Artifacts/31/31390783c2ee09756420e9063c536d4b b/Library/Artifacts/31/31390783c2ee09756420e9063c536d4b new file mode 100644 index 0000000..22306e4 Binary files /dev/null and b/Library/Artifacts/31/31390783c2ee09756420e9063c536d4b differ diff --git a/Library/Artifacts/31/315061f97acaf5e610a505361e8e05df b/Library/Artifacts/31/315061f97acaf5e610a505361e8e05df new file mode 100644 index 0000000..b24c917 Binary files /dev/null and b/Library/Artifacts/31/315061f97acaf5e610a505361e8e05df differ diff --git a/Library/Artifacts/31/3155cba6b5a6876abd5dec7533a10619 b/Library/Artifacts/31/3155cba6b5a6876abd5dec7533a10619 new file mode 100644 index 0000000..70e5ac8 Binary files /dev/null and b/Library/Artifacts/31/3155cba6b5a6876abd5dec7533a10619 differ diff --git a/Library/Artifacts/31/31cebc11414109e30a84a47030293a58 b/Library/Artifacts/31/31cebc11414109e30a84a47030293a58 new file mode 100644 index 0000000..dbaad04 Binary files /dev/null and b/Library/Artifacts/31/31cebc11414109e30a84a47030293a58 differ diff --git a/Library/Artifacts/32/321bdb0fcd5492bfed628b3efbd65363 b/Library/Artifacts/32/321bdb0fcd5492bfed628b3efbd65363 new file mode 100644 index 0000000..6429dfd Binary files /dev/null and b/Library/Artifacts/32/321bdb0fcd5492bfed628b3efbd65363 differ diff --git a/Library/Artifacts/32/3241a82fe37ab665133ca8f033dfcd84 b/Library/Artifacts/32/3241a82fe37ab665133ca8f033dfcd84 new file mode 100644 index 0000000..5e1bd8a Binary files /dev/null and b/Library/Artifacts/32/3241a82fe37ab665133ca8f033dfcd84 differ diff --git a/Library/Artifacts/32/3262099ce8726bb3ce307336aae8aac0 b/Library/Artifacts/32/3262099ce8726bb3ce307336aae8aac0 new file mode 100644 index 0000000..392da50 Binary files /dev/null and b/Library/Artifacts/32/3262099ce8726bb3ce307336aae8aac0 differ diff --git a/Library/Artifacts/32/3292688fdcc9924b63eddb139bfe9671 b/Library/Artifacts/32/3292688fdcc9924b63eddb139bfe9671 new file mode 100644 index 0000000..3fd61c9 Binary files /dev/null and b/Library/Artifacts/32/3292688fdcc9924b63eddb139bfe9671 differ diff --git a/Library/Artifacts/33/332fb44b7ad1077a597334ac741ce5ff b/Library/Artifacts/33/332fb44b7ad1077a597334ac741ce5ff new file mode 100644 index 0000000..eb8f29c Binary files /dev/null and b/Library/Artifacts/33/332fb44b7ad1077a597334ac741ce5ff differ diff --git a/Library/Artifacts/33/33472c490c225d5343d013f1a3e20561 b/Library/Artifacts/33/33472c490c225d5343d013f1a3e20561 new file mode 100644 index 0000000..e405df0 Binary files /dev/null and b/Library/Artifacts/33/33472c490c225d5343d013f1a3e20561 differ diff --git a/Library/Artifacts/33/339477e1a3003f05d4af66b41cedc27b b/Library/Artifacts/33/339477e1a3003f05d4af66b41cedc27b new file mode 100644 index 0000000..4712d23 Binary files /dev/null and b/Library/Artifacts/33/339477e1a3003f05d4af66b41cedc27b differ diff --git a/Library/Artifacts/33/339c85c2b3f188b9635880228b001560 b/Library/Artifacts/33/339c85c2b3f188b9635880228b001560 new file mode 100644 index 0000000..079668f Binary files /dev/null and b/Library/Artifacts/33/339c85c2b3f188b9635880228b001560 differ diff --git a/Library/Artifacts/33/33b5cfae4f2d213cd462890c91a6019d b/Library/Artifacts/33/33b5cfae4f2d213cd462890c91a6019d new file mode 100644 index 0000000..44325c2 Binary files /dev/null and b/Library/Artifacts/33/33b5cfae4f2d213cd462890c91a6019d differ diff --git a/Library/Artifacts/33/33bf94198f92d0692bf1c91140bcfba7 b/Library/Artifacts/33/33bf94198f92d0692bf1c91140bcfba7 new file mode 100644 index 0000000..8a482ad Binary files /dev/null and b/Library/Artifacts/33/33bf94198f92d0692bf1c91140bcfba7 differ diff --git a/Library/Artifacts/33/33f496b2c16cd018f3923e437aa15315 b/Library/Artifacts/33/33f496b2c16cd018f3923e437aa15315 new file mode 100644 index 0000000..80d2829 Binary files /dev/null and b/Library/Artifacts/33/33f496b2c16cd018f3923e437aa15315 differ diff --git a/Library/Artifacts/33/33f69ab3bef5640cca8f826129cb1312 b/Library/Artifacts/33/33f69ab3bef5640cca8f826129cb1312 new file mode 100644 index 0000000..32bdf97 Binary files /dev/null and b/Library/Artifacts/33/33f69ab3bef5640cca8f826129cb1312 differ diff --git a/Library/Artifacts/33/33ffffbf0608628e11e75d8caae4a596 b/Library/Artifacts/33/33ffffbf0608628e11e75d8caae4a596 new file mode 100644 index 0000000..677d4e4 Binary files /dev/null and b/Library/Artifacts/33/33ffffbf0608628e11e75d8caae4a596 differ diff --git a/Library/Artifacts/34/340cfcfa453d84a56b0fa34ebf44d470 b/Library/Artifacts/34/340cfcfa453d84a56b0fa34ebf44d470 new file mode 100644 index 0000000..1e18a7c Binary files /dev/null and b/Library/Artifacts/34/340cfcfa453d84a56b0fa34ebf44d470 differ diff --git a/Library/Artifacts/34/343d7299db1e75ae05ef55e6b9766941 b/Library/Artifacts/34/343d7299db1e75ae05ef55e6b9766941 new file mode 100644 index 0000000..47c50ee Binary files /dev/null and b/Library/Artifacts/34/343d7299db1e75ae05ef55e6b9766941 differ diff --git a/Library/Artifacts/34/344f8b36c58be6e55f00d3fa63f04eff b/Library/Artifacts/34/344f8b36c58be6e55f00d3fa63f04eff new file mode 100644 index 0000000..7ead584 Binary files /dev/null and b/Library/Artifacts/34/344f8b36c58be6e55f00d3fa63f04eff differ diff --git a/Library/Artifacts/34/34d3ff1f22feb91fbca195cfa79ff4b8 b/Library/Artifacts/34/34d3ff1f22feb91fbca195cfa79ff4b8 new file mode 100644 index 0000000..5ad7956 Binary files /dev/null and b/Library/Artifacts/34/34d3ff1f22feb91fbca195cfa79ff4b8 differ diff --git a/Library/Artifacts/35/352b251d3ab4062bf7ca1479893bf302 b/Library/Artifacts/35/352b251d3ab4062bf7ca1479893bf302 new file mode 100644 index 0000000..4920ad4 Binary files /dev/null and b/Library/Artifacts/35/352b251d3ab4062bf7ca1479893bf302 differ diff --git a/Library/Artifacts/35/3585c4e7700e1f3fc6c42a4494e4df2b b/Library/Artifacts/35/3585c4e7700e1f3fc6c42a4494e4df2b new file mode 100644 index 0000000..2cc7ec2 Binary files /dev/null and b/Library/Artifacts/35/3585c4e7700e1f3fc6c42a4494e4df2b differ diff --git a/Library/Artifacts/36/3610beeeb94a29f18f1c3da276d1d505 b/Library/Artifacts/36/3610beeeb94a29f18f1c3da276d1d505 new file mode 100644 index 0000000..22ed265 Binary files /dev/null and b/Library/Artifacts/36/3610beeeb94a29f18f1c3da276d1d505 differ diff --git a/Library/Artifacts/36/364ae3db70f9439cf0c33b0f076d5aff b/Library/Artifacts/36/364ae3db70f9439cf0c33b0f076d5aff new file mode 100644 index 0000000..1c981d1 Binary files /dev/null and b/Library/Artifacts/36/364ae3db70f9439cf0c33b0f076d5aff differ diff --git a/Library/Artifacts/36/366f4254bfa8841a9f79bb19df84615b b/Library/Artifacts/36/366f4254bfa8841a9f79bb19df84615b new file mode 100644 index 0000000..53eff16 Binary files /dev/null and b/Library/Artifacts/36/366f4254bfa8841a9f79bb19df84615b differ diff --git a/Library/Artifacts/37/371bd1ae8b5402618e5d4fe40c2d5971 b/Library/Artifacts/37/371bd1ae8b5402618e5d4fe40c2d5971 new file mode 100644 index 0000000..ac1e7d2 Binary files /dev/null and b/Library/Artifacts/37/371bd1ae8b5402618e5d4fe40c2d5971 differ diff --git a/Library/Artifacts/37/37313f43564307f2fd5b8b3a7bd29c09 b/Library/Artifacts/37/37313f43564307f2fd5b8b3a7bd29c09 new file mode 100644 index 0000000..254f710 Binary files /dev/null and b/Library/Artifacts/37/37313f43564307f2fd5b8b3a7bd29c09 differ diff --git a/Library/Artifacts/37/375ab6d8e1bf7844f6624747eac9dc5a b/Library/Artifacts/37/375ab6d8e1bf7844f6624747eac9dc5a new file mode 100644 index 0000000..3c0fc8c Binary files /dev/null and b/Library/Artifacts/37/375ab6d8e1bf7844f6624747eac9dc5a differ diff --git a/Library/Artifacts/37/37682686e667db8bef104cfa664e14b2 b/Library/Artifacts/37/37682686e667db8bef104cfa664e14b2 new file mode 100644 index 0000000..73196fe Binary files /dev/null and b/Library/Artifacts/37/37682686e667db8bef104cfa664e14b2 differ diff --git a/Library/Artifacts/37/37a5d2f21241146665b5a7f410c804c1 b/Library/Artifacts/37/37a5d2f21241146665b5a7f410c804c1 new file mode 100644 index 0000000..d7d2e9d Binary files /dev/null and b/Library/Artifacts/37/37a5d2f21241146665b5a7f410c804c1 differ diff --git a/Library/Artifacts/37/37bee9b8072e9e71f4af6ef5152ac205 b/Library/Artifacts/37/37bee9b8072e9e71f4af6ef5152ac205 new file mode 100644 index 0000000..c3028e4 Binary files /dev/null and b/Library/Artifacts/37/37bee9b8072e9e71f4af6ef5152ac205 differ diff --git a/Library/Artifacts/37/37c5798009f101064246bc7c223f6201 b/Library/Artifacts/37/37c5798009f101064246bc7c223f6201 new file mode 100644 index 0000000..7d5dc9c Binary files /dev/null and b/Library/Artifacts/37/37c5798009f101064246bc7c223f6201 differ diff --git a/Library/Artifacts/37/37e5c582e0236894b2bf976a82cead92 b/Library/Artifacts/37/37e5c582e0236894b2bf976a82cead92 new file mode 100644 index 0000000..3471073 Binary files /dev/null and b/Library/Artifacts/37/37e5c582e0236894b2bf976a82cead92 differ diff --git a/Library/Artifacts/38/3827829f1a9fa0085e8104e0a9c6dc94 b/Library/Artifacts/38/3827829f1a9fa0085e8104e0a9c6dc94 new file mode 100644 index 0000000..4965982 Binary files /dev/null and b/Library/Artifacts/38/3827829f1a9fa0085e8104e0a9c6dc94 differ diff --git a/Library/Artifacts/38/3833f9815358e8bc9a26bac5585764d3 b/Library/Artifacts/38/3833f9815358e8bc9a26bac5585764d3 new file mode 100644 index 0000000..4342ab6 Binary files /dev/null and b/Library/Artifacts/38/3833f9815358e8bc9a26bac5585764d3 differ diff --git a/Library/Artifacts/38/38458aeb7fffcd4316efc0b8e67370e8 b/Library/Artifacts/38/38458aeb7fffcd4316efc0b8e67370e8 new file mode 100644 index 0000000..2ff816a Binary files /dev/null and b/Library/Artifacts/38/38458aeb7fffcd4316efc0b8e67370e8 differ diff --git a/Library/Artifacts/38/38505357239ff7fb23bf8064e0e802ce b/Library/Artifacts/38/38505357239ff7fb23bf8064e0e802ce new file mode 100644 index 0000000..320cca8 Binary files /dev/null and b/Library/Artifacts/38/38505357239ff7fb23bf8064e0e802ce differ diff --git a/Library/Artifacts/38/38566d987fac5c3483753eebe1a92b1d b/Library/Artifacts/38/38566d987fac5c3483753eebe1a92b1d new file mode 100644 index 0000000..9bc5d9b Binary files /dev/null and b/Library/Artifacts/38/38566d987fac5c3483753eebe1a92b1d differ diff --git a/Library/Artifacts/38/38ac021ac38e8b225cc5d8a57522fb48 b/Library/Artifacts/38/38ac021ac38e8b225cc5d8a57522fb48 new file mode 100644 index 0000000..4428c8b Binary files /dev/null and b/Library/Artifacts/38/38ac021ac38e8b225cc5d8a57522fb48 differ diff --git a/Library/Artifacts/38/38bc7f27f8b6b7f12002a86ec48f9cdc b/Library/Artifacts/38/38bc7f27f8b6b7f12002a86ec48f9cdc new file mode 100644 index 0000000..82f562d Binary files /dev/null and b/Library/Artifacts/38/38bc7f27f8b6b7f12002a86ec48f9cdc differ diff --git a/Library/Artifacts/38/38e4fd2958293ef0837fae83b4db6caf b/Library/Artifacts/38/38e4fd2958293ef0837fae83b4db6caf new file mode 100644 index 0000000..64ffa36 Binary files /dev/null and b/Library/Artifacts/38/38e4fd2958293ef0837fae83b4db6caf differ diff --git a/Library/Artifacts/39/396135e9840caf759a6817c4ee0b3137 b/Library/Artifacts/39/396135e9840caf759a6817c4ee0b3137 new file mode 100644 index 0000000..d86f3d9 Binary files /dev/null and b/Library/Artifacts/39/396135e9840caf759a6817c4ee0b3137 differ diff --git a/Library/Artifacts/39/39781d2524cf795e9f7d37b7ebfc8b08 b/Library/Artifacts/39/39781d2524cf795e9f7d37b7ebfc8b08 new file mode 100644 index 0000000..12cebf3 Binary files /dev/null and b/Library/Artifacts/39/39781d2524cf795e9f7d37b7ebfc8b08 differ diff --git a/Library/Artifacts/39/398a1087a52c111660f921caa271bf6d b/Library/Artifacts/39/398a1087a52c111660f921caa271bf6d new file mode 100644 index 0000000..7f7a536 Binary files /dev/null and b/Library/Artifacts/39/398a1087a52c111660f921caa271bf6d differ diff --git a/Library/Artifacts/39/398a478dfe447f86b2329c1530b4ec93 b/Library/Artifacts/39/398a478dfe447f86b2329c1530b4ec93 new file mode 100644 index 0000000..cd1eef6 Binary files /dev/null and b/Library/Artifacts/39/398a478dfe447f86b2329c1530b4ec93 differ diff --git a/Library/Artifacts/39/39bfe240698f9ae953b5221c118fb4d6 b/Library/Artifacts/39/39bfe240698f9ae953b5221c118fb4d6 new file mode 100644 index 0000000..66a5fda Binary files /dev/null and b/Library/Artifacts/39/39bfe240698f9ae953b5221c118fb4d6 differ diff --git a/Library/Artifacts/39/39d15b1e409260b2205ede5f464ff657 b/Library/Artifacts/39/39d15b1e409260b2205ede5f464ff657 new file mode 100644 index 0000000..9408a0b Binary files /dev/null and b/Library/Artifacts/39/39d15b1e409260b2205ede5f464ff657 differ diff --git a/Library/Artifacts/39/39f090952b33e6ecb0fe3575a64c19d4 b/Library/Artifacts/39/39f090952b33e6ecb0fe3575a64c19d4 new file mode 100644 index 0000000..2406836 Binary files /dev/null and b/Library/Artifacts/39/39f090952b33e6ecb0fe3575a64c19d4 differ diff --git a/Library/Artifacts/3a/3a05efd7e426d16ad96f12365120dd75 b/Library/Artifacts/3a/3a05efd7e426d16ad96f12365120dd75 new file mode 100644 index 0000000..d42cefa Binary files /dev/null and b/Library/Artifacts/3a/3a05efd7e426d16ad96f12365120dd75 differ diff --git a/Library/Artifacts/3a/3aae955f8b50367b0d4b8b4b3834a33b b/Library/Artifacts/3a/3aae955f8b50367b0d4b8b4b3834a33b new file mode 100644 index 0000000..e3fe486 Binary files /dev/null and b/Library/Artifacts/3a/3aae955f8b50367b0d4b8b4b3834a33b differ diff --git a/Library/Artifacts/3a/3adb92abb227838a9bab0ea9923e4d33 b/Library/Artifacts/3a/3adb92abb227838a9bab0ea9923e4d33 new file mode 100644 index 0000000..74cfd05 Binary files /dev/null and b/Library/Artifacts/3a/3adb92abb227838a9bab0ea9923e4d33 differ diff --git a/Library/Artifacts/3a/3ae5e68eacce4a66ed11b1794bbb1648 b/Library/Artifacts/3a/3ae5e68eacce4a66ed11b1794bbb1648 new file mode 100644 index 0000000..e1198d1 Binary files /dev/null and b/Library/Artifacts/3a/3ae5e68eacce4a66ed11b1794bbb1648 differ diff --git a/Library/Artifacts/3a/3ae8754b6bed0275720700ed9cb19d02 b/Library/Artifacts/3a/3ae8754b6bed0275720700ed9cb19d02 new file mode 100644 index 0000000..a53325a Binary files /dev/null and b/Library/Artifacts/3a/3ae8754b6bed0275720700ed9cb19d02 differ diff --git a/Library/Artifacts/3a/3af72cb6346d605ecf18faf57c6456e5 b/Library/Artifacts/3a/3af72cb6346d605ecf18faf57c6456e5 new file mode 100644 index 0000000..2a42f22 Binary files /dev/null and b/Library/Artifacts/3a/3af72cb6346d605ecf18faf57c6456e5 differ diff --git a/Library/Artifacts/3b/3b1b7e5d9c9365f8b035af3235ffe278 b/Library/Artifacts/3b/3b1b7e5d9c9365f8b035af3235ffe278 new file mode 100644 index 0000000..5ee0e0c Binary files /dev/null and b/Library/Artifacts/3b/3b1b7e5d9c9365f8b035af3235ffe278 differ diff --git a/Library/Artifacts/3b/3b2cab0fd4fc17bbf1c6d75ba783bcdd b/Library/Artifacts/3b/3b2cab0fd4fc17bbf1c6d75ba783bcdd new file mode 100644 index 0000000..e5cf4c5 Binary files /dev/null and b/Library/Artifacts/3b/3b2cab0fd4fc17bbf1c6d75ba783bcdd differ diff --git a/Library/Artifacts/3b/3b4ac39eb914b38f8d8806ad13472f8b b/Library/Artifacts/3b/3b4ac39eb914b38f8d8806ad13472f8b new file mode 100644 index 0000000..80e817e Binary files /dev/null and b/Library/Artifacts/3b/3b4ac39eb914b38f8d8806ad13472f8b differ diff --git a/Library/Artifacts/3b/3b76e03cc6134422d4670a14dab598d2 b/Library/Artifacts/3b/3b76e03cc6134422d4670a14dab598d2 new file mode 100644 index 0000000..fb2def4 Binary files /dev/null and b/Library/Artifacts/3b/3b76e03cc6134422d4670a14dab598d2 differ diff --git a/Library/Artifacts/3b/3b7e15b56126ad3d14570f62a9a8cc46 b/Library/Artifacts/3b/3b7e15b56126ad3d14570f62a9a8cc46 new file mode 100644 index 0000000..18d4239 Binary files /dev/null and b/Library/Artifacts/3b/3b7e15b56126ad3d14570f62a9a8cc46 differ diff --git a/Library/Artifacts/3b/3b96dc0f0ea78303f0b7ab4d9cccd835 b/Library/Artifacts/3b/3b96dc0f0ea78303f0b7ab4d9cccd835 new file mode 100644 index 0000000..2ef9890 Binary files /dev/null and b/Library/Artifacts/3b/3b96dc0f0ea78303f0b7ab4d9cccd835 differ diff --git a/Library/Artifacts/3b/3bc73bae4b6a4f0cc33899c1e73acd50 b/Library/Artifacts/3b/3bc73bae4b6a4f0cc33899c1e73acd50 new file mode 100644 index 0000000..20081a6 Binary files /dev/null and b/Library/Artifacts/3b/3bc73bae4b6a4f0cc33899c1e73acd50 differ diff --git a/Library/Artifacts/3c/3c236318bb347fa9ba79fb12438d785c b/Library/Artifacts/3c/3c236318bb347fa9ba79fb12438d785c new file mode 100644 index 0000000..7e48b12 Binary files /dev/null and b/Library/Artifacts/3c/3c236318bb347fa9ba79fb12438d785c differ diff --git a/Library/Artifacts/3c/3c77366c4e3f5a29bf7e73302c84e43e b/Library/Artifacts/3c/3c77366c4e3f5a29bf7e73302c84e43e new file mode 100644 index 0000000..b983f59 Binary files /dev/null and b/Library/Artifacts/3c/3c77366c4e3f5a29bf7e73302c84e43e differ diff --git a/Library/Artifacts/3c/3c86436b3e5e8159edca4aafedfd8567 b/Library/Artifacts/3c/3c86436b3e5e8159edca4aafedfd8567 new file mode 100644 index 0000000..91ab715 Binary files /dev/null and b/Library/Artifacts/3c/3c86436b3e5e8159edca4aafedfd8567 differ diff --git a/Library/Artifacts/3c/3c9a45d43eb1be73f55d3ac2753aa683 b/Library/Artifacts/3c/3c9a45d43eb1be73f55d3ac2753aa683 new file mode 100644 index 0000000..8e1d8b7 Binary files /dev/null and b/Library/Artifacts/3c/3c9a45d43eb1be73f55d3ac2753aa683 differ diff --git a/Library/Artifacts/3c/3ccf9007523111492c8d627d665fbe27 b/Library/Artifacts/3c/3ccf9007523111492c8d627d665fbe27 new file mode 100644 index 0000000..355f18e Binary files /dev/null and b/Library/Artifacts/3c/3ccf9007523111492c8d627d665fbe27 differ diff --git a/Library/Artifacts/3c/3cd3afe97ff43350a61afcd336f5f65f b/Library/Artifacts/3c/3cd3afe97ff43350a61afcd336f5f65f new file mode 100644 index 0000000..f3063d9 Binary files /dev/null and b/Library/Artifacts/3c/3cd3afe97ff43350a61afcd336f5f65f differ diff --git a/Library/Artifacts/3c/3ce57eca4cf365e6dc044f95d67be609 b/Library/Artifacts/3c/3ce57eca4cf365e6dc044f95d67be609 new file mode 100644 index 0000000..e331e9d Binary files /dev/null and b/Library/Artifacts/3c/3ce57eca4cf365e6dc044f95d67be609 differ diff --git a/Library/Artifacts/3c/3ce6f6d7afb665438f210aac24ca1a85 b/Library/Artifacts/3c/3ce6f6d7afb665438f210aac24ca1a85 new file mode 100644 index 0000000..3488c05 Binary files /dev/null and b/Library/Artifacts/3c/3ce6f6d7afb665438f210aac24ca1a85 differ diff --git a/Library/Artifacts/3d/3d115495dc17f09c8f2788dfa2eb56f8 b/Library/Artifacts/3d/3d115495dc17f09c8f2788dfa2eb56f8 new file mode 100644 index 0000000..b9f82a8 Binary files /dev/null and b/Library/Artifacts/3d/3d115495dc17f09c8f2788dfa2eb56f8 differ diff --git a/Library/Artifacts/3d/3d31c6b2c910190d0d7f363af6fcbc4c b/Library/Artifacts/3d/3d31c6b2c910190d0d7f363af6fcbc4c new file mode 100644 index 0000000..c1c7c6c Binary files /dev/null and b/Library/Artifacts/3d/3d31c6b2c910190d0d7f363af6fcbc4c differ diff --git a/Library/Artifacts/3d/3d911c1d3897dc4e1a0225c79df7a233 b/Library/Artifacts/3d/3d911c1d3897dc4e1a0225c79df7a233 new file mode 100644 index 0000000..74d12b5 Binary files /dev/null and b/Library/Artifacts/3d/3d911c1d3897dc4e1a0225c79df7a233 differ diff --git a/Library/Artifacts/3d/3da598fa08cfb9879b37424b8d3ca990 b/Library/Artifacts/3d/3da598fa08cfb9879b37424b8d3ca990 new file mode 100644 index 0000000..db0a883 Binary files /dev/null and b/Library/Artifacts/3d/3da598fa08cfb9879b37424b8d3ca990 differ diff --git a/Library/Artifacts/3d/3ddea8aa6936a7205f0bfa20b2cac625 b/Library/Artifacts/3d/3ddea8aa6936a7205f0bfa20b2cac625 new file mode 100644 index 0000000..994c6d8 Binary files /dev/null and b/Library/Artifacts/3d/3ddea8aa6936a7205f0bfa20b2cac625 differ diff --git a/Library/Artifacts/3d/3de3ed75cfb71d38444a407d26b902d3 b/Library/Artifacts/3d/3de3ed75cfb71d38444a407d26b902d3 new file mode 100644 index 0000000..a439087 Binary files /dev/null and b/Library/Artifacts/3d/3de3ed75cfb71d38444a407d26b902d3 differ diff --git a/Library/Artifacts/3e/3e020cda1c716423532d30d64208b20b b/Library/Artifacts/3e/3e020cda1c716423532d30d64208b20b new file mode 100644 index 0000000..5324a07 Binary files /dev/null and b/Library/Artifacts/3e/3e020cda1c716423532d30d64208b20b differ diff --git a/Library/Artifacts/3e/3e03e07310c190651021b7492700ee8c b/Library/Artifacts/3e/3e03e07310c190651021b7492700ee8c new file mode 100644 index 0000000..728faa3 Binary files /dev/null and b/Library/Artifacts/3e/3e03e07310c190651021b7492700ee8c differ diff --git a/Library/Artifacts/3e/3e224850573209509df7c1e38d89583c b/Library/Artifacts/3e/3e224850573209509df7c1e38d89583c new file mode 100644 index 0000000..5e039b0 Binary files /dev/null and b/Library/Artifacts/3e/3e224850573209509df7c1e38d89583c differ diff --git a/Library/Artifacts/3e/3e45383b22dfa2ac849ce41663c5fe32 b/Library/Artifacts/3e/3e45383b22dfa2ac849ce41663c5fe32 new file mode 100644 index 0000000..2c1b58c Binary files /dev/null and b/Library/Artifacts/3e/3e45383b22dfa2ac849ce41663c5fe32 differ diff --git a/Library/Artifacts/3e/3e9243594859df900e537d519f8d9907 b/Library/Artifacts/3e/3e9243594859df900e537d519f8d9907 new file mode 100644 index 0000000..036a44c Binary files /dev/null and b/Library/Artifacts/3e/3e9243594859df900e537d519f8d9907 differ diff --git a/Library/Artifacts/3e/3eb2d80fa456faa904f56541e54ca951 b/Library/Artifacts/3e/3eb2d80fa456faa904f56541e54ca951 new file mode 100644 index 0000000..00d7597 Binary files /dev/null and b/Library/Artifacts/3e/3eb2d80fa456faa904f56541e54ca951 differ diff --git a/Library/Artifacts/3e/3eb87ad3267b1653dd4c96ed6f82db2f b/Library/Artifacts/3e/3eb87ad3267b1653dd4c96ed6f82db2f new file mode 100644 index 0000000..f72578d Binary files /dev/null and b/Library/Artifacts/3e/3eb87ad3267b1653dd4c96ed6f82db2f differ diff --git a/Library/Artifacts/3e/3efccc31ea1cf09ffb73010a4a7f8b5a b/Library/Artifacts/3e/3efccc31ea1cf09ffb73010a4a7f8b5a new file mode 100644 index 0000000..a944859 Binary files /dev/null and b/Library/Artifacts/3e/3efccc31ea1cf09ffb73010a4a7f8b5a differ diff --git a/Library/Artifacts/3f/3f144a7277bde67f0d5b6e627d967375 b/Library/Artifacts/3f/3f144a7277bde67f0d5b6e627d967375 new file mode 100644 index 0000000..e858a6a Binary files /dev/null and b/Library/Artifacts/3f/3f144a7277bde67f0d5b6e627d967375 differ diff --git a/Library/Artifacts/3f/3f1deb1a9b242f6f1579865c0e88f9cc b/Library/Artifacts/3f/3f1deb1a9b242f6f1579865c0e88f9cc new file mode 100644 index 0000000..0378670 Binary files /dev/null and b/Library/Artifacts/3f/3f1deb1a9b242f6f1579865c0e88f9cc differ diff --git a/Library/Artifacts/3f/3f2feb78341c296675119898c3fa971e b/Library/Artifacts/3f/3f2feb78341c296675119898c3fa971e new file mode 100644 index 0000000..25857ba Binary files /dev/null and b/Library/Artifacts/3f/3f2feb78341c296675119898c3fa971e differ diff --git a/Library/Artifacts/3f/3f553d38907b34dca437f1114b7bcec0 b/Library/Artifacts/3f/3f553d38907b34dca437f1114b7bcec0 new file mode 100644 index 0000000..5a13e91 Binary files /dev/null and b/Library/Artifacts/3f/3f553d38907b34dca437f1114b7bcec0 differ diff --git a/Library/Artifacts/3f/3f644676149468493a20b9aeb11d128c b/Library/Artifacts/3f/3f644676149468493a20b9aeb11d128c new file mode 100644 index 0000000..28b9195 Binary files /dev/null and b/Library/Artifacts/3f/3f644676149468493a20b9aeb11d128c differ diff --git a/Library/Artifacts/3f/3f878ef34779674a3880a4f567a87ff5 b/Library/Artifacts/3f/3f878ef34779674a3880a4f567a87ff5 new file mode 100644 index 0000000..6747ee5 Binary files /dev/null and b/Library/Artifacts/3f/3f878ef34779674a3880a4f567a87ff5 differ diff --git a/Library/Artifacts/40/40566722eb2c9f8739ebd7bade9a3bcf b/Library/Artifacts/40/40566722eb2c9f8739ebd7bade9a3bcf new file mode 100644 index 0000000..d79195d Binary files /dev/null and b/Library/Artifacts/40/40566722eb2c9f8739ebd7bade9a3bcf differ diff --git a/Library/Artifacts/40/4059563320d3b945ca14ee33a794a451 b/Library/Artifacts/40/4059563320d3b945ca14ee33a794a451 new file mode 100644 index 0000000..3cd9556 Binary files /dev/null and b/Library/Artifacts/40/4059563320d3b945ca14ee33a794a451 differ diff --git a/Library/Artifacts/40/406175b55a61baafb83393a18b4e4ec8 b/Library/Artifacts/40/406175b55a61baafb83393a18b4e4ec8 new file mode 100644 index 0000000..0bde48a Binary files /dev/null and b/Library/Artifacts/40/406175b55a61baafb83393a18b4e4ec8 differ diff --git a/Library/Artifacts/40/40a1263ae11a6d7b9071d4d7148cdfc3 b/Library/Artifacts/40/40a1263ae11a6d7b9071d4d7148cdfc3 new file mode 100644 index 0000000..8533c1d Binary files /dev/null and b/Library/Artifacts/40/40a1263ae11a6d7b9071d4d7148cdfc3 differ diff --git a/Library/Artifacts/40/40ad7ab4aff859ab0d0f8923325eda9a b/Library/Artifacts/40/40ad7ab4aff859ab0d0f8923325eda9a new file mode 100644 index 0000000..17f9255 Binary files /dev/null and b/Library/Artifacts/40/40ad7ab4aff859ab0d0f8923325eda9a differ diff --git a/Library/Artifacts/40/40f0d4138e9d28eaeadb35c6cd39c86a b/Library/Artifacts/40/40f0d4138e9d28eaeadb35c6cd39c86a new file mode 100644 index 0000000..9583a2c Binary files /dev/null and b/Library/Artifacts/40/40f0d4138e9d28eaeadb35c6cd39c86a differ diff --git a/Library/Artifacts/41/411a14de3f1b19ad2f222e92ac3ae475 b/Library/Artifacts/41/411a14de3f1b19ad2f222e92ac3ae475 new file mode 100644 index 0000000..4a41c33 Binary files /dev/null and b/Library/Artifacts/41/411a14de3f1b19ad2f222e92ac3ae475 differ diff --git a/Library/Artifacts/41/413ac0edb76098ecb685082b760d716d b/Library/Artifacts/41/413ac0edb76098ecb685082b760d716d new file mode 100644 index 0000000..657547e Binary files /dev/null and b/Library/Artifacts/41/413ac0edb76098ecb685082b760d716d differ diff --git a/Library/Artifacts/41/417cb8baf25dd7818adced4177f67c52 b/Library/Artifacts/41/417cb8baf25dd7818adced4177f67c52 new file mode 100644 index 0000000..2f89fc5 Binary files /dev/null and b/Library/Artifacts/41/417cb8baf25dd7818adced4177f67c52 differ diff --git a/Library/Artifacts/41/41c6c5869236961c25aec4229d604fdb b/Library/Artifacts/41/41c6c5869236961c25aec4229d604fdb new file mode 100644 index 0000000..ca295a2 Binary files /dev/null and b/Library/Artifacts/41/41c6c5869236961c25aec4229d604fdb differ diff --git a/Library/Artifacts/42/42036390230ed0c002a4aed8cd8e6304 b/Library/Artifacts/42/42036390230ed0c002a4aed8cd8e6304 new file mode 100644 index 0000000..d65cb02 Binary files /dev/null and b/Library/Artifacts/42/42036390230ed0c002a4aed8cd8e6304 differ diff --git a/Library/Artifacts/42/4249bc41032c5f80e45e6315de8a2d03 b/Library/Artifacts/42/4249bc41032c5f80e45e6315de8a2d03 new file mode 100644 index 0000000..d4019b9 Binary files /dev/null and b/Library/Artifacts/42/4249bc41032c5f80e45e6315de8a2d03 differ diff --git a/Library/Artifacts/43/4365ccb32b17bfa6d351f5bdb035f967 b/Library/Artifacts/43/4365ccb32b17bfa6d351f5bdb035f967 new file mode 100644 index 0000000..b13b0fb Binary files /dev/null and b/Library/Artifacts/43/4365ccb32b17bfa6d351f5bdb035f967 differ diff --git a/Library/Artifacts/43/436ffcc900c5e7b4be42e1c930392557 b/Library/Artifacts/43/436ffcc900c5e7b4be42e1c930392557 new file mode 100644 index 0000000..f52a80f Binary files /dev/null and b/Library/Artifacts/43/436ffcc900c5e7b4be42e1c930392557 differ diff --git a/Library/Artifacts/43/43a98529fd7bc49cd930fda59cb73610 b/Library/Artifacts/43/43a98529fd7bc49cd930fda59cb73610 new file mode 100644 index 0000000..8eb36aa Binary files /dev/null and b/Library/Artifacts/43/43a98529fd7bc49cd930fda59cb73610 differ diff --git a/Library/Artifacts/43/43e90fb3cd1f2326ec4f8a53ee11dcc9 b/Library/Artifacts/43/43e90fb3cd1f2326ec4f8a53ee11dcc9 new file mode 100644 index 0000000..705a5db Binary files /dev/null and b/Library/Artifacts/43/43e90fb3cd1f2326ec4f8a53ee11dcc9 differ diff --git a/Library/Artifacts/43/43fb3343b0c5cd60ca853c2c4e346dd9 b/Library/Artifacts/43/43fb3343b0c5cd60ca853c2c4e346dd9 new file mode 100644 index 0000000..6da8665 Binary files /dev/null and b/Library/Artifacts/43/43fb3343b0c5cd60ca853c2c4e346dd9 differ diff --git a/Library/Artifacts/44/442268ac77101f73f2d60dea2dcd9462 b/Library/Artifacts/44/442268ac77101f73f2d60dea2dcd9462 new file mode 100644 index 0000000..2511a73 Binary files /dev/null and b/Library/Artifacts/44/442268ac77101f73f2d60dea2dcd9462 differ diff --git a/Library/Artifacts/44/44294f3ff12cac9dc5ce448752c37134 b/Library/Artifacts/44/44294f3ff12cac9dc5ce448752c37134 new file mode 100644 index 0000000..957ef15 Binary files /dev/null and b/Library/Artifacts/44/44294f3ff12cac9dc5ce448752c37134 differ diff --git a/Library/Artifacts/44/4438da17c2d0eaa885f4e29ff280d8c5 b/Library/Artifacts/44/4438da17c2d0eaa885f4e29ff280d8c5 new file mode 100644 index 0000000..5fdfb27 Binary files /dev/null and b/Library/Artifacts/44/4438da17c2d0eaa885f4e29ff280d8c5 differ diff --git a/Library/Artifacts/44/44b2c1aed0d141d614d2ba8fc90e1931 b/Library/Artifacts/44/44b2c1aed0d141d614d2ba8fc90e1931 new file mode 100644 index 0000000..e9e0fe6 Binary files /dev/null and b/Library/Artifacts/44/44b2c1aed0d141d614d2ba8fc90e1931 differ diff --git a/Library/Artifacts/44/44cab0080c32dc3e056b8162bfd3943d b/Library/Artifacts/44/44cab0080c32dc3e056b8162bfd3943d new file mode 100644 index 0000000..ba11f28 Binary files /dev/null and b/Library/Artifacts/44/44cab0080c32dc3e056b8162bfd3943d differ diff --git a/Library/Artifacts/44/44cb1bd6a3147f6b6209eb18f6f37125 b/Library/Artifacts/44/44cb1bd6a3147f6b6209eb18f6f37125 new file mode 100644 index 0000000..a8fea00 Binary files /dev/null and b/Library/Artifacts/44/44cb1bd6a3147f6b6209eb18f6f37125 differ diff --git a/Library/Artifacts/44/44edd0e1ba367dfa588627ddd51cbdbb b/Library/Artifacts/44/44edd0e1ba367dfa588627ddd51cbdbb new file mode 100644 index 0000000..ecfc771 Binary files /dev/null and b/Library/Artifacts/44/44edd0e1ba367dfa588627ddd51cbdbb differ diff --git a/Library/Artifacts/45/451ff88d0441d72891f1bd591f3b78b3 b/Library/Artifacts/45/451ff88d0441d72891f1bd591f3b78b3 new file mode 100644 index 0000000..fc5a5e7 Binary files /dev/null and b/Library/Artifacts/45/451ff88d0441d72891f1bd591f3b78b3 differ diff --git a/Library/Artifacts/45/454264059d076c4cec018b695bafd849 b/Library/Artifacts/45/454264059d076c4cec018b695bafd849 new file mode 100644 index 0000000..61bda00 Binary files /dev/null and b/Library/Artifacts/45/454264059d076c4cec018b695bafd849 differ diff --git a/Library/Artifacts/45/454485bdb92306faae51fd6c123b43e7 b/Library/Artifacts/45/454485bdb92306faae51fd6c123b43e7 new file mode 100644 index 0000000..b2d55be Binary files /dev/null and b/Library/Artifacts/45/454485bdb92306faae51fd6c123b43e7 differ diff --git a/Library/Artifacts/45/4546b597d677a8ac9b799d4917ac18c1 b/Library/Artifacts/45/4546b597d677a8ac9b799d4917ac18c1 new file mode 100644 index 0000000..6531f7a Binary files /dev/null and b/Library/Artifacts/45/4546b597d677a8ac9b799d4917ac18c1 differ diff --git a/Library/Artifacts/45/45f530864d94527386aefcd90530bbf9 b/Library/Artifacts/45/45f530864d94527386aefcd90530bbf9 new file mode 100644 index 0000000..b962a67 Binary files /dev/null and b/Library/Artifacts/45/45f530864d94527386aefcd90530bbf9 differ diff --git a/Library/Artifacts/46/462ef9ed8535f6d5913a207cfa5dd6c3 b/Library/Artifacts/46/462ef9ed8535f6d5913a207cfa5dd6c3 new file mode 100644 index 0000000..2fa7aae Binary files /dev/null and b/Library/Artifacts/46/462ef9ed8535f6d5913a207cfa5dd6c3 differ diff --git a/Library/Artifacts/46/465c4e6647578467015b63113fcb5e14 b/Library/Artifacts/46/465c4e6647578467015b63113fcb5e14 new file mode 100644 index 0000000..221bbe0 Binary files /dev/null and b/Library/Artifacts/46/465c4e6647578467015b63113fcb5e14 differ diff --git a/Library/Artifacts/46/467e0343b8d2c05bc912479ddac7b013 b/Library/Artifacts/46/467e0343b8d2c05bc912479ddac7b013 new file mode 100644 index 0000000..e8476c2 Binary files /dev/null and b/Library/Artifacts/46/467e0343b8d2c05bc912479ddac7b013 differ diff --git a/Library/Artifacts/46/469b2b15808088845e882a92f29a058d b/Library/Artifacts/46/469b2b15808088845e882a92f29a058d new file mode 100644 index 0000000..9317df9 Binary files /dev/null and b/Library/Artifacts/46/469b2b15808088845e882a92f29a058d differ diff --git a/Library/Artifacts/47/4775e4a018932639704c718b097c2432 b/Library/Artifacts/47/4775e4a018932639704c718b097c2432 new file mode 100644 index 0000000..a62efa4 Binary files /dev/null and b/Library/Artifacts/47/4775e4a018932639704c718b097c2432 differ diff --git a/Library/Artifacts/47/4779b50a5741e0237ceec3c54a69cc79 b/Library/Artifacts/47/4779b50a5741e0237ceec3c54a69cc79 new file mode 100644 index 0000000..9484e6f Binary files /dev/null and b/Library/Artifacts/47/4779b50a5741e0237ceec3c54a69cc79 differ diff --git a/Library/Artifacts/48/4808638ca542ad4f1e20f49f8e542496 b/Library/Artifacts/48/4808638ca542ad4f1e20f49f8e542496 new file mode 100644 index 0000000..773a047 Binary files /dev/null and b/Library/Artifacts/48/4808638ca542ad4f1e20f49f8e542496 differ diff --git a/Library/Artifacts/48/4837cc0c57804317f868ddfc992207a4 b/Library/Artifacts/48/4837cc0c57804317f868ddfc992207a4 new file mode 100644 index 0000000..03bdc83 Binary files /dev/null and b/Library/Artifacts/48/4837cc0c57804317f868ddfc992207a4 differ diff --git a/Library/Artifacts/48/48980d2a4d7098bf0f2fa3461a5cdbc9 b/Library/Artifacts/48/48980d2a4d7098bf0f2fa3461a5cdbc9 new file mode 100644 index 0000000..fa0bc49 Binary files /dev/null and b/Library/Artifacts/48/48980d2a4d7098bf0f2fa3461a5cdbc9 differ diff --git a/Library/Artifacts/48/48c694e4fc8dd0a48192e05c360f6df9 b/Library/Artifacts/48/48c694e4fc8dd0a48192e05c360f6df9 new file mode 100644 index 0000000..4c66a1f Binary files /dev/null and b/Library/Artifacts/48/48c694e4fc8dd0a48192e05c360f6df9 differ diff --git a/Library/Artifacts/48/48d22bc4a01e3e937330d6c1b0593a13 b/Library/Artifacts/48/48d22bc4a01e3e937330d6c1b0593a13 new file mode 100644 index 0000000..28aeb8e Binary files /dev/null and b/Library/Artifacts/48/48d22bc4a01e3e937330d6c1b0593a13 differ diff --git a/Library/Artifacts/48/48d9068463917b7836754937b2d609ba b/Library/Artifacts/48/48d9068463917b7836754937b2d609ba new file mode 100644 index 0000000..74dd468 Binary files /dev/null and b/Library/Artifacts/48/48d9068463917b7836754937b2d609ba differ diff --git a/Library/Artifacts/49/4936e2daeca83e735493bcc0bdfe984c b/Library/Artifacts/49/4936e2daeca83e735493bcc0bdfe984c new file mode 100644 index 0000000..5a790c3 Binary files /dev/null and b/Library/Artifacts/49/4936e2daeca83e735493bcc0bdfe984c differ diff --git a/Library/Artifacts/49/49429bea68cf54ba74d4176d1f28de86 b/Library/Artifacts/49/49429bea68cf54ba74d4176d1f28de86 new file mode 100644 index 0000000..6db62b0 Binary files /dev/null and b/Library/Artifacts/49/49429bea68cf54ba74d4176d1f28de86 differ diff --git a/Library/Artifacts/49/49f8b0fc35f478f77a875914d38f33bb b/Library/Artifacts/49/49f8b0fc35f478f77a875914d38f33bb new file mode 100644 index 0000000..bbcbf5a Binary files /dev/null and b/Library/Artifacts/49/49f8b0fc35f478f77a875914d38f33bb differ diff --git a/Library/Artifacts/4a/4a042120097bfe296285e83c8b7899c7 b/Library/Artifacts/4a/4a042120097bfe296285e83c8b7899c7 new file mode 100644 index 0000000..8b727d8 Binary files /dev/null and b/Library/Artifacts/4a/4a042120097bfe296285e83c8b7899c7 differ diff --git a/Library/Artifacts/4a/4a356541449d26eb51a237c19e80ede7 b/Library/Artifacts/4a/4a356541449d26eb51a237c19e80ede7 new file mode 100644 index 0000000..c0ee0d4 Binary files /dev/null and b/Library/Artifacts/4a/4a356541449d26eb51a237c19e80ede7 differ diff --git a/Library/Artifacts/4a/4a4de2657de9b8aff890d1d5b249d11f b/Library/Artifacts/4a/4a4de2657de9b8aff890d1d5b249d11f new file mode 100644 index 0000000..b7ea614 Binary files /dev/null and b/Library/Artifacts/4a/4a4de2657de9b8aff890d1d5b249d11f differ diff --git a/Library/Artifacts/4a/4ac1109ad262b244d44e70b40b203503 b/Library/Artifacts/4a/4ac1109ad262b244d44e70b40b203503 new file mode 100644 index 0000000..28bd7d2 Binary files /dev/null and b/Library/Artifacts/4a/4ac1109ad262b244d44e70b40b203503 differ diff --git a/Library/Artifacts/4a/4ad62df2299af830b8db48725ecd41a1 b/Library/Artifacts/4a/4ad62df2299af830b8db48725ecd41a1 new file mode 100644 index 0000000..6aed581 Binary files /dev/null and b/Library/Artifacts/4a/4ad62df2299af830b8db48725ecd41a1 differ diff --git a/Library/Artifacts/4b/4b3674b4c1589df0e36427eac150f9f1 b/Library/Artifacts/4b/4b3674b4c1589df0e36427eac150f9f1 new file mode 100644 index 0000000..49b88f3 Binary files /dev/null and b/Library/Artifacts/4b/4b3674b4c1589df0e36427eac150f9f1 differ diff --git a/Library/Artifacts/4b/4b3829728616e2bc58352b701846f073 b/Library/Artifacts/4b/4b3829728616e2bc58352b701846f073 new file mode 100644 index 0000000..1436088 Binary files /dev/null and b/Library/Artifacts/4b/4b3829728616e2bc58352b701846f073 differ diff --git a/Library/Artifacts/4b/4b4ebd23a856b35c661ce4a2f2f06850 b/Library/Artifacts/4b/4b4ebd23a856b35c661ce4a2f2f06850 new file mode 100644 index 0000000..559754c Binary files /dev/null and b/Library/Artifacts/4b/4b4ebd23a856b35c661ce4a2f2f06850 differ diff --git a/Library/Artifacts/4c/4c155400ed838f5b5e16c6db47ba0854 b/Library/Artifacts/4c/4c155400ed838f5b5e16c6db47ba0854 new file mode 100644 index 0000000..92f8d74 Binary files /dev/null and b/Library/Artifacts/4c/4c155400ed838f5b5e16c6db47ba0854 differ diff --git a/Library/Artifacts/4c/4c2571e185d659e48fb0fbb3581ada42 b/Library/Artifacts/4c/4c2571e185d659e48fb0fbb3581ada42 new file mode 100644 index 0000000..a3b75a5 Binary files /dev/null and b/Library/Artifacts/4c/4c2571e185d659e48fb0fbb3581ada42 differ diff --git a/Library/Artifacts/4c/4c4c171ba9d917d629d35e9240aa1f3c b/Library/Artifacts/4c/4c4c171ba9d917d629d35e9240aa1f3c new file mode 100644 index 0000000..2e73373 Binary files /dev/null and b/Library/Artifacts/4c/4c4c171ba9d917d629d35e9240aa1f3c differ diff --git a/Library/Artifacts/4c/4c6a5f7480da208a689d660811616858 b/Library/Artifacts/4c/4c6a5f7480da208a689d660811616858 new file mode 100644 index 0000000..e886bcb Binary files /dev/null and b/Library/Artifacts/4c/4c6a5f7480da208a689d660811616858 differ diff --git a/Library/Artifacts/4c/4c9007fecfeda6c7fc210aa2121266ec b/Library/Artifacts/4c/4c9007fecfeda6c7fc210aa2121266ec new file mode 100644 index 0000000..49a9efb Binary files /dev/null and b/Library/Artifacts/4c/4c9007fecfeda6c7fc210aa2121266ec differ diff --git a/Library/Artifacts/4c/4ccc25b44e26626230faf2536a546867 b/Library/Artifacts/4c/4ccc25b44e26626230faf2536a546867 new file mode 100644 index 0000000..e8d172b Binary files /dev/null and b/Library/Artifacts/4c/4ccc25b44e26626230faf2536a546867 differ diff --git a/Library/Artifacts/4d/4d8bb8a79a93fb4cf87c555244e4e8bd b/Library/Artifacts/4d/4d8bb8a79a93fb4cf87c555244e4e8bd new file mode 100644 index 0000000..68143a8 Binary files /dev/null and b/Library/Artifacts/4d/4d8bb8a79a93fb4cf87c555244e4e8bd differ diff --git a/Library/Artifacts/4d/4dcac4a47171e454565878801c10f918 b/Library/Artifacts/4d/4dcac4a47171e454565878801c10f918 new file mode 100644 index 0000000..c42211f Binary files /dev/null and b/Library/Artifacts/4d/4dcac4a47171e454565878801c10f918 differ diff --git a/Library/Artifacts/4d/4dd71ed385bf3887b4d8da6dde51562a b/Library/Artifacts/4d/4dd71ed385bf3887b4d8da6dde51562a new file mode 100644 index 0000000..385ccac Binary files /dev/null and b/Library/Artifacts/4d/4dd71ed385bf3887b4d8da6dde51562a differ diff --git a/Library/Artifacts/4d/4ddc62ebb875a0329263463c7990d0b7 b/Library/Artifacts/4d/4ddc62ebb875a0329263463c7990d0b7 new file mode 100644 index 0000000..9b227fe Binary files /dev/null and b/Library/Artifacts/4d/4ddc62ebb875a0329263463c7990d0b7 differ diff --git a/Library/Artifacts/4d/4df34937b3cc79a33dee4738a07e3c79 b/Library/Artifacts/4d/4df34937b3cc79a33dee4738a07e3c79 new file mode 100644 index 0000000..4d15392 Binary files /dev/null and b/Library/Artifacts/4d/4df34937b3cc79a33dee4738a07e3c79 differ diff --git a/Library/Artifacts/4e/4e50898cf8a58245a0b7a618aa1bb19d b/Library/Artifacts/4e/4e50898cf8a58245a0b7a618aa1bb19d new file mode 100644 index 0000000..b74f128 Binary files /dev/null and b/Library/Artifacts/4e/4e50898cf8a58245a0b7a618aa1bb19d differ diff --git a/Library/Artifacts/4e/4ec692aba18fca8e419828ecca9c25b1 b/Library/Artifacts/4e/4ec692aba18fca8e419828ecca9c25b1 new file mode 100644 index 0000000..3cf9626 Binary files /dev/null and b/Library/Artifacts/4e/4ec692aba18fca8e419828ecca9c25b1 differ diff --git a/Library/Artifacts/4f/4f0360ddfb8f67bcbba13fc814e9fc03 b/Library/Artifacts/4f/4f0360ddfb8f67bcbba13fc814e9fc03 new file mode 100644 index 0000000..0cfec0a Binary files /dev/null and b/Library/Artifacts/4f/4f0360ddfb8f67bcbba13fc814e9fc03 differ diff --git a/Library/Artifacts/4f/4f45c4bf860a1e6648427e57dd7c4e74 b/Library/Artifacts/4f/4f45c4bf860a1e6648427e57dd7c4e74 new file mode 100644 index 0000000..943cc6b Binary files /dev/null and b/Library/Artifacts/4f/4f45c4bf860a1e6648427e57dd7c4e74 differ diff --git a/Library/Artifacts/4f/4f5d92a982d1334b70ca10c4a281a85e b/Library/Artifacts/4f/4f5d92a982d1334b70ca10c4a281a85e new file mode 100644 index 0000000..2ca936f Binary files /dev/null and b/Library/Artifacts/4f/4f5d92a982d1334b70ca10c4a281a85e differ diff --git a/Library/Artifacts/4f/4f7bd147a29ad6ffcc8c4afe20a4b88c b/Library/Artifacts/4f/4f7bd147a29ad6ffcc8c4afe20a4b88c new file mode 100644 index 0000000..af0abbf Binary files /dev/null and b/Library/Artifacts/4f/4f7bd147a29ad6ffcc8c4afe20a4b88c differ diff --git a/Library/Artifacts/4f/4f966a8de0501bb7120a2ee652d07932 b/Library/Artifacts/4f/4f966a8de0501bb7120a2ee652d07932 new file mode 100644 index 0000000..ec1706c Binary files /dev/null and b/Library/Artifacts/4f/4f966a8de0501bb7120a2ee652d07932 differ diff --git a/Library/Artifacts/4f/4f99e3426b30e5f6d4af7589713b0137 b/Library/Artifacts/4f/4f99e3426b30e5f6d4af7589713b0137 new file mode 100644 index 0000000..4c5daa8 Binary files /dev/null and b/Library/Artifacts/4f/4f99e3426b30e5f6d4af7589713b0137 differ diff --git a/Library/Artifacts/4f/4fa83977c1730e1a4ffedb07c85ae715 b/Library/Artifacts/4f/4fa83977c1730e1a4ffedb07c85ae715 new file mode 100644 index 0000000..3d473cc Binary files /dev/null and b/Library/Artifacts/4f/4fa83977c1730e1a4ffedb07c85ae715 differ diff --git a/Library/Artifacts/4f/4fd6909ded33fc5eca2b4453e21f72db b/Library/Artifacts/4f/4fd6909ded33fc5eca2b4453e21f72db new file mode 100644 index 0000000..782694b Binary files /dev/null and b/Library/Artifacts/4f/4fd6909ded33fc5eca2b4453e21f72db differ diff --git a/Library/Artifacts/4f/4fdb5b7176e2e81a694e55fa000299ad b/Library/Artifacts/4f/4fdb5b7176e2e81a694e55fa000299ad new file mode 100644 index 0000000..292096f Binary files /dev/null and b/Library/Artifacts/4f/4fdb5b7176e2e81a694e55fa000299ad differ diff --git a/Library/Artifacts/50/502279c4e4bbfbc5435d9a7a6bea3582 b/Library/Artifacts/50/502279c4e4bbfbc5435d9a7a6bea3582 new file mode 100644 index 0000000..2b8f25f Binary files /dev/null and b/Library/Artifacts/50/502279c4e4bbfbc5435d9a7a6bea3582 differ diff --git a/Library/Artifacts/50/502b714d87197649fb5277e8a760aeef b/Library/Artifacts/50/502b714d87197649fb5277e8a760aeef new file mode 100644 index 0000000..c392698 Binary files /dev/null and b/Library/Artifacts/50/502b714d87197649fb5277e8a760aeef differ diff --git a/Library/Artifacts/50/50aa1772ca8d54f465d6d928c4ac8797 b/Library/Artifacts/50/50aa1772ca8d54f465d6d928c4ac8797 new file mode 100644 index 0000000..1a040f8 Binary files /dev/null and b/Library/Artifacts/50/50aa1772ca8d54f465d6d928c4ac8797 differ diff --git a/Library/Artifacts/51/51122b8691a581cdb93622b2d8874fde b/Library/Artifacts/51/51122b8691a581cdb93622b2d8874fde new file mode 100644 index 0000000..388cd71 Binary files /dev/null and b/Library/Artifacts/51/51122b8691a581cdb93622b2d8874fde differ diff --git a/Library/Artifacts/51/51295a7e97bff337ff0c94fd724ee488 b/Library/Artifacts/51/51295a7e97bff337ff0c94fd724ee488 new file mode 100644 index 0000000..a832f19 Binary files /dev/null and b/Library/Artifacts/51/51295a7e97bff337ff0c94fd724ee488 differ diff --git a/Library/Artifacts/51/5145d5ff7af5d60931e621a8dc92c057 b/Library/Artifacts/51/5145d5ff7af5d60931e621a8dc92c057 new file mode 100644 index 0000000..0bf16a3 Binary files /dev/null and b/Library/Artifacts/51/5145d5ff7af5d60931e621a8dc92c057 differ diff --git a/Library/Artifacts/51/514f565a1809cfce174ce5fb8392284e b/Library/Artifacts/51/514f565a1809cfce174ce5fb8392284e new file mode 100644 index 0000000..22fa040 Binary files /dev/null and b/Library/Artifacts/51/514f565a1809cfce174ce5fb8392284e differ diff --git a/Library/Artifacts/51/51964cf0f99c65a81eebb0b57bbfa797 b/Library/Artifacts/51/51964cf0f99c65a81eebb0b57bbfa797 new file mode 100644 index 0000000..321c924 Binary files /dev/null and b/Library/Artifacts/51/51964cf0f99c65a81eebb0b57bbfa797 differ diff --git a/Library/Artifacts/52/521149520882f419f0ada94a3ad3ff17 b/Library/Artifacts/52/521149520882f419f0ada94a3ad3ff17 new file mode 100644 index 0000000..08f69df Binary files /dev/null and b/Library/Artifacts/52/521149520882f419f0ada94a3ad3ff17 differ diff --git a/Library/Artifacts/52/5215db2bf259cf34c2700dbd1d7499db b/Library/Artifacts/52/5215db2bf259cf34c2700dbd1d7499db new file mode 100644 index 0000000..a301ffc Binary files /dev/null and b/Library/Artifacts/52/5215db2bf259cf34c2700dbd1d7499db differ diff --git a/Library/Artifacts/52/527293af630d04b0140205510b82b39f b/Library/Artifacts/52/527293af630d04b0140205510b82b39f new file mode 100644 index 0000000..be71603 Binary files /dev/null and b/Library/Artifacts/52/527293af630d04b0140205510b82b39f differ diff --git a/Library/Artifacts/52/52df893db741112fa27d49688d2df523 b/Library/Artifacts/52/52df893db741112fa27d49688d2df523 new file mode 100644 index 0000000..fbcff35 Binary files /dev/null and b/Library/Artifacts/52/52df893db741112fa27d49688d2df523 differ diff --git a/Library/Artifacts/53/5305e89e3760930633d52727b876e399 b/Library/Artifacts/53/5305e89e3760930633d52727b876e399 new file mode 100644 index 0000000..2463d3b Binary files /dev/null and b/Library/Artifacts/53/5305e89e3760930633d52727b876e399 differ diff --git a/Library/Artifacts/53/53192f0563788f0e6db8b33899d1ef2c b/Library/Artifacts/53/53192f0563788f0e6db8b33899d1ef2c new file mode 100644 index 0000000..e5c629a Binary files /dev/null and b/Library/Artifacts/53/53192f0563788f0e6db8b33899d1ef2c differ diff --git a/Library/Artifacts/53/53558c7c9be0ad7d5944fbc64227784a b/Library/Artifacts/53/53558c7c9be0ad7d5944fbc64227784a new file mode 100644 index 0000000..b6961ae Binary files /dev/null and b/Library/Artifacts/53/53558c7c9be0ad7d5944fbc64227784a differ diff --git a/Library/Artifacts/53/535be8475cd0df73ac933a758d3bafcc b/Library/Artifacts/53/535be8475cd0df73ac933a758d3bafcc new file mode 100644 index 0000000..6a033ab Binary files /dev/null and b/Library/Artifacts/53/535be8475cd0df73ac933a758d3bafcc differ diff --git a/Library/Artifacts/53/536626b65bd5b0c339852296b69154ba b/Library/Artifacts/53/536626b65bd5b0c339852296b69154ba new file mode 100644 index 0000000..d5dc391 Binary files /dev/null and b/Library/Artifacts/53/536626b65bd5b0c339852296b69154ba differ diff --git a/Library/Artifacts/53/53c2a0ad45fe85b0fbc2aebe65153c65 b/Library/Artifacts/53/53c2a0ad45fe85b0fbc2aebe65153c65 new file mode 100644 index 0000000..16491d6 Binary files /dev/null and b/Library/Artifacts/53/53c2a0ad45fe85b0fbc2aebe65153c65 differ diff --git a/Library/Artifacts/53/53c85e67f72f414d8ccbc610f67e588b b/Library/Artifacts/53/53c85e67f72f414d8ccbc610f67e588b new file mode 100644 index 0000000..a184e92 Binary files /dev/null and b/Library/Artifacts/53/53c85e67f72f414d8ccbc610f67e588b differ diff --git a/Library/Artifacts/53/53eb767b9d79ac8ce6ef7c85d298eeb7 b/Library/Artifacts/53/53eb767b9d79ac8ce6ef7c85d298eeb7 new file mode 100644 index 0000000..1e4456c Binary files /dev/null and b/Library/Artifacts/53/53eb767b9d79ac8ce6ef7c85d298eeb7 differ diff --git a/Library/Artifacts/54/54d3d5c6ebd1f8d5c476a9a2a2cb2bc0 b/Library/Artifacts/54/54d3d5c6ebd1f8d5c476a9a2a2cb2bc0 new file mode 100644 index 0000000..11e858f Binary files /dev/null and b/Library/Artifacts/54/54d3d5c6ebd1f8d5c476a9a2a2cb2bc0 differ diff --git a/Library/Artifacts/55/551291d85aad0eb5ce8fe9546b69d485 b/Library/Artifacts/55/551291d85aad0eb5ce8fe9546b69d485 new file mode 100644 index 0000000..2e5efb2 Binary files /dev/null and b/Library/Artifacts/55/551291d85aad0eb5ce8fe9546b69d485 differ diff --git a/Library/Artifacts/55/551aff0ee89bf98b5c9ad2ea7f728e25 b/Library/Artifacts/55/551aff0ee89bf98b5c9ad2ea7f728e25 new file mode 100644 index 0000000..1ae705d Binary files /dev/null and b/Library/Artifacts/55/551aff0ee89bf98b5c9ad2ea7f728e25 differ diff --git a/Library/Artifacts/55/552ab9ada313b11d69ed631fb5f9ead4 b/Library/Artifacts/55/552ab9ada313b11d69ed631fb5f9ead4 new file mode 100644 index 0000000..65a5124 Binary files /dev/null and b/Library/Artifacts/55/552ab9ada313b11d69ed631fb5f9ead4 differ diff --git a/Library/Artifacts/55/5562b23ccd4f6837374b6302b4513073 b/Library/Artifacts/55/5562b23ccd4f6837374b6302b4513073 new file mode 100644 index 0000000..48f946e Binary files /dev/null and b/Library/Artifacts/55/5562b23ccd4f6837374b6302b4513073 differ diff --git a/Library/Artifacts/55/5588c78eafd12e6315a7bbbceb31fea5 b/Library/Artifacts/55/5588c78eafd12e6315a7bbbceb31fea5 new file mode 100644 index 0000000..4fb11c1 Binary files /dev/null and b/Library/Artifacts/55/5588c78eafd12e6315a7bbbceb31fea5 differ diff --git a/Library/Artifacts/55/55b794eaeff64c0b9c39a9ad03672f82 b/Library/Artifacts/55/55b794eaeff64c0b9c39a9ad03672f82 new file mode 100644 index 0000000..f723958 Binary files /dev/null and b/Library/Artifacts/55/55b794eaeff64c0b9c39a9ad03672f82 differ diff --git a/Library/Artifacts/55/55beb4e4cd93a0b06c5f6dc4405c3b45 b/Library/Artifacts/55/55beb4e4cd93a0b06c5f6dc4405c3b45 new file mode 100644 index 0000000..d494d53 Binary files /dev/null and b/Library/Artifacts/55/55beb4e4cd93a0b06c5f6dc4405c3b45 differ diff --git a/Library/Artifacts/55/55ceda85023ca289c3d37a91dcaa001f b/Library/Artifacts/55/55ceda85023ca289c3d37a91dcaa001f new file mode 100644 index 0000000..ce4eabc Binary files /dev/null and b/Library/Artifacts/55/55ceda85023ca289c3d37a91dcaa001f differ diff --git a/Library/Artifacts/56/5624f1d452218ce39002b6c0b237ae8e b/Library/Artifacts/56/5624f1d452218ce39002b6c0b237ae8e new file mode 100644 index 0000000..0152233 Binary files /dev/null and b/Library/Artifacts/56/5624f1d452218ce39002b6c0b237ae8e differ diff --git a/Library/Artifacts/56/564393408b8ff5a4d9620b09ce654592 b/Library/Artifacts/56/564393408b8ff5a4d9620b09ce654592 new file mode 100644 index 0000000..f7c00cc Binary files /dev/null and b/Library/Artifacts/56/564393408b8ff5a4d9620b09ce654592 differ diff --git a/Library/Artifacts/56/56745a5bf7d8f0aacae02714e3a61b0c b/Library/Artifacts/56/56745a5bf7d8f0aacae02714e3a61b0c new file mode 100644 index 0000000..c8f1645 Binary files /dev/null and b/Library/Artifacts/56/56745a5bf7d8f0aacae02714e3a61b0c differ diff --git a/Library/Artifacts/57/5748e7f6bb407c2cfd65003a0f73a7dd b/Library/Artifacts/57/5748e7f6bb407c2cfd65003a0f73a7dd new file mode 100644 index 0000000..440b3a4 Binary files /dev/null and b/Library/Artifacts/57/5748e7f6bb407c2cfd65003a0f73a7dd differ diff --git a/Library/Artifacts/57/5748fdf9f435eec400a60a35c25f0daf b/Library/Artifacts/57/5748fdf9f435eec400a60a35c25f0daf new file mode 100644 index 0000000..8955809 Binary files /dev/null and b/Library/Artifacts/57/5748fdf9f435eec400a60a35c25f0daf differ diff --git a/Library/Artifacts/57/57519b689d1973090df572125fa70fe9 b/Library/Artifacts/57/57519b689d1973090df572125fa70fe9 new file mode 100644 index 0000000..fc3bea3 Binary files /dev/null and b/Library/Artifacts/57/57519b689d1973090df572125fa70fe9 differ diff --git a/Library/Artifacts/57/575dad0b76830720bd266cb3ff8e79e4 b/Library/Artifacts/57/575dad0b76830720bd266cb3ff8e79e4 new file mode 100644 index 0000000..43b90d8 Binary files /dev/null and b/Library/Artifacts/57/575dad0b76830720bd266cb3ff8e79e4 differ diff --git a/Library/Artifacts/57/5763f562da4bba9fd73a7a06c65fc8ee b/Library/Artifacts/57/5763f562da4bba9fd73a7a06c65fc8ee new file mode 100644 index 0000000..3934441 Binary files /dev/null and b/Library/Artifacts/57/5763f562da4bba9fd73a7a06c65fc8ee differ diff --git a/Library/Artifacts/57/577f59a2483efb2f425dbdf6b38378d8 b/Library/Artifacts/57/577f59a2483efb2f425dbdf6b38378d8 new file mode 100644 index 0000000..3fd8bd7 Binary files /dev/null and b/Library/Artifacts/57/577f59a2483efb2f425dbdf6b38378d8 differ diff --git a/Library/Artifacts/57/57fe8c2dd5e6bb2d1e3f2038cd276985 b/Library/Artifacts/57/57fe8c2dd5e6bb2d1e3f2038cd276985 new file mode 100644 index 0000000..2fe39ca Binary files /dev/null and b/Library/Artifacts/57/57fe8c2dd5e6bb2d1e3f2038cd276985 differ diff --git a/Library/Artifacts/58/580b4658bd4f60cc34e0a1cf68849524 b/Library/Artifacts/58/580b4658bd4f60cc34e0a1cf68849524 new file mode 100644 index 0000000..90076f4 Binary files /dev/null and b/Library/Artifacts/58/580b4658bd4f60cc34e0a1cf68849524 differ diff --git a/Library/Artifacts/58/58366a135971058b80c98e56a0996587 b/Library/Artifacts/58/58366a135971058b80c98e56a0996587 new file mode 100644 index 0000000..c3264bc Binary files /dev/null and b/Library/Artifacts/58/58366a135971058b80c98e56a0996587 differ diff --git a/Library/Artifacts/58/5865ed3475b72d6d0d252b66fe2ce81b b/Library/Artifacts/58/5865ed3475b72d6d0d252b66fe2ce81b new file mode 100644 index 0000000..da69ff4 Binary files /dev/null and b/Library/Artifacts/58/5865ed3475b72d6d0d252b66fe2ce81b differ diff --git a/Library/Artifacts/58/58747095622feac4b52c10978dce1fc4 b/Library/Artifacts/58/58747095622feac4b52c10978dce1fc4 new file mode 100644 index 0000000..fea7481 Binary files /dev/null and b/Library/Artifacts/58/58747095622feac4b52c10978dce1fc4 differ diff --git a/Library/Artifacts/58/58bedc5fc7ca8b69448604423616a4ca b/Library/Artifacts/58/58bedc5fc7ca8b69448604423616a4ca new file mode 100644 index 0000000..66fbd8e Binary files /dev/null and b/Library/Artifacts/58/58bedc5fc7ca8b69448604423616a4ca differ diff --git a/Library/Artifacts/58/58ca184cf1be70a178c03977f34c80df b/Library/Artifacts/58/58ca184cf1be70a178c03977f34c80df new file mode 100644 index 0000000..38d9440 Binary files /dev/null and b/Library/Artifacts/58/58ca184cf1be70a178c03977f34c80df differ diff --git a/Library/Artifacts/58/58e8b6ef79da9ad70738e53f3515abd4 b/Library/Artifacts/58/58e8b6ef79da9ad70738e53f3515abd4 new file mode 100644 index 0000000..f532814 Binary files /dev/null and b/Library/Artifacts/58/58e8b6ef79da9ad70738e53f3515abd4 differ diff --git a/Library/Artifacts/59/59103e67d13fefa8f4a88e2de7a32d78 b/Library/Artifacts/59/59103e67d13fefa8f4a88e2de7a32d78 new file mode 100644 index 0000000..0c01b6d Binary files /dev/null and b/Library/Artifacts/59/59103e67d13fefa8f4a88e2de7a32d78 differ diff --git a/Library/Artifacts/59/5910c0498bb42f231b836228e92cdfec b/Library/Artifacts/59/5910c0498bb42f231b836228e92cdfec new file mode 100644 index 0000000..a5bc5c1 Binary files /dev/null and b/Library/Artifacts/59/5910c0498bb42f231b836228e92cdfec differ diff --git a/Library/Artifacts/59/5935009ea87d15c50b559c10f99e5f7d b/Library/Artifacts/59/5935009ea87d15c50b559c10f99e5f7d new file mode 100644 index 0000000..93f9149 Binary files /dev/null and b/Library/Artifacts/59/5935009ea87d15c50b559c10f99e5f7d differ diff --git a/Library/Artifacts/59/59aeaae9ffe5f738f5c74d026fce2975 b/Library/Artifacts/59/59aeaae9ffe5f738f5c74d026fce2975 new file mode 100644 index 0000000..025e589 Binary files /dev/null and b/Library/Artifacts/59/59aeaae9ffe5f738f5c74d026fce2975 differ diff --git a/Library/Artifacts/59/59c9c5463b12991f4e11d09e39a0483c b/Library/Artifacts/59/59c9c5463b12991f4e11d09e39a0483c new file mode 100644 index 0000000..3d6aca1 Binary files /dev/null and b/Library/Artifacts/59/59c9c5463b12991f4e11d09e39a0483c differ diff --git a/Library/Artifacts/59/59f1d85cf27e8bec5ce0cd56532904b3 b/Library/Artifacts/59/59f1d85cf27e8bec5ce0cd56532904b3 new file mode 100644 index 0000000..8423e8b Binary files /dev/null and b/Library/Artifacts/59/59f1d85cf27e8bec5ce0cd56532904b3 differ diff --git a/Library/Artifacts/5a/5a2d1e17cda5644d9a7220134c9ed9de b/Library/Artifacts/5a/5a2d1e17cda5644d9a7220134c9ed9de new file mode 100644 index 0000000..c1a92fd Binary files /dev/null and b/Library/Artifacts/5a/5a2d1e17cda5644d9a7220134c9ed9de differ diff --git a/Library/Artifacts/5a/5a94e85ca796d782eca80f32ec98b4a8 b/Library/Artifacts/5a/5a94e85ca796d782eca80f32ec98b4a8 new file mode 100644 index 0000000..1a1696a Binary files /dev/null and b/Library/Artifacts/5a/5a94e85ca796d782eca80f32ec98b4a8 differ diff --git a/Library/Artifacts/5a/5a97e5bd7103e95bb41a6f65cb7e8855 b/Library/Artifacts/5a/5a97e5bd7103e95bb41a6f65cb7e8855 new file mode 100644 index 0000000..e582e26 Binary files /dev/null and b/Library/Artifacts/5a/5a97e5bd7103e95bb41a6f65cb7e8855 differ diff --git a/Library/Artifacts/5b/5b0a8f01491318fa319be29a95cf72a9 b/Library/Artifacts/5b/5b0a8f01491318fa319be29a95cf72a9 new file mode 100644 index 0000000..0c5afdf Binary files /dev/null and b/Library/Artifacts/5b/5b0a8f01491318fa319be29a95cf72a9 differ diff --git a/Library/Artifacts/5b/5b1fe8b490fe8a26991a3cc5687e3274 b/Library/Artifacts/5b/5b1fe8b490fe8a26991a3cc5687e3274 new file mode 100644 index 0000000..edf2a63 Binary files /dev/null and b/Library/Artifacts/5b/5b1fe8b490fe8a26991a3cc5687e3274 differ diff --git a/Library/Artifacts/5b/5b32256edc856bb460bf03c073b4eccd b/Library/Artifacts/5b/5b32256edc856bb460bf03c073b4eccd new file mode 100644 index 0000000..00be5ba Binary files /dev/null and b/Library/Artifacts/5b/5b32256edc856bb460bf03c073b4eccd differ diff --git a/Library/Artifacts/5b/5b329590c4f31ea731fc3b8d2f965c2c b/Library/Artifacts/5b/5b329590c4f31ea731fc3b8d2f965c2c new file mode 100644 index 0000000..12e9561 Binary files /dev/null and b/Library/Artifacts/5b/5b329590c4f31ea731fc3b8d2f965c2c differ diff --git a/Library/Artifacts/5b/5b43a384abfe8945ff5ffac249db962b b/Library/Artifacts/5b/5b43a384abfe8945ff5ffac249db962b new file mode 100644 index 0000000..af743fd Binary files /dev/null and b/Library/Artifacts/5b/5b43a384abfe8945ff5ffac249db962b differ diff --git a/Library/Artifacts/5b/5b5a359ff1658893ecc4c680031f380d b/Library/Artifacts/5b/5b5a359ff1658893ecc4c680031f380d new file mode 100644 index 0000000..08db4d6 Binary files /dev/null and b/Library/Artifacts/5b/5b5a359ff1658893ecc4c680031f380d differ diff --git a/Library/Artifacts/5b/5b5d0c6aa186759d85d0e1a94ab4640f b/Library/Artifacts/5b/5b5d0c6aa186759d85d0e1a94ab4640f new file mode 100644 index 0000000..e3e7dbb Binary files /dev/null and b/Library/Artifacts/5b/5b5d0c6aa186759d85d0e1a94ab4640f differ diff --git a/Library/Artifacts/5b/5ba138abee1d3a0771adaa1eeb8958dd b/Library/Artifacts/5b/5ba138abee1d3a0771adaa1eeb8958dd new file mode 100644 index 0000000..8867e31 Binary files /dev/null and b/Library/Artifacts/5b/5ba138abee1d3a0771adaa1eeb8958dd differ diff --git a/Library/Artifacts/5b/5ba39ce7b5cc19c76e7a956c1b98a184 b/Library/Artifacts/5b/5ba39ce7b5cc19c76e7a956c1b98a184 new file mode 100644 index 0000000..7200599 Binary files /dev/null and b/Library/Artifacts/5b/5ba39ce7b5cc19c76e7a956c1b98a184 differ diff --git a/Library/Artifacts/5b/5bc01b82d7f1bcd6f8be540c332d522a b/Library/Artifacts/5b/5bc01b82d7f1bcd6f8be540c332d522a new file mode 100644 index 0000000..ae02800 Binary files /dev/null and b/Library/Artifacts/5b/5bc01b82d7f1bcd6f8be540c332d522a differ diff --git a/Library/Artifacts/5b/5be56877ae78bd02816499902bf89e30 b/Library/Artifacts/5b/5be56877ae78bd02816499902bf89e30 new file mode 100644 index 0000000..3832c9c Binary files /dev/null and b/Library/Artifacts/5b/5be56877ae78bd02816499902bf89e30 differ diff --git a/Library/Artifacts/5c/5c0e133e4da6ed5cfed6a533050fda78 b/Library/Artifacts/5c/5c0e133e4da6ed5cfed6a533050fda78 new file mode 100644 index 0000000..0ad74e7 Binary files /dev/null and b/Library/Artifacts/5c/5c0e133e4da6ed5cfed6a533050fda78 differ diff --git a/Library/Artifacts/5c/5c11cc51b250073c5307ef63cdaeba62 b/Library/Artifacts/5c/5c11cc51b250073c5307ef63cdaeba62 new file mode 100644 index 0000000..a43c5e0 Binary files /dev/null and b/Library/Artifacts/5c/5c11cc51b250073c5307ef63cdaeba62 differ diff --git a/Library/Artifacts/5c/5c32988b3fc46acf74fe90c8bf634c94 b/Library/Artifacts/5c/5c32988b3fc46acf74fe90c8bf634c94 new file mode 100644 index 0000000..d66d791 Binary files /dev/null and b/Library/Artifacts/5c/5c32988b3fc46acf74fe90c8bf634c94 differ diff --git a/Library/Artifacts/5c/5c61e20f7303aa05b13494ea0e4b9c72 b/Library/Artifacts/5c/5c61e20f7303aa05b13494ea0e4b9c72 new file mode 100644 index 0000000..5b6e84c Binary files /dev/null and b/Library/Artifacts/5c/5c61e20f7303aa05b13494ea0e4b9c72 differ diff --git a/Library/Artifacts/5c/5cbf44de0514f209568943bfff6c21d4 b/Library/Artifacts/5c/5cbf44de0514f209568943bfff6c21d4 new file mode 100644 index 0000000..5a4a8e0 Binary files /dev/null and b/Library/Artifacts/5c/5cbf44de0514f209568943bfff6c21d4 differ diff --git a/Library/Artifacts/5c/5cfa3da79aa4dab36f602655801edf3d b/Library/Artifacts/5c/5cfa3da79aa4dab36f602655801edf3d new file mode 100644 index 0000000..288c085 Binary files /dev/null and b/Library/Artifacts/5c/5cfa3da79aa4dab36f602655801edf3d differ diff --git a/Library/Artifacts/5d/5d06e3c010f5ced81f33b48d3e81f663 b/Library/Artifacts/5d/5d06e3c010f5ced81f33b48d3e81f663 new file mode 100644 index 0000000..cae6d4c Binary files /dev/null and b/Library/Artifacts/5d/5d06e3c010f5ced81f33b48d3e81f663 differ diff --git a/Library/Artifacts/5d/5d5a5beeffcfcc507ffd1387075b7025 b/Library/Artifacts/5d/5d5a5beeffcfcc507ffd1387075b7025 new file mode 100644 index 0000000..aa6363c Binary files /dev/null and b/Library/Artifacts/5d/5d5a5beeffcfcc507ffd1387075b7025 differ diff --git a/Library/Artifacts/5d/5dd38e373c6c37f5850fc3531a3ba567 b/Library/Artifacts/5d/5dd38e373c6c37f5850fc3531a3ba567 new file mode 100644 index 0000000..8950730 Binary files /dev/null and b/Library/Artifacts/5d/5dd38e373c6c37f5850fc3531a3ba567 differ diff --git a/Library/Artifacts/5d/5dfec150f74373f44874124436f92c04 b/Library/Artifacts/5d/5dfec150f74373f44874124436f92c04 new file mode 100644 index 0000000..81de1c5 Binary files /dev/null and b/Library/Artifacts/5d/5dfec150f74373f44874124436f92c04 differ diff --git a/Library/Artifacts/5e/5e37bda525bd01a8c030a3f53ab478d8 b/Library/Artifacts/5e/5e37bda525bd01a8c030a3f53ab478d8 new file mode 100644 index 0000000..1539131 Binary files /dev/null and b/Library/Artifacts/5e/5e37bda525bd01a8c030a3f53ab478d8 differ diff --git a/Library/Artifacts/5e/5e66faeba705fd417afa2db62bbb8fe1 b/Library/Artifacts/5e/5e66faeba705fd417afa2db62bbb8fe1 new file mode 100644 index 0000000..81dab6c Binary files /dev/null and b/Library/Artifacts/5e/5e66faeba705fd417afa2db62bbb8fe1 differ diff --git a/Library/Artifacts/5e/5e901c93d3e0e16b6e9de5d1ffb568d8 b/Library/Artifacts/5e/5e901c93d3e0e16b6e9de5d1ffb568d8 new file mode 100644 index 0000000..fa1cc18 Binary files /dev/null and b/Library/Artifacts/5e/5e901c93d3e0e16b6e9de5d1ffb568d8 differ diff --git a/Library/Artifacts/5e/5e944266dc13d9a64677fb2f3d396c58 b/Library/Artifacts/5e/5e944266dc13d9a64677fb2f3d396c58 new file mode 100644 index 0000000..423301f Binary files /dev/null and b/Library/Artifacts/5e/5e944266dc13d9a64677fb2f3d396c58 differ diff --git a/Library/Artifacts/5e/5eb1f04905ddf6831a16a428cf774073 b/Library/Artifacts/5e/5eb1f04905ddf6831a16a428cf774073 new file mode 100644 index 0000000..f5f3d66 Binary files /dev/null and b/Library/Artifacts/5e/5eb1f04905ddf6831a16a428cf774073 differ diff --git a/Library/Artifacts/5e/5eb4821df1b5f057df90c70be7deaa8c b/Library/Artifacts/5e/5eb4821df1b5f057df90c70be7deaa8c new file mode 100644 index 0000000..fb5f228 Binary files /dev/null and b/Library/Artifacts/5e/5eb4821df1b5f057df90c70be7deaa8c differ diff --git a/Library/Artifacts/5e/5edeb8d8255690ae155beec45fa7a944 b/Library/Artifacts/5e/5edeb8d8255690ae155beec45fa7a944 new file mode 100644 index 0000000..193be2e Binary files /dev/null and b/Library/Artifacts/5e/5edeb8d8255690ae155beec45fa7a944 differ diff --git a/Library/Artifacts/5e/5edf0930d97908aac39a6bc888e6c131 b/Library/Artifacts/5e/5edf0930d97908aac39a6bc888e6c131 new file mode 100644 index 0000000..e119736 Binary files /dev/null and b/Library/Artifacts/5e/5edf0930d97908aac39a6bc888e6c131 differ diff --git a/Library/Artifacts/5e/5ee53216b8c909da9a6b566d20b9ca19 b/Library/Artifacts/5e/5ee53216b8c909da9a6b566d20b9ca19 new file mode 100644 index 0000000..834551a Binary files /dev/null and b/Library/Artifacts/5e/5ee53216b8c909da9a6b566d20b9ca19 differ diff --git a/Library/Artifacts/5e/5ee6cc55a6fbeb323aeab5d10e4f44c3 b/Library/Artifacts/5e/5ee6cc55a6fbeb323aeab5d10e4f44c3 new file mode 100644 index 0000000..7eac8d6 Binary files /dev/null and b/Library/Artifacts/5e/5ee6cc55a6fbeb323aeab5d10e4f44c3 differ diff --git a/Library/Artifacts/5e/5eee7fde725b48658abcb0aa8d2095fa b/Library/Artifacts/5e/5eee7fde725b48658abcb0aa8d2095fa new file mode 100644 index 0000000..743ae48 Binary files /dev/null and b/Library/Artifacts/5e/5eee7fde725b48658abcb0aa8d2095fa differ diff --git a/Library/Artifacts/5f/5f1d41586b1edf4e883f64eb6424c092 b/Library/Artifacts/5f/5f1d41586b1edf4e883f64eb6424c092 new file mode 100644 index 0000000..a77f5b5 Binary files /dev/null and b/Library/Artifacts/5f/5f1d41586b1edf4e883f64eb6424c092 differ diff --git a/Library/Artifacts/5f/5f2b93164f4e7a111490da36aa14aa17 b/Library/Artifacts/5f/5f2b93164f4e7a111490da36aa14aa17 new file mode 100644 index 0000000..08fd66b Binary files /dev/null and b/Library/Artifacts/5f/5f2b93164f4e7a111490da36aa14aa17 differ diff --git a/Library/Artifacts/5f/5fa58f431407b571f98d0f8a5a0dddd7 b/Library/Artifacts/5f/5fa58f431407b571f98d0f8a5a0dddd7 new file mode 100644 index 0000000..eb16783 Binary files /dev/null and b/Library/Artifacts/5f/5fa58f431407b571f98d0f8a5a0dddd7 differ diff --git a/Library/Artifacts/5f/5faa51ddf9e496c3c17c61d3d62b24fd b/Library/Artifacts/5f/5faa51ddf9e496c3c17c61d3d62b24fd new file mode 100644 index 0000000..1fd2311 Binary files /dev/null and b/Library/Artifacts/5f/5faa51ddf9e496c3c17c61d3d62b24fd differ diff --git a/Library/Artifacts/5f/5fb3a387f5ed6967d2c990ff597c4a4c b/Library/Artifacts/5f/5fb3a387f5ed6967d2c990ff597c4a4c new file mode 100644 index 0000000..1b4b34c Binary files /dev/null and b/Library/Artifacts/5f/5fb3a387f5ed6967d2c990ff597c4a4c differ diff --git a/Library/Artifacts/60/60a6077cb284d30827bf713a4659b0da b/Library/Artifacts/60/60a6077cb284d30827bf713a4659b0da new file mode 100644 index 0000000..d78eb5e Binary files /dev/null and b/Library/Artifacts/60/60a6077cb284d30827bf713a4659b0da differ diff --git a/Library/Artifacts/60/60b7c318957bc946e6cad00e45dde00b b/Library/Artifacts/60/60b7c318957bc946e6cad00e45dde00b new file mode 100644 index 0000000..0a0ab1d Binary files /dev/null and b/Library/Artifacts/60/60b7c318957bc946e6cad00e45dde00b differ diff --git a/Library/Artifacts/60/60f9e26f59555426d2402cdfb2086039 b/Library/Artifacts/60/60f9e26f59555426d2402cdfb2086039 new file mode 100644 index 0000000..31d5308 Binary files /dev/null and b/Library/Artifacts/60/60f9e26f59555426d2402cdfb2086039 differ diff --git a/Library/Artifacts/61/615d14d9c1192e01ad1181a0f0c31a4a b/Library/Artifacts/61/615d14d9c1192e01ad1181a0f0c31a4a new file mode 100644 index 0000000..9e07bd0 Binary files /dev/null and b/Library/Artifacts/61/615d14d9c1192e01ad1181a0f0c31a4a differ diff --git a/Library/Artifacts/61/618afee15e2fc31c8ce6644f79a9fa5d b/Library/Artifacts/61/618afee15e2fc31c8ce6644f79a9fa5d new file mode 100644 index 0000000..59dda9d Binary files /dev/null and b/Library/Artifacts/61/618afee15e2fc31c8ce6644f79a9fa5d differ diff --git a/Library/Artifacts/61/61a0fd098858cf0a7dde28b73f10f1cf b/Library/Artifacts/61/61a0fd098858cf0a7dde28b73f10f1cf new file mode 100644 index 0000000..76abee0 Binary files /dev/null and b/Library/Artifacts/61/61a0fd098858cf0a7dde28b73f10f1cf differ diff --git a/Library/Artifacts/61/61a263939a8ba053c40ef9c710c1f971 b/Library/Artifacts/61/61a263939a8ba053c40ef9c710c1f971 new file mode 100644 index 0000000..1a85287 Binary files /dev/null and b/Library/Artifacts/61/61a263939a8ba053c40ef9c710c1f971 differ diff --git a/Library/Artifacts/61/61e432b67ebd113fd00cd89efc695eee b/Library/Artifacts/61/61e432b67ebd113fd00cd89efc695eee new file mode 100644 index 0000000..12428fb Binary files /dev/null and b/Library/Artifacts/61/61e432b67ebd113fd00cd89efc695eee differ diff --git a/Library/Artifacts/62/6202331e9441c214084ec07db33eb041 b/Library/Artifacts/62/6202331e9441c214084ec07db33eb041 new file mode 100644 index 0000000..f654070 Binary files /dev/null and b/Library/Artifacts/62/6202331e9441c214084ec07db33eb041 differ diff --git a/Library/Artifacts/62/6208e289d7f863f9f938afb0b3bd9a67 b/Library/Artifacts/62/6208e289d7f863f9f938afb0b3bd9a67 new file mode 100644 index 0000000..0883f72 Binary files /dev/null and b/Library/Artifacts/62/6208e289d7f863f9f938afb0b3bd9a67 differ diff --git a/Library/Artifacts/62/622338bfb0a46d6d90d9379c7ce1df83 b/Library/Artifacts/62/622338bfb0a46d6d90d9379c7ce1df83 new file mode 100644 index 0000000..9c14055 Binary files /dev/null and b/Library/Artifacts/62/622338bfb0a46d6d90d9379c7ce1df83 differ diff --git a/Library/Artifacts/62/622418842cc2f529daf8d32811e548fd b/Library/Artifacts/62/622418842cc2f529daf8d32811e548fd new file mode 100644 index 0000000..55deac1 Binary files /dev/null and b/Library/Artifacts/62/622418842cc2f529daf8d32811e548fd differ diff --git a/Library/Artifacts/62/622c302deccd66e11f90b75e09298215 b/Library/Artifacts/62/622c302deccd66e11f90b75e09298215 new file mode 100644 index 0000000..46d45ab Binary files /dev/null and b/Library/Artifacts/62/622c302deccd66e11f90b75e09298215 differ diff --git a/Library/Artifacts/62/6269503b12ea2485a06db6b286b6189c b/Library/Artifacts/62/6269503b12ea2485a06db6b286b6189c new file mode 100644 index 0000000..b4ce49c Binary files /dev/null and b/Library/Artifacts/62/6269503b12ea2485a06db6b286b6189c differ diff --git a/Library/Artifacts/62/62ca00dbf6bd9f9b50e2bc4fd791a72d b/Library/Artifacts/62/62ca00dbf6bd9f9b50e2bc4fd791a72d new file mode 100644 index 0000000..ee4cae8 Binary files /dev/null and b/Library/Artifacts/62/62ca00dbf6bd9f9b50e2bc4fd791a72d differ diff --git a/Library/Artifacts/62/62d70b4e94b526e8b58483753fcaae3d b/Library/Artifacts/62/62d70b4e94b526e8b58483753fcaae3d new file mode 100644 index 0000000..bcb54c1 Binary files /dev/null and b/Library/Artifacts/62/62d70b4e94b526e8b58483753fcaae3d differ diff --git a/Library/Artifacts/62/62f596d1da6716be6c83f12e1772809a b/Library/Artifacts/62/62f596d1da6716be6c83f12e1772809a new file mode 100644 index 0000000..fc01442 Binary files /dev/null and b/Library/Artifacts/62/62f596d1da6716be6c83f12e1772809a differ diff --git a/Library/Artifacts/63/6308d8bfbf725bbfed6cedf20e4b772c b/Library/Artifacts/63/6308d8bfbf725bbfed6cedf20e4b772c new file mode 100644 index 0000000..25c6bc6 Binary files /dev/null and b/Library/Artifacts/63/6308d8bfbf725bbfed6cedf20e4b772c differ diff --git a/Library/Artifacts/63/631889f68262ee38fcaddb0b342975c3 b/Library/Artifacts/63/631889f68262ee38fcaddb0b342975c3 new file mode 100644 index 0000000..64a007d Binary files /dev/null and b/Library/Artifacts/63/631889f68262ee38fcaddb0b342975c3 differ diff --git a/Library/Artifacts/63/6363d06ee22353af731332defac32e67 b/Library/Artifacts/63/6363d06ee22353af731332defac32e67 new file mode 100644 index 0000000..e3f8e23 Binary files /dev/null and b/Library/Artifacts/63/6363d06ee22353af731332defac32e67 differ diff --git a/Library/Artifacts/63/63a5754ad405033d964ee8a53ff96cc0 b/Library/Artifacts/63/63a5754ad405033d964ee8a53ff96cc0 new file mode 100644 index 0000000..d815ef8 Binary files /dev/null and b/Library/Artifacts/63/63a5754ad405033d964ee8a53ff96cc0 differ diff --git a/Library/Artifacts/63/63c37411b1e45f434116a9941d945a80 b/Library/Artifacts/63/63c37411b1e45f434116a9941d945a80 new file mode 100644 index 0000000..3b2427e Binary files /dev/null and b/Library/Artifacts/63/63c37411b1e45f434116a9941d945a80 differ diff --git a/Library/Artifacts/63/63fc7a699e115aa43067f3bb8f21dcd5 b/Library/Artifacts/63/63fc7a699e115aa43067f3bb8f21dcd5 new file mode 100644 index 0000000..61d61a6 Binary files /dev/null and b/Library/Artifacts/63/63fc7a699e115aa43067f3bb8f21dcd5 differ diff --git a/Library/Artifacts/64/64462e21802ab64dc91fad391d29ae2a b/Library/Artifacts/64/64462e21802ab64dc91fad391d29ae2a new file mode 100644 index 0000000..98f619c Binary files /dev/null and b/Library/Artifacts/64/64462e21802ab64dc91fad391d29ae2a differ diff --git a/Library/Artifacts/64/64ad39e35207db034f09d47e62bb4ccd b/Library/Artifacts/64/64ad39e35207db034f09d47e62bb4ccd new file mode 100644 index 0000000..9f83dd9 Binary files /dev/null and b/Library/Artifacts/64/64ad39e35207db034f09d47e62bb4ccd differ diff --git a/Library/Artifacts/65/650cdc0700911265b1c759b129315bc9 b/Library/Artifacts/65/650cdc0700911265b1c759b129315bc9 new file mode 100644 index 0000000..2753dc6 Binary files /dev/null and b/Library/Artifacts/65/650cdc0700911265b1c759b129315bc9 differ diff --git a/Library/Artifacts/65/65494baaf7a7b19fa4a6f53e97ac4e05 b/Library/Artifacts/65/65494baaf7a7b19fa4a6f53e97ac4e05 new file mode 100644 index 0000000..dd4ec4a Binary files /dev/null and b/Library/Artifacts/65/65494baaf7a7b19fa4a6f53e97ac4e05 differ diff --git a/Library/Artifacts/65/65af45b371e00d3446a8cd93ca60c86e b/Library/Artifacts/65/65af45b371e00d3446a8cd93ca60c86e new file mode 100644 index 0000000..71a33d3 Binary files /dev/null and b/Library/Artifacts/65/65af45b371e00d3446a8cd93ca60c86e differ diff --git a/Library/Artifacts/65/65c249d7e4d66abcb5c0114a5d37a245 b/Library/Artifacts/65/65c249d7e4d66abcb5c0114a5d37a245 new file mode 100644 index 0000000..f953f0a Binary files /dev/null and b/Library/Artifacts/65/65c249d7e4d66abcb5c0114a5d37a245 differ diff --git a/Library/Artifacts/65/65d0b89df0ad5553ad3598f7f5b4497a b/Library/Artifacts/65/65d0b89df0ad5553ad3598f7f5b4497a new file mode 100644 index 0000000..b02b99f Binary files /dev/null and b/Library/Artifacts/65/65d0b89df0ad5553ad3598f7f5b4497a differ diff --git a/Library/Artifacts/65/65dce8bb15c0be1119a804725ac784e8 b/Library/Artifacts/65/65dce8bb15c0be1119a804725ac784e8 new file mode 100644 index 0000000..179c160 Binary files /dev/null and b/Library/Artifacts/65/65dce8bb15c0be1119a804725ac784e8 differ diff --git a/Library/Artifacts/66/6618a33ea480ac61c334cefe955e7bd9 b/Library/Artifacts/66/6618a33ea480ac61c334cefe955e7bd9 new file mode 100644 index 0000000..67b013a Binary files /dev/null and b/Library/Artifacts/66/6618a33ea480ac61c334cefe955e7bd9 differ diff --git a/Library/Artifacts/66/6625ff97dde6e0071a0837006a373527 b/Library/Artifacts/66/6625ff97dde6e0071a0837006a373527 new file mode 100644 index 0000000..77253fc Binary files /dev/null and b/Library/Artifacts/66/6625ff97dde6e0071a0837006a373527 differ diff --git a/Library/Artifacts/66/66823fe9da5932bed8d63e32f3177a94 b/Library/Artifacts/66/66823fe9da5932bed8d63e32f3177a94 new file mode 100644 index 0000000..d18f55d Binary files /dev/null and b/Library/Artifacts/66/66823fe9da5932bed8d63e32f3177a94 differ diff --git a/Library/Artifacts/66/669b31c5da3aa426f0e806a5e23e61f8 b/Library/Artifacts/66/669b31c5da3aa426f0e806a5e23e61f8 new file mode 100644 index 0000000..fbc2ed3 Binary files /dev/null and b/Library/Artifacts/66/669b31c5da3aa426f0e806a5e23e61f8 differ diff --git a/Library/Artifacts/66/66a6865073311067494bbe71fb8d6e3f b/Library/Artifacts/66/66a6865073311067494bbe71fb8d6e3f new file mode 100644 index 0000000..ffd9af6 Binary files /dev/null and b/Library/Artifacts/66/66a6865073311067494bbe71fb8d6e3f differ diff --git a/Library/Artifacts/66/66ef5a582ace0e988051303c2e199e28 b/Library/Artifacts/66/66ef5a582ace0e988051303c2e199e28 new file mode 100644 index 0000000..f3fc085 Binary files /dev/null and b/Library/Artifacts/66/66ef5a582ace0e988051303c2e199e28 differ diff --git a/Library/Artifacts/66/66f5928ad36627139e1c423123a049b1 b/Library/Artifacts/66/66f5928ad36627139e1c423123a049b1 new file mode 100644 index 0000000..7d1d8e0 Binary files /dev/null and b/Library/Artifacts/66/66f5928ad36627139e1c423123a049b1 differ diff --git a/Library/Artifacts/67/676aedeff52b3db763f153a37f89a2e2 b/Library/Artifacts/67/676aedeff52b3db763f153a37f89a2e2 new file mode 100644 index 0000000..dd4a3cb Binary files /dev/null and b/Library/Artifacts/67/676aedeff52b3db763f153a37f89a2e2 differ diff --git a/Library/Artifacts/67/67729dcddc436b5aee904a38522d8d63 b/Library/Artifacts/67/67729dcddc436b5aee904a38522d8d63 new file mode 100644 index 0000000..e5c1ea2 Binary files /dev/null and b/Library/Artifacts/67/67729dcddc436b5aee904a38522d8d63 differ diff --git a/Library/Artifacts/67/67a48c829e4b93f9674ee7d50d3fccad b/Library/Artifacts/67/67a48c829e4b93f9674ee7d50d3fccad new file mode 100644 index 0000000..33e4f55 Binary files /dev/null and b/Library/Artifacts/67/67a48c829e4b93f9674ee7d50d3fccad differ diff --git a/Library/Artifacts/67/67db65994390ee1da8d900684e242073 b/Library/Artifacts/67/67db65994390ee1da8d900684e242073 new file mode 100644 index 0000000..b73c23b Binary files /dev/null and b/Library/Artifacts/67/67db65994390ee1da8d900684e242073 differ diff --git a/Library/Artifacts/68/68c17e43a27d0930d84c07e4723c9182 b/Library/Artifacts/68/68c17e43a27d0930d84c07e4723c9182 new file mode 100644 index 0000000..fa6f4f9 Binary files /dev/null and b/Library/Artifacts/68/68c17e43a27d0930d84c07e4723c9182 differ diff --git a/Library/Artifacts/68/68d5ac688d7858d49820c0fa0a8ff786 b/Library/Artifacts/68/68d5ac688d7858d49820c0fa0a8ff786 new file mode 100644 index 0000000..4a45628 Binary files /dev/null and b/Library/Artifacts/68/68d5ac688d7858d49820c0fa0a8ff786 differ diff --git a/Library/Artifacts/68/68f0073e2738ee88302c52df404b7b34 b/Library/Artifacts/68/68f0073e2738ee88302c52df404b7b34 new file mode 100644 index 0000000..acddd5c Binary files /dev/null and b/Library/Artifacts/68/68f0073e2738ee88302c52df404b7b34 differ diff --git a/Library/Artifacts/69/691e305da292c9fac124a8c0af61d457 b/Library/Artifacts/69/691e305da292c9fac124a8c0af61d457 new file mode 100644 index 0000000..3475d60 Binary files /dev/null and b/Library/Artifacts/69/691e305da292c9fac124a8c0af61d457 differ diff --git a/Library/Artifacts/69/693ae77f4d30f133831d06712244306d b/Library/Artifacts/69/693ae77f4d30f133831d06712244306d new file mode 100644 index 0000000..5566b7d Binary files /dev/null and b/Library/Artifacts/69/693ae77f4d30f133831d06712244306d differ diff --git a/Library/Artifacts/69/6942242044c3dfc17c7f97226924e09a b/Library/Artifacts/69/6942242044c3dfc17c7f97226924e09a new file mode 100644 index 0000000..57ab153 Binary files /dev/null and b/Library/Artifacts/69/6942242044c3dfc17c7f97226924e09a differ diff --git a/Library/Artifacts/69/6949060e27855c5ac10ef79d07e45fa9 b/Library/Artifacts/69/6949060e27855c5ac10ef79d07e45fa9 new file mode 100644 index 0000000..c3f61bb Binary files /dev/null and b/Library/Artifacts/69/6949060e27855c5ac10ef79d07e45fa9 differ diff --git a/Library/Artifacts/69/698c83b2b64f653fb408c0c1356749fb b/Library/Artifacts/69/698c83b2b64f653fb408c0c1356749fb new file mode 100644 index 0000000..7c01c80 Binary files /dev/null and b/Library/Artifacts/69/698c83b2b64f653fb408c0c1356749fb differ diff --git a/Library/Artifacts/69/69a87e09ad725ecdde7836c348d0aa09 b/Library/Artifacts/69/69a87e09ad725ecdde7836c348d0aa09 new file mode 100644 index 0000000..d421f81 Binary files /dev/null and b/Library/Artifacts/69/69a87e09ad725ecdde7836c348d0aa09 differ diff --git a/Library/Artifacts/69/69d7f4fe1eead23a6665179ee22b59c1 b/Library/Artifacts/69/69d7f4fe1eead23a6665179ee22b59c1 new file mode 100644 index 0000000..4f01741 Binary files /dev/null and b/Library/Artifacts/69/69d7f4fe1eead23a6665179ee22b59c1 differ diff --git a/Library/Artifacts/6a/6a7344d9167dcbfd15a745e05aaa8cc1 b/Library/Artifacts/6a/6a7344d9167dcbfd15a745e05aaa8cc1 new file mode 100644 index 0000000..4d98294 Binary files /dev/null and b/Library/Artifacts/6a/6a7344d9167dcbfd15a745e05aaa8cc1 differ diff --git a/Library/Artifacts/6b/6b08e773f80bbfe8989827a8b492b797 b/Library/Artifacts/6b/6b08e773f80bbfe8989827a8b492b797 new file mode 100644 index 0000000..2d3983f Binary files /dev/null and b/Library/Artifacts/6b/6b08e773f80bbfe8989827a8b492b797 differ diff --git a/Library/Artifacts/6b/6b38a0dcb8ff4ec8efd287a3b3f69688 b/Library/Artifacts/6b/6b38a0dcb8ff4ec8efd287a3b3f69688 new file mode 100644 index 0000000..dc758a3 Binary files /dev/null and b/Library/Artifacts/6b/6b38a0dcb8ff4ec8efd287a3b3f69688 differ diff --git a/Library/Artifacts/6b/6b6f9b101d414cebea68be1b1929661f b/Library/Artifacts/6b/6b6f9b101d414cebea68be1b1929661f new file mode 100644 index 0000000..6bd3806 Binary files /dev/null and b/Library/Artifacts/6b/6b6f9b101d414cebea68be1b1929661f differ diff --git a/Library/Artifacts/6b/6b975722bd4e0e4be3bab72cb51b6d25 b/Library/Artifacts/6b/6b975722bd4e0e4be3bab72cb51b6d25 new file mode 100644 index 0000000..f83420e Binary files /dev/null and b/Library/Artifacts/6b/6b975722bd4e0e4be3bab72cb51b6d25 differ diff --git a/Library/Artifacts/6b/6bb559f2e0f1a4443dcec7ec42e30da6 b/Library/Artifacts/6b/6bb559f2e0f1a4443dcec7ec42e30da6 new file mode 100644 index 0000000..e3bbae7 Binary files /dev/null and b/Library/Artifacts/6b/6bb559f2e0f1a4443dcec7ec42e30da6 differ diff --git a/Library/Artifacts/6c/6c12a76306423b66a29681e32ac6d93a b/Library/Artifacts/6c/6c12a76306423b66a29681e32ac6d93a new file mode 100644 index 0000000..5185d9d Binary files /dev/null and b/Library/Artifacts/6c/6c12a76306423b66a29681e32ac6d93a differ diff --git a/Library/Artifacts/6c/6c2248de8d4d74d17e6cf05a7a661353 b/Library/Artifacts/6c/6c2248de8d4d74d17e6cf05a7a661353 new file mode 100644 index 0000000..d3f0056 Binary files /dev/null and b/Library/Artifacts/6c/6c2248de8d4d74d17e6cf05a7a661353 differ diff --git a/Library/Artifacts/6c/6c3f8ec7c37858af5ed3b7fcf6d0516d b/Library/Artifacts/6c/6c3f8ec7c37858af5ed3b7fcf6d0516d new file mode 100644 index 0000000..f051473 Binary files /dev/null and b/Library/Artifacts/6c/6c3f8ec7c37858af5ed3b7fcf6d0516d differ diff --git a/Library/Artifacts/6c/6c686931c56405543a7f5d6486598643 b/Library/Artifacts/6c/6c686931c56405543a7f5d6486598643 new file mode 100644 index 0000000..34dd30f Binary files /dev/null and b/Library/Artifacts/6c/6c686931c56405543a7f5d6486598643 differ diff --git a/Library/Artifacts/6c/6c68999f70f27ff7c436d7d5ebec0443 b/Library/Artifacts/6c/6c68999f70f27ff7c436d7d5ebec0443 new file mode 100644 index 0000000..b810d61 Binary files /dev/null and b/Library/Artifacts/6c/6c68999f70f27ff7c436d7d5ebec0443 differ diff --git a/Library/Artifacts/6c/6c70f9a6fe9074bf74427e7a69411f42 b/Library/Artifacts/6c/6c70f9a6fe9074bf74427e7a69411f42 new file mode 100644 index 0000000..27122b7 Binary files /dev/null and b/Library/Artifacts/6c/6c70f9a6fe9074bf74427e7a69411f42 differ diff --git a/Library/Artifacts/6c/6c924df507920c74f1f6b75280298ea9 b/Library/Artifacts/6c/6c924df507920c74f1f6b75280298ea9 new file mode 100644 index 0000000..8952007 Binary files /dev/null and b/Library/Artifacts/6c/6c924df507920c74f1f6b75280298ea9 differ diff --git a/Library/Artifacts/6c/6c9b904976f3028ec3169f84b342d29d b/Library/Artifacts/6c/6c9b904976f3028ec3169f84b342d29d new file mode 100644 index 0000000..7189136 Binary files /dev/null and b/Library/Artifacts/6c/6c9b904976f3028ec3169f84b342d29d differ diff --git a/Library/Artifacts/6c/6cf9b68aa8ad3324ff114591df23787e b/Library/Artifacts/6c/6cf9b68aa8ad3324ff114591df23787e new file mode 100644 index 0000000..233a554 Binary files /dev/null and b/Library/Artifacts/6c/6cf9b68aa8ad3324ff114591df23787e differ diff --git a/Library/Artifacts/6d/6d501f7b766f7dc39eec7bb71255f39a b/Library/Artifacts/6d/6d501f7b766f7dc39eec7bb71255f39a new file mode 100644 index 0000000..c7fc124 Binary files /dev/null and b/Library/Artifacts/6d/6d501f7b766f7dc39eec7bb71255f39a differ diff --git a/Library/Artifacts/6d/6d5f5aedcf69496321a5bbfe9bd36ee0 b/Library/Artifacts/6d/6d5f5aedcf69496321a5bbfe9bd36ee0 new file mode 100644 index 0000000..195609d Binary files /dev/null and b/Library/Artifacts/6d/6d5f5aedcf69496321a5bbfe9bd36ee0 differ diff --git a/Library/Artifacts/6d/6da60fabd675e8b942714d9237b848a6 b/Library/Artifacts/6d/6da60fabd675e8b942714d9237b848a6 new file mode 100644 index 0000000..be8d916 Binary files /dev/null and b/Library/Artifacts/6d/6da60fabd675e8b942714d9237b848a6 differ diff --git a/Library/Artifacts/6d/6dddb97df40a22a43a217125e7d69284 b/Library/Artifacts/6d/6dddb97df40a22a43a217125e7d69284 new file mode 100644 index 0000000..59a91af Binary files /dev/null and b/Library/Artifacts/6d/6dddb97df40a22a43a217125e7d69284 differ diff --git a/Library/Artifacts/6e/6e08991de0b248f9f8249baf1f428ba9 b/Library/Artifacts/6e/6e08991de0b248f9f8249baf1f428ba9 new file mode 100644 index 0000000..d9614b7 Binary files /dev/null and b/Library/Artifacts/6e/6e08991de0b248f9f8249baf1f428ba9 differ diff --git a/Library/Artifacts/6e/6e56941b8c7af2a0d4e5573399398eed b/Library/Artifacts/6e/6e56941b8c7af2a0d4e5573399398eed new file mode 100644 index 0000000..5b8d01a Binary files /dev/null and b/Library/Artifacts/6e/6e56941b8c7af2a0d4e5573399398eed differ diff --git a/Library/Artifacts/6e/6e71a3e7c3073fa3560c6d042e85ff35 b/Library/Artifacts/6e/6e71a3e7c3073fa3560c6d042e85ff35 new file mode 100644 index 0000000..673e072 Binary files /dev/null and b/Library/Artifacts/6e/6e71a3e7c3073fa3560c6d042e85ff35 differ diff --git a/Library/Artifacts/6e/6e8784873afecee8a690892646db6ad9 b/Library/Artifacts/6e/6e8784873afecee8a690892646db6ad9 new file mode 100644 index 0000000..44522a3 Binary files /dev/null and b/Library/Artifacts/6e/6e8784873afecee8a690892646db6ad9 differ diff --git a/Library/Artifacts/6e/6eb07d6a0c2a3054eab25473206aa87c b/Library/Artifacts/6e/6eb07d6a0c2a3054eab25473206aa87c new file mode 100644 index 0000000..2747b1e Binary files /dev/null and b/Library/Artifacts/6e/6eb07d6a0c2a3054eab25473206aa87c differ diff --git a/Library/Artifacts/6e/6ebcf318e28f331682cea976947a87b5 b/Library/Artifacts/6e/6ebcf318e28f331682cea976947a87b5 new file mode 100644 index 0000000..9aa3d22 Binary files /dev/null and b/Library/Artifacts/6e/6ebcf318e28f331682cea976947a87b5 differ diff --git a/Library/Artifacts/6e/6ece5606c0d91afb9cc6971d7156353c b/Library/Artifacts/6e/6ece5606c0d91afb9cc6971d7156353c new file mode 100644 index 0000000..41fe660 Binary files /dev/null and b/Library/Artifacts/6e/6ece5606c0d91afb9cc6971d7156353c differ diff --git a/Library/Artifacts/6f/6f55cf97331c52ddf94ad39b3eb6d33b b/Library/Artifacts/6f/6f55cf97331c52ddf94ad39b3eb6d33b new file mode 100644 index 0000000..60a45e5 Binary files /dev/null and b/Library/Artifacts/6f/6f55cf97331c52ddf94ad39b3eb6d33b differ diff --git a/Library/Artifacts/6f/6f7c7466bbec7a587a93e6293bba5a75 b/Library/Artifacts/6f/6f7c7466bbec7a587a93e6293bba5a75 new file mode 100644 index 0000000..77361bf Binary files /dev/null and b/Library/Artifacts/6f/6f7c7466bbec7a587a93e6293bba5a75 differ diff --git a/Library/Artifacts/6f/6f84dd051d64192fa930c59a8ed9db19 b/Library/Artifacts/6f/6f84dd051d64192fa930c59a8ed9db19 new file mode 100644 index 0000000..6eb98e0 Binary files /dev/null and b/Library/Artifacts/6f/6f84dd051d64192fa930c59a8ed9db19 differ diff --git a/Library/Artifacts/6f/6faaf401de9d925a06deb01031203d44 b/Library/Artifacts/6f/6faaf401de9d925a06deb01031203d44 new file mode 100644 index 0000000..b20da55 Binary files /dev/null and b/Library/Artifacts/6f/6faaf401de9d925a06deb01031203d44 differ diff --git a/Library/Artifacts/6f/6fb0adcbd9eb2944ae7e3a0cb8e39f96 b/Library/Artifacts/6f/6fb0adcbd9eb2944ae7e3a0cb8e39f96 new file mode 100644 index 0000000..b661385 Binary files /dev/null and b/Library/Artifacts/6f/6fb0adcbd9eb2944ae7e3a0cb8e39f96 differ diff --git a/Library/Artifacts/6f/6fcccd790d7a9125fa72a8fbb1dc1de8 b/Library/Artifacts/6f/6fcccd790d7a9125fa72a8fbb1dc1de8 new file mode 100644 index 0000000..463ef13 Binary files /dev/null and b/Library/Artifacts/6f/6fcccd790d7a9125fa72a8fbb1dc1de8 differ diff --git a/Library/Artifacts/6f/6fda466bdbec95732a0ccad207525bc8 b/Library/Artifacts/6f/6fda466bdbec95732a0ccad207525bc8 new file mode 100644 index 0000000..83bd4cf Binary files /dev/null and b/Library/Artifacts/6f/6fda466bdbec95732a0ccad207525bc8 differ diff --git a/Library/Artifacts/70/7024acf13e7e4139f19d2a673e87fca5 b/Library/Artifacts/70/7024acf13e7e4139f19d2a673e87fca5 new file mode 100644 index 0000000..0791089 Binary files /dev/null and b/Library/Artifacts/70/7024acf13e7e4139f19d2a673e87fca5 differ diff --git a/Library/Artifacts/70/702cda8bf7571cc0df83b1a165e602d8 b/Library/Artifacts/70/702cda8bf7571cc0df83b1a165e602d8 new file mode 100644 index 0000000..bfe5d1e Binary files /dev/null and b/Library/Artifacts/70/702cda8bf7571cc0df83b1a165e602d8 differ diff --git a/Library/Artifacts/70/702df78a8a35a7b45a1470f52d7c7cc1 b/Library/Artifacts/70/702df78a8a35a7b45a1470f52d7c7cc1 new file mode 100644 index 0000000..c74ab5c Binary files /dev/null and b/Library/Artifacts/70/702df78a8a35a7b45a1470f52d7c7cc1 differ diff --git a/Library/Artifacts/70/703e79cbe8ef2235dfde4aa48cc77202 b/Library/Artifacts/70/703e79cbe8ef2235dfde4aa48cc77202 new file mode 100644 index 0000000..9bcc81f Binary files /dev/null and b/Library/Artifacts/70/703e79cbe8ef2235dfde4aa48cc77202 differ diff --git a/Library/Artifacts/70/70aa3dda62eef6110622f02f3db9cc5a b/Library/Artifacts/70/70aa3dda62eef6110622f02f3db9cc5a new file mode 100644 index 0000000..847bb4d Binary files /dev/null and b/Library/Artifacts/70/70aa3dda62eef6110622f02f3db9cc5a differ diff --git a/Library/Artifacts/70/70e261dc5360def38d34a74209b8fa05 b/Library/Artifacts/70/70e261dc5360def38d34a74209b8fa05 new file mode 100644 index 0000000..bda42cc Binary files /dev/null and b/Library/Artifacts/70/70e261dc5360def38d34a74209b8fa05 differ diff --git a/Library/Artifacts/71/713c4799aacb9f5d12ca35388807c44b b/Library/Artifacts/71/713c4799aacb9f5d12ca35388807c44b new file mode 100644 index 0000000..e758766 Binary files /dev/null and b/Library/Artifacts/71/713c4799aacb9f5d12ca35388807c44b differ diff --git a/Library/Artifacts/71/7153b7a2111d4bf5726a5eb7514278ce b/Library/Artifacts/71/7153b7a2111d4bf5726a5eb7514278ce new file mode 100644 index 0000000..67176f9 Binary files /dev/null and b/Library/Artifacts/71/7153b7a2111d4bf5726a5eb7514278ce differ diff --git a/Library/Artifacts/71/71892e8c1689261ebc84773d0f5859f6 b/Library/Artifacts/71/71892e8c1689261ebc84773d0f5859f6 new file mode 100644 index 0000000..7d056b4 Binary files /dev/null and b/Library/Artifacts/71/71892e8c1689261ebc84773d0f5859f6 differ diff --git a/Library/Artifacts/71/71b1cf657d94ff8b63b342602256db33 b/Library/Artifacts/71/71b1cf657d94ff8b63b342602256db33 new file mode 100644 index 0000000..3383775 Binary files /dev/null and b/Library/Artifacts/71/71b1cf657d94ff8b63b342602256db33 differ diff --git a/Library/Artifacts/71/71de0fbc074bb68ff35599579f72ea80 b/Library/Artifacts/71/71de0fbc074bb68ff35599579f72ea80 new file mode 100644 index 0000000..10bfa00 Binary files /dev/null and b/Library/Artifacts/71/71de0fbc074bb68ff35599579f72ea80 differ diff --git a/Library/Artifacts/72/726752a05dc630122ffc3ff634d1814a b/Library/Artifacts/72/726752a05dc630122ffc3ff634d1814a new file mode 100644 index 0000000..4f4e284 Binary files /dev/null and b/Library/Artifacts/72/726752a05dc630122ffc3ff634d1814a differ diff --git a/Library/Artifacts/72/72a12d9c3324fd837daf984b2930de3b b/Library/Artifacts/72/72a12d9c3324fd837daf984b2930de3b new file mode 100644 index 0000000..537a0e8 Binary files /dev/null and b/Library/Artifacts/72/72a12d9c3324fd837daf984b2930de3b differ diff --git a/Library/Artifacts/73/7316aef0ed15c140e0ffd84075e296d6 b/Library/Artifacts/73/7316aef0ed15c140e0ffd84075e296d6 new file mode 100644 index 0000000..cdcbb85 Binary files /dev/null and b/Library/Artifacts/73/7316aef0ed15c140e0ffd84075e296d6 differ diff --git a/Library/Artifacts/73/73d2ba5882fcb596897d7a73df2850fd b/Library/Artifacts/73/73d2ba5882fcb596897d7a73df2850fd new file mode 100644 index 0000000..de75246 Binary files /dev/null and b/Library/Artifacts/73/73d2ba5882fcb596897d7a73df2850fd differ diff --git a/Library/Artifacts/73/73d6a34541bf0be7d477ec68db129ef2 b/Library/Artifacts/73/73d6a34541bf0be7d477ec68db129ef2 new file mode 100644 index 0000000..2c25d27 Binary files /dev/null and b/Library/Artifacts/73/73d6a34541bf0be7d477ec68db129ef2 differ diff --git a/Library/Artifacts/73/73fc8c94c9e67e9b1736a1d860c882ba b/Library/Artifacts/73/73fc8c94c9e67e9b1736a1d860c882ba new file mode 100644 index 0000000..f763ab0 Binary files /dev/null and b/Library/Artifacts/73/73fc8c94c9e67e9b1736a1d860c882ba differ diff --git a/Library/Artifacts/74/7443fc5c2c475e9093b5e74b0ac03067 b/Library/Artifacts/74/7443fc5c2c475e9093b5e74b0ac03067 new file mode 100644 index 0000000..e3bc358 Binary files /dev/null and b/Library/Artifacts/74/7443fc5c2c475e9093b5e74b0ac03067 differ diff --git a/Library/Artifacts/74/747a0d0ead951ed640e01517af1ff277 b/Library/Artifacts/74/747a0d0ead951ed640e01517af1ff277 new file mode 100644 index 0000000..9faebfd Binary files /dev/null and b/Library/Artifacts/74/747a0d0ead951ed640e01517af1ff277 differ diff --git a/Library/Artifacts/74/7484ef34a270ddd1339055b83d613e31 b/Library/Artifacts/74/7484ef34a270ddd1339055b83d613e31 new file mode 100644 index 0000000..a5c4911 Binary files /dev/null and b/Library/Artifacts/74/7484ef34a270ddd1339055b83d613e31 differ diff --git a/Library/Artifacts/74/749060369b3360446e08bce489e3b5f1 b/Library/Artifacts/74/749060369b3360446e08bce489e3b5f1 new file mode 100644 index 0000000..ef57ffe Binary files /dev/null and b/Library/Artifacts/74/749060369b3360446e08bce489e3b5f1 differ diff --git a/Library/Artifacts/74/74b84aeb0abb92f8128e2858db348eb5 b/Library/Artifacts/74/74b84aeb0abb92f8128e2858db348eb5 new file mode 100644 index 0000000..d583604 Binary files /dev/null and b/Library/Artifacts/74/74b84aeb0abb92f8128e2858db348eb5 differ diff --git a/Library/Artifacts/74/74db60ce9ad7d275d5b505e5a048185d b/Library/Artifacts/74/74db60ce9ad7d275d5b505e5a048185d new file mode 100644 index 0000000..56901da Binary files /dev/null and b/Library/Artifacts/74/74db60ce9ad7d275d5b505e5a048185d differ diff --git a/Library/Artifacts/74/74e8ae365aed8b147044d072c55b2099 b/Library/Artifacts/74/74e8ae365aed8b147044d072c55b2099 new file mode 100644 index 0000000..a171986 Binary files /dev/null and b/Library/Artifacts/74/74e8ae365aed8b147044d072c55b2099 differ diff --git a/Library/Artifacts/74/74ef494d23eeef378846e242a13a4773 b/Library/Artifacts/74/74ef494d23eeef378846e242a13a4773 new file mode 100644 index 0000000..b33a4e3 Binary files /dev/null and b/Library/Artifacts/74/74ef494d23eeef378846e242a13a4773 differ diff --git a/Library/Artifacts/75/7503c542e60383cb3ca084903ff1c80a b/Library/Artifacts/75/7503c542e60383cb3ca084903ff1c80a new file mode 100644 index 0000000..68a8d8c Binary files /dev/null and b/Library/Artifacts/75/7503c542e60383cb3ca084903ff1c80a differ diff --git a/Library/Artifacts/75/752478c410a7231db25077bbb5fee11d b/Library/Artifacts/75/752478c410a7231db25077bbb5fee11d new file mode 100644 index 0000000..7b8d13b Binary files /dev/null and b/Library/Artifacts/75/752478c410a7231db25077bbb5fee11d differ diff --git a/Library/Artifacts/75/75840f5170d2745d533b7f09ce992698 b/Library/Artifacts/75/75840f5170d2745d533b7f09ce992698 new file mode 100644 index 0000000..a3d99fc Binary files /dev/null and b/Library/Artifacts/75/75840f5170d2745d533b7f09ce992698 differ diff --git a/Library/Artifacts/75/759fa782a1a19355fc7154f167b8e057 b/Library/Artifacts/75/759fa782a1a19355fc7154f167b8e057 new file mode 100644 index 0000000..24b3158 Binary files /dev/null and b/Library/Artifacts/75/759fa782a1a19355fc7154f167b8e057 differ diff --git a/Library/Artifacts/75/75e21c68cf09ad3e6b2a16641a40f8e1 b/Library/Artifacts/75/75e21c68cf09ad3e6b2a16641a40f8e1 new file mode 100644 index 0000000..b3beb1b Binary files /dev/null and b/Library/Artifacts/75/75e21c68cf09ad3e6b2a16641a40f8e1 differ diff --git a/Library/Artifacts/76/76430bbe2e87dea9fe177a06461efb57 b/Library/Artifacts/76/76430bbe2e87dea9fe177a06461efb57 new file mode 100644 index 0000000..3d31682 Binary files /dev/null and b/Library/Artifacts/76/76430bbe2e87dea9fe177a06461efb57 differ diff --git a/Library/Artifacts/76/7669aacc9a75af5d96de02d1231ca56b b/Library/Artifacts/76/7669aacc9a75af5d96de02d1231ca56b new file mode 100644 index 0000000..009b488 Binary files /dev/null and b/Library/Artifacts/76/7669aacc9a75af5d96de02d1231ca56b differ diff --git a/Library/Artifacts/76/76a160f26096b93172b83e8940cbf317 b/Library/Artifacts/76/76a160f26096b93172b83e8940cbf317 new file mode 100644 index 0000000..3091991 Binary files /dev/null and b/Library/Artifacts/76/76a160f26096b93172b83e8940cbf317 differ diff --git a/Library/Artifacts/76/76f24174143385d46342a13959b0bd5f b/Library/Artifacts/76/76f24174143385d46342a13959b0bd5f new file mode 100644 index 0000000..b21ad6c Binary files /dev/null and b/Library/Artifacts/76/76f24174143385d46342a13959b0bd5f differ diff --git a/Library/Artifacts/76/76f37d74f72ab2c056c1813cd5e65271 b/Library/Artifacts/76/76f37d74f72ab2c056c1813cd5e65271 new file mode 100644 index 0000000..9022da7 Binary files /dev/null and b/Library/Artifacts/76/76f37d74f72ab2c056c1813cd5e65271 differ diff --git a/Library/Artifacts/77/7735f2887084f283eefe883f614ecf5f b/Library/Artifacts/77/7735f2887084f283eefe883f614ecf5f new file mode 100644 index 0000000..68432d0 Binary files /dev/null and b/Library/Artifacts/77/7735f2887084f283eefe883f614ecf5f differ diff --git a/Library/Artifacts/77/776a094b5f78ab161bf9e637c93c771d b/Library/Artifacts/77/776a094b5f78ab161bf9e637c93c771d new file mode 100644 index 0000000..f2f6cf2 Binary files /dev/null and b/Library/Artifacts/77/776a094b5f78ab161bf9e637c93c771d differ diff --git a/Library/Artifacts/77/778b015b0c0fd03f9e6f34170a271c3f b/Library/Artifacts/77/778b015b0c0fd03f9e6f34170a271c3f new file mode 100644 index 0000000..c8e45f8 Binary files /dev/null and b/Library/Artifacts/77/778b015b0c0fd03f9e6f34170a271c3f differ diff --git a/Library/Artifacts/77/77903d5e0ecb4a9eaae20c8b28c70aac b/Library/Artifacts/77/77903d5e0ecb4a9eaae20c8b28c70aac new file mode 100644 index 0000000..1885064 Binary files /dev/null and b/Library/Artifacts/77/77903d5e0ecb4a9eaae20c8b28c70aac differ diff --git a/Library/Artifacts/77/77ec011249b08fb17adf2e15a1e2672b b/Library/Artifacts/77/77ec011249b08fb17adf2e15a1e2672b new file mode 100644 index 0000000..4b4082f Binary files /dev/null and b/Library/Artifacts/77/77ec011249b08fb17adf2e15a1e2672b differ diff --git a/Library/Artifacts/78/7808c154cf09768b6b1b29474f47efc7 b/Library/Artifacts/78/7808c154cf09768b6b1b29474f47efc7 new file mode 100644 index 0000000..9c532f8 Binary files /dev/null and b/Library/Artifacts/78/7808c154cf09768b6b1b29474f47efc7 differ diff --git a/Library/Artifacts/78/7843b95be2ac4e84e3f744dec1b6d2c3 b/Library/Artifacts/78/7843b95be2ac4e84e3f744dec1b6d2c3 new file mode 100644 index 0000000..9bb719f Binary files /dev/null and b/Library/Artifacts/78/7843b95be2ac4e84e3f744dec1b6d2c3 differ diff --git a/Library/Artifacts/78/78fdeea0557f822afa72e8e4e705e478 b/Library/Artifacts/78/78fdeea0557f822afa72e8e4e705e478 new file mode 100644 index 0000000..8ccbfd2 Binary files /dev/null and b/Library/Artifacts/78/78fdeea0557f822afa72e8e4e705e478 differ diff --git a/Library/Artifacts/79/790e2f4010b119c6bd4bcd0dc3b4dad7 b/Library/Artifacts/79/790e2f4010b119c6bd4bcd0dc3b4dad7 new file mode 100644 index 0000000..be02c62 Binary files /dev/null and b/Library/Artifacts/79/790e2f4010b119c6bd4bcd0dc3b4dad7 differ diff --git a/Library/Artifacts/79/795749de7356577fc8de1fd84e3a4142 b/Library/Artifacts/79/795749de7356577fc8de1fd84e3a4142 new file mode 100644 index 0000000..549e0bf Binary files /dev/null and b/Library/Artifacts/79/795749de7356577fc8de1fd84e3a4142 differ diff --git a/Library/Artifacts/79/7988985fd148d818da8ff7c885c24727 b/Library/Artifacts/79/7988985fd148d818da8ff7c885c24727 new file mode 100644 index 0000000..24c782e Binary files /dev/null and b/Library/Artifacts/79/7988985fd148d818da8ff7c885c24727 differ diff --git a/Library/Artifacts/79/79c584fe6dfaf532810dfaf10e0bd055 b/Library/Artifacts/79/79c584fe6dfaf532810dfaf10e0bd055 new file mode 100644 index 0000000..b530427 Binary files /dev/null and b/Library/Artifacts/79/79c584fe6dfaf532810dfaf10e0bd055 differ diff --git a/Library/Artifacts/79/79d067a500a243c65170d4480ab0c41d b/Library/Artifacts/79/79d067a500a243c65170d4480ab0c41d new file mode 100644 index 0000000..3b3e561 Binary files /dev/null and b/Library/Artifacts/79/79d067a500a243c65170d4480ab0c41d differ diff --git a/Library/Artifacts/79/79ec9924523cab891e1402fd42acd369 b/Library/Artifacts/79/79ec9924523cab891e1402fd42acd369 new file mode 100644 index 0000000..7964e9b Binary files /dev/null and b/Library/Artifacts/79/79ec9924523cab891e1402fd42acd369 differ diff --git a/Library/Artifacts/7a/7a0b4e95758087f04d9b96616a0a433b b/Library/Artifacts/7a/7a0b4e95758087f04d9b96616a0a433b new file mode 100644 index 0000000..3ab880c Binary files /dev/null and b/Library/Artifacts/7a/7a0b4e95758087f04d9b96616a0a433b differ diff --git a/Library/Artifacts/7a/7a1ddd4bb62494c94d9a519402133b72 b/Library/Artifacts/7a/7a1ddd4bb62494c94d9a519402133b72 new file mode 100644 index 0000000..a9fbb89 Binary files /dev/null and b/Library/Artifacts/7a/7a1ddd4bb62494c94d9a519402133b72 differ diff --git a/Library/Artifacts/7a/7a242b203ec1f87acb85a1bca6d92a05 b/Library/Artifacts/7a/7a242b203ec1f87acb85a1bca6d92a05 new file mode 100644 index 0000000..97282cf Binary files /dev/null and b/Library/Artifacts/7a/7a242b203ec1f87acb85a1bca6d92a05 differ diff --git a/Library/Artifacts/7a/7a3812acbce337fede22a13d60be701d b/Library/Artifacts/7a/7a3812acbce337fede22a13d60be701d new file mode 100644 index 0000000..482a06d Binary files /dev/null and b/Library/Artifacts/7a/7a3812acbce337fede22a13d60be701d differ diff --git a/Library/Artifacts/7a/7a422c42e8d1c35b63f76b33fda4d52f b/Library/Artifacts/7a/7a422c42e8d1c35b63f76b33fda4d52f new file mode 100644 index 0000000..371fd22 Binary files /dev/null and b/Library/Artifacts/7a/7a422c42e8d1c35b63f76b33fda4d52f differ diff --git a/Library/Artifacts/7a/7aa8381beae3d61f095839726d33821e b/Library/Artifacts/7a/7aa8381beae3d61f095839726d33821e new file mode 100644 index 0000000..dc2728a Binary files /dev/null and b/Library/Artifacts/7a/7aa8381beae3d61f095839726d33821e differ diff --git a/Library/Artifacts/7a/7ab697405347529d2c9651dfdd1c53fa b/Library/Artifacts/7a/7ab697405347529d2c9651dfdd1c53fa new file mode 100644 index 0000000..227d2cc Binary files /dev/null and b/Library/Artifacts/7a/7ab697405347529d2c9651dfdd1c53fa differ diff --git a/Library/Artifacts/7a/7ac6c1fdfe9b07e270619958ff49d50d b/Library/Artifacts/7a/7ac6c1fdfe9b07e270619958ff49d50d new file mode 100644 index 0000000..5493cf3 Binary files /dev/null and b/Library/Artifacts/7a/7ac6c1fdfe9b07e270619958ff49d50d differ diff --git a/Library/Artifacts/7a/7ad154c61ec1fa2e037fbb66380436d0 b/Library/Artifacts/7a/7ad154c61ec1fa2e037fbb66380436d0 new file mode 100644 index 0000000..c130616 Binary files /dev/null and b/Library/Artifacts/7a/7ad154c61ec1fa2e037fbb66380436d0 differ diff --git a/Library/Artifacts/7b/7b1c49ddf8ff7572a460daa2c0f7de27 b/Library/Artifacts/7b/7b1c49ddf8ff7572a460daa2c0f7de27 new file mode 100644 index 0000000..462740b Binary files /dev/null and b/Library/Artifacts/7b/7b1c49ddf8ff7572a460daa2c0f7de27 differ diff --git a/Library/Artifacts/7b/7b792571f5382aea7ae3bd5d1e066121 b/Library/Artifacts/7b/7b792571f5382aea7ae3bd5d1e066121 new file mode 100644 index 0000000..208fec2 Binary files /dev/null and b/Library/Artifacts/7b/7b792571f5382aea7ae3bd5d1e066121 differ diff --git a/Library/Artifacts/7b/7b9c7ec404f78f246398c5724e792baa b/Library/Artifacts/7b/7b9c7ec404f78f246398c5724e792baa new file mode 100644 index 0000000..4a91da8 Binary files /dev/null and b/Library/Artifacts/7b/7b9c7ec404f78f246398c5724e792baa differ diff --git a/Library/Artifacts/7b/7bc20827162ddd36b541e61f0d2a3916 b/Library/Artifacts/7b/7bc20827162ddd36b541e61f0d2a3916 new file mode 100644 index 0000000..21bbd10 Binary files /dev/null and b/Library/Artifacts/7b/7bc20827162ddd36b541e61f0d2a3916 differ diff --git a/Library/Artifacts/7b/7bcf1c1dac433557299f90223a6b1796 b/Library/Artifacts/7b/7bcf1c1dac433557299f90223a6b1796 new file mode 100644 index 0000000..7ba63e2 Binary files /dev/null and b/Library/Artifacts/7b/7bcf1c1dac433557299f90223a6b1796 differ diff --git a/Library/Artifacts/7c/7c06665d81fcfc7ef32834f386752a64 b/Library/Artifacts/7c/7c06665d81fcfc7ef32834f386752a64 new file mode 100644 index 0000000..2b56a07 Binary files /dev/null and b/Library/Artifacts/7c/7c06665d81fcfc7ef32834f386752a64 differ diff --git a/Library/Artifacts/7c/7c0a52a9e25cbb89e389299b52a8a0c5 b/Library/Artifacts/7c/7c0a52a9e25cbb89e389299b52a8a0c5 new file mode 100644 index 0000000..c49ddc6 Binary files /dev/null and b/Library/Artifacts/7c/7c0a52a9e25cbb89e389299b52a8a0c5 differ diff --git a/Library/Artifacts/7c/7c319978c39a6eabd8452b5053851966 b/Library/Artifacts/7c/7c319978c39a6eabd8452b5053851966 new file mode 100644 index 0000000..ff4bdb1 Binary files /dev/null and b/Library/Artifacts/7c/7c319978c39a6eabd8452b5053851966 differ diff --git a/Library/Artifacts/7c/7c536cc5e7e5cb82fe3b9db34ddefac8 b/Library/Artifacts/7c/7c536cc5e7e5cb82fe3b9db34ddefac8 new file mode 100644 index 0000000..7be8b8a Binary files /dev/null and b/Library/Artifacts/7c/7c536cc5e7e5cb82fe3b9db34ddefac8 differ diff --git a/Library/Artifacts/7c/7c97c493dafce68bb2b711f1e7c82cc6 b/Library/Artifacts/7c/7c97c493dafce68bb2b711f1e7c82cc6 new file mode 100644 index 0000000..bf7b746 Binary files /dev/null and b/Library/Artifacts/7c/7c97c493dafce68bb2b711f1e7c82cc6 differ diff --git a/Library/Artifacts/7d/7d117ab77a9affc127e4ab2ca0a3619d b/Library/Artifacts/7d/7d117ab77a9affc127e4ab2ca0a3619d new file mode 100644 index 0000000..1ee9acb Binary files /dev/null and b/Library/Artifacts/7d/7d117ab77a9affc127e4ab2ca0a3619d differ diff --git a/Library/Artifacts/7d/7d23ff101b4f31c973e98948daeab65d b/Library/Artifacts/7d/7d23ff101b4f31c973e98948daeab65d new file mode 100644 index 0000000..b60049e Binary files /dev/null and b/Library/Artifacts/7d/7d23ff101b4f31c973e98948daeab65d differ diff --git a/Library/Artifacts/7d/7d2b1b311591fc74b13b637f7eb260d9 b/Library/Artifacts/7d/7d2b1b311591fc74b13b637f7eb260d9 new file mode 100644 index 0000000..e7ed25e Binary files /dev/null and b/Library/Artifacts/7d/7d2b1b311591fc74b13b637f7eb260d9 differ diff --git a/Library/Artifacts/7d/7d60037118799cadcd00a53424a11914 b/Library/Artifacts/7d/7d60037118799cadcd00a53424a11914 new file mode 100644 index 0000000..aed5036 Binary files /dev/null and b/Library/Artifacts/7d/7d60037118799cadcd00a53424a11914 differ diff --git a/Library/Artifacts/7d/7d6bf65b11c4d06ee51af0dd2fb4667c b/Library/Artifacts/7d/7d6bf65b11c4d06ee51af0dd2fb4667c new file mode 100644 index 0000000..1f1105f Binary files /dev/null and b/Library/Artifacts/7d/7d6bf65b11c4d06ee51af0dd2fb4667c differ diff --git a/Library/Artifacts/7d/7db5547321cc85d7df305fae9f8ae5c3 b/Library/Artifacts/7d/7db5547321cc85d7df305fae9f8ae5c3 new file mode 100644 index 0000000..4ea545e Binary files /dev/null and b/Library/Artifacts/7d/7db5547321cc85d7df305fae9f8ae5c3 differ diff --git a/Library/Artifacts/7d/7dfd312258bf4dd10f5aa04dfc49aff1 b/Library/Artifacts/7d/7dfd312258bf4dd10f5aa04dfc49aff1 new file mode 100644 index 0000000..e3eff4e Binary files /dev/null and b/Library/Artifacts/7d/7dfd312258bf4dd10f5aa04dfc49aff1 differ diff --git a/Library/Artifacts/7d/7dfde6001575602515bb12f126c02a3d b/Library/Artifacts/7d/7dfde6001575602515bb12f126c02a3d new file mode 100644 index 0000000..81c17a1 Binary files /dev/null and b/Library/Artifacts/7d/7dfde6001575602515bb12f126c02a3d differ diff --git a/Library/Artifacts/7e/7e01561233644e028ea51dfa90cdfa74 b/Library/Artifacts/7e/7e01561233644e028ea51dfa90cdfa74 new file mode 100644 index 0000000..7b06c5d Binary files /dev/null and b/Library/Artifacts/7e/7e01561233644e028ea51dfa90cdfa74 differ diff --git a/Library/Artifacts/7e/7e25ba33d99337c285eb311a33bfe647 b/Library/Artifacts/7e/7e25ba33d99337c285eb311a33bfe647 new file mode 100644 index 0000000..5b3f9d5 Binary files /dev/null and b/Library/Artifacts/7e/7e25ba33d99337c285eb311a33bfe647 differ diff --git a/Library/Artifacts/7e/7e335d9490c3fb2363bbc720cde3f22d b/Library/Artifacts/7e/7e335d9490c3fb2363bbc720cde3f22d new file mode 100644 index 0000000..a098d28 Binary files /dev/null and b/Library/Artifacts/7e/7e335d9490c3fb2363bbc720cde3f22d differ diff --git a/Library/Artifacts/7e/7e6e85dbbfa209b3f4170edf11d834a2 b/Library/Artifacts/7e/7e6e85dbbfa209b3f4170edf11d834a2 new file mode 100644 index 0000000..8b63757 Binary files /dev/null and b/Library/Artifacts/7e/7e6e85dbbfa209b3f4170edf11d834a2 differ diff --git a/Library/Artifacts/7e/7e911d8e752695abfefd019fb4619bbb b/Library/Artifacts/7e/7e911d8e752695abfefd019fb4619bbb new file mode 100644 index 0000000..326477b Binary files /dev/null and b/Library/Artifacts/7e/7e911d8e752695abfefd019fb4619bbb differ diff --git a/Library/Artifacts/7e/7eeb70a79371aa81fec02fe01411a904 b/Library/Artifacts/7e/7eeb70a79371aa81fec02fe01411a904 new file mode 100644 index 0000000..1faede1 Binary files /dev/null and b/Library/Artifacts/7e/7eeb70a79371aa81fec02fe01411a904 differ diff --git a/Library/Artifacts/7f/7f14077002b925e48d80eca5ccaedbdc b/Library/Artifacts/7f/7f14077002b925e48d80eca5ccaedbdc new file mode 100644 index 0000000..a1fbf3e Binary files /dev/null and b/Library/Artifacts/7f/7f14077002b925e48d80eca5ccaedbdc differ diff --git a/Library/Artifacts/7f/7f507f0c334389839cef89a0c4271b0e b/Library/Artifacts/7f/7f507f0c334389839cef89a0c4271b0e new file mode 100644 index 0000000..0595398 Binary files /dev/null and b/Library/Artifacts/7f/7f507f0c334389839cef89a0c4271b0e differ diff --git a/Library/Artifacts/7f/7f62a967c11665b160fc2cb207ce7daa b/Library/Artifacts/7f/7f62a967c11665b160fc2cb207ce7daa new file mode 100644 index 0000000..d5c6912 Binary files /dev/null and b/Library/Artifacts/7f/7f62a967c11665b160fc2cb207ce7daa differ diff --git a/Library/Artifacts/7f/7f6c421855079c70ff6023b5a61a31fd b/Library/Artifacts/7f/7f6c421855079c70ff6023b5a61a31fd new file mode 100644 index 0000000..a5c7943 Binary files /dev/null and b/Library/Artifacts/7f/7f6c421855079c70ff6023b5a61a31fd differ diff --git a/Library/Artifacts/7f/7fa05f6b7bd227f6a2ca0a59ade48bb0 b/Library/Artifacts/7f/7fa05f6b7bd227f6a2ca0a59ade48bb0 new file mode 100644 index 0000000..f024a68 Binary files /dev/null and b/Library/Artifacts/7f/7fa05f6b7bd227f6a2ca0a59ade48bb0 differ diff --git a/Library/Artifacts/80/8073ba681b42589118f63bd0851c5dc6 b/Library/Artifacts/80/8073ba681b42589118f63bd0851c5dc6 new file mode 100644 index 0000000..a44edbc Binary files /dev/null and b/Library/Artifacts/80/8073ba681b42589118f63bd0851c5dc6 differ diff --git a/Library/Artifacts/81/81071f95f4859a115cf058e3964e2702 b/Library/Artifacts/81/81071f95f4859a115cf058e3964e2702 new file mode 100644 index 0000000..28dfe44 Binary files /dev/null and b/Library/Artifacts/81/81071f95f4859a115cf058e3964e2702 differ diff --git a/Library/Artifacts/81/81094cdc9e247641f8619199761b0e02 b/Library/Artifacts/81/81094cdc9e247641f8619199761b0e02 new file mode 100644 index 0000000..e813ad0 Binary files /dev/null and b/Library/Artifacts/81/81094cdc9e247641f8619199761b0e02 differ diff --git a/Library/Artifacts/81/815fd7d8a04cac0cbfee40bdbdd9bcaf b/Library/Artifacts/81/815fd7d8a04cac0cbfee40bdbdd9bcaf new file mode 100644 index 0000000..e3756ca Binary files /dev/null and b/Library/Artifacts/81/815fd7d8a04cac0cbfee40bdbdd9bcaf differ diff --git a/Library/Artifacts/81/817caa01300665b61cff5d37e4cfb1b5 b/Library/Artifacts/81/817caa01300665b61cff5d37e4cfb1b5 new file mode 100644 index 0000000..51ae432 Binary files /dev/null and b/Library/Artifacts/81/817caa01300665b61cff5d37e4cfb1b5 differ diff --git a/Library/Artifacts/82/8224ae79f92713e3454f398739191270 b/Library/Artifacts/82/8224ae79f92713e3454f398739191270 new file mode 100644 index 0000000..8db3e4b Binary files /dev/null and b/Library/Artifacts/82/8224ae79f92713e3454f398739191270 differ diff --git a/Library/Artifacts/82/8226c87cbe69d2b971c1bdda552d9524 b/Library/Artifacts/82/8226c87cbe69d2b971c1bdda552d9524 new file mode 100644 index 0000000..42cf762 Binary files /dev/null and b/Library/Artifacts/82/8226c87cbe69d2b971c1bdda552d9524 differ diff --git a/Library/Artifacts/82/826f933060fc58333bd19621634d9298 b/Library/Artifacts/82/826f933060fc58333bd19621634d9298 new file mode 100644 index 0000000..ce07ef9 Binary files /dev/null and b/Library/Artifacts/82/826f933060fc58333bd19621634d9298 differ diff --git a/Library/Artifacts/83/8336cfbfe61eb3393bb106e67f83b638 b/Library/Artifacts/83/8336cfbfe61eb3393bb106e67f83b638 new file mode 100644 index 0000000..5517364 Binary files /dev/null and b/Library/Artifacts/83/8336cfbfe61eb3393bb106e67f83b638 differ diff --git a/Library/Artifacts/83/834d0ef10d20f0d5b7d9b07a46bc0953 b/Library/Artifacts/83/834d0ef10d20f0d5b7d9b07a46bc0953 new file mode 100644 index 0000000..836c0c8 Binary files /dev/null and b/Library/Artifacts/83/834d0ef10d20f0d5b7d9b07a46bc0953 differ diff --git a/Library/Artifacts/83/83a43593ec482460c58dc2754ac908aa b/Library/Artifacts/83/83a43593ec482460c58dc2754ac908aa new file mode 100644 index 0000000..6c7e4f9 Binary files /dev/null and b/Library/Artifacts/83/83a43593ec482460c58dc2754ac908aa differ diff --git a/Library/Artifacts/83/83aeda4e541db0b1484ae460215b4c07 b/Library/Artifacts/83/83aeda4e541db0b1484ae460215b4c07 new file mode 100644 index 0000000..127e0c6 Binary files /dev/null and b/Library/Artifacts/83/83aeda4e541db0b1484ae460215b4c07 differ diff --git a/Library/Artifacts/83/83fad0618fc64941150c9f368f499b74 b/Library/Artifacts/83/83fad0618fc64941150c9f368f499b74 new file mode 100644 index 0000000..cf6fdc0 Binary files /dev/null and b/Library/Artifacts/83/83fad0618fc64941150c9f368f499b74 differ diff --git a/Library/Artifacts/84/84884f82cd25440718d5eeffcdad9b94 b/Library/Artifacts/84/84884f82cd25440718d5eeffcdad9b94 new file mode 100644 index 0000000..e829e52 Binary files /dev/null and b/Library/Artifacts/84/84884f82cd25440718d5eeffcdad9b94 differ diff --git a/Library/Artifacts/84/849014c6ed94cdc3a815c303ee0becac b/Library/Artifacts/84/849014c6ed94cdc3a815c303ee0becac new file mode 100644 index 0000000..56cb091 Binary files /dev/null and b/Library/Artifacts/84/849014c6ed94cdc3a815c303ee0becac differ diff --git a/Library/Artifacts/84/84c82b460875aeab10c1c43ad0e2b357 b/Library/Artifacts/84/84c82b460875aeab10c1c43ad0e2b357 new file mode 100644 index 0000000..4515624 Binary files /dev/null and b/Library/Artifacts/84/84c82b460875aeab10c1c43ad0e2b357 differ diff --git a/Library/Artifacts/85/8523f9937b95b1272478fff88305b2b8 b/Library/Artifacts/85/8523f9937b95b1272478fff88305b2b8 new file mode 100644 index 0000000..74f1c99 Binary files /dev/null and b/Library/Artifacts/85/8523f9937b95b1272478fff88305b2b8 differ diff --git a/Library/Artifacts/85/852c0b05a99d0f9897dcf7732499524e b/Library/Artifacts/85/852c0b05a99d0f9897dcf7732499524e new file mode 100644 index 0000000..64bf7c8 Binary files /dev/null and b/Library/Artifacts/85/852c0b05a99d0f9897dcf7732499524e differ diff --git a/Library/Artifacts/85/85336340c6ba1a102aad7fad6870b9f1 b/Library/Artifacts/85/85336340c6ba1a102aad7fad6870b9f1 new file mode 100644 index 0000000..66f5304 Binary files /dev/null and b/Library/Artifacts/85/85336340c6ba1a102aad7fad6870b9f1 differ diff --git a/Library/Artifacts/85/854398386571a7fb475846bd1d83d2b4 b/Library/Artifacts/85/854398386571a7fb475846bd1d83d2b4 new file mode 100644 index 0000000..483bc4f Binary files /dev/null and b/Library/Artifacts/85/854398386571a7fb475846bd1d83d2b4 differ diff --git a/Library/Artifacts/85/855c88b3bee12b55dd6440009e160437 b/Library/Artifacts/85/855c88b3bee12b55dd6440009e160437 new file mode 100644 index 0000000..df9599c Binary files /dev/null and b/Library/Artifacts/85/855c88b3bee12b55dd6440009e160437 differ diff --git a/Library/Artifacts/85/856288e33efa9a5b36a89c6204e892dd b/Library/Artifacts/85/856288e33efa9a5b36a89c6204e892dd new file mode 100644 index 0000000..81d25ad Binary files /dev/null and b/Library/Artifacts/85/856288e33efa9a5b36a89c6204e892dd differ diff --git a/Library/Artifacts/85/857c4cc6aa48a750906094bfa06271cc b/Library/Artifacts/85/857c4cc6aa48a750906094bfa06271cc new file mode 100644 index 0000000..c99bf1b Binary files /dev/null and b/Library/Artifacts/85/857c4cc6aa48a750906094bfa06271cc differ diff --git a/Library/Artifacts/85/85c9b223384f2d321bad364b289bee33 b/Library/Artifacts/85/85c9b223384f2d321bad364b289bee33 new file mode 100644 index 0000000..2b6b177 Binary files /dev/null and b/Library/Artifacts/85/85c9b223384f2d321bad364b289bee33 differ diff --git a/Library/Artifacts/86/868034333448e420ee1dd66bbb07f407 b/Library/Artifacts/86/868034333448e420ee1dd66bbb07f407 new file mode 100644 index 0000000..ff49d0a Binary files /dev/null and b/Library/Artifacts/86/868034333448e420ee1dd66bbb07f407 differ diff --git a/Library/Artifacts/86/86fc0131e87972257d106d4dfd761159 b/Library/Artifacts/86/86fc0131e87972257d106d4dfd761159 new file mode 100644 index 0000000..b6ea8fe Binary files /dev/null and b/Library/Artifacts/86/86fc0131e87972257d106d4dfd761159 differ diff --git a/Library/Artifacts/87/8713dc15cc165093e05c266cf692cb93 b/Library/Artifacts/87/8713dc15cc165093e05c266cf692cb93 new file mode 100644 index 0000000..68397bf Binary files /dev/null and b/Library/Artifacts/87/8713dc15cc165093e05c266cf692cb93 differ diff --git a/Library/Artifacts/87/87273590159094d1d4154ac869b364eb b/Library/Artifacts/87/87273590159094d1d4154ac869b364eb new file mode 100644 index 0000000..2aa5c96 Binary files /dev/null and b/Library/Artifacts/87/87273590159094d1d4154ac869b364eb differ diff --git a/Library/Artifacts/87/8739134dd280de00190fb7e1cb8cfbb6 b/Library/Artifacts/87/8739134dd280de00190fb7e1cb8cfbb6 new file mode 100644 index 0000000..27c2efa Binary files /dev/null and b/Library/Artifacts/87/8739134dd280de00190fb7e1cb8cfbb6 differ diff --git a/Library/Artifacts/87/87463bf1e8c30ec72c3948a11c5ee163 b/Library/Artifacts/87/87463bf1e8c30ec72c3948a11c5ee163 new file mode 100644 index 0000000..046042d Binary files /dev/null and b/Library/Artifacts/87/87463bf1e8c30ec72c3948a11c5ee163 differ diff --git a/Library/Artifacts/87/8764f37e6a7c178dffc723938d6fe920 b/Library/Artifacts/87/8764f37e6a7c178dffc723938d6fe920 new file mode 100644 index 0000000..08a340b Binary files /dev/null and b/Library/Artifacts/87/8764f37e6a7c178dffc723938d6fe920 differ diff --git a/Library/Artifacts/87/877ef686af4274bf1b9de831caf670eb b/Library/Artifacts/87/877ef686af4274bf1b9de831caf670eb new file mode 100644 index 0000000..98ed9ef Binary files /dev/null and b/Library/Artifacts/87/877ef686af4274bf1b9de831caf670eb differ diff --git a/Library/Artifacts/87/8798b9ecb8ae8f4165f045e68ff61189 b/Library/Artifacts/87/8798b9ecb8ae8f4165f045e68ff61189 new file mode 100644 index 0000000..a3a4f91 Binary files /dev/null and b/Library/Artifacts/87/8798b9ecb8ae8f4165f045e68ff61189 differ diff --git a/Library/Artifacts/87/87bf9ac2942b239f85ecedb016ccdc4d b/Library/Artifacts/87/87bf9ac2942b239f85ecedb016ccdc4d new file mode 100644 index 0000000..4a2942b Binary files /dev/null and b/Library/Artifacts/87/87bf9ac2942b239f85ecedb016ccdc4d differ diff --git a/Library/Artifacts/87/87c2ee8fbb7ce90211274b7293b98198 b/Library/Artifacts/87/87c2ee8fbb7ce90211274b7293b98198 new file mode 100644 index 0000000..bda8c0a Binary files /dev/null and b/Library/Artifacts/87/87c2ee8fbb7ce90211274b7293b98198 differ diff --git a/Library/Artifacts/88/8848a061a1d6dfbf64b6b6ec121a979c b/Library/Artifacts/88/8848a061a1d6dfbf64b6b6ec121a979c new file mode 100644 index 0000000..c76e25f Binary files /dev/null and b/Library/Artifacts/88/8848a061a1d6dfbf64b6b6ec121a979c differ diff --git a/Library/Artifacts/88/88ac36b1851404c3bd3f6c6d020ac687 b/Library/Artifacts/88/88ac36b1851404c3bd3f6c6d020ac687 new file mode 100644 index 0000000..e38bba7 Binary files /dev/null and b/Library/Artifacts/88/88ac36b1851404c3bd3f6c6d020ac687 differ diff --git a/Library/Artifacts/88/88b9a5470365b9a61d548368e61ed968 b/Library/Artifacts/88/88b9a5470365b9a61d548368e61ed968 new file mode 100644 index 0000000..c6c4c97 Binary files /dev/null and b/Library/Artifacts/88/88b9a5470365b9a61d548368e61ed968 differ diff --git a/Library/Artifacts/89/892196e23ce17dc43d89177274a3d82f b/Library/Artifacts/89/892196e23ce17dc43d89177274a3d82f new file mode 100644 index 0000000..6ef8c8d Binary files /dev/null and b/Library/Artifacts/89/892196e23ce17dc43d89177274a3d82f differ diff --git a/Library/Artifacts/89/89af7bdbf91378c7bab6a7b63512f86c b/Library/Artifacts/89/89af7bdbf91378c7bab6a7b63512f86c new file mode 100644 index 0000000..ed0fe65 Binary files /dev/null and b/Library/Artifacts/89/89af7bdbf91378c7bab6a7b63512f86c differ diff --git a/Library/Artifacts/89/89b733d617afb44c6756010b85fc9d07 b/Library/Artifacts/89/89b733d617afb44c6756010b85fc9d07 new file mode 100644 index 0000000..7a18818 Binary files /dev/null and b/Library/Artifacts/89/89b733d617afb44c6756010b85fc9d07 differ diff --git a/Library/Artifacts/89/89e87464d9bfb1d39e531ee233514044 b/Library/Artifacts/89/89e87464d9bfb1d39e531ee233514044 new file mode 100644 index 0000000..683542a Binary files /dev/null and b/Library/Artifacts/89/89e87464d9bfb1d39e531ee233514044 differ diff --git a/Library/Artifacts/89/89f0cd22c886efa64fe257103a45cab6 b/Library/Artifacts/89/89f0cd22c886efa64fe257103a45cab6 new file mode 100644 index 0000000..9962e61 Binary files /dev/null and b/Library/Artifacts/89/89f0cd22c886efa64fe257103a45cab6 differ diff --git a/Library/Artifacts/89/89f2cbc6a5c4abfe3f35849547a5ed0a b/Library/Artifacts/89/89f2cbc6a5c4abfe3f35849547a5ed0a new file mode 100644 index 0000000..4ff0672 Binary files /dev/null and b/Library/Artifacts/89/89f2cbc6a5c4abfe3f35849547a5ed0a differ diff --git a/Library/Artifacts/89/89fa36df881bad490537fc016610fba2 b/Library/Artifacts/89/89fa36df881bad490537fc016610fba2 new file mode 100644 index 0000000..83f20b7 Binary files /dev/null and b/Library/Artifacts/89/89fa36df881bad490537fc016610fba2 differ diff --git a/Library/Artifacts/8a/8a06ecb9f523ce50f0fce38faa1fc787 b/Library/Artifacts/8a/8a06ecb9f523ce50f0fce38faa1fc787 new file mode 100644 index 0000000..316d4f4 Binary files /dev/null and b/Library/Artifacts/8a/8a06ecb9f523ce50f0fce38faa1fc787 differ diff --git a/Library/Artifacts/8a/8a09c1f9e2a48fefc79d41abae79eec7 b/Library/Artifacts/8a/8a09c1f9e2a48fefc79d41abae79eec7 new file mode 100644 index 0000000..4e3e5e7 Binary files /dev/null and b/Library/Artifacts/8a/8a09c1f9e2a48fefc79d41abae79eec7 differ diff --git a/Library/Artifacts/8a/8a0fca11be8512159b6f9ef02ecdc80b b/Library/Artifacts/8a/8a0fca11be8512159b6f9ef02ecdc80b new file mode 100644 index 0000000..ad90115 Binary files /dev/null and b/Library/Artifacts/8a/8a0fca11be8512159b6f9ef02ecdc80b differ diff --git a/Library/Artifacts/8a/8a36f42e7b419b54c6d521084d3b7293 b/Library/Artifacts/8a/8a36f42e7b419b54c6d521084d3b7293 new file mode 100644 index 0000000..89216ab Binary files /dev/null and b/Library/Artifacts/8a/8a36f42e7b419b54c6d521084d3b7293 differ diff --git a/Library/Artifacts/8a/8a3ff46a9124cd2be97cb6c561b289ce b/Library/Artifacts/8a/8a3ff46a9124cd2be97cb6c561b289ce new file mode 100644 index 0000000..169c691 Binary files /dev/null and b/Library/Artifacts/8a/8a3ff46a9124cd2be97cb6c561b289ce differ diff --git a/Library/Artifacts/8a/8a409d938b07becfd9da1148893fee7d b/Library/Artifacts/8a/8a409d938b07becfd9da1148893fee7d new file mode 100644 index 0000000..b1a8952 Binary files /dev/null and b/Library/Artifacts/8a/8a409d938b07becfd9da1148893fee7d differ diff --git a/Library/Artifacts/8a/8a6142b913fdbe4b2dc963276425f49e b/Library/Artifacts/8a/8a6142b913fdbe4b2dc963276425f49e new file mode 100644 index 0000000..645992f Binary files /dev/null and b/Library/Artifacts/8a/8a6142b913fdbe4b2dc963276425f49e differ diff --git a/Library/Artifacts/8a/8a629165807ca997bd6eeb23f40653e6 b/Library/Artifacts/8a/8a629165807ca997bd6eeb23f40653e6 new file mode 100644 index 0000000..eb816bd Binary files /dev/null and b/Library/Artifacts/8a/8a629165807ca997bd6eeb23f40653e6 differ diff --git a/Library/Artifacts/8a/8a9907ca198749bf8f6c6f8102a71cb1 b/Library/Artifacts/8a/8a9907ca198749bf8f6c6f8102a71cb1 new file mode 100644 index 0000000..6cc8d16 Binary files /dev/null and b/Library/Artifacts/8a/8a9907ca198749bf8f6c6f8102a71cb1 differ diff --git a/Library/Artifacts/8a/8aaaf125375d09b902c5528becb63c43 b/Library/Artifacts/8a/8aaaf125375d09b902c5528becb63c43 new file mode 100644 index 0000000..e459b0d Binary files /dev/null and b/Library/Artifacts/8a/8aaaf125375d09b902c5528becb63c43 differ diff --git a/Library/Artifacts/8a/8abbeafce631859262ecd41a01510dc9 b/Library/Artifacts/8a/8abbeafce631859262ecd41a01510dc9 new file mode 100644 index 0000000..b15dcd8 Binary files /dev/null and b/Library/Artifacts/8a/8abbeafce631859262ecd41a01510dc9 differ diff --git a/Library/Artifacts/8a/8ae045d3835d10d47b7891ffcc8a0c91 b/Library/Artifacts/8a/8ae045d3835d10d47b7891ffcc8a0c91 new file mode 100644 index 0000000..ebaa7b3 Binary files /dev/null and b/Library/Artifacts/8a/8ae045d3835d10d47b7891ffcc8a0c91 differ diff --git a/Library/Artifacts/8a/8afa58ea83687c2455397b60b90d176c b/Library/Artifacts/8a/8afa58ea83687c2455397b60b90d176c new file mode 100644 index 0000000..a03f26d Binary files /dev/null and b/Library/Artifacts/8a/8afa58ea83687c2455397b60b90d176c differ diff --git a/Library/Artifacts/8b/8bcff60f555328b375ddc8d862779ea6 b/Library/Artifacts/8b/8bcff60f555328b375ddc8d862779ea6 new file mode 100644 index 0000000..1301f33 Binary files /dev/null and b/Library/Artifacts/8b/8bcff60f555328b375ddc8d862779ea6 differ diff --git a/Library/Artifacts/8b/8bd1b163127f6b79ca69030723456213 b/Library/Artifacts/8b/8bd1b163127f6b79ca69030723456213 new file mode 100644 index 0000000..f594884 Binary files /dev/null and b/Library/Artifacts/8b/8bd1b163127f6b79ca69030723456213 differ diff --git a/Library/Artifacts/8b/8bebf1ba877c9d62b73e11245fe84598 b/Library/Artifacts/8b/8bebf1ba877c9d62b73e11245fe84598 new file mode 100644 index 0000000..bcb5849 Binary files /dev/null and b/Library/Artifacts/8b/8bebf1ba877c9d62b73e11245fe84598 differ diff --git a/Library/Artifacts/8b/8bf8e732855c5dc1e2b4d57b2ed5e428 b/Library/Artifacts/8b/8bf8e732855c5dc1e2b4d57b2ed5e428 new file mode 100644 index 0000000..e27db18 Binary files /dev/null and b/Library/Artifacts/8b/8bf8e732855c5dc1e2b4d57b2ed5e428 differ diff --git a/Library/Artifacts/8c/8c15c2316fd8ba05c3443bc60fc91281 b/Library/Artifacts/8c/8c15c2316fd8ba05c3443bc60fc91281 new file mode 100644 index 0000000..6b62026 Binary files /dev/null and b/Library/Artifacts/8c/8c15c2316fd8ba05c3443bc60fc91281 differ diff --git a/Library/Artifacts/8c/8c46c3b1276bc2c71724c37c02e6ce8f b/Library/Artifacts/8c/8c46c3b1276bc2c71724c37c02e6ce8f new file mode 100644 index 0000000..5a2ab3a Binary files /dev/null and b/Library/Artifacts/8c/8c46c3b1276bc2c71724c37c02e6ce8f differ diff --git a/Library/Artifacts/8c/8c4daf5a108f8bbf9c7368d8b1fa3f0c b/Library/Artifacts/8c/8c4daf5a108f8bbf9c7368d8b1fa3f0c new file mode 100644 index 0000000..c83da47 Binary files /dev/null and b/Library/Artifacts/8c/8c4daf5a108f8bbf9c7368d8b1fa3f0c differ diff --git a/Library/Artifacts/8c/8c8e7251810edc4e96b770fca41af577 b/Library/Artifacts/8c/8c8e7251810edc4e96b770fca41af577 new file mode 100644 index 0000000..16bdeb7 Binary files /dev/null and b/Library/Artifacts/8c/8c8e7251810edc4e96b770fca41af577 differ diff --git a/Library/Artifacts/8c/8cb3f902786d355898a8af140b3d1664 b/Library/Artifacts/8c/8cb3f902786d355898a8af140b3d1664 new file mode 100644 index 0000000..cabffc3 Binary files /dev/null and b/Library/Artifacts/8c/8cb3f902786d355898a8af140b3d1664 differ diff --git a/Library/Artifacts/8c/8cdc86be282fafbf192607c2e9d8e494 b/Library/Artifacts/8c/8cdc86be282fafbf192607c2e9d8e494 new file mode 100644 index 0000000..4bd5ebd Binary files /dev/null and b/Library/Artifacts/8c/8cdc86be282fafbf192607c2e9d8e494 differ diff --git a/Library/Artifacts/8c/8cf74902f6d9d5f1c571e436985f1d5e b/Library/Artifacts/8c/8cf74902f6d9d5f1c571e436985f1d5e new file mode 100644 index 0000000..9f9f91c Binary files /dev/null and b/Library/Artifacts/8c/8cf74902f6d9d5f1c571e436985f1d5e differ diff --git a/Library/Artifacts/8c/8cff1894069595b8e033a3d17d2becc8 b/Library/Artifacts/8c/8cff1894069595b8e033a3d17d2becc8 new file mode 100644 index 0000000..0c5ee5d Binary files /dev/null and b/Library/Artifacts/8c/8cff1894069595b8e033a3d17d2becc8 differ diff --git a/Library/Artifacts/8d/8d0801fcf7f26d5d412898b43baebce2 b/Library/Artifacts/8d/8d0801fcf7f26d5d412898b43baebce2 new file mode 100644 index 0000000..6bf603f Binary files /dev/null and b/Library/Artifacts/8d/8d0801fcf7f26d5d412898b43baebce2 differ diff --git a/Library/Artifacts/8d/8d286137869f9d96db4c15d40e5d951f b/Library/Artifacts/8d/8d286137869f9d96db4c15d40e5d951f new file mode 100644 index 0000000..0948cfe Binary files /dev/null and b/Library/Artifacts/8d/8d286137869f9d96db4c15d40e5d951f differ diff --git a/Library/Artifacts/8d/8d39534b3c1d947347b9711e91528cb6 b/Library/Artifacts/8d/8d39534b3c1d947347b9711e91528cb6 new file mode 100644 index 0000000..4cf9d40 Binary files /dev/null and b/Library/Artifacts/8d/8d39534b3c1d947347b9711e91528cb6 differ diff --git a/Library/Artifacts/8d/8d5e70331d9ea6a22de0949864f0357b b/Library/Artifacts/8d/8d5e70331d9ea6a22de0949864f0357b new file mode 100644 index 0000000..3faf2b1 Binary files /dev/null and b/Library/Artifacts/8d/8d5e70331d9ea6a22de0949864f0357b differ diff --git a/Library/Artifacts/8d/8d664fa051ddbbf168abd2d4614aca49 b/Library/Artifacts/8d/8d664fa051ddbbf168abd2d4614aca49 new file mode 100644 index 0000000..7169fc9 Binary files /dev/null and b/Library/Artifacts/8d/8d664fa051ddbbf168abd2d4614aca49 differ diff --git a/Library/Artifacts/8d/8da4e8fb7fec26e042aee4f34904ffca b/Library/Artifacts/8d/8da4e8fb7fec26e042aee4f34904ffca new file mode 100644 index 0000000..98ab6a9 Binary files /dev/null and b/Library/Artifacts/8d/8da4e8fb7fec26e042aee4f34904ffca differ diff --git a/Library/Artifacts/8d/8ddd85595b1c0cc286479c06a3ea3431 b/Library/Artifacts/8d/8ddd85595b1c0cc286479c06a3ea3431 new file mode 100644 index 0000000..2125521 Binary files /dev/null and b/Library/Artifacts/8d/8ddd85595b1c0cc286479c06a3ea3431 differ diff --git a/Library/Artifacts/8d/8de243c8ca4268f7bb501747dc539a82 b/Library/Artifacts/8d/8de243c8ca4268f7bb501747dc539a82 new file mode 100644 index 0000000..f18a64f Binary files /dev/null and b/Library/Artifacts/8d/8de243c8ca4268f7bb501747dc539a82 differ diff --git a/Library/Artifacts/8e/8e18d58959e715934a44d59b6b8f3f8b b/Library/Artifacts/8e/8e18d58959e715934a44d59b6b8f3f8b new file mode 100644 index 0000000..e7883d1 Binary files /dev/null and b/Library/Artifacts/8e/8e18d58959e715934a44d59b6b8f3f8b differ diff --git a/Library/Artifacts/8e/8e372c5e92f7b0bfb7d0a5fef938248c b/Library/Artifacts/8e/8e372c5e92f7b0bfb7d0a5fef938248c new file mode 100644 index 0000000..8b3a729 Binary files /dev/null and b/Library/Artifacts/8e/8e372c5e92f7b0bfb7d0a5fef938248c differ diff --git a/Library/Artifacts/8e/8e8e40bb2d8e96fbbedb01fedb510a14 b/Library/Artifacts/8e/8e8e40bb2d8e96fbbedb01fedb510a14 new file mode 100644 index 0000000..3eb82a0 Binary files /dev/null and b/Library/Artifacts/8e/8e8e40bb2d8e96fbbedb01fedb510a14 differ diff --git a/Library/Artifacts/8e/8eb75a2efdb30665c0a52463aec0c17c b/Library/Artifacts/8e/8eb75a2efdb30665c0a52463aec0c17c new file mode 100644 index 0000000..72c9672 Binary files /dev/null and b/Library/Artifacts/8e/8eb75a2efdb30665c0a52463aec0c17c differ diff --git a/Library/Artifacts/8e/8eb76a42afae8e89ef3ef3aef76e606e b/Library/Artifacts/8e/8eb76a42afae8e89ef3ef3aef76e606e new file mode 100644 index 0000000..cfe533b Binary files /dev/null and b/Library/Artifacts/8e/8eb76a42afae8e89ef3ef3aef76e606e differ diff --git a/Library/Artifacts/8e/8eda04c26bb13c4694134a610c0d38fa b/Library/Artifacts/8e/8eda04c26bb13c4694134a610c0d38fa new file mode 100644 index 0000000..2cd3b38 Binary files /dev/null and b/Library/Artifacts/8e/8eda04c26bb13c4694134a610c0d38fa differ diff --git a/Library/Artifacts/8f/8f0925f56adbdc3fee17b6df8a169922 b/Library/Artifacts/8f/8f0925f56adbdc3fee17b6df8a169922 new file mode 100644 index 0000000..611ecc0 Binary files /dev/null and b/Library/Artifacts/8f/8f0925f56adbdc3fee17b6df8a169922 differ diff --git a/Library/Artifacts/8f/8f6812f54a6b6e49f4bed890f5f9176e b/Library/Artifacts/8f/8f6812f54a6b6e49f4bed890f5f9176e new file mode 100644 index 0000000..d55e52b Binary files /dev/null and b/Library/Artifacts/8f/8f6812f54a6b6e49f4bed890f5f9176e differ diff --git a/Library/Artifacts/8f/8f838212508562883cfcbef17c82cc9e b/Library/Artifacts/8f/8f838212508562883cfcbef17c82cc9e new file mode 100644 index 0000000..da35340 Binary files /dev/null and b/Library/Artifacts/8f/8f838212508562883cfcbef17c82cc9e differ diff --git a/Library/Artifacts/8f/8f95959182198c3c72bc59d10ac7d8f2 b/Library/Artifacts/8f/8f95959182198c3c72bc59d10ac7d8f2 new file mode 100644 index 0000000..b2a67e1 Binary files /dev/null and b/Library/Artifacts/8f/8f95959182198c3c72bc59d10ac7d8f2 differ diff --git a/Library/Artifacts/8f/8f9dbb2793f69ef234744711b5ea35e7 b/Library/Artifacts/8f/8f9dbb2793f69ef234744711b5ea35e7 new file mode 100644 index 0000000..363c4fa Binary files /dev/null and b/Library/Artifacts/8f/8f9dbb2793f69ef234744711b5ea35e7 differ diff --git a/Library/Artifacts/8f/8f9e2cdca34df14379060b508e59b54f b/Library/Artifacts/8f/8f9e2cdca34df14379060b508e59b54f new file mode 100644 index 0000000..bfa5305 Binary files /dev/null and b/Library/Artifacts/8f/8f9e2cdca34df14379060b508e59b54f differ diff --git a/Library/Artifacts/8f/8ff0cf28a635bd109ba29799c4571c48 b/Library/Artifacts/8f/8ff0cf28a635bd109ba29799c4571c48 new file mode 100644 index 0000000..a7b21c3 Binary files /dev/null and b/Library/Artifacts/8f/8ff0cf28a635bd109ba29799c4571c48 differ diff --git a/Library/Artifacts/90/900622c3fedf32ec1720646f1bc4db5c b/Library/Artifacts/90/900622c3fedf32ec1720646f1bc4db5c new file mode 100644 index 0000000..af7a011 Binary files /dev/null and b/Library/Artifacts/90/900622c3fedf32ec1720646f1bc4db5c differ diff --git a/Library/Artifacts/90/9006c289fffe30f8410e0682f9e194c1 b/Library/Artifacts/90/9006c289fffe30f8410e0682f9e194c1 new file mode 100644 index 0000000..b483389 Binary files /dev/null and b/Library/Artifacts/90/9006c289fffe30f8410e0682f9e194c1 differ diff --git a/Library/Artifacts/90/9009a9f358587ea7df739bd7088566ec b/Library/Artifacts/90/9009a9f358587ea7df739bd7088566ec new file mode 100644 index 0000000..e3d85c0 Binary files /dev/null and b/Library/Artifacts/90/9009a9f358587ea7df739bd7088566ec differ diff --git a/Library/Artifacts/90/900a8f1038c53f1afe8426596e4b7725 b/Library/Artifacts/90/900a8f1038c53f1afe8426596e4b7725 new file mode 100644 index 0000000..706d4ec Binary files /dev/null and b/Library/Artifacts/90/900a8f1038c53f1afe8426596e4b7725 differ diff --git a/Library/Artifacts/90/9010ba15340f6fd5444bf7f2f8108a33 b/Library/Artifacts/90/9010ba15340f6fd5444bf7f2f8108a33 new file mode 100644 index 0000000..b595e18 Binary files /dev/null and b/Library/Artifacts/90/9010ba15340f6fd5444bf7f2f8108a33 differ diff --git a/Library/Artifacts/90/902a040e1eba897d13197d4510598ba8 b/Library/Artifacts/90/902a040e1eba897d13197d4510598ba8 new file mode 100644 index 0000000..68dd06e Binary files /dev/null and b/Library/Artifacts/90/902a040e1eba897d13197d4510598ba8 differ diff --git a/Library/Artifacts/90/9046ad8215c1698a9fb3996a34ff69cc b/Library/Artifacts/90/9046ad8215c1698a9fb3996a34ff69cc new file mode 100644 index 0000000..d2863bb Binary files /dev/null and b/Library/Artifacts/90/9046ad8215c1698a9fb3996a34ff69cc differ diff --git a/Library/Artifacts/90/907319a906b2f2b6de467eb1c09f29a8 b/Library/Artifacts/90/907319a906b2f2b6de467eb1c09f29a8 new file mode 100644 index 0000000..35742f8 Binary files /dev/null and b/Library/Artifacts/90/907319a906b2f2b6de467eb1c09f29a8 differ diff --git a/Library/Artifacts/90/9075a5f314abfc3101397c8bb8a88c1c b/Library/Artifacts/90/9075a5f314abfc3101397c8bb8a88c1c new file mode 100644 index 0000000..6c391f3 Binary files /dev/null and b/Library/Artifacts/90/9075a5f314abfc3101397c8bb8a88c1c differ diff --git a/Library/Artifacts/90/90cde701a4678164ef50fec65657e3ae b/Library/Artifacts/90/90cde701a4678164ef50fec65657e3ae new file mode 100644 index 0000000..1b13acb Binary files /dev/null and b/Library/Artifacts/90/90cde701a4678164ef50fec65657e3ae differ diff --git a/Library/Artifacts/91/91139490a29e2309d4dc0b127a8cd570 b/Library/Artifacts/91/91139490a29e2309d4dc0b127a8cd570 new file mode 100644 index 0000000..e2fc809 Binary files /dev/null and b/Library/Artifacts/91/91139490a29e2309d4dc0b127a8cd570 differ diff --git a/Library/Artifacts/91/91c31e01cd3c29d28a0067a0c793046b b/Library/Artifacts/91/91c31e01cd3c29d28a0067a0c793046b new file mode 100644 index 0000000..c4af3fa Binary files /dev/null and b/Library/Artifacts/91/91c31e01cd3c29d28a0067a0c793046b differ diff --git a/Library/Artifacts/91/91fecae32804fc3fbb8656b441aabb2a b/Library/Artifacts/91/91fecae32804fc3fbb8656b441aabb2a new file mode 100644 index 0000000..dbdca8b Binary files /dev/null and b/Library/Artifacts/91/91fecae32804fc3fbb8656b441aabb2a differ diff --git a/Library/Artifacts/92/92072c5a775eac8e33f08356479de5ec b/Library/Artifacts/92/92072c5a775eac8e33f08356479de5ec new file mode 100644 index 0000000..3432325 Binary files /dev/null and b/Library/Artifacts/92/92072c5a775eac8e33f08356479de5ec differ diff --git a/Library/Artifacts/92/9240bef35ce6372268140860230fa0b2 b/Library/Artifacts/92/9240bef35ce6372268140860230fa0b2 new file mode 100644 index 0000000..503f33c Binary files /dev/null and b/Library/Artifacts/92/9240bef35ce6372268140860230fa0b2 differ diff --git a/Library/Artifacts/92/92622e385c22e2091b3c5cbdbe038634 b/Library/Artifacts/92/92622e385c22e2091b3c5cbdbe038634 new file mode 100644 index 0000000..ac6912a Binary files /dev/null and b/Library/Artifacts/92/92622e385c22e2091b3c5cbdbe038634 differ diff --git a/Library/Artifacts/92/92a9aa33366eef109f0d80c62a36b3d8 b/Library/Artifacts/92/92a9aa33366eef109f0d80c62a36b3d8 new file mode 100644 index 0000000..a8b5501 Binary files /dev/null and b/Library/Artifacts/92/92a9aa33366eef109f0d80c62a36b3d8 differ diff --git a/Library/Artifacts/92/92dee1db808c5e60801da837ad6a3123 b/Library/Artifacts/92/92dee1db808c5e60801da837ad6a3123 new file mode 100644 index 0000000..f3b5233 Binary files /dev/null and b/Library/Artifacts/92/92dee1db808c5e60801da837ad6a3123 differ diff --git a/Library/Artifacts/92/92fe3c52a7a2453e7b5db929ca83ee7a b/Library/Artifacts/92/92fe3c52a7a2453e7b5db929ca83ee7a new file mode 100644 index 0000000..5298b92 Binary files /dev/null and b/Library/Artifacts/92/92fe3c52a7a2453e7b5db929ca83ee7a differ diff --git a/Library/Artifacts/93/9303925937c0b89346e1dad263fc6d1e b/Library/Artifacts/93/9303925937c0b89346e1dad263fc6d1e new file mode 100644 index 0000000..ef78671 Binary files /dev/null and b/Library/Artifacts/93/9303925937c0b89346e1dad263fc6d1e differ diff --git a/Library/Artifacts/93/9305022daf29dc2226da0a2c871f98a5 b/Library/Artifacts/93/9305022daf29dc2226da0a2c871f98a5 new file mode 100644 index 0000000..9391164 Binary files /dev/null and b/Library/Artifacts/93/9305022daf29dc2226da0a2c871f98a5 differ diff --git a/Library/Artifacts/93/932bb18c3f3c3b70e40355e8a5239e1c b/Library/Artifacts/93/932bb18c3f3c3b70e40355e8a5239e1c new file mode 100644 index 0000000..9121567 Binary files /dev/null and b/Library/Artifacts/93/932bb18c3f3c3b70e40355e8a5239e1c differ diff --git a/Library/Artifacts/93/932e760195be1e29952b74e977f84c48 b/Library/Artifacts/93/932e760195be1e29952b74e977f84c48 new file mode 100644 index 0000000..6132453 Binary files /dev/null and b/Library/Artifacts/93/932e760195be1e29952b74e977f84c48 differ diff --git a/Library/Artifacts/93/936f0c68ac9736a8b8de3ede600379cb b/Library/Artifacts/93/936f0c68ac9736a8b8de3ede600379cb new file mode 100644 index 0000000..6f3cc62 Binary files /dev/null and b/Library/Artifacts/93/936f0c68ac9736a8b8de3ede600379cb differ diff --git a/Library/Artifacts/93/93e9f6455f8cdaf5329b6d5dd8671c7e b/Library/Artifacts/93/93e9f6455f8cdaf5329b6d5dd8671c7e new file mode 100644 index 0000000..f4ae58d Binary files /dev/null and b/Library/Artifacts/93/93e9f6455f8cdaf5329b6d5dd8671c7e differ diff --git a/Library/Artifacts/93/93fc3012d797b749abde15f373285520 b/Library/Artifacts/93/93fc3012d797b749abde15f373285520 new file mode 100644 index 0000000..6b71348 Binary files /dev/null and b/Library/Artifacts/93/93fc3012d797b749abde15f373285520 differ diff --git a/Library/Artifacts/94/94748c671f784a58941712688cb25813 b/Library/Artifacts/94/94748c671f784a58941712688cb25813 new file mode 100644 index 0000000..cc621b2 Binary files /dev/null and b/Library/Artifacts/94/94748c671f784a58941712688cb25813 differ diff --git a/Library/Artifacts/94/94d9bc095b851f32e50356e3f503303d b/Library/Artifacts/94/94d9bc095b851f32e50356e3f503303d new file mode 100644 index 0000000..127ef3e Binary files /dev/null and b/Library/Artifacts/94/94d9bc095b851f32e50356e3f503303d differ diff --git a/Library/Artifacts/94/94e43cf8d55b33fc5b2c3a667ee57bd4 b/Library/Artifacts/94/94e43cf8d55b33fc5b2c3a667ee57bd4 new file mode 100644 index 0000000..6279e13 Binary files /dev/null and b/Library/Artifacts/94/94e43cf8d55b33fc5b2c3a667ee57bd4 differ diff --git a/Library/Artifacts/94/94f4f55b54979971d5db002fca11cd7c b/Library/Artifacts/94/94f4f55b54979971d5db002fca11cd7c new file mode 100644 index 0000000..763fbda Binary files /dev/null and b/Library/Artifacts/94/94f4f55b54979971d5db002fca11cd7c differ diff --git a/Library/Artifacts/95/9502f066eb43f9ed0a0dc4919124265b b/Library/Artifacts/95/9502f066eb43f9ed0a0dc4919124265b new file mode 100644 index 0000000..05ce613 Binary files /dev/null and b/Library/Artifacts/95/9502f066eb43f9ed0a0dc4919124265b differ diff --git a/Library/Artifacts/95/951e3421546c6134031949550dd42a81 b/Library/Artifacts/95/951e3421546c6134031949550dd42a81 new file mode 100644 index 0000000..a476430 Binary files /dev/null and b/Library/Artifacts/95/951e3421546c6134031949550dd42a81 differ diff --git a/Library/Artifacts/95/9520906471aa7398f5424d4d343037c2 b/Library/Artifacts/95/9520906471aa7398f5424d4d343037c2 new file mode 100644 index 0000000..787613b Binary files /dev/null and b/Library/Artifacts/95/9520906471aa7398f5424d4d343037c2 differ diff --git a/Library/Artifacts/95/9529b372962ea71120d67ccc83bceec5 b/Library/Artifacts/95/9529b372962ea71120d67ccc83bceec5 new file mode 100644 index 0000000..db4ae6f Binary files /dev/null and b/Library/Artifacts/95/9529b372962ea71120d67ccc83bceec5 differ diff --git a/Library/Artifacts/95/95327805ca23660c29237dc9c119cdde b/Library/Artifacts/95/95327805ca23660c29237dc9c119cdde new file mode 100644 index 0000000..af5b89e Binary files /dev/null and b/Library/Artifacts/95/95327805ca23660c29237dc9c119cdde differ diff --git a/Library/Artifacts/95/953a0b360f275eb35b9ad951c27134d0 b/Library/Artifacts/95/953a0b360f275eb35b9ad951c27134d0 new file mode 100644 index 0000000..e433b68 Binary files /dev/null and b/Library/Artifacts/95/953a0b360f275eb35b9ad951c27134d0 differ diff --git a/Library/Artifacts/95/956650161e347c06fe53aa5954ff4914 b/Library/Artifacts/95/956650161e347c06fe53aa5954ff4914 new file mode 100644 index 0000000..7c8b433 Binary files /dev/null and b/Library/Artifacts/95/956650161e347c06fe53aa5954ff4914 differ diff --git a/Library/Artifacts/95/95e724a0169c926c843cd22e4d8ae3d0 b/Library/Artifacts/95/95e724a0169c926c843cd22e4d8ae3d0 new file mode 100644 index 0000000..9a89f75 Binary files /dev/null and b/Library/Artifacts/95/95e724a0169c926c843cd22e4d8ae3d0 differ diff --git a/Library/Artifacts/96/9604f556fd34631d2a1d5740ee14447e b/Library/Artifacts/96/9604f556fd34631d2a1d5740ee14447e new file mode 100644 index 0000000..262fd6f Binary files /dev/null and b/Library/Artifacts/96/9604f556fd34631d2a1d5740ee14447e differ diff --git a/Library/Artifacts/96/961d14e3348f311dbde12b16215abc4a b/Library/Artifacts/96/961d14e3348f311dbde12b16215abc4a new file mode 100644 index 0000000..fd151a1 Binary files /dev/null and b/Library/Artifacts/96/961d14e3348f311dbde12b16215abc4a differ diff --git a/Library/Artifacts/96/963d06d34bf7af7e8f9f3a5306fe4eee b/Library/Artifacts/96/963d06d34bf7af7e8f9f3a5306fe4eee new file mode 100644 index 0000000..6a2e2c5 Binary files /dev/null and b/Library/Artifacts/96/963d06d34bf7af7e8f9f3a5306fe4eee differ diff --git a/Library/Artifacts/96/96635cff2d3f721bfaf2a99a1d5d918d b/Library/Artifacts/96/96635cff2d3f721bfaf2a99a1d5d918d new file mode 100644 index 0000000..8807f73 Binary files /dev/null and b/Library/Artifacts/96/96635cff2d3f721bfaf2a99a1d5d918d differ diff --git a/Library/Artifacts/96/9692664e6d036de2396aee564b3f2545 b/Library/Artifacts/96/9692664e6d036de2396aee564b3f2545 new file mode 100644 index 0000000..e289454 Binary files /dev/null and b/Library/Artifacts/96/9692664e6d036de2396aee564b3f2545 differ diff --git a/Library/Artifacts/96/96ef0ccba43ea84a6e44dd5371545378 b/Library/Artifacts/96/96ef0ccba43ea84a6e44dd5371545378 new file mode 100644 index 0000000..10c76ab Binary files /dev/null and b/Library/Artifacts/96/96ef0ccba43ea84a6e44dd5371545378 differ diff --git a/Library/Artifacts/96/96f91d89df3205caf9f08b173d043c7e b/Library/Artifacts/96/96f91d89df3205caf9f08b173d043c7e new file mode 100644 index 0000000..5137d59 Binary files /dev/null and b/Library/Artifacts/96/96f91d89df3205caf9f08b173d043c7e differ diff --git a/Library/Artifacts/97/9703c660578894d41f69fff4efef2d3d b/Library/Artifacts/97/9703c660578894d41f69fff4efef2d3d new file mode 100644 index 0000000..dab0104 Binary files /dev/null and b/Library/Artifacts/97/9703c660578894d41f69fff4efef2d3d differ diff --git a/Library/Artifacts/97/97226edd5293a98a6736040bac40c1f0 b/Library/Artifacts/97/97226edd5293a98a6736040bac40c1f0 new file mode 100644 index 0000000..25cbc3e Binary files /dev/null and b/Library/Artifacts/97/97226edd5293a98a6736040bac40c1f0 differ diff --git a/Library/Artifacts/97/972395cd897c09352bb200a9263bd12e b/Library/Artifacts/97/972395cd897c09352bb200a9263bd12e new file mode 100644 index 0000000..475c0ad Binary files /dev/null and b/Library/Artifacts/97/972395cd897c09352bb200a9263bd12e differ diff --git a/Library/Artifacts/97/973601b7fb19b039cfc2f8f505a88427 b/Library/Artifacts/97/973601b7fb19b039cfc2f8f505a88427 new file mode 100644 index 0000000..8b48c4f Binary files /dev/null and b/Library/Artifacts/97/973601b7fb19b039cfc2f8f505a88427 differ diff --git a/Library/Artifacts/97/9744bb3062f12528f07619cc604bb657 b/Library/Artifacts/97/9744bb3062f12528f07619cc604bb657 new file mode 100644 index 0000000..ed36ab2 Binary files /dev/null and b/Library/Artifacts/97/9744bb3062f12528f07619cc604bb657 differ diff --git a/Library/Artifacts/97/976b56cbcaab96388b44403ae48a7997 b/Library/Artifacts/97/976b56cbcaab96388b44403ae48a7997 new file mode 100644 index 0000000..2b6ef6e Binary files /dev/null and b/Library/Artifacts/97/976b56cbcaab96388b44403ae48a7997 differ diff --git a/Library/Artifacts/97/97a18865d5c1462667ce32f8c9e702de b/Library/Artifacts/97/97a18865d5c1462667ce32f8c9e702de new file mode 100644 index 0000000..66abddf Binary files /dev/null and b/Library/Artifacts/97/97a18865d5c1462667ce32f8c9e702de differ diff --git a/Library/Artifacts/97/97d1ef000220acfb803a21d08026b4fd b/Library/Artifacts/97/97d1ef000220acfb803a21d08026b4fd new file mode 100644 index 0000000..ff4e0da Binary files /dev/null and b/Library/Artifacts/97/97d1ef000220acfb803a21d08026b4fd differ diff --git a/Library/Artifacts/97/97fd452720adece62961bb3e1e5c3c6a b/Library/Artifacts/97/97fd452720adece62961bb3e1e5c3c6a new file mode 100644 index 0000000..cbffba8 Binary files /dev/null and b/Library/Artifacts/97/97fd452720adece62961bb3e1e5c3c6a differ diff --git a/Library/Artifacts/97/97ff85b225fba9d0d5312a57a705aebe b/Library/Artifacts/97/97ff85b225fba9d0d5312a57a705aebe new file mode 100644 index 0000000..a659fe0 Binary files /dev/null and b/Library/Artifacts/97/97ff85b225fba9d0d5312a57a705aebe differ diff --git a/Library/Artifacts/98/9817031d61a8df5862c25d726c4f4852 b/Library/Artifacts/98/9817031d61a8df5862c25d726c4f4852 new file mode 100644 index 0000000..f883c1c Binary files /dev/null and b/Library/Artifacts/98/9817031d61a8df5862c25d726c4f4852 differ diff --git a/Library/Artifacts/98/983b42378d1da2f1a6f21eddf6c4d878 b/Library/Artifacts/98/983b42378d1da2f1a6f21eddf6c4d878 new file mode 100644 index 0000000..224028f Binary files /dev/null and b/Library/Artifacts/98/983b42378d1da2f1a6f21eddf6c4d878 differ diff --git a/Library/Artifacts/98/987b5f74c6f84620146880183f2e66dd b/Library/Artifacts/98/987b5f74c6f84620146880183f2e66dd new file mode 100644 index 0000000..be53b76 Binary files /dev/null and b/Library/Artifacts/98/987b5f74c6f84620146880183f2e66dd differ diff --git a/Library/Artifacts/98/989c0ccd64500e45277315a7f0f7ca32 b/Library/Artifacts/98/989c0ccd64500e45277315a7f0f7ca32 new file mode 100644 index 0000000..865b8e0 Binary files /dev/null and b/Library/Artifacts/98/989c0ccd64500e45277315a7f0f7ca32 differ diff --git a/Library/Artifacts/98/98edc19a6caba26df079dccb72c665af b/Library/Artifacts/98/98edc19a6caba26df079dccb72c665af new file mode 100644 index 0000000..b8e48e5 Binary files /dev/null and b/Library/Artifacts/98/98edc19a6caba26df079dccb72c665af differ diff --git a/Library/Artifacts/99/999cacb2f6d0854d22fadc90a50cafd6 b/Library/Artifacts/99/999cacb2f6d0854d22fadc90a50cafd6 new file mode 100644 index 0000000..50551e0 Binary files /dev/null and b/Library/Artifacts/99/999cacb2f6d0854d22fadc90a50cafd6 differ diff --git a/Library/Artifacts/9a/9a62b3fea1fd20a9d0177af7f06f2dcb b/Library/Artifacts/9a/9a62b3fea1fd20a9d0177af7f06f2dcb new file mode 100644 index 0000000..2cf9e7b Binary files /dev/null and b/Library/Artifacts/9a/9a62b3fea1fd20a9d0177af7f06f2dcb differ diff --git a/Library/Artifacts/9b/9b20c14620d49fed8b8a3a023ca9aa54 b/Library/Artifacts/9b/9b20c14620d49fed8b8a3a023ca9aa54 new file mode 100644 index 0000000..530987e Binary files /dev/null and b/Library/Artifacts/9b/9b20c14620d49fed8b8a3a023ca9aa54 differ diff --git a/Library/Artifacts/9b/9bb61e4064cce20fff242d8719ec225f b/Library/Artifacts/9b/9bb61e4064cce20fff242d8719ec225f new file mode 100644 index 0000000..9353a9d Binary files /dev/null and b/Library/Artifacts/9b/9bb61e4064cce20fff242d8719ec225f differ diff --git a/Library/Artifacts/9b/9bb938071e738eb550dfd7ad509d7b14 b/Library/Artifacts/9b/9bb938071e738eb550dfd7ad509d7b14 new file mode 100644 index 0000000..2da522f Binary files /dev/null and b/Library/Artifacts/9b/9bb938071e738eb550dfd7ad509d7b14 differ diff --git a/Library/Artifacts/9b/9be1433935a255e4b38617684d733da0 b/Library/Artifacts/9b/9be1433935a255e4b38617684d733da0 new file mode 100644 index 0000000..9154528 Binary files /dev/null and b/Library/Artifacts/9b/9be1433935a255e4b38617684d733da0 differ diff --git a/Library/Artifacts/9b/9be59f3f2d77e094229e8df95b8c42b4 b/Library/Artifacts/9b/9be59f3f2d77e094229e8df95b8c42b4 new file mode 100644 index 0000000..426da26 Binary files /dev/null and b/Library/Artifacts/9b/9be59f3f2d77e094229e8df95b8c42b4 differ diff --git a/Library/Artifacts/9c/9c085aacb1fce8ccae436d9933f664c7 b/Library/Artifacts/9c/9c085aacb1fce8ccae436d9933f664c7 new file mode 100644 index 0000000..4961305 Binary files /dev/null and b/Library/Artifacts/9c/9c085aacb1fce8ccae436d9933f664c7 differ diff --git a/Library/Artifacts/9c/9c4c60e93b5a2ae014f1cdd5a66b3a3e b/Library/Artifacts/9c/9c4c60e93b5a2ae014f1cdd5a66b3a3e new file mode 100644 index 0000000..911a3ba Binary files /dev/null and b/Library/Artifacts/9c/9c4c60e93b5a2ae014f1cdd5a66b3a3e differ diff --git a/Library/Artifacts/9c/9c9e00b78870804508c306d4744c94a4 b/Library/Artifacts/9c/9c9e00b78870804508c306d4744c94a4 new file mode 100644 index 0000000..e2901df Binary files /dev/null and b/Library/Artifacts/9c/9c9e00b78870804508c306d4744c94a4 differ diff --git a/Library/Artifacts/9c/9c9f84d493c412ccd7f753ed29b2e4b9 b/Library/Artifacts/9c/9c9f84d493c412ccd7f753ed29b2e4b9 new file mode 100644 index 0000000..07874f8 Binary files /dev/null and b/Library/Artifacts/9c/9c9f84d493c412ccd7f753ed29b2e4b9 differ diff --git a/Library/Artifacts/9c/9ce4fd4d50c8c1e062c3988dbba327e5 b/Library/Artifacts/9c/9ce4fd4d50c8c1e062c3988dbba327e5 new file mode 100644 index 0000000..f67d9d5 Binary files /dev/null and b/Library/Artifacts/9c/9ce4fd4d50c8c1e062c3988dbba327e5 differ diff --git a/Library/Artifacts/9c/9cf44a21959e4d8ed78ab349c103737f b/Library/Artifacts/9c/9cf44a21959e4d8ed78ab349c103737f new file mode 100644 index 0000000..c3d8828 Binary files /dev/null and b/Library/Artifacts/9c/9cf44a21959e4d8ed78ab349c103737f differ diff --git a/Library/Artifacts/9c/9cfd70194cef1114c1625ed8f615164f b/Library/Artifacts/9c/9cfd70194cef1114c1625ed8f615164f new file mode 100644 index 0000000..95e5142 Binary files /dev/null and b/Library/Artifacts/9c/9cfd70194cef1114c1625ed8f615164f differ diff --git a/Library/Artifacts/9d/9d088a584d16c67a31d358c61910e1a7 b/Library/Artifacts/9d/9d088a584d16c67a31d358c61910e1a7 new file mode 100644 index 0000000..c10a558 Binary files /dev/null and b/Library/Artifacts/9d/9d088a584d16c67a31d358c61910e1a7 differ diff --git a/Library/Artifacts/9d/9d6228701a76d83a70b4132f253128fd b/Library/Artifacts/9d/9d6228701a76d83a70b4132f253128fd new file mode 100644 index 0000000..511a6d0 Binary files /dev/null and b/Library/Artifacts/9d/9d6228701a76d83a70b4132f253128fd differ diff --git a/Library/Artifacts/9d/9d7ea056f0f12b74f5594fd628e49703 b/Library/Artifacts/9d/9d7ea056f0f12b74f5594fd628e49703 new file mode 100644 index 0000000..b851ab3 Binary files /dev/null and b/Library/Artifacts/9d/9d7ea056f0f12b74f5594fd628e49703 differ diff --git a/Library/Artifacts/9d/9d9fb15ff18d4685f65ff1a61e1487fc b/Library/Artifacts/9d/9d9fb15ff18d4685f65ff1a61e1487fc new file mode 100644 index 0000000..add2056 Binary files /dev/null and b/Library/Artifacts/9d/9d9fb15ff18d4685f65ff1a61e1487fc differ diff --git a/Library/Artifacts/9d/9de04a6476b1d5d374a7048f56ebcdc9 b/Library/Artifacts/9d/9de04a6476b1d5d374a7048f56ebcdc9 new file mode 100644 index 0000000..70b5b35 Binary files /dev/null and b/Library/Artifacts/9d/9de04a6476b1d5d374a7048f56ebcdc9 differ diff --git a/Library/Artifacts/9e/9e6ff3dc1d12050a76b6d227807b9889 b/Library/Artifacts/9e/9e6ff3dc1d12050a76b6d227807b9889 new file mode 100644 index 0000000..3f59501 Binary files /dev/null and b/Library/Artifacts/9e/9e6ff3dc1d12050a76b6d227807b9889 differ diff --git a/Library/Artifacts/9e/9e9739897b4a943d394a5467b90e9744 b/Library/Artifacts/9e/9e9739897b4a943d394a5467b90e9744 new file mode 100644 index 0000000..cb7096c Binary files /dev/null and b/Library/Artifacts/9e/9e9739897b4a943d394a5467b90e9744 differ diff --git a/Library/Artifacts/9e/9ebf085a886bdbd9da2df5ad725b11af b/Library/Artifacts/9e/9ebf085a886bdbd9da2df5ad725b11af new file mode 100644 index 0000000..d48340f Binary files /dev/null and b/Library/Artifacts/9e/9ebf085a886bdbd9da2df5ad725b11af differ diff --git a/Library/Artifacts/9f/9f145098b4dbc4267d9bae715e229cdd b/Library/Artifacts/9f/9f145098b4dbc4267d9bae715e229cdd new file mode 100644 index 0000000..1e829c1 Binary files /dev/null and b/Library/Artifacts/9f/9f145098b4dbc4267d9bae715e229cdd differ diff --git a/Library/Artifacts/9f/9f16170f5333e79c523daadbfdbb7d47 b/Library/Artifacts/9f/9f16170f5333e79c523daadbfdbb7d47 new file mode 100644 index 0000000..761788b Binary files /dev/null and b/Library/Artifacts/9f/9f16170f5333e79c523daadbfdbb7d47 differ diff --git a/Library/Artifacts/9f/9f2979b5085f68337fbda73acfa49ef7 b/Library/Artifacts/9f/9f2979b5085f68337fbda73acfa49ef7 new file mode 100644 index 0000000..9fc3ce8 Binary files /dev/null and b/Library/Artifacts/9f/9f2979b5085f68337fbda73acfa49ef7 differ diff --git a/Library/Artifacts/9f/9fae2c8c4bbdab5de16e73f80b1f5456 b/Library/Artifacts/9f/9fae2c8c4bbdab5de16e73f80b1f5456 new file mode 100644 index 0000000..674edfb Binary files /dev/null and b/Library/Artifacts/9f/9fae2c8c4bbdab5de16e73f80b1f5456 differ diff --git a/Library/Artifacts/9f/9fc705d46f9612cae556fccb830ce649 b/Library/Artifacts/9f/9fc705d46f9612cae556fccb830ce649 new file mode 100644 index 0000000..69b71b8 Binary files /dev/null and b/Library/Artifacts/9f/9fc705d46f9612cae556fccb830ce649 differ diff --git a/Library/Artifacts/a0/a03bc0bdbc877b66a50f914049972126 b/Library/Artifacts/a0/a03bc0bdbc877b66a50f914049972126 new file mode 100644 index 0000000..c22feec Binary files /dev/null and b/Library/Artifacts/a0/a03bc0bdbc877b66a50f914049972126 differ diff --git a/Library/Artifacts/a0/a055a1e3667d97d0da344d7bd76081aa b/Library/Artifacts/a0/a055a1e3667d97d0da344d7bd76081aa new file mode 100644 index 0000000..d42e38f Binary files /dev/null and b/Library/Artifacts/a0/a055a1e3667d97d0da344d7bd76081aa differ diff --git a/Library/Artifacts/a0/a0e272a8f53c1e104b38a12643810e9e b/Library/Artifacts/a0/a0e272a8f53c1e104b38a12643810e9e new file mode 100644 index 0000000..10d70b6 Binary files /dev/null and b/Library/Artifacts/a0/a0e272a8f53c1e104b38a12643810e9e differ diff --git a/Library/Artifacts/a0/a0ea3d713b130379c1b4898aa0091b07 b/Library/Artifacts/a0/a0ea3d713b130379c1b4898aa0091b07 new file mode 100644 index 0000000..1ef6c3b Binary files /dev/null and b/Library/Artifacts/a0/a0ea3d713b130379c1b4898aa0091b07 differ diff --git a/Library/Artifacts/a1/a173f675b1a718fd762d512a8435184b b/Library/Artifacts/a1/a173f675b1a718fd762d512a8435184b new file mode 100644 index 0000000..91c58a4 Binary files /dev/null and b/Library/Artifacts/a1/a173f675b1a718fd762d512a8435184b differ diff --git a/Library/Artifacts/a1/a174b6c078952cea72d51ec23d65f65a b/Library/Artifacts/a1/a174b6c078952cea72d51ec23d65f65a new file mode 100644 index 0000000..5f87253 Binary files /dev/null and b/Library/Artifacts/a1/a174b6c078952cea72d51ec23d65f65a differ diff --git a/Library/Artifacts/a1/a182ebf82964867220ec38eda6f7e37a b/Library/Artifacts/a1/a182ebf82964867220ec38eda6f7e37a new file mode 100644 index 0000000..f71b393 Binary files /dev/null and b/Library/Artifacts/a1/a182ebf82964867220ec38eda6f7e37a differ diff --git a/Library/Artifacts/a1/a198d7df6485c3b48412481bc397b71c b/Library/Artifacts/a1/a198d7df6485c3b48412481bc397b71c new file mode 100644 index 0000000..c6a8c36 Binary files /dev/null and b/Library/Artifacts/a1/a198d7df6485c3b48412481bc397b71c differ diff --git a/Library/Artifacts/a1/a1a294416679c08fa1a7b5b720883416 b/Library/Artifacts/a1/a1a294416679c08fa1a7b5b720883416 new file mode 100644 index 0000000..cd78dda Binary files /dev/null and b/Library/Artifacts/a1/a1a294416679c08fa1a7b5b720883416 differ diff --git a/Library/Artifacts/a1/a1b4f0d1b5651d2108ff50b46759b6f4 b/Library/Artifacts/a1/a1b4f0d1b5651d2108ff50b46759b6f4 new file mode 100644 index 0000000..1228c51 Binary files /dev/null and b/Library/Artifacts/a1/a1b4f0d1b5651d2108ff50b46759b6f4 differ diff --git a/Library/Artifacts/a1/a1c47b691a3d86f3d01fc3a33564f0e0 b/Library/Artifacts/a1/a1c47b691a3d86f3d01fc3a33564f0e0 new file mode 100644 index 0000000..3ec0085 Binary files /dev/null and b/Library/Artifacts/a1/a1c47b691a3d86f3d01fc3a33564f0e0 differ diff --git a/Library/Artifacts/a2/a20c82e0a749c6b894001a6793b36ec4 b/Library/Artifacts/a2/a20c82e0a749c6b894001a6793b36ec4 new file mode 100644 index 0000000..90bbb61 Binary files /dev/null and b/Library/Artifacts/a2/a20c82e0a749c6b894001a6793b36ec4 differ diff --git a/Library/Artifacts/a2/a27914a21368c924fb41bebcc796878e b/Library/Artifacts/a2/a27914a21368c924fb41bebcc796878e new file mode 100644 index 0000000..67d136d Binary files /dev/null and b/Library/Artifacts/a2/a27914a21368c924fb41bebcc796878e differ diff --git a/Library/Artifacts/a2/a28326e3b426573c4ece5b5546fe6aae b/Library/Artifacts/a2/a28326e3b426573c4ece5b5546fe6aae new file mode 100644 index 0000000..c000424 Binary files /dev/null and b/Library/Artifacts/a2/a28326e3b426573c4ece5b5546fe6aae differ diff --git a/Library/Artifacts/a2/a2b99cf16497146d66907601f3fb7950 b/Library/Artifacts/a2/a2b99cf16497146d66907601f3fb7950 new file mode 100644 index 0000000..c1c05e2 Binary files /dev/null and b/Library/Artifacts/a2/a2b99cf16497146d66907601f3fb7950 differ diff --git a/Library/Artifacts/a2/a2bdae819236bed2f5d1a376b1ac806c b/Library/Artifacts/a2/a2bdae819236bed2f5d1a376b1ac806c new file mode 100644 index 0000000..416b16d Binary files /dev/null and b/Library/Artifacts/a2/a2bdae819236bed2f5d1a376b1ac806c differ diff --git a/Library/Artifacts/a2/a2eaa29705734b445601f3ea47035583 b/Library/Artifacts/a2/a2eaa29705734b445601f3ea47035583 new file mode 100644 index 0000000..6001ac9 Binary files /dev/null and b/Library/Artifacts/a2/a2eaa29705734b445601f3ea47035583 differ diff --git a/Library/Artifacts/a3/a309d5bfe793cd5ce926c08078978f42 b/Library/Artifacts/a3/a309d5bfe793cd5ce926c08078978f42 new file mode 100644 index 0000000..7c750f6 Binary files /dev/null and b/Library/Artifacts/a3/a309d5bfe793cd5ce926c08078978f42 differ diff --git a/Library/Artifacts/a3/a3ceb2b88442d42a811751f55aa3fd5d b/Library/Artifacts/a3/a3ceb2b88442d42a811751f55aa3fd5d new file mode 100644 index 0000000..7a9c528 Binary files /dev/null and b/Library/Artifacts/a3/a3ceb2b88442d42a811751f55aa3fd5d differ diff --git a/Library/Artifacts/a4/a4234e603b1904fdefc554a9f7f4bfd4 b/Library/Artifacts/a4/a4234e603b1904fdefc554a9f7f4bfd4 new file mode 100644 index 0000000..2736898 Binary files /dev/null and b/Library/Artifacts/a4/a4234e603b1904fdefc554a9f7f4bfd4 differ diff --git a/Library/Artifacts/a4/a42692062cc8681f1a049cbcccfdf89b b/Library/Artifacts/a4/a42692062cc8681f1a049cbcccfdf89b new file mode 100644 index 0000000..6742ee7 Binary files /dev/null and b/Library/Artifacts/a4/a42692062cc8681f1a049cbcccfdf89b differ diff --git a/Library/Artifacts/a4/a43f9501357e34a5adeaac80ca7c0570 b/Library/Artifacts/a4/a43f9501357e34a5adeaac80ca7c0570 new file mode 100644 index 0000000..b6931db Binary files /dev/null and b/Library/Artifacts/a4/a43f9501357e34a5adeaac80ca7c0570 differ diff --git a/Library/Artifacts/a4/a452743b738895df865f79ce4d1c1e4a b/Library/Artifacts/a4/a452743b738895df865f79ce4d1c1e4a new file mode 100644 index 0000000..0599388 Binary files /dev/null and b/Library/Artifacts/a4/a452743b738895df865f79ce4d1c1e4a differ diff --git a/Library/Artifacts/a4/a47a6ab6e39aca5f688cb12e75dd1234 b/Library/Artifacts/a4/a47a6ab6e39aca5f688cb12e75dd1234 new file mode 100644 index 0000000..e1c1348 Binary files /dev/null and b/Library/Artifacts/a4/a47a6ab6e39aca5f688cb12e75dd1234 differ diff --git a/Library/Artifacts/a4/a48288b04d015ed37b51bf351b082b16 b/Library/Artifacts/a4/a48288b04d015ed37b51bf351b082b16 new file mode 100644 index 0000000..a99465e Binary files /dev/null and b/Library/Artifacts/a4/a48288b04d015ed37b51bf351b082b16 differ diff --git a/Library/Artifacts/a4/a48db16728c740688041d7afb61d3dbc b/Library/Artifacts/a4/a48db16728c740688041d7afb61d3dbc new file mode 100644 index 0000000..409780a Binary files /dev/null and b/Library/Artifacts/a4/a48db16728c740688041d7afb61d3dbc differ diff --git a/Library/Artifacts/a4/a4c8505bd1ae66c9f25966e1ec5de98a b/Library/Artifacts/a4/a4c8505bd1ae66c9f25966e1ec5de98a new file mode 100644 index 0000000..f86644d Binary files /dev/null and b/Library/Artifacts/a4/a4c8505bd1ae66c9f25966e1ec5de98a differ diff --git a/Library/Artifacts/a4/a4e35cee96664444608111b27ff83d01 b/Library/Artifacts/a4/a4e35cee96664444608111b27ff83d01 new file mode 100644 index 0000000..fd27bae Binary files /dev/null and b/Library/Artifacts/a4/a4e35cee96664444608111b27ff83d01 differ diff --git a/Library/Artifacts/a5/a536340a8d321f5ce17e22fae0f29af8 b/Library/Artifacts/a5/a536340a8d321f5ce17e22fae0f29af8 new file mode 100644 index 0000000..6a3777a Binary files /dev/null and b/Library/Artifacts/a5/a536340a8d321f5ce17e22fae0f29af8 differ diff --git a/Library/Artifacts/a5/a536b3ef3318f04d442a66ef43f26493 b/Library/Artifacts/a5/a536b3ef3318f04d442a66ef43f26493 new file mode 100644 index 0000000..b8d70c2 Binary files /dev/null and b/Library/Artifacts/a5/a536b3ef3318f04d442a66ef43f26493 differ diff --git a/Library/Artifacts/a5/a543358ea704cbbc3e1244f2addd5b96 b/Library/Artifacts/a5/a543358ea704cbbc3e1244f2addd5b96 new file mode 100644 index 0000000..181f5a5 Binary files /dev/null and b/Library/Artifacts/a5/a543358ea704cbbc3e1244f2addd5b96 differ diff --git a/Library/Artifacts/a5/a556871c7a4ac4952d518e6f2586d65a b/Library/Artifacts/a5/a556871c7a4ac4952d518e6f2586d65a new file mode 100644 index 0000000..1fc675d Binary files /dev/null and b/Library/Artifacts/a5/a556871c7a4ac4952d518e6f2586d65a differ diff --git a/Library/Artifacts/a5/a56974b110f9f4085b82f18f9189d722 b/Library/Artifacts/a5/a56974b110f9f4085b82f18f9189d722 new file mode 100644 index 0000000..3298f71 Binary files /dev/null and b/Library/Artifacts/a5/a56974b110f9f4085b82f18f9189d722 differ diff --git a/Library/Artifacts/a5/a56a6de2d28c624086fe1de4e90460ef b/Library/Artifacts/a5/a56a6de2d28c624086fe1de4e90460ef new file mode 100644 index 0000000..40acc1e Binary files /dev/null and b/Library/Artifacts/a5/a56a6de2d28c624086fe1de4e90460ef differ diff --git a/Library/Artifacts/a5/a57d9adf5d15b84b6460f65b7bc45a9c b/Library/Artifacts/a5/a57d9adf5d15b84b6460f65b7bc45a9c new file mode 100644 index 0000000..ca2eaa4 Binary files /dev/null and b/Library/Artifacts/a5/a57d9adf5d15b84b6460f65b7bc45a9c differ diff --git a/Library/Artifacts/a5/a57ed357458aad4c010bd645426ec835 b/Library/Artifacts/a5/a57ed357458aad4c010bd645426ec835 new file mode 100644 index 0000000..cb1bb91 Binary files /dev/null and b/Library/Artifacts/a5/a57ed357458aad4c010bd645426ec835 differ diff --git a/Library/Artifacts/a5/a599fac17b9e5287b8db74af5bac51d3 b/Library/Artifacts/a5/a599fac17b9e5287b8db74af5bac51d3 new file mode 100644 index 0000000..e566a60 Binary files /dev/null and b/Library/Artifacts/a5/a599fac17b9e5287b8db74af5bac51d3 differ diff --git a/Library/Artifacts/a5/a5af40fc8133af3f0fda801211fe7bb2 b/Library/Artifacts/a5/a5af40fc8133af3f0fda801211fe7bb2 new file mode 100644 index 0000000..094071a Binary files /dev/null and b/Library/Artifacts/a5/a5af40fc8133af3f0fda801211fe7bb2 differ diff --git a/Library/Artifacts/a5/a5b10609ed054c0a1ce5349c611638eb b/Library/Artifacts/a5/a5b10609ed054c0a1ce5349c611638eb new file mode 100644 index 0000000..2733ab8 Binary files /dev/null and b/Library/Artifacts/a5/a5b10609ed054c0a1ce5349c611638eb differ diff --git a/Library/Artifacts/a5/a5db9ddbc7ebf1a0d63c1deff9c7a345 b/Library/Artifacts/a5/a5db9ddbc7ebf1a0d63c1deff9c7a345 new file mode 100644 index 0000000..35cd271 Binary files /dev/null and b/Library/Artifacts/a5/a5db9ddbc7ebf1a0d63c1deff9c7a345 differ diff --git a/Library/Artifacts/a6/a661ce0ee0d4c35598d550085d935143 b/Library/Artifacts/a6/a661ce0ee0d4c35598d550085d935143 new file mode 100644 index 0000000..4a3a519 Binary files /dev/null and b/Library/Artifacts/a6/a661ce0ee0d4c35598d550085d935143 differ diff --git a/Library/Artifacts/a6/a66d0ee2726dccaa5178579f5bb5063c b/Library/Artifacts/a6/a66d0ee2726dccaa5178579f5bb5063c new file mode 100644 index 0000000..4ed2014 Binary files /dev/null and b/Library/Artifacts/a6/a66d0ee2726dccaa5178579f5bb5063c differ diff --git a/Library/Artifacts/a7/a7106456c6eec96fbd8b1e9d903e603b b/Library/Artifacts/a7/a7106456c6eec96fbd8b1e9d903e603b new file mode 100644 index 0000000..198cc8c Binary files /dev/null and b/Library/Artifacts/a7/a7106456c6eec96fbd8b1e9d903e603b differ diff --git a/Library/Artifacts/a7/a719e260306d77f54f320d7ca0278615 b/Library/Artifacts/a7/a719e260306d77f54f320d7ca0278615 new file mode 100644 index 0000000..a6e8b97 Binary files /dev/null and b/Library/Artifacts/a7/a719e260306d77f54f320d7ca0278615 differ diff --git a/Library/Artifacts/a7/a71c03723bda49f9c3851a8fe5487814 b/Library/Artifacts/a7/a71c03723bda49f9c3851a8fe5487814 new file mode 100644 index 0000000..bbc8c55 Binary files /dev/null and b/Library/Artifacts/a7/a71c03723bda49f9c3851a8fe5487814 differ diff --git a/Library/Artifacts/a7/a730ed9a2cb7cfdaba5adb41d9049bbc b/Library/Artifacts/a7/a730ed9a2cb7cfdaba5adb41d9049bbc new file mode 100644 index 0000000..4901865 Binary files /dev/null and b/Library/Artifacts/a7/a730ed9a2cb7cfdaba5adb41d9049bbc differ diff --git a/Library/Artifacts/a7/a73257752b3bb8d7ce052b37b4fac1d3 b/Library/Artifacts/a7/a73257752b3bb8d7ce052b37b4fac1d3 new file mode 100644 index 0000000..93e3e48 Binary files /dev/null and b/Library/Artifacts/a7/a73257752b3bb8d7ce052b37b4fac1d3 differ diff --git a/Library/Artifacts/a7/a732607c67c785d501297d0666c5694c b/Library/Artifacts/a7/a732607c67c785d501297d0666c5694c new file mode 100644 index 0000000..763ef46 Binary files /dev/null and b/Library/Artifacts/a7/a732607c67c785d501297d0666c5694c differ diff --git a/Library/Artifacts/a7/a783099ce3a2c530fb68abba01b27479 b/Library/Artifacts/a7/a783099ce3a2c530fb68abba01b27479 new file mode 100644 index 0000000..43196ab Binary files /dev/null and b/Library/Artifacts/a7/a783099ce3a2c530fb68abba01b27479 differ diff --git a/Library/Artifacts/a7/a7868ad8e1aa10b2d50af705c4e734ec b/Library/Artifacts/a7/a7868ad8e1aa10b2d50af705c4e734ec new file mode 100644 index 0000000..7209dd6 Binary files /dev/null and b/Library/Artifacts/a7/a7868ad8e1aa10b2d50af705c4e734ec differ diff --git a/Library/Artifacts/a7/a7a4ee02bc1b0e150788026900588db0 b/Library/Artifacts/a7/a7a4ee02bc1b0e150788026900588db0 new file mode 100644 index 0000000..b6f1628 Binary files /dev/null and b/Library/Artifacts/a7/a7a4ee02bc1b0e150788026900588db0 differ diff --git a/Library/Artifacts/a8/a8014cdca57d1eff2ace3edb75edd2f2 b/Library/Artifacts/a8/a8014cdca57d1eff2ace3edb75edd2f2 new file mode 100644 index 0000000..d842145 Binary files /dev/null and b/Library/Artifacts/a8/a8014cdca57d1eff2ace3edb75edd2f2 differ diff --git a/Library/Artifacts/a8/a816e6844275c01c976eb66f067b14dc b/Library/Artifacts/a8/a816e6844275c01c976eb66f067b14dc new file mode 100644 index 0000000..a776473 Binary files /dev/null and b/Library/Artifacts/a8/a816e6844275c01c976eb66f067b14dc differ diff --git a/Library/Artifacts/a8/a8580efda4dd10a91b74c031e0b72367 b/Library/Artifacts/a8/a8580efda4dd10a91b74c031e0b72367 new file mode 100644 index 0000000..a10c867 Binary files /dev/null and b/Library/Artifacts/a8/a8580efda4dd10a91b74c031e0b72367 differ diff --git a/Library/Artifacts/a8/a86ca8cbe4cda5fadff2e1fb8684d0e0 b/Library/Artifacts/a8/a86ca8cbe4cda5fadff2e1fb8684d0e0 new file mode 100644 index 0000000..4eff1c8 Binary files /dev/null and b/Library/Artifacts/a8/a86ca8cbe4cda5fadff2e1fb8684d0e0 differ diff --git a/Library/Artifacts/a8/a874ca0c76735119e876c74c25c6d6a7 b/Library/Artifacts/a8/a874ca0c76735119e876c74c25c6d6a7 new file mode 100644 index 0000000..18e7a7d Binary files /dev/null and b/Library/Artifacts/a8/a874ca0c76735119e876c74c25c6d6a7 differ diff --git a/Library/Artifacts/a8/a88945e36db003008694203e77d76134 b/Library/Artifacts/a8/a88945e36db003008694203e77d76134 new file mode 100644 index 0000000..5bb3e19 Binary files /dev/null and b/Library/Artifacts/a8/a88945e36db003008694203e77d76134 differ diff --git a/Library/Artifacts/a8/a8c4a6d7c2227ea56ba4bba9cec47a5c b/Library/Artifacts/a8/a8c4a6d7c2227ea56ba4bba9cec47a5c new file mode 100644 index 0000000..f14e49c Binary files /dev/null and b/Library/Artifacts/a8/a8c4a6d7c2227ea56ba4bba9cec47a5c differ diff --git a/Library/Artifacts/a8/a8c5364a023716ef6f0eb1543b87cb91 b/Library/Artifacts/a8/a8c5364a023716ef6f0eb1543b87cb91 new file mode 100644 index 0000000..5f236ee Binary files /dev/null and b/Library/Artifacts/a8/a8c5364a023716ef6f0eb1543b87cb91 differ diff --git a/Library/Artifacts/a9/a91e925f57859fca59972219d231203e b/Library/Artifacts/a9/a91e925f57859fca59972219d231203e new file mode 100644 index 0000000..271df40 Binary files /dev/null and b/Library/Artifacts/a9/a91e925f57859fca59972219d231203e differ diff --git a/Library/Artifacts/a9/a924085270b785fe53dae2bd3f99d749 b/Library/Artifacts/a9/a924085270b785fe53dae2bd3f99d749 new file mode 100644 index 0000000..3a57767 Binary files /dev/null and b/Library/Artifacts/a9/a924085270b785fe53dae2bd3f99d749 differ diff --git a/Library/Artifacts/a9/a9ac59ebcb1d799bcb6a09aea8228307 b/Library/Artifacts/a9/a9ac59ebcb1d799bcb6a09aea8228307 new file mode 100644 index 0000000..15793f0 Binary files /dev/null and b/Library/Artifacts/a9/a9ac59ebcb1d799bcb6a09aea8228307 differ diff --git a/Library/Artifacts/a9/a9adcff3b5388a1600770321548dcb5a b/Library/Artifacts/a9/a9adcff3b5388a1600770321548dcb5a new file mode 100644 index 0000000..43d64c5 Binary files /dev/null and b/Library/Artifacts/a9/a9adcff3b5388a1600770321548dcb5a differ diff --git a/Library/Artifacts/a9/a9fcf1f8ef794a0b38366361c5cdb5d8 b/Library/Artifacts/a9/a9fcf1f8ef794a0b38366361c5cdb5d8 new file mode 100644 index 0000000..6389fa1 Binary files /dev/null and b/Library/Artifacts/a9/a9fcf1f8ef794a0b38366361c5cdb5d8 differ diff --git a/Library/Artifacts/aa/aa0dd8baf411cec4f63462f16328a182 b/Library/Artifacts/aa/aa0dd8baf411cec4f63462f16328a182 new file mode 100644 index 0000000..1663c93 Binary files /dev/null and b/Library/Artifacts/aa/aa0dd8baf411cec4f63462f16328a182 differ diff --git a/Library/Artifacts/aa/aa43f883b6b73df61662e5445a6262d7 b/Library/Artifacts/aa/aa43f883b6b73df61662e5445a6262d7 new file mode 100644 index 0000000..fb28091 Binary files /dev/null and b/Library/Artifacts/aa/aa43f883b6b73df61662e5445a6262d7 differ diff --git a/Library/Artifacts/aa/aa648354bba1a81903f335aacb48eb40 b/Library/Artifacts/aa/aa648354bba1a81903f335aacb48eb40 new file mode 100644 index 0000000..f8e19c8 Binary files /dev/null and b/Library/Artifacts/aa/aa648354bba1a81903f335aacb48eb40 differ diff --git a/Library/Artifacts/aa/aa77488b6315c9622ee1ee8ae3ca8c2e b/Library/Artifacts/aa/aa77488b6315c9622ee1ee8ae3ca8c2e new file mode 100644 index 0000000..672c939 Binary files /dev/null and b/Library/Artifacts/aa/aa77488b6315c9622ee1ee8ae3ca8c2e differ diff --git a/Library/Artifacts/ab/aba2ca1e1bed12e1083837c86194e81e b/Library/Artifacts/ab/aba2ca1e1bed12e1083837c86194e81e new file mode 100644 index 0000000..5ada0fb Binary files /dev/null and b/Library/Artifacts/ab/aba2ca1e1bed12e1083837c86194e81e differ diff --git a/Library/Artifacts/ab/abf1c012ec71f544a78e5cf0144d9d2b b/Library/Artifacts/ab/abf1c012ec71f544a78e5cf0144d9d2b new file mode 100644 index 0000000..5ad8c1f Binary files /dev/null and b/Library/Artifacts/ab/abf1c012ec71f544a78e5cf0144d9d2b differ diff --git a/Library/Artifacts/ab/abfe0ca15be088b9dcfe631fe450304c b/Library/Artifacts/ab/abfe0ca15be088b9dcfe631fe450304c new file mode 100644 index 0000000..8d1da09 Binary files /dev/null and b/Library/Artifacts/ab/abfe0ca15be088b9dcfe631fe450304c differ diff --git a/Library/Artifacts/ac/ac15d391e049c47aa072eeb31cf369b7 b/Library/Artifacts/ac/ac15d391e049c47aa072eeb31cf369b7 new file mode 100644 index 0000000..edb543b Binary files /dev/null and b/Library/Artifacts/ac/ac15d391e049c47aa072eeb31cf369b7 differ diff --git a/Library/Artifacts/ac/ac4b42de4cbb4984ce2e4fd47573b5f2 b/Library/Artifacts/ac/ac4b42de4cbb4984ce2e4fd47573b5f2 new file mode 100644 index 0000000..9c8c353 Binary files /dev/null and b/Library/Artifacts/ac/ac4b42de4cbb4984ce2e4fd47573b5f2 differ diff --git a/Library/Artifacts/ac/ac760665cf6b2023cf416a48735e80d6 b/Library/Artifacts/ac/ac760665cf6b2023cf416a48735e80d6 new file mode 100644 index 0000000..56fe74a Binary files /dev/null and b/Library/Artifacts/ac/ac760665cf6b2023cf416a48735e80d6 differ diff --git a/Library/Artifacts/ac/acca287896a78089ed800172d0026f7c b/Library/Artifacts/ac/acca287896a78089ed800172d0026f7c new file mode 100644 index 0000000..6379818 Binary files /dev/null and b/Library/Artifacts/ac/acca287896a78089ed800172d0026f7c differ diff --git a/Library/Artifacts/ac/acfd73463df39ef34d66bea3d59a0617 b/Library/Artifacts/ac/acfd73463df39ef34d66bea3d59a0617 new file mode 100644 index 0000000..8a03dab Binary files /dev/null and b/Library/Artifacts/ac/acfd73463df39ef34d66bea3d59a0617 differ diff --git a/Library/Artifacts/ad/ad0d3f4f42d5bbabcc2d81f4fedd1ec1 b/Library/Artifacts/ad/ad0d3f4f42d5bbabcc2d81f4fedd1ec1 new file mode 100644 index 0000000..4d5b1b1 Binary files /dev/null and b/Library/Artifacts/ad/ad0d3f4f42d5bbabcc2d81f4fedd1ec1 differ diff --git a/Library/Artifacts/ad/ad30472f25e6464d1f5daf3079993770 b/Library/Artifacts/ad/ad30472f25e6464d1f5daf3079993770 new file mode 100644 index 0000000..81e575f Binary files /dev/null and b/Library/Artifacts/ad/ad30472f25e6464d1f5daf3079993770 differ diff --git a/Library/Artifacts/ad/ad3a5b4adac97592f027716f0c265e1b b/Library/Artifacts/ad/ad3a5b4adac97592f027716f0c265e1b new file mode 100644 index 0000000..512f17d Binary files /dev/null and b/Library/Artifacts/ad/ad3a5b4adac97592f027716f0c265e1b differ diff --git a/Library/Artifacts/ad/ad3c252c6f26bca017c1a8d7b2db570c b/Library/Artifacts/ad/ad3c252c6f26bca017c1a8d7b2db570c new file mode 100644 index 0000000..0e1d5db Binary files /dev/null and b/Library/Artifacts/ad/ad3c252c6f26bca017c1a8d7b2db570c differ diff --git a/Library/Artifacts/ad/ad40db2c3f251c401a10af5340bb1eee b/Library/Artifacts/ad/ad40db2c3f251c401a10af5340bb1eee new file mode 100644 index 0000000..30d7a97 Binary files /dev/null and b/Library/Artifacts/ad/ad40db2c3f251c401a10af5340bb1eee differ diff --git a/Library/Artifacts/ad/ad4129a6eb7bd917a6e89ff54697d23b b/Library/Artifacts/ad/ad4129a6eb7bd917a6e89ff54697d23b new file mode 100644 index 0000000..a82d0bb Binary files /dev/null and b/Library/Artifacts/ad/ad4129a6eb7bd917a6e89ff54697d23b differ diff --git a/Library/Artifacts/ad/ad99347677ba421cfb8345cb7ae2da0e b/Library/Artifacts/ad/ad99347677ba421cfb8345cb7ae2da0e new file mode 100644 index 0000000..8073eef Binary files /dev/null and b/Library/Artifacts/ad/ad99347677ba421cfb8345cb7ae2da0e differ diff --git a/Library/Artifacts/ad/adb25bcfb31a6ebee8249b49d8f01d1a b/Library/Artifacts/ad/adb25bcfb31a6ebee8249b49d8f01d1a new file mode 100644 index 0000000..c51ca54 Binary files /dev/null and b/Library/Artifacts/ad/adb25bcfb31a6ebee8249b49d8f01d1a differ diff --git a/Library/Artifacts/ad/adb7a17b8ba9afb98404edb5a5303670 b/Library/Artifacts/ad/adb7a17b8ba9afb98404edb5a5303670 new file mode 100644 index 0000000..a5224be Binary files /dev/null and b/Library/Artifacts/ad/adb7a17b8ba9afb98404edb5a5303670 differ diff --git a/Library/Artifacts/ad/add3807966f73f68a10333821d37c06b b/Library/Artifacts/ad/add3807966f73f68a10333821d37c06b new file mode 100644 index 0000000..6db2149 Binary files /dev/null and b/Library/Artifacts/ad/add3807966f73f68a10333821d37c06b differ diff --git a/Library/Artifacts/ad/adff4cdd22a8a4476279acdfda8afd2d b/Library/Artifacts/ad/adff4cdd22a8a4476279acdfda8afd2d new file mode 100644 index 0000000..8f7ede0 Binary files /dev/null and b/Library/Artifacts/ad/adff4cdd22a8a4476279acdfda8afd2d differ diff --git a/Library/Artifacts/ae/ae33e47ca2c8247394a6fbf66585009f b/Library/Artifacts/ae/ae33e47ca2c8247394a6fbf66585009f new file mode 100644 index 0000000..46e2da4 Binary files /dev/null and b/Library/Artifacts/ae/ae33e47ca2c8247394a6fbf66585009f differ diff --git a/Library/Artifacts/ae/ae51b0c92e4d654271834a49adca9ea4 b/Library/Artifacts/ae/ae51b0c92e4d654271834a49adca9ea4 new file mode 100644 index 0000000..9cbb55b Binary files /dev/null and b/Library/Artifacts/ae/ae51b0c92e4d654271834a49adca9ea4 differ diff --git a/Library/Artifacts/ae/ae553695fa0082e3c593d7b18bb7482b b/Library/Artifacts/ae/ae553695fa0082e3c593d7b18bb7482b new file mode 100644 index 0000000..f992930 Binary files /dev/null and b/Library/Artifacts/ae/ae553695fa0082e3c593d7b18bb7482b differ diff --git a/Library/Artifacts/ae/ae832c745d4cd1a1bd15e33493e0c3e0 b/Library/Artifacts/ae/ae832c745d4cd1a1bd15e33493e0c3e0 new file mode 100644 index 0000000..c560937 Binary files /dev/null and b/Library/Artifacts/ae/ae832c745d4cd1a1bd15e33493e0c3e0 differ diff --git a/Library/Artifacts/ae/aef22008ced9f57dd3968b86b406ff1c b/Library/Artifacts/ae/aef22008ced9f57dd3968b86b406ff1c new file mode 100644 index 0000000..ad94656 Binary files /dev/null and b/Library/Artifacts/ae/aef22008ced9f57dd3968b86b406ff1c differ diff --git a/Library/Artifacts/af/af1d9af421a02c239e509b023edbbc57 b/Library/Artifacts/af/af1d9af421a02c239e509b023edbbc57 new file mode 100644 index 0000000..6be8a79 Binary files /dev/null and b/Library/Artifacts/af/af1d9af421a02c239e509b023edbbc57 differ diff --git a/Library/Artifacts/af/af68e98d0b459eadcbc8282ef94f832a b/Library/Artifacts/af/af68e98d0b459eadcbc8282ef94f832a new file mode 100644 index 0000000..27440a7 Binary files /dev/null and b/Library/Artifacts/af/af68e98d0b459eadcbc8282ef94f832a differ diff --git a/Library/Artifacts/af/af83c08a647ca78ab3d105731b2ed0f0 b/Library/Artifacts/af/af83c08a647ca78ab3d105731b2ed0f0 new file mode 100644 index 0000000..f345c9b Binary files /dev/null and b/Library/Artifacts/af/af83c08a647ca78ab3d105731b2ed0f0 differ diff --git a/Library/Artifacts/af/afaea85e4c79ada04491ed23c12d8cd2 b/Library/Artifacts/af/afaea85e4c79ada04491ed23c12d8cd2 new file mode 100644 index 0000000..f9968fa Binary files /dev/null and b/Library/Artifacts/af/afaea85e4c79ada04491ed23c12d8cd2 differ diff --git a/Library/Artifacts/af/aff4496fb280df0d2b0993b55728707c b/Library/Artifacts/af/aff4496fb280df0d2b0993b55728707c new file mode 100644 index 0000000..bcc6d33 Binary files /dev/null and b/Library/Artifacts/af/aff4496fb280df0d2b0993b55728707c differ diff --git a/Library/Artifacts/b0/b05ad80f807411f662d3e1b856f8e7f8 b/Library/Artifacts/b0/b05ad80f807411f662d3e1b856f8e7f8 new file mode 100644 index 0000000..80ddcf1 Binary files /dev/null and b/Library/Artifacts/b0/b05ad80f807411f662d3e1b856f8e7f8 differ diff --git a/Library/Artifacts/b0/b066bea681dce09ce59f12c41a68c8be b/Library/Artifacts/b0/b066bea681dce09ce59f12c41a68c8be new file mode 100644 index 0000000..10950b9 Binary files /dev/null and b/Library/Artifacts/b0/b066bea681dce09ce59f12c41a68c8be differ diff --git a/Library/Artifacts/b0/b06996ce1dc7cf5d5cfb5cc214ab50ce b/Library/Artifacts/b0/b06996ce1dc7cf5d5cfb5cc214ab50ce new file mode 100644 index 0000000..60d7152 Binary files /dev/null and b/Library/Artifacts/b0/b06996ce1dc7cf5d5cfb5cc214ab50ce differ diff --git a/Library/Artifacts/b0/b08f87f4a3bea1decfb616c7b2a741f0 b/Library/Artifacts/b0/b08f87f4a3bea1decfb616c7b2a741f0 new file mode 100644 index 0000000..de33135 Binary files /dev/null and b/Library/Artifacts/b0/b08f87f4a3bea1decfb616c7b2a741f0 differ diff --git a/Library/Artifacts/b0/b0add22e794b6e1fbca3d706b87fec9a b/Library/Artifacts/b0/b0add22e794b6e1fbca3d706b87fec9a new file mode 100644 index 0000000..5d786b6 Binary files /dev/null and b/Library/Artifacts/b0/b0add22e794b6e1fbca3d706b87fec9a differ diff --git a/Library/Artifacts/b0/b0fb937cb79b644dc5478c7c7fca0e1c b/Library/Artifacts/b0/b0fb937cb79b644dc5478c7c7fca0e1c new file mode 100644 index 0000000..47e6265 Binary files /dev/null and b/Library/Artifacts/b0/b0fb937cb79b644dc5478c7c7fca0e1c differ diff --git a/Library/Artifacts/b1/b12ef856f2b242744125f9b6f3fddfb4 b/Library/Artifacts/b1/b12ef856f2b242744125f9b6f3fddfb4 new file mode 100644 index 0000000..471dde0 Binary files /dev/null and b/Library/Artifacts/b1/b12ef856f2b242744125f9b6f3fddfb4 differ diff --git a/Library/Artifacts/b1/b16ca91621fd724b93e1d2d91d51071e b/Library/Artifacts/b1/b16ca91621fd724b93e1d2d91d51071e new file mode 100644 index 0000000..b4434b0 Binary files /dev/null and b/Library/Artifacts/b1/b16ca91621fd724b93e1d2d91d51071e differ diff --git a/Library/Artifacts/b1/b1c68c34027c8b52233575d7b4007a93 b/Library/Artifacts/b1/b1c68c34027c8b52233575d7b4007a93 new file mode 100644 index 0000000..438fb42 Binary files /dev/null and b/Library/Artifacts/b1/b1c68c34027c8b52233575d7b4007a93 differ diff --git a/Library/Artifacts/b1/b1d49623a0eb2a1a3d8ec3d32c4bef82 b/Library/Artifacts/b1/b1d49623a0eb2a1a3d8ec3d32c4bef82 new file mode 100644 index 0000000..8624091 Binary files /dev/null and b/Library/Artifacts/b1/b1d49623a0eb2a1a3d8ec3d32c4bef82 differ diff --git a/Library/Artifacts/b1/b1e12061672d43e7115eb08b3e0b83cc b/Library/Artifacts/b1/b1e12061672d43e7115eb08b3e0b83cc new file mode 100644 index 0000000..01cf08c Binary files /dev/null and b/Library/Artifacts/b1/b1e12061672d43e7115eb08b3e0b83cc differ diff --git a/Library/Artifacts/b1/b1f660c96d3f712abb0b88b3ddca3a7c b/Library/Artifacts/b1/b1f660c96d3f712abb0b88b3ddca3a7c new file mode 100644 index 0000000..6b5d16f Binary files /dev/null and b/Library/Artifacts/b1/b1f660c96d3f712abb0b88b3ddca3a7c differ diff --git a/Library/Artifacts/b2/b2472b873d16922b3fa9b914232f6695 b/Library/Artifacts/b2/b2472b873d16922b3fa9b914232f6695 new file mode 100644 index 0000000..d96c3ed Binary files /dev/null and b/Library/Artifacts/b2/b2472b873d16922b3fa9b914232f6695 differ diff --git a/Library/Artifacts/b2/b260797475f170774e2388f3f9eaacef b/Library/Artifacts/b2/b260797475f170774e2388f3f9eaacef new file mode 100644 index 0000000..f2484d5 Binary files /dev/null and b/Library/Artifacts/b2/b260797475f170774e2388f3f9eaacef differ diff --git a/Library/Artifacts/b2/b296ac0d566349d1193188d9d1a11ded b/Library/Artifacts/b2/b296ac0d566349d1193188d9d1a11ded new file mode 100644 index 0000000..a424394 Binary files /dev/null and b/Library/Artifacts/b2/b296ac0d566349d1193188d9d1a11ded differ diff --git a/Library/Artifacts/b3/b329cb8363f190ba181a42e3867b2960 b/Library/Artifacts/b3/b329cb8363f190ba181a42e3867b2960 new file mode 100644 index 0000000..5e7462b Binary files /dev/null and b/Library/Artifacts/b3/b329cb8363f190ba181a42e3867b2960 differ diff --git a/Library/Artifacts/b3/b32f90e5e9a12b0f1634dc12660970fd b/Library/Artifacts/b3/b32f90e5e9a12b0f1634dc12660970fd new file mode 100644 index 0000000..7956b17 Binary files /dev/null and b/Library/Artifacts/b3/b32f90e5e9a12b0f1634dc12660970fd differ diff --git a/Library/Artifacts/b3/b33af3da5c05f1383d2d97f7e1275fbd b/Library/Artifacts/b3/b33af3da5c05f1383d2d97f7e1275fbd new file mode 100644 index 0000000..6805892 Binary files /dev/null and b/Library/Artifacts/b3/b33af3da5c05f1383d2d97f7e1275fbd differ diff --git a/Library/Artifacts/b3/b35e8197d9d938512178012047e13f39 b/Library/Artifacts/b3/b35e8197d9d938512178012047e13f39 new file mode 100644 index 0000000..b7654fd Binary files /dev/null and b/Library/Artifacts/b3/b35e8197d9d938512178012047e13f39 differ diff --git a/Library/Artifacts/b3/b3666aa279a57adbfa2eaea6843e1886 b/Library/Artifacts/b3/b3666aa279a57adbfa2eaea6843e1886 new file mode 100644 index 0000000..ca07430 Binary files /dev/null and b/Library/Artifacts/b3/b3666aa279a57adbfa2eaea6843e1886 differ diff --git a/Library/Artifacts/b3/b37e16b4a95ef9d8d3f348300aa50eb4 b/Library/Artifacts/b3/b37e16b4a95ef9d8d3f348300aa50eb4 new file mode 100644 index 0000000..4e5f3d6 Binary files /dev/null and b/Library/Artifacts/b3/b37e16b4a95ef9d8d3f348300aa50eb4 differ diff --git a/Library/Artifacts/b3/b3951734078bfe369f6d7ee9aa768172 b/Library/Artifacts/b3/b3951734078bfe369f6d7ee9aa768172 new file mode 100644 index 0000000..9bc37ad Binary files /dev/null and b/Library/Artifacts/b3/b3951734078bfe369f6d7ee9aa768172 differ diff --git a/Library/Artifacts/b3/b3cf7702e8cc8cc4261dbf045dbb1add b/Library/Artifacts/b3/b3cf7702e8cc8cc4261dbf045dbb1add new file mode 100644 index 0000000..aebe2fe Binary files /dev/null and b/Library/Artifacts/b3/b3cf7702e8cc8cc4261dbf045dbb1add differ diff --git a/Library/Artifacts/b3/b3d10c17496ca75517d15883f9d259a9 b/Library/Artifacts/b3/b3d10c17496ca75517d15883f9d259a9 new file mode 100644 index 0000000..cf739ee Binary files /dev/null and b/Library/Artifacts/b3/b3d10c17496ca75517d15883f9d259a9 differ diff --git a/Library/Artifacts/b4/b402b8875d5566fb394754bc1faaf3aa b/Library/Artifacts/b4/b402b8875d5566fb394754bc1faaf3aa new file mode 100644 index 0000000..35e2898 Binary files /dev/null and b/Library/Artifacts/b4/b402b8875d5566fb394754bc1faaf3aa differ diff --git a/Library/Artifacts/b4/b41a89a67a53a369b7d00aa18765ba96 b/Library/Artifacts/b4/b41a89a67a53a369b7d00aa18765ba96 new file mode 100644 index 0000000..d3f22b9 Binary files /dev/null and b/Library/Artifacts/b4/b41a89a67a53a369b7d00aa18765ba96 differ diff --git a/Library/Artifacts/b4/b443be225c94546aa8d7c67496610894 b/Library/Artifacts/b4/b443be225c94546aa8d7c67496610894 new file mode 100644 index 0000000..8e83978 Binary files /dev/null and b/Library/Artifacts/b4/b443be225c94546aa8d7c67496610894 differ diff --git a/Library/Artifacts/b4/b47d018719465cad9db43b127bf84d49 b/Library/Artifacts/b4/b47d018719465cad9db43b127bf84d49 new file mode 100644 index 0000000..ba9683f Binary files /dev/null and b/Library/Artifacts/b4/b47d018719465cad9db43b127bf84d49 differ diff --git a/Library/Artifacts/b4/b47f42c14baa103aabd3b0dc63f07fa5 b/Library/Artifacts/b4/b47f42c14baa103aabd3b0dc63f07fa5 new file mode 100644 index 0000000..dcb84c8 Binary files /dev/null and b/Library/Artifacts/b4/b47f42c14baa103aabd3b0dc63f07fa5 differ diff --git a/Library/Artifacts/b4/b4bff0e99eb3155e799c9a0ffa9ddece b/Library/Artifacts/b4/b4bff0e99eb3155e799c9a0ffa9ddece new file mode 100644 index 0000000..6718f34 Binary files /dev/null and b/Library/Artifacts/b4/b4bff0e99eb3155e799c9a0ffa9ddece differ diff --git a/Library/Artifacts/b5/b5106995bfd63b5d938fa1f1fa511b63 b/Library/Artifacts/b5/b5106995bfd63b5d938fa1f1fa511b63 new file mode 100644 index 0000000..4e9b86a Binary files /dev/null and b/Library/Artifacts/b5/b5106995bfd63b5d938fa1f1fa511b63 differ diff --git a/Library/Artifacts/b5/b59c52b030077e57d3b9393da2b6fe56 b/Library/Artifacts/b5/b59c52b030077e57d3b9393da2b6fe56 new file mode 100644 index 0000000..c880ca7 Binary files /dev/null and b/Library/Artifacts/b5/b59c52b030077e57d3b9393da2b6fe56 differ diff --git a/Library/Artifacts/b5/b5cc8de37bcc6a691538762ba376e303 b/Library/Artifacts/b5/b5cc8de37bcc6a691538762ba376e303 new file mode 100644 index 0000000..b1d3e1a Binary files /dev/null and b/Library/Artifacts/b5/b5cc8de37bcc6a691538762ba376e303 differ diff --git a/Library/Artifacts/b5/b5d0825b8c93269a8fd1970d8977cb91 b/Library/Artifacts/b5/b5d0825b8c93269a8fd1970d8977cb91 new file mode 100644 index 0000000..51fff03 Binary files /dev/null and b/Library/Artifacts/b5/b5d0825b8c93269a8fd1970d8977cb91 differ diff --git a/Library/Artifacts/b6/b61ee712b3aaadf1abb9803fd3135642 b/Library/Artifacts/b6/b61ee712b3aaadf1abb9803fd3135642 new file mode 100644 index 0000000..544c290 Binary files /dev/null and b/Library/Artifacts/b6/b61ee712b3aaadf1abb9803fd3135642 differ diff --git a/Library/Artifacts/b6/b63826d77830a89c8e502842626fdc72 b/Library/Artifacts/b6/b63826d77830a89c8e502842626fdc72 new file mode 100644 index 0000000..dd81e15 Binary files /dev/null and b/Library/Artifacts/b6/b63826d77830a89c8e502842626fdc72 differ diff --git a/Library/Artifacts/b6/b6384d43178c47eb9b30763920a2a048 b/Library/Artifacts/b6/b6384d43178c47eb9b30763920a2a048 new file mode 100644 index 0000000..d888737 Binary files /dev/null and b/Library/Artifacts/b6/b6384d43178c47eb9b30763920a2a048 differ diff --git a/Library/Artifacts/b6/b6c69b33548e4bfee14bccd85dcc82f5 b/Library/Artifacts/b6/b6c69b33548e4bfee14bccd85dcc82f5 new file mode 100644 index 0000000..4a88b7b Binary files /dev/null and b/Library/Artifacts/b6/b6c69b33548e4bfee14bccd85dcc82f5 differ diff --git a/Library/Artifacts/b6/b6d99485d33c1dd8078a99ef8e16701d b/Library/Artifacts/b6/b6d99485d33c1dd8078a99ef8e16701d new file mode 100644 index 0000000..ab707ea Binary files /dev/null and b/Library/Artifacts/b6/b6d99485d33c1dd8078a99ef8e16701d differ diff --git a/Library/Artifacts/b6/b6ef332695a20822e76b316979f045d4 b/Library/Artifacts/b6/b6ef332695a20822e76b316979f045d4 new file mode 100644 index 0000000..8176419 Binary files /dev/null and b/Library/Artifacts/b6/b6ef332695a20822e76b316979f045d4 differ diff --git a/Library/Artifacts/b7/b73d9c638857d5d1d791f7ff4c1f1af3 b/Library/Artifacts/b7/b73d9c638857d5d1d791f7ff4c1f1af3 new file mode 100644 index 0000000..79f1920 Binary files /dev/null and b/Library/Artifacts/b7/b73d9c638857d5d1d791f7ff4c1f1af3 differ diff --git a/Library/Artifacts/b7/b75b2c5958a8c5320f0a60a56321970a b/Library/Artifacts/b7/b75b2c5958a8c5320f0a60a56321970a new file mode 100644 index 0000000..aa277f7 Binary files /dev/null and b/Library/Artifacts/b7/b75b2c5958a8c5320f0a60a56321970a differ diff --git a/Library/Artifacts/b7/b78411ac3f447b304f2801865df3d8c6 b/Library/Artifacts/b7/b78411ac3f447b304f2801865df3d8c6 new file mode 100644 index 0000000..105967a Binary files /dev/null and b/Library/Artifacts/b7/b78411ac3f447b304f2801865df3d8c6 differ diff --git a/Library/Artifacts/b7/b7be73ab80deeaa6190bb0c5269a39fb b/Library/Artifacts/b7/b7be73ab80deeaa6190bb0c5269a39fb new file mode 100644 index 0000000..43174c3 Binary files /dev/null and b/Library/Artifacts/b7/b7be73ab80deeaa6190bb0c5269a39fb differ diff --git a/Library/Artifacts/b7/b7f5bc2ddcf2f3601f708fbb0080856f b/Library/Artifacts/b7/b7f5bc2ddcf2f3601f708fbb0080856f new file mode 100644 index 0000000..3d5359b Binary files /dev/null and b/Library/Artifacts/b7/b7f5bc2ddcf2f3601f708fbb0080856f differ diff --git a/Library/Artifacts/b8/b837d75cdd88bc229c848e372f43c0f9 b/Library/Artifacts/b8/b837d75cdd88bc229c848e372f43c0f9 new file mode 100644 index 0000000..14bce32 Binary files /dev/null and b/Library/Artifacts/b8/b837d75cdd88bc229c848e372f43c0f9 differ diff --git a/Library/Artifacts/b8/b872f644fd77d16fda508a1f31ef21c7 b/Library/Artifacts/b8/b872f644fd77d16fda508a1f31ef21c7 new file mode 100644 index 0000000..eb5c225 Binary files /dev/null and b/Library/Artifacts/b8/b872f644fd77d16fda508a1f31ef21c7 differ diff --git a/Library/Artifacts/b8/b88552fe70de20ed4275e35e2e63f8ed b/Library/Artifacts/b8/b88552fe70de20ed4275e35e2e63f8ed new file mode 100644 index 0000000..27d608f Binary files /dev/null and b/Library/Artifacts/b8/b88552fe70de20ed4275e35e2e63f8ed differ diff --git a/Library/Artifacts/b8/b8b1aca5071b991720424a9797489120 b/Library/Artifacts/b8/b8b1aca5071b991720424a9797489120 new file mode 100644 index 0000000..129474b Binary files /dev/null and b/Library/Artifacts/b8/b8b1aca5071b991720424a9797489120 differ diff --git a/Library/Artifacts/b8/b8bc59989068d6b2664c4deb0990e71c b/Library/Artifacts/b8/b8bc59989068d6b2664c4deb0990e71c new file mode 100644 index 0000000..e7f2db6 Binary files /dev/null and b/Library/Artifacts/b8/b8bc59989068d6b2664c4deb0990e71c differ diff --git a/Library/Artifacts/b8/b8cd5e93132d2cc0235f64529fbaf76c b/Library/Artifacts/b8/b8cd5e93132d2cc0235f64529fbaf76c new file mode 100644 index 0000000..91b66bf Binary files /dev/null and b/Library/Artifacts/b8/b8cd5e93132d2cc0235f64529fbaf76c differ diff --git a/Library/Artifacts/b9/b90823f71533a3f65eb41014bba9a124 b/Library/Artifacts/b9/b90823f71533a3f65eb41014bba9a124 new file mode 100644 index 0000000..d3a858e Binary files /dev/null and b/Library/Artifacts/b9/b90823f71533a3f65eb41014bba9a124 differ diff --git a/Library/Artifacts/b9/b90a4e9afe4cf3bffab687f3015c8e7d b/Library/Artifacts/b9/b90a4e9afe4cf3bffab687f3015c8e7d new file mode 100644 index 0000000..fc44ee1 Binary files /dev/null and b/Library/Artifacts/b9/b90a4e9afe4cf3bffab687f3015c8e7d differ diff --git a/Library/Artifacts/b9/b91c3765407b5220abcde8fb42b6d012 b/Library/Artifacts/b9/b91c3765407b5220abcde8fb42b6d012 new file mode 100644 index 0000000..6629551 Binary files /dev/null and b/Library/Artifacts/b9/b91c3765407b5220abcde8fb42b6d012 differ diff --git a/Library/Artifacts/b9/b9518f59bbc4a434b58e0eaed0945ad0 b/Library/Artifacts/b9/b9518f59bbc4a434b58e0eaed0945ad0 new file mode 100644 index 0000000..ada8d14 Binary files /dev/null and b/Library/Artifacts/b9/b9518f59bbc4a434b58e0eaed0945ad0 differ diff --git a/Library/Artifacts/b9/b96111ce792adb0fa28c4af280a7f821 b/Library/Artifacts/b9/b96111ce792adb0fa28c4af280a7f821 new file mode 100644 index 0000000..f47204b Binary files /dev/null and b/Library/Artifacts/b9/b96111ce792adb0fa28c4af280a7f821 differ diff --git a/Library/Artifacts/b9/b96261b441e77a658e9f207b2b093792 b/Library/Artifacts/b9/b96261b441e77a658e9f207b2b093792 new file mode 100644 index 0000000..2f4dae9 Binary files /dev/null and b/Library/Artifacts/b9/b96261b441e77a658e9f207b2b093792 differ diff --git a/Library/Artifacts/b9/b9d49b9056f8cd6613eb19150050f3f2 b/Library/Artifacts/b9/b9d49b9056f8cd6613eb19150050f3f2 new file mode 100644 index 0000000..afe749d Binary files /dev/null and b/Library/Artifacts/b9/b9d49b9056f8cd6613eb19150050f3f2 differ diff --git a/Library/Artifacts/b9/b9fa0e1af69285c31560390ee73e2c48 b/Library/Artifacts/b9/b9fa0e1af69285c31560390ee73e2c48 new file mode 100644 index 0000000..8d4ab96 Binary files /dev/null and b/Library/Artifacts/b9/b9fa0e1af69285c31560390ee73e2c48 differ diff --git a/Library/Artifacts/ba/ba6e9805ddf4a02f2f81c1a0aab74930 b/Library/Artifacts/ba/ba6e9805ddf4a02f2f81c1a0aab74930 new file mode 100644 index 0000000..2244ec7 Binary files /dev/null and b/Library/Artifacts/ba/ba6e9805ddf4a02f2f81c1a0aab74930 differ diff --git a/Library/Artifacts/bb/bb1b5a4a3d36d87ee144faabf20efb5f b/Library/Artifacts/bb/bb1b5a4a3d36d87ee144faabf20efb5f new file mode 100644 index 0000000..2cb996a Binary files /dev/null and b/Library/Artifacts/bb/bb1b5a4a3d36d87ee144faabf20efb5f differ diff --git a/Library/Artifacts/bb/bb208bc9b9741793155674c66ee00971 b/Library/Artifacts/bb/bb208bc9b9741793155674c66ee00971 new file mode 100644 index 0000000..1be8adc Binary files /dev/null and b/Library/Artifacts/bb/bb208bc9b9741793155674c66ee00971 differ diff --git a/Library/Artifacts/bb/bb5df611eae7894e2c19846670f3d045 b/Library/Artifacts/bb/bb5df611eae7894e2c19846670f3d045 new file mode 100644 index 0000000..45ca44b Binary files /dev/null and b/Library/Artifacts/bb/bb5df611eae7894e2c19846670f3d045 differ diff --git a/Library/Artifacts/bb/bbd219f6060928cb59aeb0bac7e67ff6 b/Library/Artifacts/bb/bbd219f6060928cb59aeb0bac7e67ff6 new file mode 100644 index 0000000..2fd4c93 Binary files /dev/null and b/Library/Artifacts/bb/bbd219f6060928cb59aeb0bac7e67ff6 differ diff --git a/Library/Artifacts/bc/bc1640324cdf975413bfa9d6d5c93f2a b/Library/Artifacts/bc/bc1640324cdf975413bfa9d6d5c93f2a new file mode 100644 index 0000000..fcd0a4f Binary files /dev/null and b/Library/Artifacts/bc/bc1640324cdf975413bfa9d6d5c93f2a differ diff --git a/Library/Artifacts/bc/bc726ef2ec848db1db538924b9077742 b/Library/Artifacts/bc/bc726ef2ec848db1db538924b9077742 new file mode 100644 index 0000000..99ff545 Binary files /dev/null and b/Library/Artifacts/bc/bc726ef2ec848db1db538924b9077742 differ diff --git a/Library/Artifacts/bc/bc7e4894048020c92f4569ef4ae5ce72 b/Library/Artifacts/bc/bc7e4894048020c92f4569ef4ae5ce72 new file mode 100644 index 0000000..a21cc33 Binary files /dev/null and b/Library/Artifacts/bc/bc7e4894048020c92f4569ef4ae5ce72 differ diff --git a/Library/Artifacts/bc/bcaf87258b9727bc12ccbc5050b2bee9 b/Library/Artifacts/bc/bcaf87258b9727bc12ccbc5050b2bee9 new file mode 100644 index 0000000..b9e4e9a Binary files /dev/null and b/Library/Artifacts/bc/bcaf87258b9727bc12ccbc5050b2bee9 differ diff --git a/Library/Artifacts/bc/bcc16bd27df58f53f0f663a2c85e3b24 b/Library/Artifacts/bc/bcc16bd27df58f53f0f663a2c85e3b24 new file mode 100644 index 0000000..5da5853 Binary files /dev/null and b/Library/Artifacts/bc/bcc16bd27df58f53f0f663a2c85e3b24 differ diff --git a/Library/Artifacts/bd/bd0ada6585c7869267e05fc588e5c73a b/Library/Artifacts/bd/bd0ada6585c7869267e05fc588e5c73a new file mode 100644 index 0000000..d50f346 Binary files /dev/null and b/Library/Artifacts/bd/bd0ada6585c7869267e05fc588e5c73a differ diff --git a/Library/Artifacts/bd/bd1d2486c2e3b755fa4ae32a4e6dd1bc b/Library/Artifacts/bd/bd1d2486c2e3b755fa4ae32a4e6dd1bc new file mode 100644 index 0000000..d72902d Binary files /dev/null and b/Library/Artifacts/bd/bd1d2486c2e3b755fa4ae32a4e6dd1bc differ diff --git a/Library/Artifacts/bd/bd232a566d0b0efbb4c7d4fe6a077a66 b/Library/Artifacts/bd/bd232a566d0b0efbb4c7d4fe6a077a66 new file mode 100644 index 0000000..01a1f21 Binary files /dev/null and b/Library/Artifacts/bd/bd232a566d0b0efbb4c7d4fe6a077a66 differ diff --git a/Library/Artifacts/bd/bd2d47745dba1290a985893cc6513d9d b/Library/Artifacts/bd/bd2d47745dba1290a985893cc6513d9d new file mode 100644 index 0000000..9be96ff Binary files /dev/null and b/Library/Artifacts/bd/bd2d47745dba1290a985893cc6513d9d differ diff --git a/Library/Artifacts/bd/bd3900606aba5a9404efa187e3b8ba73 b/Library/Artifacts/bd/bd3900606aba5a9404efa187e3b8ba73 new file mode 100644 index 0000000..9f9ca70 Binary files /dev/null and b/Library/Artifacts/bd/bd3900606aba5a9404efa187e3b8ba73 differ diff --git a/Library/Artifacts/bd/bd4f7de9b3931e4eb9382e97292448f4 b/Library/Artifacts/bd/bd4f7de9b3931e4eb9382e97292448f4 new file mode 100644 index 0000000..4205da3 Binary files /dev/null and b/Library/Artifacts/bd/bd4f7de9b3931e4eb9382e97292448f4 differ diff --git a/Library/Artifacts/bd/bd877d7ebb9bf43b6b59396f5bea3a8c b/Library/Artifacts/bd/bd877d7ebb9bf43b6b59396f5bea3a8c new file mode 100644 index 0000000..9400c94 Binary files /dev/null and b/Library/Artifacts/bd/bd877d7ebb9bf43b6b59396f5bea3a8c differ diff --git a/Library/Artifacts/bd/bd92d2f908ecb8dcaa72df11062d824e b/Library/Artifacts/bd/bd92d2f908ecb8dcaa72df11062d824e new file mode 100644 index 0000000..82c7485 Binary files /dev/null and b/Library/Artifacts/bd/bd92d2f908ecb8dcaa72df11062d824e differ diff --git a/Library/Artifacts/be/be03839eb3cb223ca502477b2a243af1 b/Library/Artifacts/be/be03839eb3cb223ca502477b2a243af1 new file mode 100644 index 0000000..b6a69a1 Binary files /dev/null and b/Library/Artifacts/be/be03839eb3cb223ca502477b2a243af1 differ diff --git a/Library/Artifacts/be/be7bd3982d0ca8a5808c19f6d915a6a6 b/Library/Artifacts/be/be7bd3982d0ca8a5808c19f6d915a6a6 new file mode 100644 index 0000000..a568703 Binary files /dev/null and b/Library/Artifacts/be/be7bd3982d0ca8a5808c19f6d915a6a6 differ diff --git a/Library/Artifacts/be/be9ffb9825df404dffbae799eb3dcd67 b/Library/Artifacts/be/be9ffb9825df404dffbae799eb3dcd67 new file mode 100644 index 0000000..81b9c7c Binary files /dev/null and b/Library/Artifacts/be/be9ffb9825df404dffbae799eb3dcd67 differ diff --git a/Library/Artifacts/be/bea5ae61f8e9b9da6915603e45f11e8f b/Library/Artifacts/be/bea5ae61f8e9b9da6915603e45f11e8f new file mode 100644 index 0000000..1fffc87 Binary files /dev/null and b/Library/Artifacts/be/bea5ae61f8e9b9da6915603e45f11e8f differ diff --git a/Library/Artifacts/be/bedc0fe37a3b7c3970c5de84f7e21fcc b/Library/Artifacts/be/bedc0fe37a3b7c3970c5de84f7e21fcc new file mode 100644 index 0000000..529682a Binary files /dev/null and b/Library/Artifacts/be/bedc0fe37a3b7c3970c5de84f7e21fcc differ diff --git a/Library/Artifacts/be/befffb678fd5f238b11ae9e468473733 b/Library/Artifacts/be/befffb678fd5f238b11ae9e468473733 new file mode 100644 index 0000000..7288344 Binary files /dev/null and b/Library/Artifacts/be/befffb678fd5f238b11ae9e468473733 differ diff --git a/Library/Artifacts/bf/bf3f32d45d921946ba4e3f44f5f0bdb5 b/Library/Artifacts/bf/bf3f32d45d921946ba4e3f44f5f0bdb5 new file mode 100644 index 0000000..c7655e4 Binary files /dev/null and b/Library/Artifacts/bf/bf3f32d45d921946ba4e3f44f5f0bdb5 differ diff --git a/Library/Artifacts/bf/bf8f8c63c6f7dd01f4f13dde3a23f85a b/Library/Artifacts/bf/bf8f8c63c6f7dd01f4f13dde3a23f85a new file mode 100644 index 0000000..6fe15dc Binary files /dev/null and b/Library/Artifacts/bf/bf8f8c63c6f7dd01f4f13dde3a23f85a differ diff --git a/Library/Artifacts/bf/bf969cb2be5689c6d9b1d9aa43da0711 b/Library/Artifacts/bf/bf969cb2be5689c6d9b1d9aa43da0711 new file mode 100644 index 0000000..1bc62cf Binary files /dev/null and b/Library/Artifacts/bf/bf969cb2be5689c6d9b1d9aa43da0711 differ diff --git a/Library/Artifacts/bf/bf9bf3e35bae89fdca54c6938e134288 b/Library/Artifacts/bf/bf9bf3e35bae89fdca54c6938e134288 new file mode 100644 index 0000000..a14a5f6 Binary files /dev/null and b/Library/Artifacts/bf/bf9bf3e35bae89fdca54c6938e134288 differ diff --git a/Library/Artifacts/bf/bfabdff2bcb824d6b6613892a0698a0f b/Library/Artifacts/bf/bfabdff2bcb824d6b6613892a0698a0f new file mode 100644 index 0000000..61eebd3 Binary files /dev/null and b/Library/Artifacts/bf/bfabdff2bcb824d6b6613892a0698a0f differ diff --git a/Library/Artifacts/bf/bfe8cb190a2048078e96c3e4185cfd24 b/Library/Artifacts/bf/bfe8cb190a2048078e96c3e4185cfd24 new file mode 100644 index 0000000..e7a06e0 Binary files /dev/null and b/Library/Artifacts/bf/bfe8cb190a2048078e96c3e4185cfd24 differ diff --git a/Library/Artifacts/bf/bffc6e850a8e42000d83d7a240701b4d b/Library/Artifacts/bf/bffc6e850a8e42000d83d7a240701b4d new file mode 100644 index 0000000..a0bb098 Binary files /dev/null and b/Library/Artifacts/bf/bffc6e850a8e42000d83d7a240701b4d differ diff --git a/Library/Artifacts/c0/c000af77a2462df7e74f63c841c68b82 b/Library/Artifacts/c0/c000af77a2462df7e74f63c841c68b82 new file mode 100644 index 0000000..4c2f553 Binary files /dev/null and b/Library/Artifacts/c0/c000af77a2462df7e74f63c841c68b82 differ diff --git a/Library/Artifacts/c0/c02d21da5ad8e0fbefddba6dee1cedb1 b/Library/Artifacts/c0/c02d21da5ad8e0fbefddba6dee1cedb1 new file mode 100644 index 0000000..2b35b99 Binary files /dev/null and b/Library/Artifacts/c0/c02d21da5ad8e0fbefddba6dee1cedb1 differ diff --git a/Library/Artifacts/c0/c03c5a55edb8174c8a03b88c99f2b204 b/Library/Artifacts/c0/c03c5a55edb8174c8a03b88c99f2b204 new file mode 100644 index 0000000..6cea4ef Binary files /dev/null and b/Library/Artifacts/c0/c03c5a55edb8174c8a03b88c99f2b204 differ diff --git a/Library/Artifacts/c0/c0c25d4d2ade855fd5815b42af5c4a3c b/Library/Artifacts/c0/c0c25d4d2ade855fd5815b42af5c4a3c new file mode 100644 index 0000000..4888b58 Binary files /dev/null and b/Library/Artifacts/c0/c0c25d4d2ade855fd5815b42af5c4a3c differ diff --git a/Library/Artifacts/c0/c0e29ea71e40731636e0801294404c36 b/Library/Artifacts/c0/c0e29ea71e40731636e0801294404c36 new file mode 100644 index 0000000..73622bd Binary files /dev/null and b/Library/Artifacts/c0/c0e29ea71e40731636e0801294404c36 differ diff --git a/Library/Artifacts/c0/c0e511a0a1faa6378e8424ebb7d7ea10 b/Library/Artifacts/c0/c0e511a0a1faa6378e8424ebb7d7ea10 new file mode 100644 index 0000000..3e7b442 Binary files /dev/null and b/Library/Artifacts/c0/c0e511a0a1faa6378e8424ebb7d7ea10 differ diff --git a/Library/Artifacts/c0/c0f59b89087dc1922987cd039f851124 b/Library/Artifacts/c0/c0f59b89087dc1922987cd039f851124 new file mode 100644 index 0000000..78e5e87 Binary files /dev/null and b/Library/Artifacts/c0/c0f59b89087dc1922987cd039f851124 differ diff --git a/Library/Artifacts/c1/c123df76fcdaf44c67223a3b14aced04 b/Library/Artifacts/c1/c123df76fcdaf44c67223a3b14aced04 new file mode 100644 index 0000000..645cf09 Binary files /dev/null and b/Library/Artifacts/c1/c123df76fcdaf44c67223a3b14aced04 differ diff --git a/Library/Artifacts/c1/c184a4e8589b85cb75da1173289b48c2 b/Library/Artifacts/c1/c184a4e8589b85cb75da1173289b48c2 new file mode 100644 index 0000000..31a3e8c Binary files /dev/null and b/Library/Artifacts/c1/c184a4e8589b85cb75da1173289b48c2 differ diff --git a/Library/Artifacts/c1/c18aea3e2dd51c1713e7be0a5f5f70c4 b/Library/Artifacts/c1/c18aea3e2dd51c1713e7be0a5f5f70c4 new file mode 100644 index 0000000..a26b0cc Binary files /dev/null and b/Library/Artifacts/c1/c18aea3e2dd51c1713e7be0a5f5f70c4 differ diff --git a/Library/Artifacts/c1/c1b2ca7dcc4155099ba1ac33fe8897cc b/Library/Artifacts/c1/c1b2ca7dcc4155099ba1ac33fe8897cc new file mode 100644 index 0000000..9dcc08a Binary files /dev/null and b/Library/Artifacts/c1/c1b2ca7dcc4155099ba1ac33fe8897cc differ diff --git a/Library/Artifacts/c1/c1bab8ca598865822d118c3c78b88a2b b/Library/Artifacts/c1/c1bab8ca598865822d118c3c78b88a2b new file mode 100644 index 0000000..9fd2933 Binary files /dev/null and b/Library/Artifacts/c1/c1bab8ca598865822d118c3c78b88a2b differ diff --git a/Library/Artifacts/c2/c25d40aa53d75d427be961b299599ac2 b/Library/Artifacts/c2/c25d40aa53d75d427be961b299599ac2 new file mode 100644 index 0000000..5d66413 Binary files /dev/null and b/Library/Artifacts/c2/c25d40aa53d75d427be961b299599ac2 differ diff --git a/Library/Artifacts/c2/c280ef53536efb0ec70d666cfb57888f b/Library/Artifacts/c2/c280ef53536efb0ec70d666cfb57888f new file mode 100644 index 0000000..e658a36 Binary files /dev/null and b/Library/Artifacts/c2/c280ef53536efb0ec70d666cfb57888f differ diff --git a/Library/Artifacts/c2/c288468df3ad9c92e3c42033873c586f b/Library/Artifacts/c2/c288468df3ad9c92e3c42033873c586f new file mode 100644 index 0000000..706f843 Binary files /dev/null and b/Library/Artifacts/c2/c288468df3ad9c92e3c42033873c586f differ diff --git a/Library/Artifacts/c2/c2958ac0dae99c60e1bea2630023ea8c b/Library/Artifacts/c2/c2958ac0dae99c60e1bea2630023ea8c new file mode 100644 index 0000000..ccdae08 Binary files /dev/null and b/Library/Artifacts/c2/c2958ac0dae99c60e1bea2630023ea8c differ diff --git a/Library/Artifacts/c2/c2d759d97107fac8e629836eeac0a26a b/Library/Artifacts/c2/c2d759d97107fac8e629836eeac0a26a new file mode 100644 index 0000000..83fdfe6 Binary files /dev/null and b/Library/Artifacts/c2/c2d759d97107fac8e629836eeac0a26a differ diff --git a/Library/Artifacts/c2/c2d99e99f8a5d94b4fb68bbbee87f1dc b/Library/Artifacts/c2/c2d99e99f8a5d94b4fb68bbbee87f1dc new file mode 100644 index 0000000..26c451d Binary files /dev/null and b/Library/Artifacts/c2/c2d99e99f8a5d94b4fb68bbbee87f1dc differ diff --git a/Library/Artifacts/c3/c3af1140aab68c8ee7f5ea4e852941d4 b/Library/Artifacts/c3/c3af1140aab68c8ee7f5ea4e852941d4 new file mode 100644 index 0000000..66e0922 Binary files /dev/null and b/Library/Artifacts/c3/c3af1140aab68c8ee7f5ea4e852941d4 differ diff --git a/Library/Artifacts/c3/c3ba8ef07cf814ccfc3e7e1164940819 b/Library/Artifacts/c3/c3ba8ef07cf814ccfc3e7e1164940819 new file mode 100644 index 0000000..0b39b20 Binary files /dev/null and b/Library/Artifacts/c3/c3ba8ef07cf814ccfc3e7e1164940819 differ diff --git a/Library/Artifacts/c4/c403afe8b8ed5ea21907dd48527445d2 b/Library/Artifacts/c4/c403afe8b8ed5ea21907dd48527445d2 new file mode 100644 index 0000000..bedae97 Binary files /dev/null and b/Library/Artifacts/c4/c403afe8b8ed5ea21907dd48527445d2 differ diff --git a/Library/Artifacts/c4/c40b9ab794fd3e2e26302c8e547e6fe0 b/Library/Artifacts/c4/c40b9ab794fd3e2e26302c8e547e6fe0 new file mode 100644 index 0000000..99c4034 Binary files /dev/null and b/Library/Artifacts/c4/c40b9ab794fd3e2e26302c8e547e6fe0 differ diff --git a/Library/Artifacts/c4/c4213815aee509acb982a1d404f879c4 b/Library/Artifacts/c4/c4213815aee509acb982a1d404f879c4 new file mode 100644 index 0000000..81122e6 Binary files /dev/null and b/Library/Artifacts/c4/c4213815aee509acb982a1d404f879c4 differ diff --git a/Library/Artifacts/c4/c4239e6b4cbce6cb9b40937e5f999d7f b/Library/Artifacts/c4/c4239e6b4cbce6cb9b40937e5f999d7f new file mode 100644 index 0000000..84a3895 Binary files /dev/null and b/Library/Artifacts/c4/c4239e6b4cbce6cb9b40937e5f999d7f differ diff --git a/Library/Artifacts/c4/c445d040cfe1c1f6c088cad69d4fcd4f b/Library/Artifacts/c4/c445d040cfe1c1f6c088cad69d4fcd4f new file mode 100644 index 0000000..5da5782 Binary files /dev/null and b/Library/Artifacts/c4/c445d040cfe1c1f6c088cad69d4fcd4f differ diff --git a/Library/Artifacts/c4/c45fe0abd33d44a029a77bff85919fb0 b/Library/Artifacts/c4/c45fe0abd33d44a029a77bff85919fb0 new file mode 100644 index 0000000..c8e460f Binary files /dev/null and b/Library/Artifacts/c4/c45fe0abd33d44a029a77bff85919fb0 differ diff --git a/Library/Artifacts/c4/c47c7180c04ec7b1c4f66beaca64ef59 b/Library/Artifacts/c4/c47c7180c04ec7b1c4f66beaca64ef59 new file mode 100644 index 0000000..cf11b79 Binary files /dev/null and b/Library/Artifacts/c4/c47c7180c04ec7b1c4f66beaca64ef59 differ diff --git a/Library/Artifacts/c4/c4b76feedf7786114f0b706635195371 b/Library/Artifacts/c4/c4b76feedf7786114f0b706635195371 new file mode 100644 index 0000000..3e289f3 Binary files /dev/null and b/Library/Artifacts/c4/c4b76feedf7786114f0b706635195371 differ diff --git a/Library/Artifacts/c4/c4c031adfb6ae3972a64cfc7d0d6c6ab b/Library/Artifacts/c4/c4c031adfb6ae3972a64cfc7d0d6c6ab new file mode 100644 index 0000000..a6ff0e0 Binary files /dev/null and b/Library/Artifacts/c4/c4c031adfb6ae3972a64cfc7d0d6c6ab differ diff --git a/Library/Artifacts/c4/c4d2355281a9f58e213e306546027c1d b/Library/Artifacts/c4/c4d2355281a9f58e213e306546027c1d new file mode 100644 index 0000000..318e070 Binary files /dev/null and b/Library/Artifacts/c4/c4d2355281a9f58e213e306546027c1d differ diff --git a/Library/Artifacts/c4/c4dede6665f81bf4318252b4b9a1f4b7 b/Library/Artifacts/c4/c4dede6665f81bf4318252b4b9a1f4b7 new file mode 100644 index 0000000..1ba8c4c Binary files /dev/null and b/Library/Artifacts/c4/c4dede6665f81bf4318252b4b9a1f4b7 differ diff --git a/Library/Artifacts/c4/c4e2403273a5f505b39ebdc93f25634b b/Library/Artifacts/c4/c4e2403273a5f505b39ebdc93f25634b new file mode 100644 index 0000000..00716a4 Binary files /dev/null and b/Library/Artifacts/c4/c4e2403273a5f505b39ebdc93f25634b differ diff --git a/Library/Artifacts/c4/c4f00870f74854c20ab247fc0a0321ed b/Library/Artifacts/c4/c4f00870f74854c20ab247fc0a0321ed new file mode 100644 index 0000000..ff9cd53 Binary files /dev/null and b/Library/Artifacts/c4/c4f00870f74854c20ab247fc0a0321ed differ diff --git a/Library/Artifacts/c5/c516f75c2cd4f581b4d73f3329b1bda4 b/Library/Artifacts/c5/c516f75c2cd4f581b4d73f3329b1bda4 new file mode 100644 index 0000000..ab7a214 Binary files /dev/null and b/Library/Artifacts/c5/c516f75c2cd4f581b4d73f3329b1bda4 differ diff --git a/Library/Artifacts/c5/c5c0a8ddfe92a93198578c0419140148 b/Library/Artifacts/c5/c5c0a8ddfe92a93198578c0419140148 new file mode 100644 index 0000000..2751c5c Binary files /dev/null and b/Library/Artifacts/c5/c5c0a8ddfe92a93198578c0419140148 differ diff --git a/Library/Artifacts/c5/c5e47458ffe48ba4318fa66fc64fdf1a b/Library/Artifacts/c5/c5e47458ffe48ba4318fa66fc64fdf1a new file mode 100644 index 0000000..f8acb3f Binary files /dev/null and b/Library/Artifacts/c5/c5e47458ffe48ba4318fa66fc64fdf1a differ diff --git a/Library/Artifacts/c5/c5ef4406066fa155df064ba50454a72b b/Library/Artifacts/c5/c5ef4406066fa155df064ba50454a72b new file mode 100644 index 0000000..f98fbc8 Binary files /dev/null and b/Library/Artifacts/c5/c5ef4406066fa155df064ba50454a72b differ diff --git a/Library/Artifacts/c5/c5f96409b5fd0f3c92343b3122b5f111 b/Library/Artifacts/c5/c5f96409b5fd0f3c92343b3122b5f111 new file mode 100644 index 0000000..3c7d27b Binary files /dev/null and b/Library/Artifacts/c5/c5f96409b5fd0f3c92343b3122b5f111 differ diff --git a/Library/Artifacts/c6/c65a4453ee4799328a83abb3f218ab63 b/Library/Artifacts/c6/c65a4453ee4799328a83abb3f218ab63 new file mode 100644 index 0000000..542f921 Binary files /dev/null and b/Library/Artifacts/c6/c65a4453ee4799328a83abb3f218ab63 differ diff --git a/Library/Artifacts/c6/c675417799691275f1e93bfa48836e0e b/Library/Artifacts/c6/c675417799691275f1e93bfa48836e0e new file mode 100644 index 0000000..0efb10e Binary files /dev/null and b/Library/Artifacts/c6/c675417799691275f1e93bfa48836e0e differ diff --git a/Library/Artifacts/c6/c6a32356b2483e8cdacf0497356b1d76 b/Library/Artifacts/c6/c6a32356b2483e8cdacf0497356b1d76 new file mode 100644 index 0000000..aa1d5f8 Binary files /dev/null and b/Library/Artifacts/c6/c6a32356b2483e8cdacf0497356b1d76 differ diff --git a/Library/Artifacts/c6/c6c5da05174896636c766f6cda02d4cd b/Library/Artifacts/c6/c6c5da05174896636c766f6cda02d4cd new file mode 100644 index 0000000..3918f15 Binary files /dev/null and b/Library/Artifacts/c6/c6c5da05174896636c766f6cda02d4cd differ diff --git a/Library/Artifacts/c7/c74efdbe1c8a0289aeec2abfb631a05e b/Library/Artifacts/c7/c74efdbe1c8a0289aeec2abfb631a05e new file mode 100644 index 0000000..b6a2593 Binary files /dev/null and b/Library/Artifacts/c7/c74efdbe1c8a0289aeec2abfb631a05e differ diff --git a/Library/Artifacts/c7/c7b20fd442f5d0beaab4aa1592abb26a b/Library/Artifacts/c7/c7b20fd442f5d0beaab4aa1592abb26a new file mode 100644 index 0000000..2f6ee5b Binary files /dev/null and b/Library/Artifacts/c7/c7b20fd442f5d0beaab4aa1592abb26a differ diff --git a/Library/Artifacts/c7/c7b9784a93b4ba12d2958fa5b6e1f2a4 b/Library/Artifacts/c7/c7b9784a93b4ba12d2958fa5b6e1f2a4 new file mode 100644 index 0000000..2301693 Binary files /dev/null and b/Library/Artifacts/c7/c7b9784a93b4ba12d2958fa5b6e1f2a4 differ diff --git a/Library/Artifacts/c7/c7e0a3e486f111229ede597eb4a09ef3 b/Library/Artifacts/c7/c7e0a3e486f111229ede597eb4a09ef3 new file mode 100644 index 0000000..34432e9 Binary files /dev/null and b/Library/Artifacts/c7/c7e0a3e486f111229ede597eb4a09ef3 differ diff --git a/Library/Artifacts/c8/c8248da421fbb59ca32014a1b0ecae67 b/Library/Artifacts/c8/c8248da421fbb59ca32014a1b0ecae67 new file mode 100644 index 0000000..cdf3840 Binary files /dev/null and b/Library/Artifacts/c8/c8248da421fbb59ca32014a1b0ecae67 differ diff --git a/Library/Artifacts/c8/c8377849addd8ed4928d9d56c9948379 b/Library/Artifacts/c8/c8377849addd8ed4928d9d56c9948379 new file mode 100644 index 0000000..8381fee Binary files /dev/null and b/Library/Artifacts/c8/c8377849addd8ed4928d9d56c9948379 differ diff --git a/Library/Artifacts/c8/c85185b7f98b211e643173cd3e330809 b/Library/Artifacts/c8/c85185b7f98b211e643173cd3e330809 new file mode 100644 index 0000000..5b0a4ee Binary files /dev/null and b/Library/Artifacts/c8/c85185b7f98b211e643173cd3e330809 differ diff --git a/Library/Artifacts/c8/c88a737a9bdd05281bfe71bcb0e372ee b/Library/Artifacts/c8/c88a737a9bdd05281bfe71bcb0e372ee new file mode 100644 index 0000000..547ec0e Binary files /dev/null and b/Library/Artifacts/c8/c88a737a9bdd05281bfe71bcb0e372ee differ diff --git a/Library/Artifacts/c8/c89212d8c43b2b459d9707566203c3da b/Library/Artifacts/c8/c89212d8c43b2b459d9707566203c3da new file mode 100644 index 0000000..d6bf3e3 Binary files /dev/null and b/Library/Artifacts/c8/c89212d8c43b2b459d9707566203c3da differ diff --git a/Library/Artifacts/c8/c8a1c7b5c8495c21db74cd739fcbbdb2 b/Library/Artifacts/c8/c8a1c7b5c8495c21db74cd739fcbbdb2 new file mode 100644 index 0000000..dfd9ed8 Binary files /dev/null and b/Library/Artifacts/c8/c8a1c7b5c8495c21db74cd739fcbbdb2 differ diff --git a/Library/Artifacts/c8/c8a2249caddc210c5c3339be0698cb5b b/Library/Artifacts/c8/c8a2249caddc210c5c3339be0698cb5b new file mode 100644 index 0000000..67ae28c Binary files /dev/null and b/Library/Artifacts/c8/c8a2249caddc210c5c3339be0698cb5b differ diff --git a/Library/Artifacts/c9/c90b781a10be3a15cd1f90e9c8c70ad3 b/Library/Artifacts/c9/c90b781a10be3a15cd1f90e9c8c70ad3 new file mode 100644 index 0000000..3676931 Binary files /dev/null and b/Library/Artifacts/c9/c90b781a10be3a15cd1f90e9c8c70ad3 differ diff --git a/Library/Artifacts/c9/c9555d518cccd471153d86583e048c07 b/Library/Artifacts/c9/c9555d518cccd471153d86583e048c07 new file mode 100644 index 0000000..b9295bf Binary files /dev/null and b/Library/Artifacts/c9/c9555d518cccd471153d86583e048c07 differ diff --git a/Library/Artifacts/c9/c9aee2450e8e1ea2973f3ab704ba8da8 b/Library/Artifacts/c9/c9aee2450e8e1ea2973f3ab704ba8da8 new file mode 100644 index 0000000..adfb313 Binary files /dev/null and b/Library/Artifacts/c9/c9aee2450e8e1ea2973f3ab704ba8da8 differ diff --git a/Library/Artifacts/c9/c9c676058b9d43b8d2704601c68cf21a b/Library/Artifacts/c9/c9c676058b9d43b8d2704601c68cf21a new file mode 100644 index 0000000..68daecd Binary files /dev/null and b/Library/Artifacts/c9/c9c676058b9d43b8d2704601c68cf21a differ diff --git a/Library/Artifacts/c9/c9e237319b48e61b86ff8132a3f97e1d b/Library/Artifacts/c9/c9e237319b48e61b86ff8132a3f97e1d new file mode 100644 index 0000000..95114b6 Binary files /dev/null and b/Library/Artifacts/c9/c9e237319b48e61b86ff8132a3f97e1d differ diff --git a/Library/Artifacts/c9/c9e787721ded611279286e6025384901 b/Library/Artifacts/c9/c9e787721ded611279286e6025384901 new file mode 100644 index 0000000..acfa7ab Binary files /dev/null and b/Library/Artifacts/c9/c9e787721ded611279286e6025384901 differ diff --git a/Library/Artifacts/ca/ca4de5b7044b4279c5dfdf824fcd4218 b/Library/Artifacts/ca/ca4de5b7044b4279c5dfdf824fcd4218 new file mode 100644 index 0000000..7d80c6a Binary files /dev/null and b/Library/Artifacts/ca/ca4de5b7044b4279c5dfdf824fcd4218 differ diff --git a/Library/Artifacts/ca/ca868d1985c84418faf6e68ae469a686 b/Library/Artifacts/ca/ca868d1985c84418faf6e68ae469a686 new file mode 100644 index 0000000..0d12652 Binary files /dev/null and b/Library/Artifacts/ca/ca868d1985c84418faf6e68ae469a686 differ diff --git a/Library/Artifacts/ca/cae9a67064f8cb226c41d5a1eaa7b882 b/Library/Artifacts/ca/cae9a67064f8cb226c41d5a1eaa7b882 new file mode 100644 index 0000000..11b55b6 Binary files /dev/null and b/Library/Artifacts/ca/cae9a67064f8cb226c41d5a1eaa7b882 differ diff --git a/Library/Artifacts/cb/cb0da58eae538c5ec3e70dbb6c733363 b/Library/Artifacts/cb/cb0da58eae538c5ec3e70dbb6c733363 new file mode 100644 index 0000000..79a0c5b Binary files /dev/null and b/Library/Artifacts/cb/cb0da58eae538c5ec3e70dbb6c733363 differ diff --git a/Library/Artifacts/cb/cb5dd9756fdf8998465b25018ba3ec83 b/Library/Artifacts/cb/cb5dd9756fdf8998465b25018ba3ec83 new file mode 100644 index 0000000..15bc054 Binary files /dev/null and b/Library/Artifacts/cb/cb5dd9756fdf8998465b25018ba3ec83 differ diff --git a/Library/Artifacts/cb/cb8856fddd0f6f637f24b1238c65e354 b/Library/Artifacts/cb/cb8856fddd0f6f637f24b1238c65e354 new file mode 100644 index 0000000..9285e90 Binary files /dev/null and b/Library/Artifacts/cb/cb8856fddd0f6f637f24b1238c65e354 differ diff --git a/Library/Artifacts/cb/cb8c48ecb6ff36e31f577f04eb18fe67 b/Library/Artifacts/cb/cb8c48ecb6ff36e31f577f04eb18fe67 new file mode 100644 index 0000000..26804c1 Binary files /dev/null and b/Library/Artifacts/cb/cb8c48ecb6ff36e31f577f04eb18fe67 differ diff --git a/Library/Artifacts/cb/cb9382c04c0f8d397c0c9786e33c9048 b/Library/Artifacts/cb/cb9382c04c0f8d397c0c9786e33c9048 new file mode 100644 index 0000000..b6f34ec Binary files /dev/null and b/Library/Artifacts/cb/cb9382c04c0f8d397c0c9786e33c9048 differ diff --git a/Library/Artifacts/cb/cbae3560326b96c5ef1e7dd3540a7b94 b/Library/Artifacts/cb/cbae3560326b96c5ef1e7dd3540a7b94 new file mode 100644 index 0000000..ff53521 Binary files /dev/null and b/Library/Artifacts/cb/cbae3560326b96c5ef1e7dd3540a7b94 differ diff --git a/Library/Artifacts/cc/cc2951ba97366949f9bf49d70b47f2e4 b/Library/Artifacts/cc/cc2951ba97366949f9bf49d70b47f2e4 new file mode 100644 index 0000000..1f9d9d1 Binary files /dev/null and b/Library/Artifacts/cc/cc2951ba97366949f9bf49d70b47f2e4 differ diff --git a/Library/Artifacts/cc/cc5188f5cebb7a41dcb7ea698d7cf2e4 b/Library/Artifacts/cc/cc5188f5cebb7a41dcb7ea698d7cf2e4 new file mode 100644 index 0000000..e0b17fb Binary files /dev/null and b/Library/Artifacts/cc/cc5188f5cebb7a41dcb7ea698d7cf2e4 differ diff --git a/Library/Artifacts/cc/cc7d8979d89051c85a368d74870b60a4 b/Library/Artifacts/cc/cc7d8979d89051c85a368d74870b60a4 new file mode 100644 index 0000000..dc5aba7 Binary files /dev/null and b/Library/Artifacts/cc/cc7d8979d89051c85a368d74870b60a4 differ diff --git a/Library/Artifacts/cc/cc9322d99bb9b592ae8e79343d487d69 b/Library/Artifacts/cc/cc9322d99bb9b592ae8e79343d487d69 new file mode 100644 index 0000000..72c6c93 Binary files /dev/null and b/Library/Artifacts/cc/cc9322d99bb9b592ae8e79343d487d69 differ diff --git a/Library/Artifacts/cc/cca7317a6755216cc90c25f504d968bf b/Library/Artifacts/cc/cca7317a6755216cc90c25f504d968bf new file mode 100644 index 0000000..953789f Binary files /dev/null and b/Library/Artifacts/cc/cca7317a6755216cc90c25f504d968bf differ diff --git a/Library/Artifacts/cc/cca81affe2b310d6deb2f7a3155800f5 b/Library/Artifacts/cc/cca81affe2b310d6deb2f7a3155800f5 new file mode 100644 index 0000000..3d79e68 Binary files /dev/null and b/Library/Artifacts/cc/cca81affe2b310d6deb2f7a3155800f5 differ diff --git a/Library/Artifacts/cc/ccb92074633786cef5dceb21ceacbd9e b/Library/Artifacts/cc/ccb92074633786cef5dceb21ceacbd9e new file mode 100644 index 0000000..3a33a68 Binary files /dev/null and b/Library/Artifacts/cc/ccb92074633786cef5dceb21ceacbd9e differ diff --git a/Library/Artifacts/cc/ccef22031d7753f0ce8ed5ed976ec45d b/Library/Artifacts/cc/ccef22031d7753f0ce8ed5ed976ec45d new file mode 100644 index 0000000..00ab637 Binary files /dev/null and b/Library/Artifacts/cc/ccef22031d7753f0ce8ed5ed976ec45d differ diff --git a/Library/Artifacts/cd/cd02e3a54e26683dd58600cbef4f77c9 b/Library/Artifacts/cd/cd02e3a54e26683dd58600cbef4f77c9 new file mode 100644 index 0000000..1478a08 Binary files /dev/null and b/Library/Artifacts/cd/cd02e3a54e26683dd58600cbef4f77c9 differ diff --git a/Library/Artifacts/cd/cd09abf6fedca002279dd92b45c97508 b/Library/Artifacts/cd/cd09abf6fedca002279dd92b45c97508 new file mode 100644 index 0000000..dba23cb Binary files /dev/null and b/Library/Artifacts/cd/cd09abf6fedca002279dd92b45c97508 differ diff --git a/Library/Artifacts/cd/cd17dbc07ce039ce531bdde9f50c37c7 b/Library/Artifacts/cd/cd17dbc07ce039ce531bdde9f50c37c7 new file mode 100644 index 0000000..3d5b40e Binary files /dev/null and b/Library/Artifacts/cd/cd17dbc07ce039ce531bdde9f50c37c7 differ diff --git a/Library/Artifacts/cd/cd17f307321fd295b10dc888ddafed29 b/Library/Artifacts/cd/cd17f307321fd295b10dc888ddafed29 new file mode 100644 index 0000000..11354a4 Binary files /dev/null and b/Library/Artifacts/cd/cd17f307321fd295b10dc888ddafed29 differ diff --git a/Library/Artifacts/cd/cd48ad71cd577d4a458b0263c7a59306 b/Library/Artifacts/cd/cd48ad71cd577d4a458b0263c7a59306 new file mode 100644 index 0000000..9a455ec Binary files /dev/null and b/Library/Artifacts/cd/cd48ad71cd577d4a458b0263c7a59306 differ diff --git a/Library/Artifacts/cd/cd4cf463ed04c4433f508368ba9d9b34 b/Library/Artifacts/cd/cd4cf463ed04c4433f508368ba9d9b34 new file mode 100644 index 0000000..816229e Binary files /dev/null and b/Library/Artifacts/cd/cd4cf463ed04c4433f508368ba9d9b34 differ diff --git a/Library/Artifacts/cd/cdd06ca54553a0cbe49f4fb2f15a25d3 b/Library/Artifacts/cd/cdd06ca54553a0cbe49f4fb2f15a25d3 new file mode 100644 index 0000000..d8731b7 Binary files /dev/null and b/Library/Artifacts/cd/cdd06ca54553a0cbe49f4fb2f15a25d3 differ diff --git a/Library/Artifacts/cd/cde600cb1006e8b1f5b104c61d1e27e9 b/Library/Artifacts/cd/cde600cb1006e8b1f5b104c61d1e27e9 new file mode 100644 index 0000000..0fe8a93 Binary files /dev/null and b/Library/Artifacts/cd/cde600cb1006e8b1f5b104c61d1e27e9 differ diff --git a/Library/Artifacts/cd/cdf16e277cac3e4124865031f3ba973b b/Library/Artifacts/cd/cdf16e277cac3e4124865031f3ba973b new file mode 100644 index 0000000..baf0a98 Binary files /dev/null and b/Library/Artifacts/cd/cdf16e277cac3e4124865031f3ba973b differ diff --git a/Library/Artifacts/ce/ce00fbfd073665b7de72972046a5f832 b/Library/Artifacts/ce/ce00fbfd073665b7de72972046a5f832 new file mode 100644 index 0000000..041275c Binary files /dev/null and b/Library/Artifacts/ce/ce00fbfd073665b7de72972046a5f832 differ diff --git a/Library/Artifacts/ce/cea46d380acddf5912e80b083e1298bb b/Library/Artifacts/ce/cea46d380acddf5912e80b083e1298bb new file mode 100644 index 0000000..106cb0b Binary files /dev/null and b/Library/Artifacts/ce/cea46d380acddf5912e80b083e1298bb differ diff --git a/Library/Artifacts/ce/ceb27ce710cf14b9febe8df1554151dd b/Library/Artifacts/ce/ceb27ce710cf14b9febe8df1554151dd new file mode 100644 index 0000000..a3b3800 Binary files /dev/null and b/Library/Artifacts/ce/ceb27ce710cf14b9febe8df1554151dd differ diff --git a/Library/Artifacts/ce/cec8805ea0721ca87b030ad6e9e4e653 b/Library/Artifacts/ce/cec8805ea0721ca87b030ad6e9e4e653 new file mode 100644 index 0000000..f657ccc Binary files /dev/null and b/Library/Artifacts/ce/cec8805ea0721ca87b030ad6e9e4e653 differ diff --git a/Library/Artifacts/ce/cee6c31082cae8646122afec98bda5b1 b/Library/Artifacts/ce/cee6c31082cae8646122afec98bda5b1 new file mode 100644 index 0000000..75432df Binary files /dev/null and b/Library/Artifacts/ce/cee6c31082cae8646122afec98bda5b1 differ diff --git a/Library/Artifacts/cf/cf4d8c398c8135ccd6a5235a7910f457 b/Library/Artifacts/cf/cf4d8c398c8135ccd6a5235a7910f457 new file mode 100644 index 0000000..1ce0c85 Binary files /dev/null and b/Library/Artifacts/cf/cf4d8c398c8135ccd6a5235a7910f457 differ diff --git a/Library/Artifacts/cf/cfafbfecc495b8494e0f81f6840bd6d0 b/Library/Artifacts/cf/cfafbfecc495b8494e0f81f6840bd6d0 new file mode 100644 index 0000000..82f7891 Binary files /dev/null and b/Library/Artifacts/cf/cfafbfecc495b8494e0f81f6840bd6d0 differ diff --git a/Library/Artifacts/d0/d0526ad96371206ff9b1b6a06d6e9028 b/Library/Artifacts/d0/d0526ad96371206ff9b1b6a06d6e9028 new file mode 100644 index 0000000..77b8060 Binary files /dev/null and b/Library/Artifacts/d0/d0526ad96371206ff9b1b6a06d6e9028 differ diff --git a/Library/Artifacts/d0/d0c0fd0154cf9f4b8b4139912e01cc99 b/Library/Artifacts/d0/d0c0fd0154cf9f4b8b4139912e01cc99 new file mode 100644 index 0000000..a9a325c Binary files /dev/null and b/Library/Artifacts/d0/d0c0fd0154cf9f4b8b4139912e01cc99 differ diff --git a/Library/Artifacts/d0/d0e696c5568a31366d1875e8bb59c1f1 b/Library/Artifacts/d0/d0e696c5568a31366d1875e8bb59c1f1 new file mode 100644 index 0000000..a11df61 Binary files /dev/null and b/Library/Artifacts/d0/d0e696c5568a31366d1875e8bb59c1f1 differ diff --git a/Library/Artifacts/d0/d0f6bc32179709481774e859625e45e2 b/Library/Artifacts/d0/d0f6bc32179709481774e859625e45e2 new file mode 100644 index 0000000..58794c9 Binary files /dev/null and b/Library/Artifacts/d0/d0f6bc32179709481774e859625e45e2 differ diff --git a/Library/Artifacts/d0/d0f8009143a3b6cc50799a2803307eb1 b/Library/Artifacts/d0/d0f8009143a3b6cc50799a2803307eb1 new file mode 100644 index 0000000..f21a6c1 Binary files /dev/null and b/Library/Artifacts/d0/d0f8009143a3b6cc50799a2803307eb1 differ diff --git a/Library/Artifacts/d1/d1188f32f8f5016c73f0da90c710627c b/Library/Artifacts/d1/d1188f32f8f5016c73f0da90c710627c new file mode 100644 index 0000000..20ab732 Binary files /dev/null and b/Library/Artifacts/d1/d1188f32f8f5016c73f0da90c710627c differ diff --git a/Library/Artifacts/d1/d119256577cf7cad2a895c84d2819479 b/Library/Artifacts/d1/d119256577cf7cad2a895c84d2819479 new file mode 100644 index 0000000..79be0f6 Binary files /dev/null and b/Library/Artifacts/d1/d119256577cf7cad2a895c84d2819479 differ diff --git a/Library/Artifacts/d1/d138442754e882a3516e083c1713ba79 b/Library/Artifacts/d1/d138442754e882a3516e083c1713ba79 new file mode 100644 index 0000000..24b5f8d Binary files /dev/null and b/Library/Artifacts/d1/d138442754e882a3516e083c1713ba79 differ diff --git a/Library/Artifacts/d1/d15fbecd6f34b5f226133f4e341020ad b/Library/Artifacts/d1/d15fbecd6f34b5f226133f4e341020ad new file mode 100644 index 0000000..6e56d7c Binary files /dev/null and b/Library/Artifacts/d1/d15fbecd6f34b5f226133f4e341020ad differ diff --git a/Library/Artifacts/d2/d2159b9033692f38f394b0a910762c32 b/Library/Artifacts/d2/d2159b9033692f38f394b0a910762c32 new file mode 100644 index 0000000..8518132 Binary files /dev/null and b/Library/Artifacts/d2/d2159b9033692f38f394b0a910762c32 differ diff --git a/Library/Artifacts/d2/d2466661530f464e67b8b5576e2dec15 b/Library/Artifacts/d2/d2466661530f464e67b8b5576e2dec15 new file mode 100644 index 0000000..f36aad0 Binary files /dev/null and b/Library/Artifacts/d2/d2466661530f464e67b8b5576e2dec15 differ diff --git a/Library/Artifacts/d2/d2a7996852b215974a1268132f7d78d9 b/Library/Artifacts/d2/d2a7996852b215974a1268132f7d78d9 new file mode 100644 index 0000000..f8d9e96 Binary files /dev/null and b/Library/Artifacts/d2/d2a7996852b215974a1268132f7d78d9 differ diff --git a/Library/Artifacts/d3/d3396113c33b733c16ed9e6ee59c4b17 b/Library/Artifacts/d3/d3396113c33b733c16ed9e6ee59c4b17 new file mode 100644 index 0000000..3e57146 Binary files /dev/null and b/Library/Artifacts/d3/d3396113c33b733c16ed9e6ee59c4b17 differ diff --git a/Library/Artifacts/d3/d372708d311574e9c8207bcf2fa307aa b/Library/Artifacts/d3/d372708d311574e9c8207bcf2fa307aa new file mode 100644 index 0000000..bb5a612 Binary files /dev/null and b/Library/Artifacts/d3/d372708d311574e9c8207bcf2fa307aa differ diff --git a/Library/Artifacts/d3/d37583263881840fe5a41f44ff2e192e b/Library/Artifacts/d3/d37583263881840fe5a41f44ff2e192e new file mode 100644 index 0000000..cf1103a Binary files /dev/null and b/Library/Artifacts/d3/d37583263881840fe5a41f44ff2e192e differ diff --git a/Library/Artifacts/d4/d40f57679420e867dc83ca5f60a59466 b/Library/Artifacts/d4/d40f57679420e867dc83ca5f60a59466 new file mode 100644 index 0000000..75ec283 Binary files /dev/null and b/Library/Artifacts/d4/d40f57679420e867dc83ca5f60a59466 differ diff --git a/Library/Artifacts/d4/d4301541567e392908f4fb9cf8abdfa0 b/Library/Artifacts/d4/d4301541567e392908f4fb9cf8abdfa0 new file mode 100644 index 0000000..da09190 Binary files /dev/null and b/Library/Artifacts/d4/d4301541567e392908f4fb9cf8abdfa0 differ diff --git a/Library/Artifacts/d4/d439ad08b576d4fa29fd950a64bbcf3f b/Library/Artifacts/d4/d439ad08b576d4fa29fd950a64bbcf3f new file mode 100644 index 0000000..f718826 Binary files /dev/null and b/Library/Artifacts/d4/d439ad08b576d4fa29fd950a64bbcf3f differ diff --git a/Library/Artifacts/d4/d49e6642f4f68eac410099efeb257722 b/Library/Artifacts/d4/d49e6642f4f68eac410099efeb257722 new file mode 100644 index 0000000..808a722 Binary files /dev/null and b/Library/Artifacts/d4/d49e6642f4f68eac410099efeb257722 differ diff --git a/Library/Artifacts/d4/d4b1ab398c5f6953bb3f64ed5f8958bc b/Library/Artifacts/d4/d4b1ab398c5f6953bb3f64ed5f8958bc new file mode 100644 index 0000000..8313f6a Binary files /dev/null and b/Library/Artifacts/d4/d4b1ab398c5f6953bb3f64ed5f8958bc differ diff --git a/Library/Artifacts/d4/d4ce3846ae486afa1e42714b97352d48 b/Library/Artifacts/d4/d4ce3846ae486afa1e42714b97352d48 new file mode 100644 index 0000000..eb60bbe Binary files /dev/null and b/Library/Artifacts/d4/d4ce3846ae486afa1e42714b97352d48 differ diff --git a/Library/Artifacts/d4/d4e2547b82b32d8396f1c6ccab964ae8 b/Library/Artifacts/d4/d4e2547b82b32d8396f1c6ccab964ae8 new file mode 100644 index 0000000..ac1391f Binary files /dev/null and b/Library/Artifacts/d4/d4e2547b82b32d8396f1c6ccab964ae8 differ diff --git a/Library/Artifacts/d5/d56334dd996b19dd072507994ea0a6a9 b/Library/Artifacts/d5/d56334dd996b19dd072507994ea0a6a9 new file mode 100644 index 0000000..fbfeff5 Binary files /dev/null and b/Library/Artifacts/d5/d56334dd996b19dd072507994ea0a6a9 differ diff --git a/Library/Artifacts/d5/d57c293529371c810c7030973994d948 b/Library/Artifacts/d5/d57c293529371c810c7030973994d948 new file mode 100644 index 0000000..d4eb173 Binary files /dev/null and b/Library/Artifacts/d5/d57c293529371c810c7030973994d948 differ diff --git a/Library/Artifacts/d5/d5cd18b888f9eada307d0b83e1f244cf b/Library/Artifacts/d5/d5cd18b888f9eada307d0b83e1f244cf new file mode 100644 index 0000000..f5c1d37 Binary files /dev/null and b/Library/Artifacts/d5/d5cd18b888f9eada307d0b83e1f244cf differ diff --git a/Library/Artifacts/d5/d5d22c15fc7ffedadcf81ff618adb2f4 b/Library/Artifacts/d5/d5d22c15fc7ffedadcf81ff618adb2f4 new file mode 100644 index 0000000..f8b87be Binary files /dev/null and b/Library/Artifacts/d5/d5d22c15fc7ffedadcf81ff618adb2f4 differ diff --git a/Library/Artifacts/d6/d60270576172625e2e048e46ca449016 b/Library/Artifacts/d6/d60270576172625e2e048e46ca449016 new file mode 100644 index 0000000..3effd83 Binary files /dev/null and b/Library/Artifacts/d6/d60270576172625e2e048e46ca449016 differ diff --git a/Library/Artifacts/d6/d682b7596cbda0b38927733530bc4c6f b/Library/Artifacts/d6/d682b7596cbda0b38927733530bc4c6f new file mode 100644 index 0000000..76b8775 Binary files /dev/null and b/Library/Artifacts/d6/d682b7596cbda0b38927733530bc4c6f differ diff --git a/Library/Artifacts/d6/d6a12c0555571313f96d467b60cf7bc4 b/Library/Artifacts/d6/d6a12c0555571313f96d467b60cf7bc4 new file mode 100644 index 0000000..5fbdff4 Binary files /dev/null and b/Library/Artifacts/d6/d6a12c0555571313f96d467b60cf7bc4 differ diff --git a/Library/Artifacts/d6/d6e396c1a96d83e1a449508eb8684514 b/Library/Artifacts/d6/d6e396c1a96d83e1a449508eb8684514 new file mode 100644 index 0000000..6107ef3 Binary files /dev/null and b/Library/Artifacts/d6/d6e396c1a96d83e1a449508eb8684514 differ diff --git a/Library/Artifacts/d6/d6e5e9dac86d157abdbd16d7168e2d8b b/Library/Artifacts/d6/d6e5e9dac86d157abdbd16d7168e2d8b new file mode 100644 index 0000000..d9b40f9 Binary files /dev/null and b/Library/Artifacts/d6/d6e5e9dac86d157abdbd16d7168e2d8b differ diff --git a/Library/Artifacts/d6/d6f6336441cae7a964ec56ec04a6ed4e b/Library/Artifacts/d6/d6f6336441cae7a964ec56ec04a6ed4e new file mode 100644 index 0000000..4279ee2 Binary files /dev/null and b/Library/Artifacts/d6/d6f6336441cae7a964ec56ec04a6ed4e differ diff --git a/Library/Artifacts/d7/d713e8814597bec52676879fab37b720 b/Library/Artifacts/d7/d713e8814597bec52676879fab37b720 new file mode 100644 index 0000000..ea6d7b8 Binary files /dev/null and b/Library/Artifacts/d7/d713e8814597bec52676879fab37b720 differ diff --git a/Library/Artifacts/d7/d7686d13fc24aa9db0698a2f644f9509 b/Library/Artifacts/d7/d7686d13fc24aa9db0698a2f644f9509 new file mode 100644 index 0000000..d71bbc9 Binary files /dev/null and b/Library/Artifacts/d7/d7686d13fc24aa9db0698a2f644f9509 differ diff --git a/Library/Artifacts/d7/d78d790320909c1bad434396febf9aab b/Library/Artifacts/d7/d78d790320909c1bad434396febf9aab new file mode 100644 index 0000000..0e5ee63 Binary files /dev/null and b/Library/Artifacts/d7/d78d790320909c1bad434396febf9aab differ diff --git a/Library/Artifacts/d7/d79cebd4ad27ad5d9602db1550d652ba b/Library/Artifacts/d7/d79cebd4ad27ad5d9602db1550d652ba new file mode 100644 index 0000000..a75d7b5 Binary files /dev/null and b/Library/Artifacts/d7/d79cebd4ad27ad5d9602db1550d652ba differ diff --git a/Library/Artifacts/d7/d7f63fcd72d39a0e14bab4fadd6d0bfb b/Library/Artifacts/d7/d7f63fcd72d39a0e14bab4fadd6d0bfb new file mode 100644 index 0000000..5664832 Binary files /dev/null and b/Library/Artifacts/d7/d7f63fcd72d39a0e14bab4fadd6d0bfb differ diff --git a/Library/Artifacts/d8/d809c4801360de223762f6d5ad4f4879 b/Library/Artifacts/d8/d809c4801360de223762f6d5ad4f4879 new file mode 100644 index 0000000..6cf765c Binary files /dev/null and b/Library/Artifacts/d8/d809c4801360de223762f6d5ad4f4879 differ diff --git a/Library/Artifacts/d8/d827c0b1a27120d2ae31e99da06c183c b/Library/Artifacts/d8/d827c0b1a27120d2ae31e99da06c183c new file mode 100644 index 0000000..a920ace Binary files /dev/null and b/Library/Artifacts/d8/d827c0b1a27120d2ae31e99da06c183c differ diff --git a/Library/Artifacts/d8/d82813bbd61ef92cb58acaf893357a39 b/Library/Artifacts/d8/d82813bbd61ef92cb58acaf893357a39 new file mode 100644 index 0000000..e17f0d4 Binary files /dev/null and b/Library/Artifacts/d8/d82813bbd61ef92cb58acaf893357a39 differ diff --git a/Library/Artifacts/d8/d8a5984afe996c91954da8724f5713b9 b/Library/Artifacts/d8/d8a5984afe996c91954da8724f5713b9 new file mode 100644 index 0000000..6030f10 Binary files /dev/null and b/Library/Artifacts/d8/d8a5984afe996c91954da8724f5713b9 differ diff --git a/Library/Artifacts/d9/d914ebc090ffd04d9b9e68134e280633 b/Library/Artifacts/d9/d914ebc090ffd04d9b9e68134e280633 new file mode 100644 index 0000000..8518fdd Binary files /dev/null and b/Library/Artifacts/d9/d914ebc090ffd04d9b9e68134e280633 differ diff --git a/Library/Artifacts/d9/d97e1402057da410b8a24d66779a7500 b/Library/Artifacts/d9/d97e1402057da410b8a24d66779a7500 new file mode 100644 index 0000000..49c517d Binary files /dev/null and b/Library/Artifacts/d9/d97e1402057da410b8a24d66779a7500 differ diff --git a/Library/Artifacts/d9/d99637805c9b6f7be83e8a919c28dc67 b/Library/Artifacts/d9/d99637805c9b6f7be83e8a919c28dc67 new file mode 100644 index 0000000..b44b05c Binary files /dev/null and b/Library/Artifacts/d9/d99637805c9b6f7be83e8a919c28dc67 differ diff --git a/Library/Artifacts/d9/d9ba977bf0c7a271f94ce05f0cddc504 b/Library/Artifacts/d9/d9ba977bf0c7a271f94ce05f0cddc504 new file mode 100644 index 0000000..b820fe8 Binary files /dev/null and b/Library/Artifacts/d9/d9ba977bf0c7a271f94ce05f0cddc504 differ diff --git a/Library/Artifacts/d9/d9c0f490433492e03d94ae02ccd9800a b/Library/Artifacts/d9/d9c0f490433492e03d94ae02ccd9800a new file mode 100644 index 0000000..11f5ecb Binary files /dev/null and b/Library/Artifacts/d9/d9c0f490433492e03d94ae02ccd9800a differ diff --git a/Library/Artifacts/da/da1c0086cb229c89d4574deacfc198d6 b/Library/Artifacts/da/da1c0086cb229c89d4574deacfc198d6 new file mode 100644 index 0000000..fa050e8 Binary files /dev/null and b/Library/Artifacts/da/da1c0086cb229c89d4574deacfc198d6 differ diff --git a/Library/Artifacts/da/da2d23eb774685f982194d6d64c0127d b/Library/Artifacts/da/da2d23eb774685f982194d6d64c0127d new file mode 100644 index 0000000..9b72ce1 Binary files /dev/null and b/Library/Artifacts/da/da2d23eb774685f982194d6d64c0127d differ diff --git a/Library/Artifacts/da/da86d27b5e8deb1460c8cf1610edcc39 b/Library/Artifacts/da/da86d27b5e8deb1460c8cf1610edcc39 new file mode 100644 index 0000000..5b1ea77 Binary files /dev/null and b/Library/Artifacts/da/da86d27b5e8deb1460c8cf1610edcc39 differ diff --git a/Library/Artifacts/da/daa0ea2ff39f6b380596da17d225fd61 b/Library/Artifacts/da/daa0ea2ff39f6b380596da17d225fd61 new file mode 100644 index 0000000..d942cba Binary files /dev/null and b/Library/Artifacts/da/daa0ea2ff39f6b380596da17d225fd61 differ diff --git a/Library/Artifacts/da/dab79ac96246b49286d8a92c01fa5baa b/Library/Artifacts/da/dab79ac96246b49286d8a92c01fa5baa new file mode 100644 index 0000000..b439593 Binary files /dev/null and b/Library/Artifacts/da/dab79ac96246b49286d8a92c01fa5baa differ diff --git a/Library/Artifacts/da/daf37dca5534788dcf79d9d697f7e54b b/Library/Artifacts/da/daf37dca5534788dcf79d9d697f7e54b new file mode 100644 index 0000000..08ded2a Binary files /dev/null and b/Library/Artifacts/da/daf37dca5534788dcf79d9d697f7e54b differ diff --git a/Library/Artifacts/db/db0c92868ce168ac5912d30f1d2fdf88 b/Library/Artifacts/db/db0c92868ce168ac5912d30f1d2fdf88 new file mode 100644 index 0000000..28205c2 Binary files /dev/null and b/Library/Artifacts/db/db0c92868ce168ac5912d30f1d2fdf88 differ diff --git a/Library/Artifacts/db/db3e7628085f3799160cd2b05c743c39 b/Library/Artifacts/db/db3e7628085f3799160cd2b05c743c39 new file mode 100644 index 0000000..4ecf166 Binary files /dev/null and b/Library/Artifacts/db/db3e7628085f3799160cd2b05c743c39 differ diff --git a/Library/Artifacts/db/db44f277b7f3e328efcf1f6cb377bdad b/Library/Artifacts/db/db44f277b7f3e328efcf1f6cb377bdad new file mode 100644 index 0000000..78c6fc8 Binary files /dev/null and b/Library/Artifacts/db/db44f277b7f3e328efcf1f6cb377bdad differ diff --git a/Library/Artifacts/db/db5dcf28173ec141dd8fa57c5f070d2f b/Library/Artifacts/db/db5dcf28173ec141dd8fa57c5f070d2f new file mode 100644 index 0000000..a050d0a Binary files /dev/null and b/Library/Artifacts/db/db5dcf28173ec141dd8fa57c5f070d2f differ diff --git a/Library/Artifacts/db/db6fe11f13ce881b7b3cc558ce5e4804 b/Library/Artifacts/db/db6fe11f13ce881b7b3cc558ce5e4804 new file mode 100644 index 0000000..aa18a6f Binary files /dev/null and b/Library/Artifacts/db/db6fe11f13ce881b7b3cc558ce5e4804 differ diff --git a/Library/Artifacts/db/dbb4a02322cb4710e44a7367ad17b241 b/Library/Artifacts/db/dbb4a02322cb4710e44a7367ad17b241 new file mode 100644 index 0000000..deb5fa1 Binary files /dev/null and b/Library/Artifacts/db/dbb4a02322cb4710e44a7367ad17b241 differ diff --git a/Library/Artifacts/db/dbd6fe679dbc0202b9c3acfca9a4fc5b b/Library/Artifacts/db/dbd6fe679dbc0202b9c3acfca9a4fc5b new file mode 100644 index 0000000..11dcb80 Binary files /dev/null and b/Library/Artifacts/db/dbd6fe679dbc0202b9c3acfca9a4fc5b differ diff --git a/Library/Artifacts/db/dbea5e9afb86dbee9eeded21dbb7ef75 b/Library/Artifacts/db/dbea5e9afb86dbee9eeded21dbb7ef75 new file mode 100644 index 0000000..0f85e0c Binary files /dev/null and b/Library/Artifacts/db/dbea5e9afb86dbee9eeded21dbb7ef75 differ diff --git a/Library/Artifacts/dc/dc153a3a4a254caaed6cc5b505b37234 b/Library/Artifacts/dc/dc153a3a4a254caaed6cc5b505b37234 new file mode 100644 index 0000000..ea4c40c Binary files /dev/null and b/Library/Artifacts/dc/dc153a3a4a254caaed6cc5b505b37234 differ diff --git a/Library/Artifacts/dc/dc1b5146ea6d50ed11cade83d6258c25 b/Library/Artifacts/dc/dc1b5146ea6d50ed11cade83d6258c25 new file mode 100644 index 0000000..f9f43bf Binary files /dev/null and b/Library/Artifacts/dc/dc1b5146ea6d50ed11cade83d6258c25 differ diff --git a/Library/Artifacts/dc/dc35865836b7b59ae5888ed4adfee5e2 b/Library/Artifacts/dc/dc35865836b7b59ae5888ed4adfee5e2 new file mode 100644 index 0000000..54baec1 Binary files /dev/null and b/Library/Artifacts/dc/dc35865836b7b59ae5888ed4adfee5e2 differ diff --git a/Library/Artifacts/dc/dc53024c97c1f4d15b0830663c2677ca b/Library/Artifacts/dc/dc53024c97c1f4d15b0830663c2677ca new file mode 100644 index 0000000..065565d Binary files /dev/null and b/Library/Artifacts/dc/dc53024c97c1f4d15b0830663c2677ca differ diff --git a/Library/Artifacts/dc/dca03a080c479c7defc937b230c47a80 b/Library/Artifacts/dc/dca03a080c479c7defc937b230c47a80 new file mode 100644 index 0000000..f5aa5b0 Binary files /dev/null and b/Library/Artifacts/dc/dca03a080c479c7defc937b230c47a80 differ diff --git a/Library/Artifacts/dc/dca4c2de29598b6ebec5316b25f98ce6 b/Library/Artifacts/dc/dca4c2de29598b6ebec5316b25f98ce6 new file mode 100644 index 0000000..2a4e184 Binary files /dev/null and b/Library/Artifacts/dc/dca4c2de29598b6ebec5316b25f98ce6 differ diff --git a/Library/Artifacts/dc/dcb8562a5c42cdca6e940cc77ee693ce b/Library/Artifacts/dc/dcb8562a5c42cdca6e940cc77ee693ce new file mode 100644 index 0000000..da923cf Binary files /dev/null and b/Library/Artifacts/dc/dcb8562a5c42cdca6e940cc77ee693ce differ diff --git a/Library/Artifacts/dc/dcc7e915b0819b28ba0ed4522a8245c8 b/Library/Artifacts/dc/dcc7e915b0819b28ba0ed4522a8245c8 new file mode 100644 index 0000000..a41d85f Binary files /dev/null and b/Library/Artifacts/dc/dcc7e915b0819b28ba0ed4522a8245c8 differ diff --git a/Library/Artifacts/dc/dcd1bf78179cb965a1380bfe2b0e1998 b/Library/Artifacts/dc/dcd1bf78179cb965a1380bfe2b0e1998 new file mode 100644 index 0000000..cad777a Binary files /dev/null and b/Library/Artifacts/dc/dcd1bf78179cb965a1380bfe2b0e1998 differ diff --git a/Library/Artifacts/dd/dd0f57be1fd882f19974ab37e56a81ab b/Library/Artifacts/dd/dd0f57be1fd882f19974ab37e56a81ab new file mode 100644 index 0000000..f1ee28c Binary files /dev/null and b/Library/Artifacts/dd/dd0f57be1fd882f19974ab37e56a81ab differ diff --git a/Library/Artifacts/dd/dd14d2f4c53fbe1c4c495dd676ec8701 b/Library/Artifacts/dd/dd14d2f4c53fbe1c4c495dd676ec8701 new file mode 100644 index 0000000..34e0273 Binary files /dev/null and b/Library/Artifacts/dd/dd14d2f4c53fbe1c4c495dd676ec8701 differ diff --git a/Library/Artifacts/dd/dd59c653ae4a6e02fb471b96238ec97b b/Library/Artifacts/dd/dd59c653ae4a6e02fb471b96238ec97b new file mode 100644 index 0000000..965c0bd Binary files /dev/null and b/Library/Artifacts/dd/dd59c653ae4a6e02fb471b96238ec97b differ diff --git a/Library/Artifacts/dd/dd8753932fffdbb3f3e750f68cf4af87 b/Library/Artifacts/dd/dd8753932fffdbb3f3e750f68cf4af87 new file mode 100644 index 0000000..85f106e Binary files /dev/null and b/Library/Artifacts/dd/dd8753932fffdbb3f3e750f68cf4af87 differ diff --git a/Library/Artifacts/dd/dd8a33c8b125ee4cbf8adcb714f9ef68 b/Library/Artifacts/dd/dd8a33c8b125ee4cbf8adcb714f9ef68 new file mode 100644 index 0000000..53923a9 Binary files /dev/null and b/Library/Artifacts/dd/dd8a33c8b125ee4cbf8adcb714f9ef68 differ diff --git a/Library/Artifacts/dd/ddb185f5135eb1976d6c201af01d3234 b/Library/Artifacts/dd/ddb185f5135eb1976d6c201af01d3234 new file mode 100644 index 0000000..5199534 Binary files /dev/null and b/Library/Artifacts/dd/ddb185f5135eb1976d6c201af01d3234 differ diff --git a/Library/Artifacts/dd/ddf78f32cd974afa8b9f62d347802b50 b/Library/Artifacts/dd/ddf78f32cd974afa8b9f62d347802b50 new file mode 100644 index 0000000..7357c2a Binary files /dev/null and b/Library/Artifacts/dd/ddf78f32cd974afa8b9f62d347802b50 differ diff --git a/Library/Artifacts/de/de5a5c3b27ae52c4f383cd380dff6375 b/Library/Artifacts/de/de5a5c3b27ae52c4f383cd380dff6375 new file mode 100644 index 0000000..45c2607 Binary files /dev/null and b/Library/Artifacts/de/de5a5c3b27ae52c4f383cd380dff6375 differ diff --git a/Library/Artifacts/de/deba3daf780992f9232063b1af88d8e9 b/Library/Artifacts/de/deba3daf780992f9232063b1af88d8e9 new file mode 100644 index 0000000..2e6c0c1 Binary files /dev/null and b/Library/Artifacts/de/deba3daf780992f9232063b1af88d8e9 differ diff --git a/Library/Artifacts/de/dec8af187b15f45ea9a84901c57bdb60 b/Library/Artifacts/de/dec8af187b15f45ea9a84901c57bdb60 new file mode 100644 index 0000000..1ed4212 Binary files /dev/null and b/Library/Artifacts/de/dec8af187b15f45ea9a84901c57bdb60 differ diff --git a/Library/Artifacts/de/ded6d0c9d86f4a44166616a85a39be1b b/Library/Artifacts/de/ded6d0c9d86f4a44166616a85a39be1b new file mode 100644 index 0000000..12c1146 Binary files /dev/null and b/Library/Artifacts/de/ded6d0c9d86f4a44166616a85a39be1b differ diff --git a/Library/Artifacts/de/deff4e65a32d8802e73de4451d1c788e b/Library/Artifacts/de/deff4e65a32d8802e73de4451d1c788e new file mode 100644 index 0000000..dcd1d76 Binary files /dev/null and b/Library/Artifacts/de/deff4e65a32d8802e73de4451d1c788e differ diff --git a/Library/Artifacts/df/df07eb2f20ef59a93ecd0191b3b8eae1 b/Library/Artifacts/df/df07eb2f20ef59a93ecd0191b3b8eae1 new file mode 100644 index 0000000..eeaf1af Binary files /dev/null and b/Library/Artifacts/df/df07eb2f20ef59a93ecd0191b3b8eae1 differ diff --git a/Library/Artifacts/df/df497d53d15903a90aa122624bf56019 b/Library/Artifacts/df/df497d53d15903a90aa122624bf56019 new file mode 100644 index 0000000..2676356 Binary files /dev/null and b/Library/Artifacts/df/df497d53d15903a90aa122624bf56019 differ diff --git a/Library/Artifacts/df/df57635a752f4e60301d884803ffe606 b/Library/Artifacts/df/df57635a752f4e60301d884803ffe606 new file mode 100644 index 0000000..347255d Binary files /dev/null and b/Library/Artifacts/df/df57635a752f4e60301d884803ffe606 differ diff --git a/Library/Artifacts/df/dfc226e88f37d655fc48e7ef66cc37fe b/Library/Artifacts/df/dfc226e88f37d655fc48e7ef66cc37fe new file mode 100644 index 0000000..39cf796 Binary files /dev/null and b/Library/Artifacts/df/dfc226e88f37d655fc48e7ef66cc37fe differ diff --git a/Library/Artifacts/df/dfc7adf9df39411babd81d45010ea7e7 b/Library/Artifacts/df/dfc7adf9df39411babd81d45010ea7e7 new file mode 100644 index 0000000..91ccacc Binary files /dev/null and b/Library/Artifacts/df/dfc7adf9df39411babd81d45010ea7e7 differ diff --git a/Library/Artifacts/df/dff19d3e9cf019f71a5b1677cea4d278 b/Library/Artifacts/df/dff19d3e9cf019f71a5b1677cea4d278 new file mode 100644 index 0000000..6ef61be Binary files /dev/null and b/Library/Artifacts/df/dff19d3e9cf019f71a5b1677cea4d278 differ diff --git a/Library/Artifacts/e0/e01e9b6584fac8da6c2f08e1fdea5c46 b/Library/Artifacts/e0/e01e9b6584fac8da6c2f08e1fdea5c46 new file mode 100644 index 0000000..4a1e0bd Binary files /dev/null and b/Library/Artifacts/e0/e01e9b6584fac8da6c2f08e1fdea5c46 differ diff --git a/Library/Artifacts/e0/e023ce0744fe41a41564d967a531c2f0 b/Library/Artifacts/e0/e023ce0744fe41a41564d967a531c2f0 new file mode 100644 index 0000000..e013cf7 Binary files /dev/null and b/Library/Artifacts/e0/e023ce0744fe41a41564d967a531c2f0 differ diff --git a/Library/Artifacts/e0/e031e5bee2c8d29154cbdeb01832e1e4 b/Library/Artifacts/e0/e031e5bee2c8d29154cbdeb01832e1e4 new file mode 100644 index 0000000..75f2a64 Binary files /dev/null and b/Library/Artifacts/e0/e031e5bee2c8d29154cbdeb01832e1e4 differ diff --git a/Library/Artifacts/e0/e0347ae0bfcdbb67eb2d3da0655a4c6a b/Library/Artifacts/e0/e0347ae0bfcdbb67eb2d3da0655a4c6a new file mode 100644 index 0000000..9a962be Binary files /dev/null and b/Library/Artifacts/e0/e0347ae0bfcdbb67eb2d3da0655a4c6a differ diff --git a/Library/Artifacts/e0/e0b45164e035c0ba30abd1108c114cfa b/Library/Artifacts/e0/e0b45164e035c0ba30abd1108c114cfa new file mode 100644 index 0000000..c202fe8 Binary files /dev/null and b/Library/Artifacts/e0/e0b45164e035c0ba30abd1108c114cfa differ diff --git a/Library/Artifacts/e0/e0bf5f0b70fcdb4505aed7ba4437677f b/Library/Artifacts/e0/e0bf5f0b70fcdb4505aed7ba4437677f new file mode 100644 index 0000000..4772ab9 Binary files /dev/null and b/Library/Artifacts/e0/e0bf5f0b70fcdb4505aed7ba4437677f differ diff --git a/Library/Artifacts/e0/e0d458b6a07c88220f7e8b8207d304d5 b/Library/Artifacts/e0/e0d458b6a07c88220f7e8b8207d304d5 new file mode 100644 index 0000000..58f9ea3 Binary files /dev/null and b/Library/Artifacts/e0/e0d458b6a07c88220f7e8b8207d304d5 differ diff --git a/Library/Artifacts/e1/e11c3e001490abdc9d957327df4c1028 b/Library/Artifacts/e1/e11c3e001490abdc9d957327df4c1028 new file mode 100644 index 0000000..680fa38 Binary files /dev/null and b/Library/Artifacts/e1/e11c3e001490abdc9d957327df4c1028 differ diff --git a/Library/Artifacts/e1/e12623ee4468c48608a004a8ebaee603 b/Library/Artifacts/e1/e12623ee4468c48608a004a8ebaee603 new file mode 100644 index 0000000..45a8ebe Binary files /dev/null and b/Library/Artifacts/e1/e12623ee4468c48608a004a8ebaee603 differ diff --git a/Library/Artifacts/e1/e1465d7df5db5d115090b98216d37ccb b/Library/Artifacts/e1/e1465d7df5db5d115090b98216d37ccb new file mode 100644 index 0000000..410b627 Binary files /dev/null and b/Library/Artifacts/e1/e1465d7df5db5d115090b98216d37ccb differ diff --git a/Library/Artifacts/e1/e16bb4d98688b3d502a100f105aa402f b/Library/Artifacts/e1/e16bb4d98688b3d502a100f105aa402f new file mode 100644 index 0000000..5b687ca Binary files /dev/null and b/Library/Artifacts/e1/e16bb4d98688b3d502a100f105aa402f differ diff --git a/Library/Artifacts/e1/e187f225c021c8f49a0b557fe3550389 b/Library/Artifacts/e1/e187f225c021c8f49a0b557fe3550389 new file mode 100644 index 0000000..e35f33e Binary files /dev/null and b/Library/Artifacts/e1/e187f225c021c8f49a0b557fe3550389 differ diff --git a/Library/Artifacts/e1/e189a9d0aa2942a3d5d1c414b238a18a b/Library/Artifacts/e1/e189a9d0aa2942a3d5d1c414b238a18a new file mode 100644 index 0000000..0813822 Binary files /dev/null and b/Library/Artifacts/e1/e189a9d0aa2942a3d5d1c414b238a18a differ diff --git a/Library/Artifacts/e1/e190efd2d7895a40a58d755b449cafc8 b/Library/Artifacts/e1/e190efd2d7895a40a58d755b449cafc8 new file mode 100644 index 0000000..f467b31 Binary files /dev/null and b/Library/Artifacts/e1/e190efd2d7895a40a58d755b449cafc8 differ diff --git a/Library/Artifacts/e1/e198676a85374a586de1211245c13b72 b/Library/Artifacts/e1/e198676a85374a586de1211245c13b72 new file mode 100644 index 0000000..7303317 Binary files /dev/null and b/Library/Artifacts/e1/e198676a85374a586de1211245c13b72 differ diff --git a/Library/Artifacts/e1/e1a78986a3fa21efdf05bc55cb662c53 b/Library/Artifacts/e1/e1a78986a3fa21efdf05bc55cb662c53 new file mode 100644 index 0000000..2df5a80 Binary files /dev/null and b/Library/Artifacts/e1/e1a78986a3fa21efdf05bc55cb662c53 differ diff --git a/Library/Artifacts/e1/e1d5ab37385319c26fc51951f82c1651 b/Library/Artifacts/e1/e1d5ab37385319c26fc51951f82c1651 new file mode 100644 index 0000000..67a0cb1 Binary files /dev/null and b/Library/Artifacts/e1/e1d5ab37385319c26fc51951f82c1651 differ diff --git a/Library/Artifacts/e1/e1dcf20658be178ede6b66815a5d490a b/Library/Artifacts/e1/e1dcf20658be178ede6b66815a5d490a new file mode 100644 index 0000000..a8e593d Binary files /dev/null and b/Library/Artifacts/e1/e1dcf20658be178ede6b66815a5d490a differ diff --git a/Library/Artifacts/e1/e1e1f89b9bcac396af4fd01a91405be5 b/Library/Artifacts/e1/e1e1f89b9bcac396af4fd01a91405be5 new file mode 100644 index 0000000..660a9cf Binary files /dev/null and b/Library/Artifacts/e1/e1e1f89b9bcac396af4fd01a91405be5 differ diff --git a/Library/Artifacts/e2/e22899741b11d0711ebbe2126f192ba0 b/Library/Artifacts/e2/e22899741b11d0711ebbe2126f192ba0 new file mode 100644 index 0000000..017be00 Binary files /dev/null and b/Library/Artifacts/e2/e22899741b11d0711ebbe2126f192ba0 differ diff --git a/Library/Artifacts/e2/e2357474dcedbd4bc2be95ae25f4bab4 b/Library/Artifacts/e2/e2357474dcedbd4bc2be95ae25f4bab4 new file mode 100644 index 0000000..52b0b09 Binary files /dev/null and b/Library/Artifacts/e2/e2357474dcedbd4bc2be95ae25f4bab4 differ diff --git a/Library/Artifacts/e2/e244c36d3e7c1464fa404b44608fbd8c b/Library/Artifacts/e2/e244c36d3e7c1464fa404b44608fbd8c new file mode 100644 index 0000000..0c4122e Binary files /dev/null and b/Library/Artifacts/e2/e244c36d3e7c1464fa404b44608fbd8c differ diff --git a/Library/Artifacts/e2/e27f3ae93eb265726caf28d0df630bd3 b/Library/Artifacts/e2/e27f3ae93eb265726caf28d0df630bd3 new file mode 100644 index 0000000..aa8f537 Binary files /dev/null and b/Library/Artifacts/e2/e27f3ae93eb265726caf28d0df630bd3 differ diff --git a/Library/Artifacts/e2/e29368fef9285bf0d5f40941c6b6c9ba b/Library/Artifacts/e2/e29368fef9285bf0d5f40941c6b6c9ba new file mode 100644 index 0000000..f380565 Binary files /dev/null and b/Library/Artifacts/e2/e29368fef9285bf0d5f40941c6b6c9ba differ diff --git a/Library/Artifacts/e2/e2ea13252e9b942ea4ecac30a87f6630 b/Library/Artifacts/e2/e2ea13252e9b942ea4ecac30a87f6630 new file mode 100644 index 0000000..69726f1 Binary files /dev/null and b/Library/Artifacts/e2/e2ea13252e9b942ea4ecac30a87f6630 differ diff --git a/Library/Artifacts/e3/e33aaeccbd400f4d30f59f4530af52ae b/Library/Artifacts/e3/e33aaeccbd400f4d30f59f4530af52ae new file mode 100644 index 0000000..6011920 Binary files /dev/null and b/Library/Artifacts/e3/e33aaeccbd400f4d30f59f4530af52ae differ diff --git a/Library/Artifacts/e3/e3646238fe5406eaa9623c9a528b97c6 b/Library/Artifacts/e3/e3646238fe5406eaa9623c9a528b97c6 new file mode 100644 index 0000000..a53e777 Binary files /dev/null and b/Library/Artifacts/e3/e3646238fe5406eaa9623c9a528b97c6 differ diff --git a/Library/Artifacts/e3/e378f97f8726e88f7d858535d3769287 b/Library/Artifacts/e3/e378f97f8726e88f7d858535d3769287 new file mode 100644 index 0000000..542d7a3 Binary files /dev/null and b/Library/Artifacts/e3/e378f97f8726e88f7d858535d3769287 differ diff --git a/Library/Artifacts/e3/e3919844da7f36809d45f56fa8f32d0c b/Library/Artifacts/e3/e3919844da7f36809d45f56fa8f32d0c new file mode 100644 index 0000000..96e0a69 Binary files /dev/null and b/Library/Artifacts/e3/e3919844da7f36809d45f56fa8f32d0c differ diff --git a/Library/Artifacts/e3/e3a4931c8fe51a88fd486db36b1ed15d b/Library/Artifacts/e3/e3a4931c8fe51a88fd486db36b1ed15d new file mode 100644 index 0000000..51f228c Binary files /dev/null and b/Library/Artifacts/e3/e3a4931c8fe51a88fd486db36b1ed15d differ diff --git a/Library/Artifacts/e4/e4452c20bab7ad62b3b575439299fe7d b/Library/Artifacts/e4/e4452c20bab7ad62b3b575439299fe7d new file mode 100644 index 0000000..8065111 Binary files /dev/null and b/Library/Artifacts/e4/e4452c20bab7ad62b3b575439299fe7d differ diff --git a/Library/Artifacts/e4/e49e545eefa9725717a08165c60864ee b/Library/Artifacts/e4/e49e545eefa9725717a08165c60864ee new file mode 100644 index 0000000..165e3dc Binary files /dev/null and b/Library/Artifacts/e4/e49e545eefa9725717a08165c60864ee differ diff --git a/Library/Artifacts/e4/e4a94be5dc17896bc897bf948f4f94cd b/Library/Artifacts/e4/e4a94be5dc17896bc897bf948f4f94cd new file mode 100644 index 0000000..a1adaf6 Binary files /dev/null and b/Library/Artifacts/e4/e4a94be5dc17896bc897bf948f4f94cd differ diff --git a/Library/Artifacts/e4/e4ddfd1c0efc534be4a3eda2517e87de b/Library/Artifacts/e4/e4ddfd1c0efc534be4a3eda2517e87de new file mode 100644 index 0000000..abac1fa Binary files /dev/null and b/Library/Artifacts/e4/e4ddfd1c0efc534be4a3eda2517e87de differ diff --git a/Library/Artifacts/e4/e4de0ee64eddfdfcd793a8abb633403b b/Library/Artifacts/e4/e4de0ee64eddfdfcd793a8abb633403b new file mode 100644 index 0000000..2d7df82 Binary files /dev/null and b/Library/Artifacts/e4/e4de0ee64eddfdfcd793a8abb633403b differ diff --git a/Library/Artifacts/e4/e4ec926ca10e25268f787182b3a0e60d b/Library/Artifacts/e4/e4ec926ca10e25268f787182b3a0e60d new file mode 100644 index 0000000..41e2296 Binary files /dev/null and b/Library/Artifacts/e4/e4ec926ca10e25268f787182b3a0e60d differ diff --git a/Library/Artifacts/e5/e52cf813e74128d189711032a0583b8a b/Library/Artifacts/e5/e52cf813e74128d189711032a0583b8a new file mode 100644 index 0000000..3afe739 Binary files /dev/null and b/Library/Artifacts/e5/e52cf813e74128d189711032a0583b8a differ diff --git a/Library/Artifacts/e5/e559409d727cde09a4765221d2b95d72 b/Library/Artifacts/e5/e559409d727cde09a4765221d2b95d72 new file mode 100644 index 0000000..308ed5c Binary files /dev/null and b/Library/Artifacts/e5/e559409d727cde09a4765221d2b95d72 differ diff --git a/Library/Artifacts/e5/e59d60c5e90acbe241ba6e89eebf04cb b/Library/Artifacts/e5/e59d60c5e90acbe241ba6e89eebf04cb new file mode 100644 index 0000000..412b878 Binary files /dev/null and b/Library/Artifacts/e5/e59d60c5e90acbe241ba6e89eebf04cb differ diff --git a/Library/Artifacts/e6/e60b7a8416f474fadea61bcdf8d8704f b/Library/Artifacts/e6/e60b7a8416f474fadea61bcdf8d8704f new file mode 100644 index 0000000..b1ad3ef Binary files /dev/null and b/Library/Artifacts/e6/e60b7a8416f474fadea61bcdf8d8704f differ diff --git a/Library/Artifacts/e6/e65bf8c65c685cec06bd8e52a16d52c0 b/Library/Artifacts/e6/e65bf8c65c685cec06bd8e52a16d52c0 new file mode 100644 index 0000000..07e7f03 Binary files /dev/null and b/Library/Artifacts/e6/e65bf8c65c685cec06bd8e52a16d52c0 differ diff --git a/Library/Artifacts/e6/e66460cafd5074b19289137d535ecb6e b/Library/Artifacts/e6/e66460cafd5074b19289137d535ecb6e new file mode 100644 index 0000000..4007256 Binary files /dev/null and b/Library/Artifacts/e6/e66460cafd5074b19289137d535ecb6e differ diff --git a/Library/Artifacts/e6/e6764e31b9c2b1a875cded0e44168719 b/Library/Artifacts/e6/e6764e31b9c2b1a875cded0e44168719 new file mode 100644 index 0000000..0de7fcc Binary files /dev/null and b/Library/Artifacts/e6/e6764e31b9c2b1a875cded0e44168719 differ diff --git a/Library/Artifacts/e6/e6c32083ae5f3f1910e36209a987b8f1 b/Library/Artifacts/e6/e6c32083ae5f3f1910e36209a987b8f1 new file mode 100644 index 0000000..69fb119 Binary files /dev/null and b/Library/Artifacts/e6/e6c32083ae5f3f1910e36209a987b8f1 differ diff --git a/Library/Artifacts/e6/e6d1d32a4cba3803f3d250f1e9abe1b2 b/Library/Artifacts/e6/e6d1d32a4cba3803f3d250f1e9abe1b2 new file mode 100644 index 0000000..d2ad734 Binary files /dev/null and b/Library/Artifacts/e6/e6d1d32a4cba3803f3d250f1e9abe1b2 differ diff --git a/Library/Artifacts/e6/e6feff700718ddc97f31aef35f811459 b/Library/Artifacts/e6/e6feff700718ddc97f31aef35f811459 new file mode 100644 index 0000000..038c040 Binary files /dev/null and b/Library/Artifacts/e6/e6feff700718ddc97f31aef35f811459 differ diff --git a/Library/Artifacts/e7/e70ca86e0c854f62ab61e8c937b4760c b/Library/Artifacts/e7/e70ca86e0c854f62ab61e8c937b4760c new file mode 100644 index 0000000..07ea499 Binary files /dev/null and b/Library/Artifacts/e7/e70ca86e0c854f62ab61e8c937b4760c differ diff --git a/Library/Artifacts/e7/e783d72a4160348ee709022995f23226 b/Library/Artifacts/e7/e783d72a4160348ee709022995f23226 new file mode 100644 index 0000000..4802cc5 Binary files /dev/null and b/Library/Artifacts/e7/e783d72a4160348ee709022995f23226 differ diff --git a/Library/Artifacts/e7/e7aa20835e0b9d4a62f1435847fcd794 b/Library/Artifacts/e7/e7aa20835e0b9d4a62f1435847fcd794 new file mode 100644 index 0000000..fac9a4d Binary files /dev/null and b/Library/Artifacts/e7/e7aa20835e0b9d4a62f1435847fcd794 differ diff --git a/Library/Artifacts/e7/e7c30ed989f7df32a5f20551bfd47b88 b/Library/Artifacts/e7/e7c30ed989f7df32a5f20551bfd47b88 new file mode 100644 index 0000000..9fda5ce Binary files /dev/null and b/Library/Artifacts/e7/e7c30ed989f7df32a5f20551bfd47b88 differ diff --git a/Library/Artifacts/e7/e7cca011a97d21319dcea9646ecf2949 b/Library/Artifacts/e7/e7cca011a97d21319dcea9646ecf2949 new file mode 100644 index 0000000..3e61234 Binary files /dev/null and b/Library/Artifacts/e7/e7cca011a97d21319dcea9646ecf2949 differ diff --git a/Library/Artifacts/e8/e8194503f58f07da5a97290070b0df24 b/Library/Artifacts/e8/e8194503f58f07da5a97290070b0df24 new file mode 100644 index 0000000..aabd9df Binary files /dev/null and b/Library/Artifacts/e8/e8194503f58f07da5a97290070b0df24 differ diff --git a/Library/Artifacts/e8/e82e55c7179662fde8816917c4917cd4 b/Library/Artifacts/e8/e82e55c7179662fde8816917c4917cd4 new file mode 100644 index 0000000..a8174e5 Binary files /dev/null and b/Library/Artifacts/e8/e82e55c7179662fde8816917c4917cd4 differ diff --git a/Library/Artifacts/e8/e8d450ab598c6a73e256e113e78d358b b/Library/Artifacts/e8/e8d450ab598c6a73e256e113e78d358b new file mode 100644 index 0000000..8f83511 Binary files /dev/null and b/Library/Artifacts/e8/e8d450ab598c6a73e256e113e78d358b differ diff --git a/Library/Artifacts/e8/e8f38ee6d33088758518f46acb0b5c0e b/Library/Artifacts/e8/e8f38ee6d33088758518f46acb0b5c0e new file mode 100644 index 0000000..7eb1528 Binary files /dev/null and b/Library/Artifacts/e8/e8f38ee6d33088758518f46acb0b5c0e differ diff --git a/Library/Artifacts/e9/e941f5f0eda6eeba892d57fe9db6a402 b/Library/Artifacts/e9/e941f5f0eda6eeba892d57fe9db6a402 new file mode 100644 index 0000000..db15034 Binary files /dev/null and b/Library/Artifacts/e9/e941f5f0eda6eeba892d57fe9db6a402 differ diff --git a/Library/Artifacts/e9/e991fd12ef37b3f5bade394c16d51325 b/Library/Artifacts/e9/e991fd12ef37b3f5bade394c16d51325 new file mode 100644 index 0000000..d3d0310 Binary files /dev/null and b/Library/Artifacts/e9/e991fd12ef37b3f5bade394c16d51325 differ diff --git a/Library/Artifacts/e9/e9c2520b3ec17c8cd8e974e289a7dfcf b/Library/Artifacts/e9/e9c2520b3ec17c8cd8e974e289a7dfcf new file mode 100644 index 0000000..36c05c8 Binary files /dev/null and b/Library/Artifacts/e9/e9c2520b3ec17c8cd8e974e289a7dfcf differ diff --git a/Library/Artifacts/ea/ea16376b91ff5b5af20db923e86f2a05 b/Library/Artifacts/ea/ea16376b91ff5b5af20db923e86f2a05 new file mode 100644 index 0000000..b6ca8c3 Binary files /dev/null and b/Library/Artifacts/ea/ea16376b91ff5b5af20db923e86f2a05 differ diff --git a/Library/Artifacts/ea/ea4da0a98a81c65a7fd9b5905518d30f b/Library/Artifacts/ea/ea4da0a98a81c65a7fd9b5905518d30f new file mode 100644 index 0000000..8c69a19 Binary files /dev/null and b/Library/Artifacts/ea/ea4da0a98a81c65a7fd9b5905518d30f differ diff --git a/Library/Artifacts/ea/ea6113efb4b0d8a77264c5432ba7d9f1 b/Library/Artifacts/ea/ea6113efb4b0d8a77264c5432ba7d9f1 new file mode 100644 index 0000000..8660dd0 Binary files /dev/null and b/Library/Artifacts/ea/ea6113efb4b0d8a77264c5432ba7d9f1 differ diff --git a/Library/Artifacts/ea/ea86462cae07169cf0fd8cf35ef3698c b/Library/Artifacts/ea/ea86462cae07169cf0fd8cf35ef3698c new file mode 100644 index 0000000..9e8c739 Binary files /dev/null and b/Library/Artifacts/ea/ea86462cae07169cf0fd8cf35ef3698c differ diff --git a/Library/Artifacts/ea/ea90c983af50c230b1470c6f13e797e2 b/Library/Artifacts/ea/ea90c983af50c230b1470c6f13e797e2 new file mode 100644 index 0000000..2deb99f Binary files /dev/null and b/Library/Artifacts/ea/ea90c983af50c230b1470c6f13e797e2 differ diff --git a/Library/Artifacts/eb/eb2b2b94cdc3eca3b61a08e19ab1960e b/Library/Artifacts/eb/eb2b2b94cdc3eca3b61a08e19ab1960e new file mode 100644 index 0000000..3137751 Binary files /dev/null and b/Library/Artifacts/eb/eb2b2b94cdc3eca3b61a08e19ab1960e differ diff --git a/Library/Artifacts/eb/eb2ef1ef7ccecc64b09ce4b0f4e94ed5 b/Library/Artifacts/eb/eb2ef1ef7ccecc64b09ce4b0f4e94ed5 new file mode 100644 index 0000000..a93caf9 Binary files /dev/null and b/Library/Artifacts/eb/eb2ef1ef7ccecc64b09ce4b0f4e94ed5 differ diff --git a/Library/Artifacts/eb/eb40e1ef1bebbea796ab0281b6bf93d0 b/Library/Artifacts/eb/eb40e1ef1bebbea796ab0281b6bf93d0 new file mode 100644 index 0000000..a168e18 Binary files /dev/null and b/Library/Artifacts/eb/eb40e1ef1bebbea796ab0281b6bf93d0 differ diff --git a/Library/Artifacts/eb/ebacb01de631643e62870a8447ed9989 b/Library/Artifacts/eb/ebacb01de631643e62870a8447ed9989 new file mode 100644 index 0000000..81d834f Binary files /dev/null and b/Library/Artifacts/eb/ebacb01de631643e62870a8447ed9989 differ diff --git a/Library/Artifacts/eb/ebb4b0dbe5f11d4ca77af7662640294d b/Library/Artifacts/eb/ebb4b0dbe5f11d4ca77af7662640294d new file mode 100644 index 0000000..7370db8 Binary files /dev/null and b/Library/Artifacts/eb/ebb4b0dbe5f11d4ca77af7662640294d differ diff --git a/Library/Artifacts/eb/ebbaad72db72151d56809436976cb367 b/Library/Artifacts/eb/ebbaad72db72151d56809436976cb367 new file mode 100644 index 0000000..d675c95 Binary files /dev/null and b/Library/Artifacts/eb/ebbaad72db72151d56809436976cb367 differ diff --git a/Library/Artifacts/ec/ec0e1900ca922318728059a658f72f83 b/Library/Artifacts/ec/ec0e1900ca922318728059a658f72f83 new file mode 100644 index 0000000..026e050 Binary files /dev/null and b/Library/Artifacts/ec/ec0e1900ca922318728059a658f72f83 differ diff --git a/Library/Artifacts/ec/ec100a8f14d8434ff2dfdc6b069dcf06 b/Library/Artifacts/ec/ec100a8f14d8434ff2dfdc6b069dcf06 new file mode 100644 index 0000000..16e2d57 Binary files /dev/null and b/Library/Artifacts/ec/ec100a8f14d8434ff2dfdc6b069dcf06 differ diff --git a/Library/Artifacts/ec/ec324142b98f1b50a85515e23eea79b5 b/Library/Artifacts/ec/ec324142b98f1b50a85515e23eea79b5 new file mode 100644 index 0000000..c95b175 Binary files /dev/null and b/Library/Artifacts/ec/ec324142b98f1b50a85515e23eea79b5 differ diff --git a/Library/Artifacts/ec/ec393438ac0fcbc140a4c50bbcde889f b/Library/Artifacts/ec/ec393438ac0fcbc140a4c50bbcde889f new file mode 100644 index 0000000..d8af922 Binary files /dev/null and b/Library/Artifacts/ec/ec393438ac0fcbc140a4c50bbcde889f differ diff --git a/Library/Artifacts/ec/ec89bf3bc08eca1067d150b93a372750 b/Library/Artifacts/ec/ec89bf3bc08eca1067d150b93a372750 new file mode 100644 index 0000000..3b05f58 Binary files /dev/null and b/Library/Artifacts/ec/ec89bf3bc08eca1067d150b93a372750 differ diff --git a/Library/Artifacts/ec/eca2e6d2698b57d5752962b5dd48d5d2 b/Library/Artifacts/ec/eca2e6d2698b57d5752962b5dd48d5d2 new file mode 100644 index 0000000..1d26b91 Binary files /dev/null and b/Library/Artifacts/ec/eca2e6d2698b57d5752962b5dd48d5d2 differ diff --git a/Library/Artifacts/ec/ecab0c39cc68609c1ea5e959ae285cf0 b/Library/Artifacts/ec/ecab0c39cc68609c1ea5e959ae285cf0 new file mode 100644 index 0000000..ed94986 Binary files /dev/null and b/Library/Artifacts/ec/ecab0c39cc68609c1ea5e959ae285cf0 differ diff --git a/Library/Artifacts/ec/ecc28ca6ae917935f5e0817ed39f41a8 b/Library/Artifacts/ec/ecc28ca6ae917935f5e0817ed39f41a8 new file mode 100644 index 0000000..3e0a24a Binary files /dev/null and b/Library/Artifacts/ec/ecc28ca6ae917935f5e0817ed39f41a8 differ diff --git a/Library/Artifacts/ed/ed174cd4c0b0a4635328d00ee9f394dc b/Library/Artifacts/ed/ed174cd4c0b0a4635328d00ee9f394dc new file mode 100644 index 0000000..e26ac6a Binary files /dev/null and b/Library/Artifacts/ed/ed174cd4c0b0a4635328d00ee9f394dc differ diff --git a/Library/Artifacts/ed/ed2b3a54e4624e040397dfd8d5de8769 b/Library/Artifacts/ed/ed2b3a54e4624e040397dfd8d5de8769 new file mode 100644 index 0000000..bc02e72 Binary files /dev/null and b/Library/Artifacts/ed/ed2b3a54e4624e040397dfd8d5de8769 differ diff --git a/Library/Artifacts/ed/ed2cd5080e843489499db3bbaf3e74f4 b/Library/Artifacts/ed/ed2cd5080e843489499db3bbaf3e74f4 new file mode 100644 index 0000000..9a6fdb2 Binary files /dev/null and b/Library/Artifacts/ed/ed2cd5080e843489499db3bbaf3e74f4 differ diff --git a/Library/Artifacts/ed/ed4ce8bd29f5e75e0e3386698de68cb5 b/Library/Artifacts/ed/ed4ce8bd29f5e75e0e3386698de68cb5 new file mode 100644 index 0000000..2fff76e Binary files /dev/null and b/Library/Artifacts/ed/ed4ce8bd29f5e75e0e3386698de68cb5 differ diff --git a/Library/Artifacts/ed/ed609e69f07580d66438891767b62ea2 b/Library/Artifacts/ed/ed609e69f07580d66438891767b62ea2 new file mode 100644 index 0000000..e76d4f2 Binary files /dev/null and b/Library/Artifacts/ed/ed609e69f07580d66438891767b62ea2 differ diff --git a/Library/Artifacts/ed/ed85736a2d9823b12bf12a23542731d5 b/Library/Artifacts/ed/ed85736a2d9823b12bf12a23542731d5 new file mode 100644 index 0000000..145627d Binary files /dev/null and b/Library/Artifacts/ed/ed85736a2d9823b12bf12a23542731d5 differ diff --git a/Library/Artifacts/ed/edc4db287d9c3b8b403c806cb83cf91c b/Library/Artifacts/ed/edc4db287d9c3b8b403c806cb83cf91c new file mode 100644 index 0000000..b4ce562 Binary files /dev/null and b/Library/Artifacts/ed/edc4db287d9c3b8b403c806cb83cf91c differ diff --git a/Library/Artifacts/ee/ee2d8f69e2a3a1b1b41addcc761b58fd b/Library/Artifacts/ee/ee2d8f69e2a3a1b1b41addcc761b58fd new file mode 100644 index 0000000..386cc48 Binary files /dev/null and b/Library/Artifacts/ee/ee2d8f69e2a3a1b1b41addcc761b58fd differ diff --git a/Library/Artifacts/ee/ee98b5001fdca78c3d74fb7a01ed69b0 b/Library/Artifacts/ee/ee98b5001fdca78c3d74fb7a01ed69b0 new file mode 100644 index 0000000..ea05cd7 Binary files /dev/null and b/Library/Artifacts/ee/ee98b5001fdca78c3d74fb7a01ed69b0 differ diff --git a/Library/Artifacts/ee/eea40b7cb464982cf394f045254f6c3c b/Library/Artifacts/ee/eea40b7cb464982cf394f045254f6c3c new file mode 100644 index 0000000..a42b9ff Binary files /dev/null and b/Library/Artifacts/ee/eea40b7cb464982cf394f045254f6c3c differ diff --git a/Library/Artifacts/ee/eeb5859b126bc5acb95dbcd2e8c65f84 b/Library/Artifacts/ee/eeb5859b126bc5acb95dbcd2e8c65f84 new file mode 100644 index 0000000..480247c Binary files /dev/null and b/Library/Artifacts/ee/eeb5859b126bc5acb95dbcd2e8c65f84 differ diff --git a/Library/Artifacts/ee/eee8108f285f18cd81cec9ad7dd02ee2 b/Library/Artifacts/ee/eee8108f285f18cd81cec9ad7dd02ee2 new file mode 100644 index 0000000..fdccbe5 Binary files /dev/null and b/Library/Artifacts/ee/eee8108f285f18cd81cec9ad7dd02ee2 differ diff --git a/Library/Artifacts/ef/ef1cf0f1e552f9fcc5cef32223a1aa08 b/Library/Artifacts/ef/ef1cf0f1e552f9fcc5cef32223a1aa08 new file mode 100644 index 0000000..438a13d Binary files /dev/null and b/Library/Artifacts/ef/ef1cf0f1e552f9fcc5cef32223a1aa08 differ diff --git a/Library/Artifacts/ef/ef52cd2ba6b05811876983db84b2b00e b/Library/Artifacts/ef/ef52cd2ba6b05811876983db84b2b00e new file mode 100644 index 0000000..151d7c2 Binary files /dev/null and b/Library/Artifacts/ef/ef52cd2ba6b05811876983db84b2b00e differ diff --git a/Library/Artifacts/ef/ef5fe5e004095bb518cc43d22f82dc47 b/Library/Artifacts/ef/ef5fe5e004095bb518cc43d22f82dc47 new file mode 100644 index 0000000..852e682 Binary files /dev/null and b/Library/Artifacts/ef/ef5fe5e004095bb518cc43d22f82dc47 differ diff --git a/Library/Artifacts/ef/ef8550ad667f72d844cce149329684d3 b/Library/Artifacts/ef/ef8550ad667f72d844cce149329684d3 new file mode 100644 index 0000000..7e838f7 Binary files /dev/null and b/Library/Artifacts/ef/ef8550ad667f72d844cce149329684d3 differ diff --git a/Library/Artifacts/ef/ef9befa8d6dcdff535dc28debd189e67 b/Library/Artifacts/ef/ef9befa8d6dcdff535dc28debd189e67 new file mode 100644 index 0000000..3f9c2e4 Binary files /dev/null and b/Library/Artifacts/ef/ef9befa8d6dcdff535dc28debd189e67 differ diff --git a/Library/Artifacts/ef/efaca569410f0a05404ee97da7ea835c b/Library/Artifacts/ef/efaca569410f0a05404ee97da7ea835c new file mode 100644 index 0000000..0ccc330 Binary files /dev/null and b/Library/Artifacts/ef/efaca569410f0a05404ee97da7ea835c differ diff --git a/Library/Artifacts/ef/efaeb4971e3c1af3515a74fa1259ba4c b/Library/Artifacts/ef/efaeb4971e3c1af3515a74fa1259ba4c new file mode 100644 index 0000000..b9dd43f Binary files /dev/null and b/Library/Artifacts/ef/efaeb4971e3c1af3515a74fa1259ba4c differ diff --git a/Library/Artifacts/ef/efba4d8565414107a3779bbb515e972b b/Library/Artifacts/ef/efba4d8565414107a3779bbb515e972b new file mode 100644 index 0000000..882537a Binary files /dev/null and b/Library/Artifacts/ef/efba4d8565414107a3779bbb515e972b differ diff --git a/Library/Artifacts/f0/f01684ed5999a3a5eb843ac4f2328836 b/Library/Artifacts/f0/f01684ed5999a3a5eb843ac4f2328836 new file mode 100644 index 0000000..b71af86 Binary files /dev/null and b/Library/Artifacts/f0/f01684ed5999a3a5eb843ac4f2328836 differ diff --git a/Library/Artifacts/f0/f0388ce27d963c7fabdf4b1d6f12f3e5 b/Library/Artifacts/f0/f0388ce27d963c7fabdf4b1d6f12f3e5 new file mode 100644 index 0000000..6230050 Binary files /dev/null and b/Library/Artifacts/f0/f0388ce27d963c7fabdf4b1d6f12f3e5 differ diff --git a/Library/Artifacts/f0/f0de91db71ed8bd56f3b8eff58293177 b/Library/Artifacts/f0/f0de91db71ed8bd56f3b8eff58293177 new file mode 100644 index 0000000..ef4962f Binary files /dev/null and b/Library/Artifacts/f0/f0de91db71ed8bd56f3b8eff58293177 differ diff --git a/Library/Artifacts/f0/f0dfb6630509a0d28175a90f5e50b566 b/Library/Artifacts/f0/f0dfb6630509a0d28175a90f5e50b566 new file mode 100644 index 0000000..2e6c224 Binary files /dev/null and b/Library/Artifacts/f0/f0dfb6630509a0d28175a90f5e50b566 differ diff --git a/Library/Artifacts/f0/f0fa0699813b9656ab55d42b7bed2403 b/Library/Artifacts/f0/f0fa0699813b9656ab55d42b7bed2403 new file mode 100644 index 0000000..14177eb Binary files /dev/null and b/Library/Artifacts/f0/f0fa0699813b9656ab55d42b7bed2403 differ diff --git a/Library/Artifacts/f0/f0fe129666ec72f621acb88c4a892947 b/Library/Artifacts/f0/f0fe129666ec72f621acb88c4a892947 new file mode 100644 index 0000000..02cb99a Binary files /dev/null and b/Library/Artifacts/f0/f0fe129666ec72f621acb88c4a892947 differ diff --git a/Library/Artifacts/f1/f13f1b67708aabd54b78249702fc15a7 b/Library/Artifacts/f1/f13f1b67708aabd54b78249702fc15a7 new file mode 100644 index 0000000..f324088 Binary files /dev/null and b/Library/Artifacts/f1/f13f1b67708aabd54b78249702fc15a7 differ diff --git a/Library/Artifacts/f1/f16e70af94c920eb7e7da3844e42014b b/Library/Artifacts/f1/f16e70af94c920eb7e7da3844e42014b new file mode 100644 index 0000000..51932ca Binary files /dev/null and b/Library/Artifacts/f1/f16e70af94c920eb7e7da3844e42014b differ diff --git a/Library/Artifacts/f1/f18edf9646b634e31c6d7a9c17a85e19 b/Library/Artifacts/f1/f18edf9646b634e31c6d7a9c17a85e19 new file mode 100644 index 0000000..03e1604 Binary files /dev/null and b/Library/Artifacts/f1/f18edf9646b634e31c6d7a9c17a85e19 differ diff --git a/Library/Artifacts/f1/f1ac08e48411f7b06fe4af16fb4d9db5 b/Library/Artifacts/f1/f1ac08e48411f7b06fe4af16fb4d9db5 new file mode 100644 index 0000000..bd13f39 Binary files /dev/null and b/Library/Artifacts/f1/f1ac08e48411f7b06fe4af16fb4d9db5 differ diff --git a/Library/Artifacts/f1/f1c3f8101783f5987427af33e3f4a26d b/Library/Artifacts/f1/f1c3f8101783f5987427af33e3f4a26d new file mode 100644 index 0000000..dbd2fcf Binary files /dev/null and b/Library/Artifacts/f1/f1c3f8101783f5987427af33e3f4a26d differ diff --git a/Library/Artifacts/f1/f1cffc0b2a2daa7e162ff6dc74f84d12 b/Library/Artifacts/f1/f1cffc0b2a2daa7e162ff6dc74f84d12 new file mode 100644 index 0000000..b7121d1 Binary files /dev/null and b/Library/Artifacts/f1/f1cffc0b2a2daa7e162ff6dc74f84d12 differ diff --git a/Library/Artifacts/f1/f1e2170e3efdb865fdc160f6c6074013 b/Library/Artifacts/f1/f1e2170e3efdb865fdc160f6c6074013 new file mode 100644 index 0000000..32b8392 Binary files /dev/null and b/Library/Artifacts/f1/f1e2170e3efdb865fdc160f6c6074013 differ diff --git a/Library/Artifacts/f2/f261393bac64078980e5d91da9c26dc9 b/Library/Artifacts/f2/f261393bac64078980e5d91da9c26dc9 new file mode 100644 index 0000000..23c8fd3 Binary files /dev/null and b/Library/Artifacts/f2/f261393bac64078980e5d91da9c26dc9 differ diff --git a/Library/Artifacts/f2/f26cd6a6ae74b44403b7fd6ba41dce59 b/Library/Artifacts/f2/f26cd6a6ae74b44403b7fd6ba41dce59 new file mode 100644 index 0000000..7b72266 Binary files /dev/null and b/Library/Artifacts/f2/f26cd6a6ae74b44403b7fd6ba41dce59 differ diff --git a/Library/Artifacts/f2/f2a9441bdf1dc83ffb09e31c77be6f33 b/Library/Artifacts/f2/f2a9441bdf1dc83ffb09e31c77be6f33 new file mode 100644 index 0000000..8a08a17 Binary files /dev/null and b/Library/Artifacts/f2/f2a9441bdf1dc83ffb09e31c77be6f33 differ diff --git a/Library/Artifacts/f2/f2c423cb4a60a50c1227b1263e8b6c34 b/Library/Artifacts/f2/f2c423cb4a60a50c1227b1263e8b6c34 new file mode 100644 index 0000000..42604cf Binary files /dev/null and b/Library/Artifacts/f2/f2c423cb4a60a50c1227b1263e8b6c34 differ diff --git a/Library/Artifacts/f3/f32d83f3188521d3aadd11401a5b9151 b/Library/Artifacts/f3/f32d83f3188521d3aadd11401a5b9151 new file mode 100644 index 0000000..8694d45 Binary files /dev/null and b/Library/Artifacts/f3/f32d83f3188521d3aadd11401a5b9151 differ diff --git a/Library/Artifacts/f3/f33935967180b679aa810f93ac2c4a45 b/Library/Artifacts/f3/f33935967180b679aa810f93ac2c4a45 new file mode 100644 index 0000000..465a859 Binary files /dev/null and b/Library/Artifacts/f3/f33935967180b679aa810f93ac2c4a45 differ diff --git a/Library/Artifacts/f3/f33eaad45a73c6e86675f9df9930c513 b/Library/Artifacts/f3/f33eaad45a73c6e86675f9df9930c513 new file mode 100644 index 0000000..6cd96b4 Binary files /dev/null and b/Library/Artifacts/f3/f33eaad45a73c6e86675f9df9930c513 differ diff --git a/Library/Artifacts/f3/f34192e8854b6e20266785deb990b2c6 b/Library/Artifacts/f3/f34192e8854b6e20266785deb990b2c6 new file mode 100644 index 0000000..35ed19f Binary files /dev/null and b/Library/Artifacts/f3/f34192e8854b6e20266785deb990b2c6 differ diff --git a/Library/Artifacts/f3/f364772462b0281b084c12674f41121a b/Library/Artifacts/f3/f364772462b0281b084c12674f41121a new file mode 100644 index 0000000..28da538 Binary files /dev/null and b/Library/Artifacts/f3/f364772462b0281b084c12674f41121a differ diff --git a/Library/Artifacts/f3/f3671a4430c48b7306d215b6a1e853fd b/Library/Artifacts/f3/f3671a4430c48b7306d215b6a1e853fd new file mode 100644 index 0000000..5b238fc Binary files /dev/null and b/Library/Artifacts/f3/f3671a4430c48b7306d215b6a1e853fd differ diff --git a/Library/Artifacts/f3/f3ac993363685eb9993b8bfe7b1b8465 b/Library/Artifacts/f3/f3ac993363685eb9993b8bfe7b1b8465 new file mode 100644 index 0000000..7105363 Binary files /dev/null and b/Library/Artifacts/f3/f3ac993363685eb9993b8bfe7b1b8465 differ diff --git a/Library/Artifacts/f3/f3f275f81d5a4c0ece2a419e7f30244e b/Library/Artifacts/f3/f3f275f81d5a4c0ece2a419e7f30244e new file mode 100644 index 0000000..ef2568d Binary files /dev/null and b/Library/Artifacts/f3/f3f275f81d5a4c0ece2a419e7f30244e differ diff --git a/Library/Artifacts/f4/f4142e56c8453b0dd21e64fb06187085 b/Library/Artifacts/f4/f4142e56c8453b0dd21e64fb06187085 new file mode 100644 index 0000000..60868da Binary files /dev/null and b/Library/Artifacts/f4/f4142e56c8453b0dd21e64fb06187085 differ diff --git a/Library/Artifacts/f4/f4628fff7c1b920b44957a583419dcdb b/Library/Artifacts/f4/f4628fff7c1b920b44957a583419dcdb new file mode 100644 index 0000000..2b8e322 Binary files /dev/null and b/Library/Artifacts/f4/f4628fff7c1b920b44957a583419dcdb differ diff --git a/Library/Artifacts/f4/f4e0050c7e28dd774d5e9a1b6cbddffe b/Library/Artifacts/f4/f4e0050c7e28dd774d5e9a1b6cbddffe new file mode 100644 index 0000000..f74174c Binary files /dev/null and b/Library/Artifacts/f4/f4e0050c7e28dd774d5e9a1b6cbddffe differ diff --git a/Library/Artifacts/f5/f52ae9be1fba6024571338d2557825fe b/Library/Artifacts/f5/f52ae9be1fba6024571338d2557825fe new file mode 100644 index 0000000..a30f39c Binary files /dev/null and b/Library/Artifacts/f5/f52ae9be1fba6024571338d2557825fe differ diff --git a/Library/Artifacts/f5/f5382c9ef52f74c33e516fc3fe6399a1 b/Library/Artifacts/f5/f5382c9ef52f74c33e516fc3fe6399a1 new file mode 100644 index 0000000..20b5350 Binary files /dev/null and b/Library/Artifacts/f5/f5382c9ef52f74c33e516fc3fe6399a1 differ diff --git a/Library/Artifacts/f5/f53a5306cddc01174f019ada7e1db5c7 b/Library/Artifacts/f5/f53a5306cddc01174f019ada7e1db5c7 new file mode 100644 index 0000000..bc0b19b Binary files /dev/null and b/Library/Artifacts/f5/f53a5306cddc01174f019ada7e1db5c7 differ diff --git a/Library/Artifacts/f5/f579596d42eac7e38c1b6ab35b497745 b/Library/Artifacts/f5/f579596d42eac7e38c1b6ab35b497745 new file mode 100644 index 0000000..a94c77a Binary files /dev/null and b/Library/Artifacts/f5/f579596d42eac7e38c1b6ab35b497745 differ diff --git a/Library/Artifacts/f5/f57c8e76981f6f46d9bbc48ee7f56814 b/Library/Artifacts/f5/f57c8e76981f6f46d9bbc48ee7f56814 new file mode 100644 index 0000000..b49e708 Binary files /dev/null and b/Library/Artifacts/f5/f57c8e76981f6f46d9bbc48ee7f56814 differ diff --git a/Library/Artifacts/f5/f5c1ff90eb9b091c9915bf01cab367e3 b/Library/Artifacts/f5/f5c1ff90eb9b091c9915bf01cab367e3 new file mode 100644 index 0000000..6436b10 Binary files /dev/null and b/Library/Artifacts/f5/f5c1ff90eb9b091c9915bf01cab367e3 differ diff --git a/Library/Artifacts/f5/f5c3008e79e9b471ff8bb48468ee91de b/Library/Artifacts/f5/f5c3008e79e9b471ff8bb48468ee91de new file mode 100644 index 0000000..47404e0 Binary files /dev/null and b/Library/Artifacts/f5/f5c3008e79e9b471ff8bb48468ee91de differ diff --git a/Library/Artifacts/f5/f5c4fa80c70126fba5f8dc08d9cddcfe b/Library/Artifacts/f5/f5c4fa80c70126fba5f8dc08d9cddcfe new file mode 100644 index 0000000..3b1c9ef Binary files /dev/null and b/Library/Artifacts/f5/f5c4fa80c70126fba5f8dc08d9cddcfe differ diff --git a/Library/Artifacts/f5/f5df2d39804f712c7d0f8909b9287e7f b/Library/Artifacts/f5/f5df2d39804f712c7d0f8909b9287e7f new file mode 100644 index 0000000..e283c25 Binary files /dev/null and b/Library/Artifacts/f5/f5df2d39804f712c7d0f8909b9287e7f differ diff --git a/Library/Artifacts/f6/f664a6018847f5285585dafe5322ad3e b/Library/Artifacts/f6/f664a6018847f5285585dafe5322ad3e new file mode 100644 index 0000000..593f303 Binary files /dev/null and b/Library/Artifacts/f6/f664a6018847f5285585dafe5322ad3e differ diff --git a/Library/Artifacts/f6/f674fd3c37aff71b44b6715d0df513f5 b/Library/Artifacts/f6/f674fd3c37aff71b44b6715d0df513f5 new file mode 100644 index 0000000..b69234d Binary files /dev/null and b/Library/Artifacts/f6/f674fd3c37aff71b44b6715d0df513f5 differ diff --git a/Library/Artifacts/f6/f68d261146da6ae8c08a852352b2b5bb b/Library/Artifacts/f6/f68d261146da6ae8c08a852352b2b5bb new file mode 100644 index 0000000..9bf6b80 Binary files /dev/null and b/Library/Artifacts/f6/f68d261146da6ae8c08a852352b2b5bb differ diff --git a/Library/Artifacts/f6/f6c1caf6c9794dd24820567077386608 b/Library/Artifacts/f6/f6c1caf6c9794dd24820567077386608 new file mode 100644 index 0000000..329f767 Binary files /dev/null and b/Library/Artifacts/f6/f6c1caf6c9794dd24820567077386608 differ diff --git a/Library/Artifacts/f7/f719fabda1b810db2c2630cd7a2047fc b/Library/Artifacts/f7/f719fabda1b810db2c2630cd7a2047fc new file mode 100644 index 0000000..7381dbc Binary files /dev/null and b/Library/Artifacts/f7/f719fabda1b810db2c2630cd7a2047fc differ diff --git a/Library/Artifacts/f7/f7274cf6ca8b359c12d58e6e7e7408f4 b/Library/Artifacts/f7/f7274cf6ca8b359c12d58e6e7e7408f4 new file mode 100644 index 0000000..4e07cce Binary files /dev/null and b/Library/Artifacts/f7/f7274cf6ca8b359c12d58e6e7e7408f4 differ diff --git a/Library/Artifacts/f7/f73fed6995ef9e5d2d252581fdcc43d6 b/Library/Artifacts/f7/f73fed6995ef9e5d2d252581fdcc43d6 new file mode 100644 index 0000000..7889cb0 Binary files /dev/null and b/Library/Artifacts/f7/f73fed6995ef9e5d2d252581fdcc43d6 differ diff --git a/Library/Artifacts/f8/f81ff60a008ee725a26c22bfcc3a52e7 b/Library/Artifacts/f8/f81ff60a008ee725a26c22bfcc3a52e7 new file mode 100644 index 0000000..2cafbeb Binary files /dev/null and b/Library/Artifacts/f8/f81ff60a008ee725a26c22bfcc3a52e7 differ diff --git a/Library/Artifacts/f8/f83e93e6e06d2a8a5718d2bf52032450 b/Library/Artifacts/f8/f83e93e6e06d2a8a5718d2bf52032450 new file mode 100644 index 0000000..f959e34 Binary files /dev/null and b/Library/Artifacts/f8/f83e93e6e06d2a8a5718d2bf52032450 differ diff --git a/Library/Artifacts/f8/f85d5f79e65d426f0abd0679d18fd389 b/Library/Artifacts/f8/f85d5f79e65d426f0abd0679d18fd389 new file mode 100644 index 0000000..206db14 Binary files /dev/null and b/Library/Artifacts/f8/f85d5f79e65d426f0abd0679d18fd389 differ diff --git a/Library/Artifacts/f8/f8699ec491a3366d31a273e27607e8c4 b/Library/Artifacts/f8/f8699ec491a3366d31a273e27607e8c4 new file mode 100644 index 0000000..821df28 Binary files /dev/null and b/Library/Artifacts/f8/f8699ec491a3366d31a273e27607e8c4 differ diff --git a/Library/Artifacts/f8/f86b84f20f524a9983701da22f138544 b/Library/Artifacts/f8/f86b84f20f524a9983701da22f138544 new file mode 100644 index 0000000..2c4d52c Binary files /dev/null and b/Library/Artifacts/f8/f86b84f20f524a9983701da22f138544 differ diff --git a/Library/Artifacts/f8/f8c2dba26200c96ea7bd86f6fcaa24f8 b/Library/Artifacts/f8/f8c2dba26200c96ea7bd86f6fcaa24f8 new file mode 100644 index 0000000..d6c09bb Binary files /dev/null and b/Library/Artifacts/f8/f8c2dba26200c96ea7bd86f6fcaa24f8 differ diff --git a/Library/Artifacts/f9/f9075ce0f07b40dfddb2790f6e1c2eb5 b/Library/Artifacts/f9/f9075ce0f07b40dfddb2790f6e1c2eb5 new file mode 100644 index 0000000..0b0c07a Binary files /dev/null and b/Library/Artifacts/f9/f9075ce0f07b40dfddb2790f6e1c2eb5 differ diff --git a/Library/Artifacts/f9/f934ad3ec259e442045763fa27043bf7 b/Library/Artifacts/f9/f934ad3ec259e442045763fa27043bf7 new file mode 100644 index 0000000..b5c6836 Binary files /dev/null and b/Library/Artifacts/f9/f934ad3ec259e442045763fa27043bf7 differ diff --git a/Library/Artifacts/f9/f95223af7d8813b4830c5e17f69160b6 b/Library/Artifacts/f9/f95223af7d8813b4830c5e17f69160b6 new file mode 100644 index 0000000..f79a40b Binary files /dev/null and b/Library/Artifacts/f9/f95223af7d8813b4830c5e17f69160b6 differ diff --git a/Library/Artifacts/f9/f95574743641fb2e880d80188f966da8 b/Library/Artifacts/f9/f95574743641fb2e880d80188f966da8 new file mode 100644 index 0000000..923b25a Binary files /dev/null and b/Library/Artifacts/f9/f95574743641fb2e880d80188f966da8 differ diff --git a/Library/Artifacts/fa/fa77148024477a78de4d816de0517715 b/Library/Artifacts/fa/fa77148024477a78de4d816de0517715 new file mode 100644 index 0000000..82d0db9 Binary files /dev/null and b/Library/Artifacts/fa/fa77148024477a78de4d816de0517715 differ diff --git a/Library/Artifacts/fa/fa8dd58c7f291bf068a05be27e2ec2fe b/Library/Artifacts/fa/fa8dd58c7f291bf068a05be27e2ec2fe new file mode 100644 index 0000000..a4ca54e Binary files /dev/null and b/Library/Artifacts/fa/fa8dd58c7f291bf068a05be27e2ec2fe differ diff --git a/Library/Artifacts/fa/faafb2fc3be02fec46cfa5c129fd57b6 b/Library/Artifacts/fa/faafb2fc3be02fec46cfa5c129fd57b6 new file mode 100644 index 0000000..f9dff94 Binary files /dev/null and b/Library/Artifacts/fa/faafb2fc3be02fec46cfa5c129fd57b6 differ diff --git a/Library/Artifacts/fa/fac4af718d22f9b76b43ebc44745b7fa b/Library/Artifacts/fa/fac4af718d22f9b76b43ebc44745b7fa new file mode 100644 index 0000000..921bc99 Binary files /dev/null and b/Library/Artifacts/fa/fac4af718d22f9b76b43ebc44745b7fa differ diff --git a/Library/Artifacts/fa/fac9d0290c2ffad7802d9968e7fd4e29 b/Library/Artifacts/fa/fac9d0290c2ffad7802d9968e7fd4e29 new file mode 100644 index 0000000..c19b1b4 Binary files /dev/null and b/Library/Artifacts/fa/fac9d0290c2ffad7802d9968e7fd4e29 differ diff --git a/Library/Artifacts/fa/fad4d0eaeae112d867393eecf09817e7 b/Library/Artifacts/fa/fad4d0eaeae112d867393eecf09817e7 new file mode 100644 index 0000000..b4ef869 Binary files /dev/null and b/Library/Artifacts/fa/fad4d0eaeae112d867393eecf09817e7 differ diff --git a/Library/Artifacts/fa/fae4d9546e07eb2685665fe87e8ce239 b/Library/Artifacts/fa/fae4d9546e07eb2685665fe87e8ce239 new file mode 100644 index 0000000..58781f8 Binary files /dev/null and b/Library/Artifacts/fa/fae4d9546e07eb2685665fe87e8ce239 differ diff --git a/Library/Artifacts/fb/fb1cc7cbad4562387a1174426cb799a2 b/Library/Artifacts/fb/fb1cc7cbad4562387a1174426cb799a2 new file mode 100644 index 0000000..b01ae3e Binary files /dev/null and b/Library/Artifacts/fb/fb1cc7cbad4562387a1174426cb799a2 differ diff --git a/Library/Artifacts/fb/fb92a26e82fd66371b47b099b01e7012 b/Library/Artifacts/fb/fb92a26e82fd66371b47b099b01e7012 new file mode 100644 index 0000000..c7c98c8 Binary files /dev/null and b/Library/Artifacts/fb/fb92a26e82fd66371b47b099b01e7012 differ diff --git a/Library/Artifacts/fb/fbb063317893721bfa0c84cce982110b b/Library/Artifacts/fb/fbb063317893721bfa0c84cce982110b new file mode 100644 index 0000000..c50c18f Binary files /dev/null and b/Library/Artifacts/fb/fbb063317893721bfa0c84cce982110b differ diff --git a/Library/Artifacts/fc/fc4cc3be367234bb822ee543eccc4952 b/Library/Artifacts/fc/fc4cc3be367234bb822ee543eccc4952 new file mode 100644 index 0000000..ada36ad Binary files /dev/null and b/Library/Artifacts/fc/fc4cc3be367234bb822ee543eccc4952 differ diff --git a/Library/Artifacts/fc/fc5c48865328817cce5184b071c6dcff b/Library/Artifacts/fc/fc5c48865328817cce5184b071c6dcff new file mode 100644 index 0000000..e03f215 Binary files /dev/null and b/Library/Artifacts/fc/fc5c48865328817cce5184b071c6dcff differ diff --git a/Library/Artifacts/fc/fc6feb7626df851817e1612c43a23680 b/Library/Artifacts/fc/fc6feb7626df851817e1612c43a23680 new file mode 100644 index 0000000..966aac2 Binary files /dev/null and b/Library/Artifacts/fc/fc6feb7626df851817e1612c43a23680 differ diff --git a/Library/Artifacts/fc/fcaf0faa46c483eb90b65c3e523ee32a b/Library/Artifacts/fc/fcaf0faa46c483eb90b65c3e523ee32a new file mode 100644 index 0000000..43c5231 Binary files /dev/null and b/Library/Artifacts/fc/fcaf0faa46c483eb90b65c3e523ee32a differ diff --git a/Library/Artifacts/fc/fcbdb7b86e2090e1d82a337063a7b3f7 b/Library/Artifacts/fc/fcbdb7b86e2090e1d82a337063a7b3f7 new file mode 100644 index 0000000..9920c3a Binary files /dev/null and b/Library/Artifacts/fc/fcbdb7b86e2090e1d82a337063a7b3f7 differ diff --git a/Library/Artifacts/fc/fcefe457280e1b20bf2912badccf6bf8 b/Library/Artifacts/fc/fcefe457280e1b20bf2912badccf6bf8 new file mode 100644 index 0000000..5da373d Binary files /dev/null and b/Library/Artifacts/fc/fcefe457280e1b20bf2912badccf6bf8 differ diff --git a/Library/Artifacts/fd/fd50e8c50ae1da0d88a9ac3c74470f67 b/Library/Artifacts/fd/fd50e8c50ae1da0d88a9ac3c74470f67 new file mode 100644 index 0000000..39539da Binary files /dev/null and b/Library/Artifacts/fd/fd50e8c50ae1da0d88a9ac3c74470f67 differ diff --git a/Library/Artifacts/fd/fd93684f9450cd03c20e9d96dd7c5600 b/Library/Artifacts/fd/fd93684f9450cd03c20e9d96dd7c5600 new file mode 100644 index 0000000..0e7f865 Binary files /dev/null and b/Library/Artifacts/fd/fd93684f9450cd03c20e9d96dd7c5600 differ diff --git a/Library/Artifacts/fd/fdb916ce46ea2256c85375dedbc0775c b/Library/Artifacts/fd/fdb916ce46ea2256c85375dedbc0775c new file mode 100644 index 0000000..2ff994a Binary files /dev/null and b/Library/Artifacts/fd/fdb916ce46ea2256c85375dedbc0775c differ diff --git a/Library/Artifacts/fe/fe15ddcfc1938c1ec7224704f7b89e35 b/Library/Artifacts/fe/fe15ddcfc1938c1ec7224704f7b89e35 new file mode 100644 index 0000000..9dc4235 Binary files /dev/null and b/Library/Artifacts/fe/fe15ddcfc1938c1ec7224704f7b89e35 differ diff --git a/Library/Artifacts/fe/fe1ab1a2ce7b4f0f2186da8e46dbe5de b/Library/Artifacts/fe/fe1ab1a2ce7b4f0f2186da8e46dbe5de new file mode 100644 index 0000000..cead667 Binary files /dev/null and b/Library/Artifacts/fe/fe1ab1a2ce7b4f0f2186da8e46dbe5de differ diff --git a/Library/Artifacts/fe/fe1ba0376bfbb4c4e00390611bb552ce b/Library/Artifacts/fe/fe1ba0376bfbb4c4e00390611bb552ce new file mode 100644 index 0000000..6552ace Binary files /dev/null and b/Library/Artifacts/fe/fe1ba0376bfbb4c4e00390611bb552ce differ diff --git a/Library/Artifacts/fe/fe324fa7d2bc294f258f7dbd390e3d7b b/Library/Artifacts/fe/fe324fa7d2bc294f258f7dbd390e3d7b new file mode 100644 index 0000000..c028275 Binary files /dev/null and b/Library/Artifacts/fe/fe324fa7d2bc294f258f7dbd390e3d7b differ diff --git a/Library/Artifacts/fe/fe6c76bd4254fd74532d6e9a62e828e7 b/Library/Artifacts/fe/fe6c76bd4254fd74532d6e9a62e828e7 new file mode 100644 index 0000000..4b6eb69 Binary files /dev/null and b/Library/Artifacts/fe/fe6c76bd4254fd74532d6e9a62e828e7 differ diff --git a/Library/Artifacts/fe/fea473043e6ba40a4165c61fd03a285b b/Library/Artifacts/fe/fea473043e6ba40a4165c61fd03a285b new file mode 100644 index 0000000..b8ddf1a Binary files /dev/null and b/Library/Artifacts/fe/fea473043e6ba40a4165c61fd03a285b differ diff --git a/Library/Artifacts/fe/febeb198631c777e1cfa2313bc844fa4 b/Library/Artifacts/fe/febeb198631c777e1cfa2313bc844fa4 new file mode 100644 index 0000000..afbf277 Binary files /dev/null and b/Library/Artifacts/fe/febeb198631c777e1cfa2313bc844fa4 differ diff --git a/Library/Artifacts/fe/fefdc39679b19ad34572626df52894d0 b/Library/Artifacts/fe/fefdc39679b19ad34572626df52894d0 new file mode 100644 index 0000000..b7ffddb Binary files /dev/null and b/Library/Artifacts/fe/fefdc39679b19ad34572626df52894d0 differ diff --git a/Library/Artifacts/ff/ff3508cc37eb3e2b8a3568804a0d2030 b/Library/Artifacts/ff/ff3508cc37eb3e2b8a3568804a0d2030 new file mode 100644 index 0000000..72ba0bf Binary files /dev/null and b/Library/Artifacts/ff/ff3508cc37eb3e2b8a3568804a0d2030 differ diff --git a/Library/Artifacts/ff/ff47b1b2f93218bee583c92542510735 b/Library/Artifacts/ff/ff47b1b2f93218bee583c92542510735 new file mode 100644 index 0000000..5e3c113 Binary files /dev/null and b/Library/Artifacts/ff/ff47b1b2f93218bee583c92542510735 differ diff --git a/Library/Artifacts/ff/ff56e161db4ff3c12b974974a9000564 b/Library/Artifacts/ff/ff56e161db4ff3c12b974974a9000564 new file mode 100644 index 0000000..a358752 Binary files /dev/null and b/Library/Artifacts/ff/ff56e161db4ff3c12b974974a9000564 differ diff --git a/Library/Artifacts/ff/ff7d021e5203cd110f7667af9942ff92 b/Library/Artifacts/ff/ff7d021e5203cd110f7667af9942ff92 new file mode 100644 index 0000000..e1ef4fb Binary files /dev/null and b/Library/Artifacts/ff/ff7d021e5203cd110f7667af9942ff92 differ diff --git a/Library/Artifacts/ff/ffcc32305b9bbd1fa75894b0c16a6204 b/Library/Artifacts/ff/ffcc32305b9bbd1fa75894b0c16a6204 new file mode 100644 index 0000000..fa6fdba Binary files /dev/null and b/Library/Artifacts/ff/ffcc32305b9bbd1fa75894b0c16a6204 differ diff --git a/Library/Artifacts/ff/ffe2248a370a4b91ba42e56249cd6cf6 b/Library/Artifacts/ff/ffe2248a370a4b91ba42e56249cd6cf6 new file mode 100644 index 0000000..c87f6e9 Binary files /dev/null and b/Library/Artifacts/ff/ffe2248a370a4b91ba42e56249cd6cf6 differ diff --git a/Library/Artifacts/ff/ffeadcb07ddeb68139b1a66e2e87eb82 b/Library/Artifacts/ff/ffeadcb07ddeb68139b1a66e2e87eb82 new file mode 100644 index 0000000..a5fe83d Binary files /dev/null and b/Library/Artifacts/ff/ffeadcb07ddeb68139b1a66e2e87eb82 differ diff --git a/Library/Artifacts/ff/fff999cab6df30b2b0a55830319c6dcb b/Library/Artifacts/ff/fff999cab6df30b2b0a55830319c6dcb new file mode 100644 index 0000000..b854291 Binary files /dev/null and b/Library/Artifacts/ff/fff999cab6df30b2b0a55830319c6dcb differ diff --git a/Library/AssetImportState b/Library/AssetImportState new file mode 100644 index 0000000..21c67d7 --- /dev/null +++ b/Library/AssetImportState @@ -0,0 +1 @@ +-2;0;0;0;-1 \ No newline at end of file diff --git a/Library/BuildPlayer.prefs b/Library/BuildPlayer.prefs new file mode 100644 index 0000000..e69de29 diff --git a/Library/BuildSettings.asset b/Library/BuildSettings.asset new file mode 100644 index 0000000..31c5e07 Binary files /dev/null and b/Library/BuildSettings.asset differ diff --git a/Library/Collab/CollabSnapshot_2d367089-5505-4276-9de6-6530a5b7eec5.txt b/Library/Collab/CollabSnapshot_2d367089-5505-4276-9de6-6530a5b7eec5.txt new file mode 100644 index 0000000..cadac91 --- /dev/null +++ b/Library/Collab/CollabSnapshot_2d367089-5505-4276-9de6-6530a5b7eec5.txt @@ -0,0 +1 @@ +{"entries":[{"path":".collabignore","revisionID":"cdb04bd2e4a83f3a3044010a144f4d35858f1d72","hash":"db5578941524febed38bd2495162ac92","state":2,"downloadPath":"","size":453},{"path":"Packages/manifest.json","revisionID":"cdb04bd2e4a83f3a3044010a144f4d35858f1d72","hash":"b82952edd8af936b7fcf05d7470db0da","state":2,"downloadPath":"","size":1679},{"path":"ProjectSettings/AudioManager.asset","revisionID":"cdb04bd2e4a83f3a3044010a144f4d35858f1d72","hash":"5400805c75332736d793fc2b0610a969","state":2,"downloadPath":"","size":416},{"path":"ProjectSettings/ClusterInputManager.asset","revisionID":"cdb04bd2e4a83f3a3044010a144f4d35858f1d72","hash":"b1d0f114f4024863e4f8524801ee50dc","state":2,"downloadPath":"","size":114},{"path":"ProjectSettings/DynamicsManager.asset","revisionID":"cdb04bd2e4a83f3a3044010a144f4d35858f1d72","hash":"b179fb1d6f0b15ab308dc48ad6e5db04","state":2,"downloadPath":"","size":1190},{"path":"ProjectSettings/EditorBuildSettings.asset","revisionID":"cdb04bd2e4a83f3a3044010a144f4d35858f1d72","hash":"0e75bf2010c153060f99a12c0275cbf6","state":2,"downloadPath":"","size":160},{"path":"ProjectSettings/EditorSettings.asset","revisionID":"cdb04bd2e4a83f3a3044010a144f4d35858f1d72","hash":"67d730ae1ec6c9a9366d1d414f33517b","state":2,"downloadPath":"","size":1107},{"path":"ProjectSettings/GraphicsSettings.asset","revisionID":"cdb04bd2e4a83f3a3044010a144f4d35858f1d72","hash":"8785a9bf5bfba82ccdd17aad37e2dfc7","state":2,"downloadPath":"","size":2230},{"path":"ProjectSettings/InputManager.asset","revisionID":"cdb04bd2e4a83f3a3044010a144f4d35858f1d72","hash":"ca91550943d66f92a950242da0b38982","state":2,"downloadPath":"","size":5793},{"path":"ProjectSettings/NavMeshAreas.asset","revisionID":"cdb04bd2e4a83f3a3044010a144f4d35858f1d72","hash":"5c8ed79f5ce56314d884f5f10667c0e0","state":2,"downloadPath":"","size":1308},{"path":"ProjectSettings/Physics2DSettings.asset","revisionID":"cdb04bd2e4a83f3a3044010a144f4d35858f1d72","hash":"9bda5953d080e03b5e829e10b93fb118","state":2,"downloadPath":"","size":2028},{"path":"ProjectSettings/PresetManager.asset","revisionID":"cdb04bd2e4a83f3a3044010a144f4d35858f1d72","hash":"d18c4124a5dd19c76d94e5ffc97c687f","state":2,"downloadPath":"","size":146},{"path":"ProjectSettings/ProjectSettings.asset","revisionID":"cdb04bd2e4a83f3a3044010a144f4d35858f1d72","hash":"7c160880cc80cb43d61c50087c903676","state":2,"downloadPath":"","size":19274},{"path":"ProjectSettings/ProjectVersion.txt","revisionID":"cdb04bd2e4a83f3a3044010a144f4d35858f1d72","hash":"f409cb160207baffb03a352ca71c75ca","state":2,"downloadPath":"","size":83},{"path":"ProjectSettings/QualitySettings.asset","revisionID":"cdb04bd2e4a83f3a3044010a144f4d35858f1d72","hash":"2f75138ad488a98f47208aff92c30356","state":2,"downloadPath":"","size":6451},{"path":"ProjectSettings/TagManager.asset","revisionID":"cdb04bd2e4a83f3a3044010a144f4d35858f1d72","hash":"abc7a1530a9aafae8db6fa4b4082a049","state":2,"downloadPath":"","size":378},{"path":"ProjectSettings/TimeManager.asset","revisionID":"cdb04bd2e4a83f3a3044010a144f4d35858f1d72","hash":"a4f23c9e1fc6dfd9fc5e206461b5fd7a","state":2,"downloadPath":"","size":202},{"path":"ProjectSettings/UnityConnectSettings.asset","revisionID":"cdb04bd2e4a83f3a3044010a144f4d35858f1d72","hash":"ff6f3061da5eb8b6b1ac332ad359266b","state":2,"downloadPath":"","size":853},{"path":"ProjectSettings/VFXManager.asset","revisionID":"cdb04bd2e4a83f3a3044010a144f4d35858f1d72","hash":"d8d2bcdd05b8bf5f6968327a25c24a4e","state":2,"downloadPath":"","size":308}],"cache":[{"path":".collabignore","hash":"db5578941524febed38bd2495162ac92","datetime":{"high":0,"low":1587330984}},{"path":"Assets/Materials.meta","hash":"f21d6930b6e4fb91518f13b190bec890","datetime":{"high":0,"low":1587307055}},{"path":"Assets/Materials/Green.mat","hash":"81efe7a56ddd12c9be140299590fb287","datetime":{"high":0,"low":1587307240}},{"path":"Assets/Materials/Green.mat.meta","hash":"e699fec4d210e62d56c897d9b183217f","datetime":{"high":0,"low":1587307080}},{"path":"Assets/Scenes.meta","hash":"3b40749d8e1d487fac8b4cc724c92e59","datetime":{"high":0,"low":1587270176}},{"path":"Assets/Scenes/SampleScene.meta","hash":"3213f41761ffb3aee9326636f44c3ba5","datetime":{"high":0,"low":1587270262}},{"path":"Assets/Scenes/SampleScene.unity","hash":"d270184d497374da95696409a467201a","datetime":{"high":0,"low":1587307316}},{"path":"Assets/Scenes/SampleScene.unity.meta","hash":"097fac763945c6bda1035d2a0a22dc50","datetime":{"high":0,"low":1587270156}},{"path":"Assets/Scenes/SampleScene/LightingData.asset","hash":"e5eda08377c4d558a557aeac445efacb","datetime":{"high":0,"low":1587270263}},{"path":"Assets/Scenes/SampleScene/LightingData.asset.meta","hash":"4cf3d519b3867fb431d29dddc85870b0","datetime":{"high":0,"low":1587270263}},{"path":"Assets/Scenes/SampleScene/ReflectionProbe-0.exr","hash":"2f295f54109e586eeda766ee3d876a75","datetime":{"high":0,"low":1587270262}},{"path":"Assets/Scenes/SampleScene/ReflectionProbe-0.exr.meta","hash":"92a8a0a3807d5cfe2d1ec1e172438e95","datetime":{"high":0,"low":1587270262}},{"path":"Library/BuildPlayer.prefs","hash":"d41d8cd98f00b204e9800998ecf8427e","datetime":{"high":0,"low":1587270168}},{"path":"Packages/manifest.json","hash":"b82952edd8af936b7fcf05d7470db0da","datetime":{"high":0,"low":1587270170}},{"path":"ProjectSettings/AudioManager.asset","hash":"5400805c75332736d793fc2b0610a969","datetime":{"high":0,"low":1587330986}},{"path":"ProjectSettings/ClusterInputManager.asset","hash":"b1d0f114f4024863e4f8524801ee50dc","datetime":{"high":0,"low":1587330986}},{"path":"ProjectSettings/DynamicsManager.asset","hash":"b179fb1d6f0b15ab308dc48ad6e5db04","datetime":{"high":0,"low":1587330986}},{"path":"ProjectSettings/EditorBuildSettings.asset","hash":"0e75bf2010c153060f99a12c0275cbf6","datetime":{"high":0,"low":1587330986}},{"path":"ProjectSettings/EditorSettings.asset","hash":"67d730ae1ec6c9a9366d1d414f33517b","datetime":{"high":0,"low":1587330986}},{"path":"ProjectSettings/GraphicsSettings.asset","hash":"8785a9bf5bfba82ccdd17aad37e2dfc7","datetime":{"high":0,"low":1587330986}},{"path":"ProjectSettings/InputManager.asset","hash":"ca91550943d66f92a950242da0b38982","datetime":{"high":0,"low":1587330986}},{"path":"ProjectSettings/NavMeshAreas.asset","hash":"5c8ed79f5ce56314d884f5f10667c0e0","datetime":{"high":0,"low":1587330986}},{"path":"ProjectSettings/Physics2DSettings.asset","hash":"9bda5953d080e03b5e829e10b93fb118","datetime":{"high":0,"low":1587330986}},{"path":"ProjectSettings/PresetManager.asset","hash":"d18c4124a5dd19c76d94e5ffc97c687f","datetime":{"high":0,"low":1587330986}},{"path":"ProjectSettings/ProjectSettings.asset","hash":"7c160880cc80cb43d61c50087c903676","datetime":{"high":0,"low":1587330986}},{"path":"ProjectSettings/ProjectVersion.txt","hash":"f409cb160207baffb03a352ca71c75ca","datetime":{"high":0,"low":1587270176}},{"path":"ProjectSettings/QualitySettings.asset","hash":"2f75138ad488a98f47208aff92c30356","datetime":{"high":0,"low":1587330986}},{"path":"ProjectSettings/TagManager.asset","hash":"abc7a1530a9aafae8db6fa4b4082a049","datetime":{"high":0,"low":1587330986}},{"path":"ProjectSettings/TimeManager.asset","hash":"a4f23c9e1fc6dfd9fc5e206461b5fd7a","datetime":{"high":0,"low":1587330986}},{"path":"ProjectSettings/UnityConnectSettings.asset","hash":"ff6f3061da5eb8b6b1ac332ad359266b","datetime":{"high":0,"low":1587330986}},{"path":"ProjectSettings/VFXManager.asset","hash":"d8d2bcdd05b8bf5f6968327a25c24a4e","datetime":{"high":0,"low":1587330986}}],"revisions":{"currRevisionID":"cdb04bd2e4a83f3a3044010a144f4d35858f1d72","headRevisionID":"cdb04bd2e4a83f3a3044010a144f4d35858f1d72"},"updateState":{"currTransactionID":""},"conflicts":[],"associatedConflicts":[]} \ No newline at end of file diff --git a/Library/CurrentLayout-default.dwlt b/Library/CurrentLayout-default.dwlt new file mode 100644 index 0000000..a7d3817 --- /dev/null +++ b/Library/CurrentLayout-default.dwlt @@ -0,0 +1,786 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &1 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 1 + m_Script: {fileID: 12004, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_PixelRect: + serializedVersion: 2 + x: 4 + y: 91 + width: 1912 + height: 920 + m_ShowMode: 4 + m_Title: + m_RootView: {fileID: 7} + m_MinSize: {x: 875, y: 300} + m_MaxSize: {x: 10000, y: 10000} + m_Maximized: 0 +--- !u!114 &2 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0} + m_Name: GameView + m_EditorClassIdentifier: + m_Children: [] + m_Position: + serializedVersion: 2 + x: 995 + y: 0 + width: 529 + height: 522 + m_MinSize: {x: 202, y: 221} + m_MaxSize: {x: 4002, y: 4021} + m_ActualView: {fileID: 18} + m_Panes: + - {fileID: 18} + m_Selected: 0 + m_LastSelected: 0 +--- !u!114 &3 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 1 + m_Script: {fileID: 12010, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_Children: + - {fileID: 10} + - {fileID: 4} + m_Position: + serializedVersion: 2 + x: 0 + y: 30 + width: 1912 + height: 870 + m_MinSize: {x: 881, y: 492} + m_MaxSize: {x: 16006, y: 14042} + vertical: 0 + controlID: 39 +--- !u!114 &4 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 1 + m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_Children: [] + m_Position: + serializedVersion: 2 + x: 1524 + y: 0 + width: 388 + height: 870 + m_MinSize: {x: 276, y: 71} + m_MaxSize: {x: 4001, y: 4021} + m_ActualView: {fileID: 15} + m_Panes: + - {fileID: 15} + m_Selected: 0 + m_LastSelected: 0 +--- !u!114 &5 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 1 + m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_Children: [] + m_Position: + serializedVersion: 2 + x: 0 + y: 0 + width: 283 + height: 522 + m_MinSize: {x: 201, y: 221} + m_MaxSize: {x: 4001, y: 4021} + m_ActualView: {fileID: 16} + m_Panes: + - {fileID: 16} + m_Selected: 0 + m_LastSelected: 0 +--- !u!114 &6 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 1 + m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0} + m_Name: ProjectBrowser + m_EditorClassIdentifier: + m_Children: [] + m_Position: + serializedVersion: 2 + x: 0 + y: 522 + width: 1524 + height: 348 + m_MinSize: {x: 231, y: 271} + m_MaxSize: {x: 10001, y: 10021} + m_ActualView: {fileID: 14} + m_Panes: + - {fileID: 14} + - {fileID: 19} + m_Selected: 0 + m_LastSelected: 1 +--- !u!114 &7 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 1 + m_Script: {fileID: 12008, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_Children: + - {fileID: 8} + - {fileID: 3} + - {fileID: 9} + m_Position: + serializedVersion: 2 + x: 0 + y: 0 + width: 1912 + height: 920 + m_MinSize: {x: 875, y: 300} + m_MaxSize: {x: 10000, y: 10000} +--- !u!114 &8 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 1 + m_Script: {fileID: 12011, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_Children: [] + m_Position: + serializedVersion: 2 + x: 0 + y: 0 + width: 1912 + height: 30 + m_MinSize: {x: 0, y: 0} + m_MaxSize: {x: 0, y: 0} + m_LastLoadedLayoutName: +--- !u!114 &9 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 1 + m_Script: {fileID: 12042, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_Children: [] + m_Position: + serializedVersion: 2 + x: 0 + y: 900 + width: 1912 + height: 20 + m_MinSize: {x: 0, y: 0} + m_MaxSize: {x: 0, y: 0} +--- !u!114 &10 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 1 + m_Script: {fileID: 12010, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_Children: + - {fileID: 11} + - {fileID: 6} + m_Position: + serializedVersion: 2 + x: 0 + y: 0 + width: 1524 + height: 870 + m_MinSize: {x: 605, y: 492} + m_MaxSize: {x: 12005, y: 14042} + vertical: 1 + controlID: 40 +--- !u!114 &11 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 1 + m_Script: {fileID: 12010, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_Children: + - {fileID: 5} + - {fileID: 12} + - {fileID: 2} + m_Position: + serializedVersion: 2 + x: 0 + y: 0 + width: 1524 + height: 522 + m_MinSize: {x: 605, y: 221} + m_MaxSize: {x: 12005, y: 4021} + vertical: 0 + controlID: 41 +--- !u!114 &12 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 1 + m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0} + m_Name: SceneView + m_EditorClassIdentifier: + m_Children: [] + m_Position: + serializedVersion: 2 + x: 283 + y: 0 + width: 712 + height: 522 + m_MinSize: {x: 202, y: 221} + m_MaxSize: {x: 4002, y: 4021} + m_ActualView: {fileID: 17} + m_Panes: + - {fileID: 17} + - {fileID: 13} + m_Selected: 0 + m_LastSelected: 0 +--- !u!114 &13 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 1 + m_Script: {fileID: 12111, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_MinSize: {x: 400, y: 100} + m_MaxSize: {x: 2048, y: 2048} + m_TitleContent: + m_Text: Asset Store + m_Image: {fileID: -8693916549880196297, guid: 0000000000000000d000000000000000, + type: 0} + m_Tooltip: + m_Pos: + serializedVersion: 2 + x: 468 + y: 181 + width: 973 + height: 501 + m_ViewDataDictionary: {fileID: 0} +--- !u!114 &14 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 1 + m_Script: {fileID: 12014, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_MinSize: {x: 230, y: 250} + m_MaxSize: {x: 10000, y: 10000} + m_TitleContent: + m_Text: Project + m_Image: {fileID: -5467254957812901981, guid: 0000000000000000d000000000000000, + type: 0} + m_Tooltip: + m_Pos: + serializedVersion: 2 + x: 4 + y: 670 + width: 1523 + height: 327 + m_ViewDataDictionary: {fileID: 0} + m_SearchFilter: + m_NameFilter: + m_ClassNames: [] + m_AssetLabels: [] + m_AssetBundleNames: [] + m_VersionControlStates: [] + m_SoftLockControlStates: [] + m_ReferencingInstanceIDs: + m_SceneHandles: + m_ShowAllHits: 0 + m_SkipHidden: 0 + m_SearchArea: 1 + m_Folders: + - Assets/Materials + m_ViewMode: 1 + m_StartGridSize: 64 + m_LastFolders: + - Assets/Materials + m_LastFoldersGridSize: -1 + m_LastProjectPath: /run/media/storage/user-files/Documents/Unity/SandboxDemo + m_LockTracker: + m_IsLocked: 0 + m_FolderTreeState: + scrollPos: {x: 0, y: 0} + m_SelectedIDs: 06350000 + m_LastClickedID: 13574 + m_ExpandedIDs: 000000008633000000ca9a3b + m_RenameOverlay: + m_UserAcceptedRename: 0 + m_Name: + m_OriginalName: + m_EditFieldRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + m_UserData: 0 + m_IsWaitingForDelay: 0 + m_IsRenaming: 0 + m_OriginalEventType: 11 + m_IsRenamingFilename: 1 + m_ClientGUIView: {fileID: 0} + m_SearchString: + m_CreateAssetUtility: + m_EndAction: {fileID: 0} + m_InstanceID: 0 + m_Path: + m_Icon: {fileID: 0} + m_ResourceFile: + m_AssetTreeState: + scrollPos: {x: 0, y: 0} + m_SelectedIDs: + m_LastClickedID: 0 + m_ExpandedIDs: 0000000086330000 + m_RenameOverlay: + m_UserAcceptedRename: 0 + m_Name: + m_OriginalName: + m_EditFieldRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + m_UserData: 0 + m_IsWaitingForDelay: 0 + m_IsRenaming: 0 + m_OriginalEventType: 11 + m_IsRenamingFilename: 1 + m_ClientGUIView: {fileID: 0} + m_SearchString: + m_CreateAssetUtility: + m_EndAction: {fileID: 0} + m_InstanceID: 0 + m_Path: + m_Icon: {fileID: 0} + m_ResourceFile: + m_ListAreaState: + m_SelectedInstanceIDs: + m_LastClickedInstanceID: 0 + m_HadKeyboardFocusLastEvent: 1 + m_ExpandedInstanceIDs: c623000000000000 + m_RenameOverlay: + m_UserAcceptedRename: 0 + m_Name: + m_OriginalName: + m_EditFieldRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + m_UserData: 0 + m_IsWaitingForDelay: 0 + m_IsRenaming: 0 + m_OriginalEventType: 11 + m_IsRenamingFilename: 1 + m_ClientGUIView: {fileID: 0} + m_CreateAssetUtility: + m_EndAction: {fileID: 0} + m_InstanceID: 0 + m_Path: + m_Icon: {fileID: 0} + m_ResourceFile: + m_NewAssetIndexInList: -1 + m_ScrollPosition: {x: 0, y: 0} + m_GridSize: 64 + m_SkipHiddenPackages: 0 + m_DirectoriesAreaWidth: 115 +--- !u!114 &15 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 1 + m_Script: {fileID: 12019, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_MinSize: {x: 275, y: 50} + m_MaxSize: {x: 4000, y: 4000} + m_TitleContent: + m_Text: Inspector + m_Image: {fileID: -2667387946076563598, guid: 0000000000000000d000000000000000, + type: 0} + m_Tooltip: + m_Pos: + serializedVersion: 2 + x: 1528 + y: 148 + width: 387 + height: 849 + m_ViewDataDictionary: {fileID: 0} + m_OpenAddComponentMenu: 0 + m_ObjectsLockedBeforeSerialization: [] + m_InstanceIDsLockedBeforeSerialization: + m_LockTracker: + m_IsLocked: 0 + m_PreviewResizer: + m_CachedPref: 160 + m_ControlHash: -371814159 + m_PrefName: Preview_InspectorPreview + m_PreviewWindow: {fileID: 0} + m_LastInspectedObjectInstanceID: -1 + m_LastVerticalScrollValue: 0 +--- !u!114 &16 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 1 + m_Script: {fileID: 12061, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_MinSize: {x: 200, y: 200} + m_MaxSize: {x: 4000, y: 4000} + m_TitleContent: + m_Text: Hierarchy + m_Image: {fileID: 7966133145522015247, guid: 0000000000000000d000000000000000, + type: 0} + m_Tooltip: + m_Pos: + serializedVersion: 2 + x: 4 + y: 148 + width: 282 + height: 501 + m_ViewDataDictionary: {fileID: 0} + m_SceneHierarchy: + m_TreeViewState: + scrollPos: {x: 0, y: 0} + m_SelectedIDs: cae8ffff + m_LastClickedID: -5942 + m_ExpandedIDs: cae8ffff6efbffff + m_RenameOverlay: + m_UserAcceptedRename: 0 + m_Name: + m_OriginalName: + m_EditFieldRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + m_UserData: 0 + m_IsWaitingForDelay: 0 + m_IsRenaming: 0 + m_OriginalEventType: 11 + m_IsRenamingFilename: 0 + m_ClientGUIView: {fileID: 0} + m_SearchString: + m_ExpandedScenes: [] + m_CurrenRootInstanceID: 0 + m_LockTracker: + m_IsLocked: 0 + m_CurrentSortingName: TransformSorting + m_WindowGUID: e29b2b32ed3c126a685778613cbbb555 +--- !u!114 &17 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 1 + m_Script: {fileID: 12013, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_MinSize: {x: 200, y: 200} + m_MaxSize: {x: 4000, y: 4000} + m_TitleContent: + m_Text: Scene + m_Image: {fileID: 2593428753322112591, guid: 0000000000000000d000000000000000, + type: 0} + m_Tooltip: + m_Pos: + serializedVersion: 2 + x: 0 + y: 0 + width: 710 + height: 501 + m_ViewDataDictionary: {fileID: 0} + m_ShowContextualTools: 0 + m_WindowGUID: f830693e013110b43b07306639a5e0ee + m_Gizmos: 1 + m_SceneIsLit: 1 + m_SceneLighting: 1 + m_2DMode: 0 + m_isRotationLocked: 0 + m_PlayAudio: 0 + m_AudioPlay: 0 + m_Position: + m_Target: {x: 4.736483, y: -5.0127087, z: 8.542459} + speed: 2 + m_Value: {x: 4.736483, y: -5.0127087, z: 8.542459} + m_RenderMode: 0 + m_CameraMode: + drawMode: 0 + name: Shaded + section: Shading Mode + m_ValidateTrueMetals: 0 + m_DoValidateTrueMetals: 0 + m_ExposureSliderValue: 0 + m_ExposureSliderMax: 10 + m_SceneViewState: + showFog: 1 + showMaterialUpdate: 0 + showSkybox: 1 + showFlares: 1 + showImageEffects: 1 + showParticleSystems: 1 + m_Grid: + xGrid: + m_Fade: + m_Target: 0 + speed: 2 + m_Value: 0 + m_Color: {r: 0.5, g: 0.5, b: 0.5, a: 0.4} + m_Pivot: {x: 0, y: 0, z: 0} + m_Size: {x: 0, y: 0} + yGrid: + m_Fade: + m_Target: 1 + speed: 2 + m_Value: 1 + m_Color: {r: 0.5, g: 0.5, b: 0.5, a: 0.4} + m_Pivot: {x: 0, y: 0, z: 0} + m_Size: {x: 1, y: 1} + zGrid: + m_Fade: + m_Target: 0 + speed: 2 + m_Value: 1 + m_Color: {r: 0.5, g: 0.5, b: 0.5, a: 0.4} + m_Pivot: {x: 0, y: 0, z: 0} + m_Size: {x: 1, y: 1} + m_ShowGrid: 1 + m_GridAxis: 1 + m_gridOpacity: 0.5 + m_Rotation: + m_Target: {x: 0.38501477, y: 0.19830254, z: -0.085084215, w: 0.8973318} + speed: 2 + m_Value: {x: 0.38328218, y: 0.20246813, z: -0.08651215, w: 0.89700454} + m_Size: + m_Target: 16.228529 + speed: 2 + m_Value: 15.529694 + m_Ortho: + m_Target: 0 + speed: 2 + m_Value: 0 + m_CameraSettings: + m_Speed: 1 + m_SpeedNormalized: 0.5 + m_SpeedMin: 0.01 + m_SpeedMax: 2 + m_EasingEnabled: 1 + m_EasingDuration: 0.4 + m_AccelerationEnabled: 1 + m_FieldOfView: 90 + m_NearClip: 0.03 + m_FarClip: 10000 + m_DynamicClip: 1 + m_OcclusionCulling: 0 + m_LastSceneViewRotation: {x: 0.3206344, y: 0.063723594, z: -0.021625493, w: 0.94481015} + m_LastSceneViewOrtho: 0 + m_ReplacementShader: {fileID: 0} + m_ReplacementString: + m_SceneVisActive: 1 + m_LastLockedObject: {fileID: 0} + m_ViewIsLockedToObject: 0 +--- !u!114 &18 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 1 + m_Script: {fileID: 12015, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_MinSize: {x: 200, y: 200} + m_MaxSize: {x: 4000, y: 4000} + m_TitleContent: + m_Text: Game + m_Image: {fileID: -6423792434712278376, guid: 0000000000000000d000000000000000, + type: 0} + m_Tooltip: + m_Pos: + serializedVersion: 2 + x: 999 + y: 148 + width: 527 + height: 501 + m_ViewDataDictionary: {fileID: 0} + m_SerializedViewsNames: [] + m_SerializedViewsValues: [] + m_PlayModeViewName: GameView + m_ShowGizmos: 0 + m_TargetDisplay: 0 + m_ClearColor: {r: 0, g: 0, b: 0, a: 0} + m_TargetSize: {x: 527, y: 480} + m_TextureFilterMode: 0 + m_TextureHideFlags: 61 + m_RenderIMGUI: 1 + m_MaximizeOnPlay: 0 + m_VSyncEnabled: 0 + m_Gizmos: 0 + m_Stats: 0 + m_SelectedSizes: 00000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_ZoomArea: + m_HRangeLocked: 0 + m_VRangeLocked: 0 + hZoomLockedByDefault: 0 + vZoomLockedByDefault: 0 + m_HBaseRangeMin: -263.5 + m_HBaseRangeMax: 263.5 + m_VBaseRangeMin: -240 + m_VBaseRangeMax: 240 + m_HAllowExceedBaseRangeMin: 1 + m_HAllowExceedBaseRangeMax: 1 + m_VAllowExceedBaseRangeMin: 1 + m_VAllowExceedBaseRangeMax: 1 + m_ScaleWithWindow: 0 + m_HSlider: 0 + m_VSlider: 0 + m_IgnoreScrollWheelUntilClicked: 0 + m_EnableMouseInput: 1 + m_EnableSliderZoomHorizontal: 0 + m_EnableSliderZoomVertical: 0 + m_UniformScale: 1 + m_UpDirection: 1 + m_DrawArea: + serializedVersion: 2 + x: 0 + y: 21 + width: 527 + height: 480 + m_Scale: {x: 1, y: 1} + m_Translation: {x: 263.5, y: 240} + m_MarginLeft: 0 + m_MarginRight: 0 + m_MarginTop: 0 + m_MarginBottom: 0 + m_LastShownAreaInsideMargins: + serializedVersion: 2 + x: -263.5 + y: -240 + width: 527 + height: 480 + m_MinimalGUI: 1 + m_defaultScale: 1 + m_LastWindowPixelSize: {x: 527, y: 501} + m_ClearInEditMode: 1 + m_NoCameraWarning: 1 + m_LowResolutionForAspectRatios: 01000000000000000000 + m_XRRenderMode: 0 + m_RenderTexture: {fileID: 0} +--- !u!114 &19 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 1 + m_Script: {fileID: 12003, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_MinSize: {x: 100, y: 100} + m_MaxSize: {x: 4000, y: 4000} + m_TitleContent: + m_Text: Console + m_Image: {fileID: -4327648978806127646, guid: 0000000000000000d000000000000000, + type: 0} + m_Tooltip: + m_Pos: + serializedVersion: 2 + x: 0 + y: 664 + width: 1529 + height: 337 + m_ViewDataDictionary: {fileID: 0} diff --git a/Library/EditorInstance.json b/Library/EditorInstance.json new file mode 100644 index 0000000..f967819 --- /dev/null +++ b/Library/EditorInstance.json @@ -0,0 +1,6 @@ +{ + "process_id" : 6042, + "version" : "2019.3.6f1", + "app_path" : "/run/media/storage/user-files/Unity/Hub/Editor/2019.3.6f1/Editor/Unity", + "app_contents_path" : "/run/media/storage/user-files/Unity/Hub/Editor/2019.3.6f1/Editor/Data" +} \ No newline at end of file diff --git a/Library/EditorOnlyScriptingSettings.json b/Library/EditorOnlyScriptingSettings.json new file mode 100644 index 0000000..8e1824c --- /dev/null +++ b/Library/EditorOnlyScriptingSettings.json @@ -0,0 +1 @@ +{"m_DefineSymbols":[],"m_AllowUnsafeCode":false} \ No newline at end of file diff --git a/Library/EditorSnapSettings.asset b/Library/EditorSnapSettings.asset new file mode 100644 index 0000000..7a90624 --- /dev/null +++ b/Library/EditorSnapSettings.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &1 +MonoBehaviour: + m_ObjectHideFlags: 61 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 13954, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_SnapEnabled: 0 + m_SnapSettings: + m_SnapValue: {x: 0.25, y: 0.25, z: 0.25} + m_SnapMultiplier: {x: 2048, y: 2048, z: 2048} + m_Rotation: 15 + m_Scale: 1 diff --git a/Library/EditorUserBuildSettings.asset b/Library/EditorUserBuildSettings.asset new file mode 100644 index 0000000..a5d5516 Binary files /dev/null and b/Library/EditorUserBuildSettings.asset differ diff --git a/Library/EditorUserSettings.asset b/Library/EditorUserSettings.asset new file mode 100644 index 0000000..4681d1d --- /dev/null +++ b/Library/EditorUserSettings.asset @@ -0,0 +1,19 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!162 &1 +EditorUserSettings: + m_ObjectHideFlags: 0 + serializedVersion: 4 + m_ConfigSettings: + vcSharedLogLevel: + value: 0d5e400f0650 + flags: 0 + m_VCAutomaticAdd: 1 + m_VCDebugCom: 0 + m_VCDebugCmd: 0 + m_VCDebugOut: 0 + m_SemanticMergeMode: 2 + m_VCShowFailedCheckout: 1 + m_VCOverwriteFailedCheckoutAssets: 1 + m_VCOverlayIcons: 1 + m_VCAllowAsyncUpdate: 0 diff --git a/Library/InspectorExpandedItems.asset b/Library/InspectorExpandedItems.asset new file mode 100644 index 0000000..19fe2fe Binary files /dev/null and b/Library/InspectorExpandedItems.asset differ diff --git a/Library/LastSceneManagerSetup.txt b/Library/LastSceneManagerSetup.txt new file mode 100644 index 0000000..6a5704f --- /dev/null +++ b/Library/LastSceneManagerSetup.txt @@ -0,0 +1,5 @@ +sceneSetups: +- path: Assets/Scenes/SampleScene.unity + isLoaded: 1 + isActive: 1 + isSubScene: 0 diff --git a/Library/LibraryFormatVersion.txt b/Library/LibraryFormatVersion.txt new file mode 100644 index 0000000..6185f09 --- /dev/null +++ b/Library/LibraryFormatVersion.txt @@ -0,0 +1,2 @@ +unityRebuildLibraryVersion: 11 +unityForwardCompatibleVersion: 40 diff --git a/Library/MonoManager.asset b/Library/MonoManager.asset new file mode 100644 index 0000000..175c2bf Binary files /dev/null and b/Library/MonoManager.asset differ diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/.npmignore b/Library/PackageCache/com.unity.collab-proxy@1.2.16/.npmignore new file mode 100644 index 0000000..1586aea --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/.npmignore @@ -0,0 +1,6 @@ + +automation/** +utr_output/** +.Editor/** +.yamato/** +*.zip* \ No newline at end of file diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/CHANGELOG.md b/Library/PackageCache/com.unity.collab-proxy@1.2.16/CHANGELOG.md new file mode 100644 index 0000000..3c6c85d --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/CHANGELOG.md @@ -0,0 +1,31 @@ +# Changelog +All notable changes to this package will be documented in this file. + +The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). + +## [1.2.16] - 2019-02-11 +Update stylesheet to pass USS validation + +## [1.2.15] - 2018-11-16 +Added support for non-experimental UIElements. + +## [1.2.11] - 2018-09-04 +Made some performance improvements to reduce impact on ReloadAssemblies. + +## [1.2.9] - 2018-08-13 +Test issues for the Collab History Window are now fixed. + +## [1.2.7] - 2018-08-07 +Toolbar drop-down will no longer show up when package is uninstalled. + +## [1.2.6] - 2018-06-15 +Fixed an issue where Collab's History window wouldn't load properly. + +## [1.2.5] - 2018-05-21 +This is the first release of *Unity Package CollabProxy*. + +### Added +- Collab history and toolbar windows +- Collab view and presenter classes +- Collab Editor tests for view and presenter diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/CHANGELOG.md.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.16/CHANGELOG.md.meta new file mode 100644 index 0000000..38274a6 --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/CHANGELOG.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 782c49e6e68074dc7ba12c95537825ce +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/DEPENDENCIES.md b/Library/PackageCache/com.unity.collab-proxy@1.2.16/DEPENDENCIES.md new file mode 100644 index 0000000..57808d5 --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/DEPENDENCIES.md @@ -0,0 +1,9 @@ + + + + Unity.CollabProxy.Dependencies + 1.1.0-experimental + Rohit Garg + Dependencies for the CollabProxy package + + diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/DEPENDENCIES.md.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.16/DEPENDENCIES.md.meta new file mode 100644 index 0000000..24e45c2 --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/DEPENDENCIES.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 470530e667ad4475786b28fa3187ce95 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/Documentation~/collab-proxy.md b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Documentation~/collab-proxy.md new file mode 100644 index 0000000..c1800d6 --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Documentation~/collab-proxy.md @@ -0,0 +1,5 @@ +# About Unity Collaborate + +Collaborate is a simple way for teams to save, share, and sync their Unity project. + +Please refer to the online documentation [here.](https://docs.unity3d.com/Manual/UnityCollaborate.html) \ No newline at end of file diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor.meta new file mode 100644 index 0000000..b54ca87 --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d31e5d760880a4e52a3a75322481d0d2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/AssemblyInfo.cs b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/AssemblyInfo.cs new file mode 100644 index 0000000..d7266b6 --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/AssemblyInfo.cs @@ -0,0 +1,4 @@ +using System.Runtime.CompilerServices; +using UnityEngine; + +[assembly: InternalsVisibleTo("Unity.CollabProxy.EditorTests")] diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/AssemblyInfo.cs.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/AssemblyInfo.cs.meta new file mode 100644 index 0000000..e384b31 --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/AssemblyInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d4ef26aa386b44923b61c9c4b505a67c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab.meta new file mode 100644 index 0000000..694fc4e --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c18cb9388313e4287ad5895ee735c47d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Bootstrap.cs b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Bootstrap.cs new file mode 100644 index 0000000..029ce1c --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Bootstrap.cs @@ -0,0 +1,24 @@ +using UnityEditor; +using UnityEditor.Collaboration; +using UnityEngine; + +namespace CollabProxy.UI +{ + [InitializeOnLoad] + public class Bootstrap + { + private const float kCollabToolbarButtonWidth = 78.0f; + + static Bootstrap() + { + Collab.ShowHistoryWindow = CollabHistoryWindow.ShowHistoryWindow; + Collab.ShowToolbarAtPosition = CollabToolbarWindow.ShowCenteredAtPosition; + Collab.IsToolbarVisible = CollabToolbarWindow.IsVisible; + Collab.CloseToolbar = CollabToolbarWindow.CloseToolbar; + Toolbar.AddSubToolbar(new CollabToolbarButton + { + Width = kCollabToolbarButtonWidth + }); + } + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Bootstrap.cs.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Bootstrap.cs.meta new file mode 100644 index 0000000..641d54b --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Bootstrap.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8aa8171e088f94069bbd1978a053f7dd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabAnalytics.cs b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabAnalytics.cs new file mode 100644 index 0000000..c7f90aa --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabAnalytics.cs @@ -0,0 +1,21 @@ +using System; + +namespace UnityEditor.Collaboration +{ + internal static class CollabAnalytics + { + [Serializable] + private struct CollabUserActionAnalyticsEvent + { + public string category; + public string action; + } + + public static void SendUserAction(string category, string action) + { + EditorAnalytics.SendCollabUserAction(new CollabUserActionAnalyticsEvent() { category = category, action = action }); + } + + public static readonly string historyCategoryString = "History"; + }; +} diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabAnalytics.cs.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabAnalytics.cs.meta new file mode 100644 index 0000000..2f46e9b --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabAnalytics.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f944311c8fff2479fa3ba741f6039fc8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabHistoryWindow.cs b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabHistoryWindow.cs new file mode 100644 index 0000000..b855bce --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabHistoryWindow.cs @@ -0,0 +1,330 @@ +using System; +using System.Linq; +using System.Collections.Generic; +using UnityEditor.Collaboration; + +#if UNITY_2019_1_OR_NEWER +using UnityEditor.UIElements; +using UnityEngine.UIElements; +#else +using UnityEditor.Experimental.UIElements; +using UnityEngine.Experimental.UIElements; +using UnityEngine.Experimental.UIElements.StyleEnums; +#endif + +using UnityEngine; +using UnityEditor.Connect; + +namespace UnityEditor +{ + internal class CollabHistoryWindow : EditorWindow, ICollabHistoryWindow + { +#if UNITY_2019_1_OR_NEWER + private const string ResourcesPath = "Packages/com.unity.collab-proxy/Editor/Resources/Styles/"; +#else + private const string ResourcesPath = "StyleSheets/"; +#endif + + + const string kWindowTitle = "Collab History"; + const string kServiceUrl = "developer.cloud.unity3d.com"; + + [MenuItem("Window/Asset Management/Collab History", false, 1)] + public static void ShowHistoryWindow() + { + EditorWindow.GetWindow(kWindowTitle); + } + + [MenuItem("Window/Asset Management/Collab History", true)] + public static bool ValidateShowHistoryWindow() + { + return Collab.instance.IsCollabEnabledForCurrentProject(); + } + + CollabHistoryPresenter m_Presenter; + Dictionary m_Views; + List m_HistoryItems = new List(); + HistoryState m_State; + VisualElement m_Container; + PagedListView m_Pager; + ScrollView m_HistoryView; + int m_ItemsPerPage = 5; + string m_InProgressRev; + bool m_RevisionActionsEnabled; + + public CollabHistoryWindow() + { + minSize = new Vector2(275, 50); + } + + public void OnEnable() + { + SetupGUI(); + name = "CollabHistory"; + + if (m_Presenter == null) + { + m_Presenter = new CollabHistoryPresenter(this, new CollabHistoryItemFactory(), new RevisionsService(Collab.instance, UnityConnect.instance)); + } + m_Presenter.OnWindowEnabled(); + } + + public void OnDisable() + { + m_Presenter.OnWindowDisabled(); + } + + public bool revisionActionsEnabled + { + get { return m_RevisionActionsEnabled; } + set + { + if (m_RevisionActionsEnabled == value) + return; + + m_RevisionActionsEnabled = value; + foreach (var historyItem in m_HistoryItems) + { + historyItem.RevisionActionsEnabled = value; + } + } + } + + private void AddStyleSheetPath(VisualElement root, string path) + { +#if UNITY_2019_1_OR_NEWER + root.styleSheets.Add(EditorGUIUtility.Load(path) as StyleSheet); +#else + root.AddStyleSheetPath(path); +#endif + } + + + public void SetupGUI() + { +#if UNITY_2019_1_OR_NEWER + var root = this.rootVisualElement; +#else + var root = this.GetRootVisualContainer(); +#endif + AddStyleSheetPath(root, ResourcesPath + "CollabHistoryCommon.uss"); + if (EditorGUIUtility.isProSkin) + { + AddStyleSheetPath(root, ResourcesPath + "CollabHistoryDark.uss"); + } + else + { + AddStyleSheetPath(root, ResourcesPath + "CollabHistoryLight.uss"); + } + + m_Container = new VisualElement(); + m_Container.StretchToParentSize(); + root.Add(m_Container); + + m_Pager = new PagedListView() + { + name = "PagedElement", + pageSize = m_ItemsPerPage + }; + + var errorView = new StatusView() + { + message = "An Error Occurred", + icon = EditorGUIUtility.LoadIconRequired("Collab.Warning") as Texture, + }; + + var noInternetView = new StatusView() + { + message = "No Internet Connection", + icon = EditorGUIUtility.LoadIconRequired("Collab.NoInternet") as Texture, + }; + + var maintenanceView = new StatusView() + { + message = "Maintenance", + }; + + var loginView = new StatusView() + { + message = "Sign in to access Collaborate", + buttonText = "Sign in...", + callback = SignInClick, + }; + + var noSeatView = new StatusView() + { + message = "Ask your project owner for access to Unity Teams", + buttonText = "Learn More", + callback = NoSeatClick, + }; + + var waitingView = new StatusView() + { + message = "Updating...", + }; + + m_HistoryView = new ScrollView() { name = "HistoryContainer", showHorizontal = false}; + m_HistoryView.contentContainer.StretchToParentWidth(); + m_HistoryView.Add(m_Pager); + + m_Views = new Dictionary() + { + {HistoryState.Error, errorView}, + {HistoryState.Offline, noInternetView}, + {HistoryState.Maintenance, maintenanceView}, + {HistoryState.LoggedOut, loginView}, + {HistoryState.NoSeat, noSeatView}, + {HistoryState.Waiting, waitingView}, + {HistoryState.Ready, m_HistoryView} + }; + } + + public void UpdateState(HistoryState state, bool force) + { + if (state == m_State && !force) + return; + + m_State = state; + switch (state) + { + case HistoryState.Ready: + UpdateHistoryView(m_Pager); + break; + case HistoryState.Disabled: + Close(); + return; + } + + m_Container.Clear(); + m_Container.Add(m_Views[m_State]); + } + + public void UpdateRevisions(IEnumerable datas, string tip, int totalRevisions, int currentPage) + { + var elements = new List(); + var isFullDateObtained = false; // Has everything from this date been obtained? + m_HistoryItems.Clear(); + + if (datas != null) + { + DateTime currentDate = DateTime.MinValue; + foreach (var data in datas) + { + if (data.timeStamp.Date != currentDate.Date) + { + elements.Add(new CollabHistoryRevisionLine(data.timeStamp, isFullDateObtained)); + currentDate = data.timeStamp; + } + + var item = new CollabHistoryItem(data); + m_HistoryItems.Add(item); + + var container = new VisualElement(); + container.style.flexDirection = FlexDirection.Row; + if (data.current) + { + isFullDateObtained = true; + container.AddToClassList("currentRevision"); + container.AddToClassList("obtainedRevision"); + } + else if (data.obtained) + { + container.AddToClassList("obtainedRevision"); + } + else + { + container.AddToClassList("absentRevision"); + } + // If we use the index as-is, the latest commit will become #1, but we want it to be last + container.Add(new CollabHistoryRevisionLine(data.index)); + container.Add(item); + elements.Add(container); + } + } + + m_HistoryView.scrollOffset = new Vector2(0, 0); + m_Pager.totalItems = totalRevisions; + m_Pager.curPage = currentPage; + m_Pager.items = elements; + } + + public string inProgressRevision + { + get { return m_InProgressRev; } + set + { + m_InProgressRev = value; + foreach (var historyItem in m_HistoryItems) + { + historyItem.SetInProgressStatus(value); + } + } + } + + public int itemsPerPage + { + set + { + if (m_ItemsPerPage == value) + return; + m_Pager.pageSize = m_ItemsPerPage; + } + } + + public PageChangeAction OnPageChangeAction + { + set { m_Pager.OnPageChanged = value; } + } + + public RevisionAction OnGoBackAction + { + set { CollabHistoryItem.s_OnGoBack = value; } + } + + public RevisionAction OnUpdateAction + { + set { CollabHistoryItem.s_OnUpdate = value; } + } + + public RevisionAction OnRestoreAction + { + set { CollabHistoryItem.s_OnRestore = value; } + } + + public ShowBuildAction OnShowBuildAction + { + set { CollabHistoryItem.s_OnShowBuild = value; } + } + + public Action OnShowServicesAction + { + set { CollabHistoryItem.s_OnShowServices = value; } + } + + void UpdateHistoryView(VisualElement history) + { + } + + void NoSeatClick() + { + var connection = UnityConnect.instance; + var env = connection.GetEnvironment(); + // Map environment to url - prod is special + if (env == "production") + env = ""; + else + env += "-"; + + var url = "https://" + env + kServiceUrl + + "/orgs/" + connection.GetOrganizationId() + + "/projects/" + connection.GetProjectName() + + "/unity-teams/"; + Application.OpenURL(url); + } + + void SignInClick() + { + UnityConnect.instance.ShowLogin(); + } + } +} diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabHistoryWindow.cs.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabHistoryWindow.cs.meta new file mode 100644 index 0000000..74358d4 --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabHistoryWindow.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fed9dda667cab45d398d06402bba03f4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabToolbarButton.cs b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabToolbarButton.cs new file mode 100644 index 0000000..eebe4ac --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabToolbarButton.cs @@ -0,0 +1,297 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using UnityEditor.Collaboration; +using UnityEditor.Connect; +using UnityEditor.Web; +using UnityEngine; + +namespace UnityEditor +{ + internal class CollabToolbarButton : SubToolbar, IDisposable + { + // Must match s_CollabIcon array + enum CollabToolbarState + { + NeedToEnableCollab, + UpToDate, + Conflict, + OperationError, + ServerHasChanges, + FilesToPush, + InProgress, + Disabled, + Offline + } + + private class CollabToolbarContent + { + readonly string m_iconName; + readonly string m_toolTip; + readonly CollabToolbarState m_state; + + static Dictionary m_CollabIcons; + + public CollabToolbarState RegisteredForState + { + get { return m_state; } + } + + public GUIContent GuiContent + { + get + { + if (m_CollabIcons == null) + { + m_CollabIcons = new Dictionary(); + } + + if (!m_CollabIcons.ContainsKey(this)) + { + m_CollabIcons.Add(this, EditorGUIUtility.TrTextContentWithIcon("Collab", m_toolTip, m_iconName)); + } + + return m_CollabIcons[this]; + } + } + + public CollabToolbarContent(CollabToolbarState state, string iconName, string toolTip) + { + m_state = state; + m_iconName = iconName; + m_toolTip = toolTip; + } + } + + CollabToolbarContent[] m_toolbarContents; + CollabToolbarState m_CollabToolbarState = CollabToolbarState.UpToDate; + const float kCollabButtonWidth = 78.0f; + ButtonWithAnimatedIconRotation m_CollabButton; + string m_DynamicTooltip; + static bool m_ShowCollabTooltip = false; + + private GUIContent currentCollabContent + { + get + { + CollabToolbarContent toolbarContent = + m_toolbarContents.FirstOrDefault(c => c.RegisteredForState.Equals(m_CollabToolbarState)); + GUIContent content = new GUIContent(toolbarContent == null? m_toolbarContents.First().GuiContent : toolbarContent.GuiContent); + if (!m_ShowCollabTooltip) + { + content.tooltip = null; + } + else if (m_DynamicTooltip != "") + { + content.tooltip = m_DynamicTooltip; + } + + if (Collab.instance.AreTestsRunning()) + { + content.text = "CTF"; + } + + return content; + } + } + + public CollabToolbarButton() + { + m_toolbarContents = new[] + { + new CollabToolbarContent(CollabToolbarState.NeedToEnableCollab, "CollabNew", " You need to enable collab."), + new CollabToolbarContent(CollabToolbarState.UpToDate, "Collab", " You are up to date."), + new CollabToolbarContent(CollabToolbarState.Conflict, "CollabConflict", " Please fix your conflicts prior to publishing."), + new CollabToolbarContent(CollabToolbarState.OperationError, "CollabError", " Last operation failed. Please retry later."), + new CollabToolbarContent(CollabToolbarState.ServerHasChanges, "CollabPull", " Please update, there are server changes."), + new CollabToolbarContent(CollabToolbarState.FilesToPush, "CollabPush", " You have files to publish."), + new CollabToolbarContent(CollabToolbarState.InProgress, "CollabProgress", " Operation in progress."), + new CollabToolbarContent(CollabToolbarState.Disabled, "CollabNew", " Collab is disabled."), + new CollabToolbarContent(CollabToolbarState.Offline, "CollabNew", " Please check your network connection.") + }; + + Collab.instance.StateChanged += OnCollabStateChanged; + UnityConnect.instance.StateChanged += OnUnityConnectStateChanged; + UnityConnect.instance.UserStateChanged += OnUnityConnectUserStateChanged; + } + + void OnUnityConnectUserStateChanged(UserInfo state) + { + UpdateCollabToolbarState(); + } + + void OnUnityConnectStateChanged(ConnectInfo state) + { + UpdateCollabToolbarState(); + } + + public override void OnGUI(Rect rect) + { + DoCollabDropDown(rect); + } + + Rect GUIToScreenRect(Rect guiRect) + { + Vector2 screenPoint = GUIUtility.GUIToScreenPoint(new Vector2(guiRect.x, guiRect.y)); + guiRect.x = screenPoint.x; + guiRect.y = screenPoint.y; + return guiRect; + } + + void ShowPopup(Rect rect) + { + // window should be centered on the button + ReserveRight(kCollabButtonWidth / 2, ref rect); + ReserveBottom(5, ref rect); + // calculate screen rect before saving assets since it might open the AssetSaveDialog window + var screenRect = GUIToScreenRect(rect); + // save all the assets + AssetDatabase.SaveAssets(); + if (Collab.ShowToolbarAtPosition != null && Collab.ShowToolbarAtPosition(screenRect)) + { + GUIUtility.ExitGUI(); + } + } + + void DoCollabDropDown(Rect rect) + { + UpdateCollabToolbarState(); + GUIStyle collabButtonStyle = "OffsetDropDown"; + bool showPopup = Toolbar.requestShowCollabToolbar; + Toolbar.requestShowCollabToolbar = false; + + bool enable = !EditorApplication.isPlaying; + + using (new EditorGUI.DisabledScope(!enable)) + { + bool animate = m_CollabToolbarState == CollabToolbarState.InProgress; + + EditorGUIUtility.SetIconSize(new Vector2(12, 12)); + if (GetCollabButton().OnGUI(rect, currentCollabContent, animate, collabButtonStyle)) + { + showPopup = true; + } + EditorGUIUtility.SetIconSize(Vector2.zero); + } + + if (m_CollabToolbarState == CollabToolbarState.Disabled) + return; + + if (showPopup) + { + ShowPopup(rect); + } + } + + public void OnCollabStateChanged(CollabInfo info) + { + UpdateCollabToolbarState(); + } + + public void UpdateCollabToolbarState() + { + var currentCollabState = CollabToolbarState.UpToDate; + bool networkAvailable = UnityConnect.instance.connectInfo.online && UnityConnect.instance.connectInfo.loggedIn; + m_DynamicTooltip = ""; + + if (UnityConnect.instance.isDisableCollabWindow) + { + currentCollabState = CollabToolbarState.Disabled; + } + else if (networkAvailable) + { + Collab collab = Collab.instance; + CollabInfo currentInfo = collab.collabInfo; + UnityErrorInfo errInfo; + bool error = false; + if (collab.GetError((UnityConnect.UnityErrorFilter.ByContext | UnityConnect.UnityErrorFilter.ByChild), out errInfo)) + { + error = (errInfo.priority <= (int)UnityConnect.UnityErrorPriority.Error); + m_DynamicTooltip = errInfo.shortMsg; + } + + if (!currentInfo.ready) + { + currentCollabState = CollabToolbarState.InProgress; + } + else if (error) + { + currentCollabState = CollabToolbarState.OperationError; + } + else if (currentInfo.inProgress) + { + currentCollabState = CollabToolbarState.InProgress; + } + else + { + bool collabEnable = Collab.instance.IsCollabEnabledForCurrentProject(); + + if (UnityConnect.instance.projectInfo.projectBound == false || !collabEnable) + { + currentCollabState = CollabToolbarState.NeedToEnableCollab; + } + else if (currentInfo.update) + { + currentCollabState = CollabToolbarState.ServerHasChanges; + } + else if (currentInfo.conflict) + { + currentCollabState = CollabToolbarState.Conflict; + } + else if (currentInfo.publish) + { + currentCollabState = CollabToolbarState.FilesToPush; + } + } + } + else + { + currentCollabState = CollabToolbarState.Offline; + } + + if (Collab.IsToolbarVisible != null) + { + if (currentCollabState != m_CollabToolbarState || + Collab.IsToolbarVisible() == m_ShowCollabTooltip) + { + m_CollabToolbarState = currentCollabState; + m_ShowCollabTooltip = !Collab.IsToolbarVisible(); + Toolbar.RepaintToolbar(); + } + } + } + + void ReserveRight(float width, ref Rect pos) + { + pos.x += width; + } + + void ReserveBottom(float height, ref Rect pos) + { + pos.y += height; + } + + ButtonWithAnimatedIconRotation GetCollabButton() + { + if (m_CollabButton == null) + { + const int repaintsPerSecond = 20; + const float animSpeed = 500f; + const bool mouseDownButton = true; + m_CollabButton = new ButtonWithAnimatedIconRotation(() => (float)EditorApplication.timeSinceStartup * animSpeed, Toolbar.RepaintToolbar, repaintsPerSecond, mouseDownButton); + } + + return m_CollabButton; + } + + public void Dispose() + { + Collab.instance.StateChanged -= OnCollabStateChanged; + UnityConnect.instance.StateChanged -= OnUnityConnectStateChanged; + UnityConnect.instance.UserStateChanged -= OnUnityConnectUserStateChanged; + + if (m_CollabButton != null) + m_CollabButton.Clear(); + } + } +} // namespace \ No newline at end of file diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabToolbarButton.cs.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabToolbarButton.cs.meta new file mode 100644 index 0000000..949d8db --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabToolbarButton.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 882f1a4147a284f028899b9c018e63eb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabToolbarWindow.cs b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabToolbarWindow.cs new file mode 100644 index 0000000..2793875 --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabToolbarWindow.cs @@ -0,0 +1,137 @@ +using UnityEngine; +using UnityEditor.Collaboration; +using UnityEditor.Web; +using UnityEditor.Connect; + +namespace UnityEditor +{ + [InitializeOnLoad] + internal class WebViewStatic : ScriptableSingleton + { + [SerializeField] + WebView m_WebView; + + static public WebView GetWebView() + { + return instance.m_WebView; + } + + static public void SetWebView(WebView webView) + { + instance.m_WebView = webView; + } + } + + [InitializeOnLoad] + internal class CollabToolbarWindow : WebViewEditorStaticWindow, IHasCustomMenu + { + internal override WebView webView + { + get {return WebViewStatic.GetWebView(); } + set {WebViewStatic.SetWebView(value); } + } + + private const string kWindowName = "Unity Collab Toolbar"; + + private static long s_LastClosedTime; + private static CollabToolbarWindow s_CollabToolbarWindow; + + public static bool s_ToolbarIsVisible = false; + + const int kWindowWidth = 320; + const int kWindowHeight = 350; + + public static void CloseToolbar() + { + foreach (CollabToolbarWindow window in Resources.FindObjectsOfTypeAll()) + window.Close(); + } + + [MenuItem("Window/Asset Management/Collab Toolbar", false /*IsValidateFunction*/, 2, true /* IsInternalMenu */)] + public static CollabToolbarWindow ShowToolbarWindow() + { + //Create a new window if it does not exist + if (s_CollabToolbarWindow == null) + { + s_CollabToolbarWindow = GetWindow(false, kWindowName) as CollabToolbarWindow; + } + + return s_CollabToolbarWindow; + } + + [MenuItem("Window/Asset Management/Collab Toolbar", true /*IsValidateFunction*/)] + public static bool ValidateShowToolbarWindow() + { + return true; + } + + public static bool IsVisible() + { + return s_ToolbarIsVisible; + } + + public static bool ShowCenteredAtPosition(Rect buttonRect) + { + buttonRect.x -= kWindowWidth / 2; + // We could not use realtimeSinceStartUp since it is set to 0 when entering/exitting playmode, we assume an increasing time when comparing time. + long nowMilliSeconds = System.DateTime.Now.Ticks / System.TimeSpan.TicksPerMillisecond; + bool justClosed = nowMilliSeconds < s_LastClosedTime + 50; + if (!justClosed) + { + // Method may have been triggered programmatically, without a user event to consume. + if (Event.current.type != EventType.Layout) + { + Event.current.Use(); + } + if (s_CollabToolbarWindow == null) + s_CollabToolbarWindow = CreateInstance() as CollabToolbarWindow; + var windowSize = new Vector2(kWindowWidth, kWindowHeight); + s_CollabToolbarWindow.initialOpenUrl = "file:///" + EditorApplication.userJavascriptPackagesPath + "unityeditor-collab-toolbar/dist/index.html"; + s_CollabToolbarWindow.Init(); + s_CollabToolbarWindow.ShowAsDropDown(buttonRect, windowSize); + s_CollabToolbarWindow.OnFocus(); + return true; + } + return false; + } + + // Receives HTML title + public void OnReceiveTitle(string title) + { + titleContent.text = title; + } + + public new void OnInitScripting() + { + base.OnInitScripting(); + } + + public override void OnEnable() + { + minSize = new Vector2(kWindowWidth, kWindowHeight); + maxSize = new Vector2(kWindowWidth, kWindowHeight); + initialOpenUrl = "file:///" + EditorApplication.userJavascriptPackagesPath + "unityeditor-collab-toolbar/dist/index.html"; + base.OnEnable(); + s_ToolbarIsVisible = true; + } + + internal new void OnDisable() + { + s_LastClosedTime = System.DateTime.Now.Ticks / System.TimeSpan.TicksPerMillisecond; + if (s_CollabToolbarWindow) + { + s_ToolbarIsVisible = false; + NotifyVisibility(s_ToolbarIsVisible); + } + s_CollabToolbarWindow = null; + + base.OnDisable(); + } + + public new void OnDestroy() + { + OnLostFocus(); + base.OnDestroy(); + } + } +} diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabToolbarWindow.cs.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabToolbarWindow.cs.meta new file mode 100644 index 0000000..b08bf2a --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabToolbarWindow.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6f516f1ec21a54a59a92bf99db2d9535 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Presenters.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Presenters.meta new file mode 100644 index 0000000..9133153 --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Presenters.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d437fe60bb34f45728664a5d930c1635 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Presenters/CollabHistoryPresenter.cs b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Presenters/CollabHistoryPresenter.cs new file mode 100644 index 0000000..91d500b --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Presenters/CollabHistoryPresenter.cs @@ -0,0 +1,228 @@ +using System.Collections.Generic; +using UnityEditor.Connect; +using UnityEditor.Web; + +namespace UnityEditor.Collaboration +{ + internal class CollabHistoryPresenter + { + public const int ItemsPerPage = 5; + ICollabHistoryWindow m_Window; + ICollabHistoryItemFactory m_Factory; + IRevisionsService m_Service; + ConnectInfo m_ConnectState; + CollabInfo m_CollabState; + bool m_IsCollabError; + int m_TotalRevisions; + int m_CurrentPage; + int m_RequestedPage; + bool m_FetchInProgress; + + BuildAccess m_BuildAccess; + string m_ProgressRevision; + public bool BuildServiceEnabled {get; set; } + + public CollabHistoryPresenter(ICollabHistoryWindow window, ICollabHistoryItemFactory factory, IRevisionsService service) + { + m_Window = window; + m_Factory = factory; + m_Service = service; + m_CurrentPage = 0; + m_BuildAccess = new BuildAccess(); + m_Service.FetchRevisionsCallback += OnFetchRevisions; + } + + public void OnWindowEnabled() + { + UnityConnect.instance.StateChanged += OnConnectStateChanged; + Collab.instance.StateChanged += OnCollabStateChanged; + Collab.instance.RevisionUpdated += OnCollabRevisionUpdated; + Collab.instance.JobsCompleted += OnCollabJobsCompleted; + Collab.instance.ErrorOccurred += OnCollabError; + Collab.instance.ErrorCleared += OnCollabErrorCleared; + EditorApplication.playModeStateChanged += OnPlayModeStateChanged; + m_ConnectState = UnityConnect.instance.GetConnectInfo(); + m_CollabState = Collab.instance.GetCollabInfo(); + + m_Window.revisionActionsEnabled = !EditorApplication.isPlayingOrWillChangePlaymode; + + // Setup window callbacks + m_Window.OnPageChangeAction = OnUpdatePage; + m_Window.OnUpdateAction = OnUpdate; + m_Window.OnRestoreAction = OnRestore; + m_Window.OnGoBackAction = OnGoBack; + m_Window.OnShowBuildAction = ShowBuildForCommit; + m_Window.OnShowServicesAction = ShowServicePage; + m_Window.itemsPerPage = ItemsPerPage; + + // Initialize data + UpdateBuildServiceStatus(); + var state = RecalculateState(); + // Only try to load the page if we're ready + if (state == HistoryState.Ready) + OnUpdatePage(m_CurrentPage); + m_Window.UpdateState(state, true); + } + + public void OnWindowDisabled() + { + UnityConnect.instance.StateChanged -= OnConnectStateChanged; + Collab.instance.StateChanged -= OnCollabStateChanged; + Collab.instance.RevisionUpdated -= OnCollabRevisionUpdated; + Collab.instance.JobsCompleted -= OnCollabJobsCompleted; + EditorApplication.playModeStateChanged -= OnPlayModeStateChanged; + } + + private void OnConnectStateChanged(ConnectInfo state) + { + m_ConnectState = state; + + m_Window.UpdateState(RecalculateState(), false); + } + + private void OnCollabStateChanged(CollabInfo state) + { + // Sometimes a collab state change will trigger even though everything is the same + if (m_CollabState.Equals(state)) + return; + + if (m_CollabState.tip != state.tip) + OnUpdatePage(m_CurrentPage); + + m_CollabState = state; + m_Window.UpdateState(RecalculateState(), false); + if (state.inProgress) + { + m_Window.inProgressRevision = m_ProgressRevision; + } + else + { + m_Window.inProgressRevision = null; + } + } + + private void OnCollabRevisionUpdated(CollabInfo state) + { + OnUpdatePage(m_CurrentPage); + } + + private void OnCollabJobsCompleted(CollabInfo state) + { + m_ProgressRevision = null; + } + + private void OnCollabError() + { + m_IsCollabError = true; + m_Window.UpdateState(RecalculateState(), false); + } + + private void OnCollabErrorCleared() + { + m_IsCollabError = false; + m_FetchInProgress = true; + m_Service.GetRevisions(m_CurrentPage * ItemsPerPage, ItemsPerPage); + m_Window.UpdateState(RecalculateState(), false); + } + + private void OnPlayModeStateChanged(PlayModeStateChange stateChange) + { + // If entering play mode, disable + if (stateChange == PlayModeStateChange.ExitingEditMode || + stateChange == PlayModeStateChange.EnteredPlayMode) + { + m_Window.revisionActionsEnabled = false; + } + // If exiting play mode, enable! + else if (stateChange == PlayModeStateChange.EnteredEditMode || + stateChange == PlayModeStateChange.ExitingPlayMode) + { + m_Window.revisionActionsEnabled = true; + } + } + + private HistoryState RecalculateState() + { + if (!m_ConnectState.online) + return HistoryState.Offline; + if (m_ConnectState.maintenance || m_CollabState.maintenance) + return HistoryState.Maintenance; + if (!m_ConnectState.loggedIn) + return HistoryState.LoggedOut; + if (!m_CollabState.seat) + return HistoryState.NoSeat; + if (!Collab.instance.IsCollabEnabledForCurrentProject()) + return HistoryState.Disabled; + if (!Collab.instance.IsConnected() || !m_CollabState.ready || m_FetchInProgress) + return HistoryState.Waiting; + if (m_ConnectState.error || m_IsCollabError) + return HistoryState.Error; + + return HistoryState.Ready; + } + + // TODO: Eventually this can be a listener on the build service status + public void UpdateBuildServiceStatus() + { + foreach (var service in UnityConnectServiceCollection.instance.GetAllServiceInfos()) + { + if (service.name.Equals("Build")) + { + BuildServiceEnabled = service.enabled; + } + } + } + + public void ShowBuildForCommit(string revisionID) + { + m_BuildAccess.ShowBuildForCommit(revisionID); + } + + public void ShowServicePage() + { + m_BuildAccess.ShowServicePage(); + } + + public void OnUpdatePage(int page) + { + m_FetchInProgress = true; + m_Service.GetRevisions(page * ItemsPerPage, ItemsPerPage); + m_Window.UpdateState(RecalculateState(), false); + m_RequestedPage = page; + } + + private void OnFetchRevisions(RevisionsResult data) + { + m_FetchInProgress = false; + IEnumerable items = null; + if (data != null) + { + m_CurrentPage = m_RequestedPage; + m_TotalRevisions = data.RevisionsInRepo; + items = m_Factory.GenerateElements(data.Revisions, m_TotalRevisions, m_CurrentPage * ItemsPerPage, m_Service.tipRevision, m_Window.inProgressRevision, m_Window.revisionActionsEnabled, BuildServiceEnabled, m_Service.currentUser); + } + + // State must be recalculated prior to inserting items + m_Window.UpdateState(RecalculateState(), false); + m_Window.UpdateRevisions(items, m_Service.tipRevision, m_TotalRevisions, m_CurrentPage); + } + + private void OnRestore(string revisionId, bool updatetorevision) + { + m_ProgressRevision = revisionId; + Collab.instance.ResyncToRevision(revisionId); + } + + private void OnGoBack(string revisionId, bool updatetorevision) + { + m_ProgressRevision = revisionId; + Collab.instance.GoBackToRevision(revisionId, false); + } + + private void OnUpdate(string revisionId, bool updatetorevision) + { + m_ProgressRevision = revisionId; + Collab.instance.Update(revisionId, updatetorevision); + } + } +} diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Presenters/CollabHistoryPresenter.cs.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Presenters/CollabHistoryPresenter.cs.meta new file mode 100644 index 0000000..9c37ecd --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Presenters/CollabHistoryPresenter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a7c91a123806d41a0873fcdcb629b1c4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views.meta new file mode 100644 index 0000000..f62ac6b --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fd0a39b4d296d4d509b4f1dbd08d0630 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/BuildStatusButton.cs b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/BuildStatusButton.cs new file mode 100644 index 0000000..ac3754d --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/BuildStatusButton.cs @@ -0,0 +1,53 @@ +using System; +using UnityEditor; +using UnityEditor.Collaboration; +using UnityEngine; + +#if UNITY_2019_1_OR_NEWER +using UnityEngine.UIElements; +#else +using UnityEngine.Experimental.UIElements; +#endif + +namespace UnityEditor.Collaboration +{ + internal class BuildStatusButton : Button + { + private readonly string iconPrefix = "Icons/Collab.Build"; + private readonly string iconSuffix = ".png"; + Label labelElement = new Label(); + Image iconElement = new Image() {name = "BuildIcon"}; + + public BuildStatusButton(Action clickEvent) : base(clickEvent) + { + iconElement.image = EditorGUIUtility.Load(iconPrefix + iconSuffix) as Texture; + labelElement.text = "Build Now"; + Add(iconElement); + Add(labelElement); + } + + public BuildStatusButton(Action clickEvent, BuildState state, int failures) : base(clickEvent) + { + switch (state) + { + case BuildState.InProgress: + iconElement.image = EditorGUIUtility.Load(iconPrefix + iconSuffix) as Texture; + labelElement.text = "In progress"; + break; + + case BuildState.Failed: + iconElement.image = EditorGUIUtility.Load(iconPrefix + "Failed" + iconSuffix) as Texture; + labelElement.text = failures + ((failures == 1) ? " failure" : " failures"); + break; + + case BuildState.Success: + iconElement.image = EditorGUIUtility.Load(iconPrefix + "Succeeded" + iconSuffix) as Texture; + labelElement.text = "success"; + break; + } + + Add(iconElement); + Add(labelElement); + } + } +} diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/BuildStatusButton.cs.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/BuildStatusButton.cs.meta new file mode 100644 index 0000000..d74a58a --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/BuildStatusButton.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0217a80286f79419daa202f69409f19b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryDropDown.cs b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryDropDown.cs new file mode 100644 index 0000000..e3bb05a --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryDropDown.cs @@ -0,0 +1,78 @@ +using UnityEngine; +using System.Collections.Generic; +using UnityEditor.Connect; + +#if UNITY_2019_1_OR_NEWER +using UnityEngine.UIElements; +#else +using UnityEngine.Experimental.UIElements; +#endif + + +namespace UnityEditor.Collaboration +{ + internal class CollabHistoryDropDown : VisualElement + { + private readonly VisualElement m_FilesContainer; + private readonly Label m_ToggleLabel; + private int m_ChangesTotal; + private string m_RevisionId; + + public CollabHistoryDropDown(ICollection changes, int changesTotal, bool changesTruncated, string revisionId) + { + m_FilesContainer = new VisualElement(); + m_ChangesTotal = changesTotal; + m_RevisionId = revisionId; + + m_ToggleLabel = new Label(ToggleText(false)); + m_ToggleLabel.AddManipulator(new Clickable(ToggleDropdown)); + Add(m_ToggleLabel); + + foreach (ChangeData change in changes) + { + m_FilesContainer.Add(new CollabHistoryDropDownItem(change.path, change.action)); + } + + if (changesTruncated) + { + m_FilesContainer.Add(new Button(ShowAllClick) + { + text = "Show all on dashboard" + }); + } + } + + private void ToggleDropdown() + { + if (Contains(m_FilesContainer)) + { + CollabAnalytics.SendUserAction(CollabAnalytics.historyCategoryString, "CollapseAssets"); + Remove(m_FilesContainer); + m_ToggleLabel.text = ToggleText(false); + } + else + { + CollabAnalytics.SendUserAction(CollabAnalytics.historyCategoryString, "ExpandAssets"); + Add(m_FilesContainer); + m_ToggleLabel.text = ToggleText(true); + } + } + + private string ToggleText(bool open) + { + var icon = open ? "\u25bc" : "\u25b6"; + var change = m_ChangesTotal == 1 ? "Change" : "Changes"; + return string.Format("{0} {1} Asset {2}", icon, m_ChangesTotal, change); + } + + private void ShowAllClick() + { + var host = UnityConnect.instance.GetConfigurationURL(CloudConfigUrl.CloudServicesDashboard); + var org = UnityConnect.instance.GetOrganizationId(); + var proj = UnityConnect.instance.GetProjectGUID(); + var url = string.Format("{0}/collab/orgs/{1}/projects/{2}/commits?commit={3}", host, org, proj, m_RevisionId); + CollabAnalytics.SendUserAction(CollabAnalytics.historyCategoryString, "ShowAllOnDashboard"); + Application.OpenURL(url); + } + } +} diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryDropDown.cs.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryDropDown.cs.meta new file mode 100644 index 0000000..513b66b --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryDropDown.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a483595b0257945278dc75c5ff7d82ee +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryDropDownItem.cs b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryDropDownItem.cs new file mode 100644 index 0000000..3ad43f2 --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryDropDownItem.cs @@ -0,0 +1,53 @@ +using System; +using System.IO; +using System.Linq; +using UnityEngine; + +#if UNITY_2019_1_OR_NEWER +using UnityEngine.UIElements; +#else +using UnityEngine.Experimental.UIElements; +#endif + + +namespace UnityEditor.Collaboration +{ + internal class CollabHistoryDropDownItem : VisualElement + { + public CollabHistoryDropDownItem(string path, string action) + { + var fileName = Path.GetFileName(path); + var isFolder = Path.GetFileNameWithoutExtension(path).Equals(fileName); + var fileIcon = GetIconElement(action, fileName, isFolder); + var metaContainer = new VisualElement(); + var fileNameLabel = new Label + { + name = "FileName", + text = fileName + }; + var filePathLabel = new Label + { + name = "FilePath", + text = path + }; + metaContainer.Add(fileNameLabel); + metaContainer.Add(filePathLabel); + Add(fileIcon); + Add(metaContainer); + } + + private Image GetIconElement(string action, string fileName, bool isFolder) + { + var prefix = isFolder ? "Folder" : "File"; + var actionName = action.First().ToString().ToUpper() + action.Substring(1); + // Use the same icon for renamed and moved files + actionName = actionName.Equals("Renamed") ? "Moved" : actionName; + var iconElement = new Image + { + name = "FileIcon", + image = EditorGUIUtility.LoadIcon("Icons/Collab." + prefix + actionName + ".png") + }; + return iconElement; + } + } +} diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryDropDownItem.cs.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryDropDownItem.cs.meta new file mode 100644 index 0000000..10bf40e --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryDropDownItem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d912d4873af534bd4a9d44bf1b52f14e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryItem.cs b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryItem.cs new file mode 100644 index 0000000..24e5d1d --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryItem.cs @@ -0,0 +1,229 @@ +using System; +using System.Linq; +using System.Security.Cryptography; +using UnityEditor.Connect; +using UnityEditor.Web; +using UnityEngine; + +#if UNITY_2019_1_OR_NEWER +using UnityEngine.UIElements; +#else +using UnityEngine.Experimental.UIElements; +using UnityEngine.Experimental.UIElements.StyleEnums; +#endif + +namespace UnityEditor.Collaboration +{ + internal class CollabHistoryItem : VisualElement + { + public static RevisionAction s_OnRestore; + public static RevisionAction s_OnGoBack; + public static RevisionAction s_OnUpdate; + public static ShowBuildAction s_OnShowBuild; + public static Action s_OnShowServices; + + private readonly string m_RevisionId; + private readonly string m_FullDescription; + private readonly DateTime m_TimeStamp; + private readonly Button m_Button; + private readonly HistoryProgressSpinner m_ProgressSpinner; + private VisualElement m_ActionsTray; + private VisualElement m_Details; + private Label m_Description; + private Label m_TimeAgo; + private readonly Button m_ExpandCollapseButton; + private bool m_Expanded; + + private const int kMaxDescriptionChars = 500; + + public bool RevisionActionsEnabled + { + set + { + m_Button.SetEnabled(value); + } + } + + public DateTime timeStamp + { + get { return m_TimeStamp; } + } + + public CollabHistoryItem(RevisionData data) + { + m_RevisionId = data.id; + m_TimeStamp = data.timeStamp; + name = "HistoryItem"; + m_ActionsTray = new VisualElement {name = "HistoryItemActionsTray"}; + m_ProgressSpinner = new HistoryProgressSpinner(); + m_Details = new VisualElement {name = "HistoryDetail"}; + var author = new Label(data.authorName) {name = "Author"}; + m_TimeAgo = new Label(TimeAgo.GetString(m_TimeStamp)); + m_FullDescription = data.comment; + var shouldTruncate = ShouldTruncateDescription(m_FullDescription); + if (shouldTruncate) + { + m_Description = new Label(GetTruncatedDescription(m_FullDescription)); + } + else + { + m_Description = new Label(m_FullDescription); + } + m_Description.name = "RevisionDescription"; + var dropdown = new CollabHistoryDropDown(data.changes, data.changesTotal, data.changesTruncated, data.id); + if (data.current) + { + m_Button = new Button(Restore) {name = "ActionButton", text = "Restore"}; + } + else if (data.obtained) + { + m_Button = new Button(GoBackTo) {name = "ActionButton", text = "Go back to..."}; + } + else + { + m_Button = new Button(UpdateTo) {name = "ActionButton", text = "Update"}; + } + m_Button.SetEnabled(data.enabled); + m_ProgressSpinner.ProgressEnabled = data.inProgress; + + m_ActionsTray.Add(m_ProgressSpinner); + m_ActionsTray.Add(m_Button); + + m_Details.Add(author); + m_Details.Add(m_TimeAgo); + m_Details.Add(m_Description); + + if (shouldTruncate) + { + m_ExpandCollapseButton = new Button(ToggleDescription) { name = "ToggleDescription", text = "Show More" }; + m_Details.Add(m_ExpandCollapseButton); + } + + if (data.buildState != BuildState.None) + { + BuildStatusButton buildButton; + if (data.buildState == BuildState.Configure) + buildButton = new BuildStatusButton(ShowServicePage); + else + buildButton = new BuildStatusButton(ShowBuildForCommit, data.buildState, data.buildFailures); + + m_Details.Add(buildButton); + } + + m_Details.Add(m_ActionsTray); + m_Details.Add(dropdown); + + Add(m_Details); + + this.schedule.Execute(UpdateTimeAgo).Every(1000 * 20); + } + + public static void SetUpCallbacks(RevisionAction Restore, RevisionAction GoBack, RevisionAction Update) + { + s_OnRestore = Restore; + s_OnGoBack = GoBack; + s_OnUpdate = Update; + } + + public void SetInProgressStatus(string revisionIdInProgress) + { + if (String.IsNullOrEmpty(revisionIdInProgress)) + { + m_Button.SetEnabled(true); + m_ProgressSpinner.ProgressEnabled = false; + } + else + { + m_Button.SetEnabled(false); + if (m_RevisionId.Equals(revisionIdInProgress)) + { + m_ProgressSpinner.ProgressEnabled = true; + } + } + } + + void ShowBuildForCommit() + { + CollabAnalytics.SendUserAction(CollabAnalytics.historyCategoryString, "ShowBuild"); + if (s_OnShowBuild != null) + { + s_OnShowBuild(m_RevisionId); + } + } + + void ShowServicePage() + { + CollabAnalytics.SendUserAction(CollabAnalytics.historyCategoryString, "ShowServices"); + if (s_OnShowServices != null) + { + s_OnShowServices(); + } + } + + void Restore() + { + CollabAnalytics.SendUserAction(CollabAnalytics.historyCategoryString, "Restore"); + if (s_OnRestore != null) + { + s_OnRestore(m_RevisionId, false); + } + } + + void GoBackTo() + { + CollabAnalytics.SendUserAction(CollabAnalytics.historyCategoryString, "GoBackTo"); + if (s_OnGoBack != null) + { + s_OnGoBack(m_RevisionId, false); + } + } + + void UpdateTo() + { + CollabAnalytics.SendUserAction(CollabAnalytics.historyCategoryString, "Update"); + if (s_OnUpdate != null) + { + s_OnUpdate(m_RevisionId, true); + } + } + + void UpdateTimeAgo() + { + m_TimeAgo.text = TimeAgo.GetString(m_TimeStamp); + } + + bool ShouldTruncateDescription(string description) + { + return description.Contains(Environment.NewLine) || description.Length > kMaxDescriptionChars; + } + + string GetTruncatedDescription(string description) + { + string result = description.Contains(Environment.NewLine) ? + description.Substring(0, description.IndexOf(Environment.NewLine)) : description; + if (result.Length > kMaxDescriptionChars) + { + result = result.Substring(0, kMaxDescriptionChars) + "..."; + } + return result; + } + + void ToggleDescription() + { + if (m_Expanded) + { + CollabAnalytics.SendUserAction(CollabAnalytics.historyCategoryString, "CollapseDescription"); + m_Expanded = false; + m_ExpandCollapseButton.text = "Show More"; + m_Description.text = GetTruncatedDescription(m_FullDescription); + } + else + { + CollabAnalytics.SendUserAction(CollabAnalytics.historyCategoryString, "ExpandDescription"); + m_Expanded = true; + m_ExpandCollapseButton.text = "Show Less"; + m_Description.text = m_FullDescription; + } + } + } +} diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryItem.cs.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryItem.cs.meta new file mode 100644 index 0000000..290bd28 --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryItem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c4c1445ee948a4124bfa9fb818a17e36 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryItemFactory.cs b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryItemFactory.cs new file mode 100644 index 0000000..e7d7aa6 --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryItemFactory.cs @@ -0,0 +1,121 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using UnityEditor.Collaboration; +using UnityEngine; + +#if UNITY_2019_1_OR_NEWER +using UnityEngine.UIElements; +#else +using UnityEngine.Experimental.UIElements; +using UnityEngine.Experimental.UIElements.StyleEnums; +#endif + + +namespace UnityEditor.Collaboration +{ + internal class CollabHistoryItemFactory : ICollabHistoryItemFactory + { + const int k_MaxChangesPerRevision = 10; + + public IEnumerable GenerateElements(IEnumerable revisions, int totalRevisions, int startIndex, string tipRev, string inProgressRevision, bool revisionActionsEnabled, bool buildServiceEnabled, string currentUser) + { + int index = startIndex; + + foreach (var rev in revisions) + { + index++; + var current = rev.revisionID == tipRev; + + // Calculate build status + BuildState buildState = BuildState.None; + int buildFailures = 0; + if (rev.buildStatuses != null && rev.buildStatuses.Length > 0) + { + bool inProgress = false; + foreach (CloudBuildStatus buildStatus in rev.buildStatuses) + { + if (buildStatus.complete) + { + if (!buildStatus.success) + { + buildFailures++; + } + } + else + { + inProgress = true; + break; + } + } + + if (inProgress) + { + buildState = BuildState.InProgress; + } + else if (buildFailures > 0) + { + buildState = BuildState.Failed; + } + else + { + buildState = BuildState.Success; + } + } + else if (current && !buildServiceEnabled) + { + buildState = BuildState.Configure; + } + + // Calculate the number of changes performed on files and folders (not meta files) + var paths = new Dictionary(); + foreach (ChangeAction change in rev.entries) + { + if (change.path.EndsWith(".meta")) + { + var path = change.path.Substring(0, change.path.Length - 5); + // Actions taken on meta files are secondary to any actions taken on the main file + if (!paths.ContainsKey(path)) + paths[path] = new ChangeData() {path = path, action = change.action}; + } + else + { + paths[change.path] = new ChangeData() {path = change.path, action = change.action}; + } + } + + var displayName = (rev.author != currentUser) ? rev.authorName : "You"; + + var item = new RevisionData + { + id = rev.revisionID, + index = totalRevisions - index + 1, + timeStamp = TimeStampToDateTime(rev.timeStamp), + authorName = displayName, + comment = rev.comment, + + obtained = rev.isObtained, + current = current, + inProgress = (rev.revisionID == inProgressRevision), + enabled = revisionActionsEnabled, + + buildState = buildState, + buildFailures = buildFailures, + + changes = paths.Values.Take(k_MaxChangesPerRevision).ToList(), + changesTotal = paths.Values.Count, + changesTruncated = paths.Values.Count > k_MaxChangesPerRevision, + }; + + yield return item; + } + } + + private static DateTime TimeStampToDateTime(double timeStamp) + { + DateTime dateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); + dateTime = dateTime.AddSeconds(timeStamp).ToLocalTime(); + return dateTime; + } + } +} diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryItemFactory.cs.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryItemFactory.cs.meta new file mode 100644 index 0000000..3250d96 --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryItemFactory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fc46f91ea1e8e4ca2ab693fef9156dbe +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryRevisionLine.cs b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryRevisionLine.cs new file mode 100644 index 0000000..2b8fe65 --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryRevisionLine.cs @@ -0,0 +1,94 @@ +using System; +using UnityEditor; +using UnityEditor.Collaboration; +using UnityEngine; + +#if UNITY_2019_1_OR_NEWER +using UnityEngine.UIElements; +#else +using UnityEngine.Experimental.UIElements; +#endif + +namespace UnityEditor.Collaboration +{ + internal class CollabHistoryRevisionLine : VisualElement + { + public CollabHistoryRevisionLine(int number) + { + AddNumber(number); + AddLine("topLine"); + AddLine("bottomLine"); + AddIndicator(); + } + + public CollabHistoryRevisionLine(DateTime date, bool isFullDateObtained) + { + AddLine(isFullDateObtained ? "obtainedDateLine" : "absentDateLine"); + AddHeader(GetFormattedHeader(date)); + AddToClassList("revisionLineHeader"); + } + + private void AddHeader(string content) + { + Add(new Label + { + text = content + }); + } + + private void AddIndicator() + { + Add(new VisualElement + { + name = "RevisionIndicator" + }); + } + + private void AddLine(string className = null) + { + var line = new VisualElement + { + name = "RevisionLine" + }; + if (!String.IsNullOrEmpty(className)) + { + line.AddToClassList(className); + } + Add(line); + } + + private void AddNumber(int number) + { + Add(new Label + { + text = number.ToString(), + name = "RevisionIndex" + }); + } + + private string GetFormattedHeader(DateTime date) + { + string result = "Commits on " + date.ToString("MMM d"); + switch (date.Day) + { + case 1: + case 21: + case 31: + result += "st"; + break; + case 2: + case 22: + result += "nd"; + break; + case 3: + case 23: + result += "rd"; + break; + default: + result += "th"; + break; + } + return result; + } + } +} diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryRevisionLine.cs.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryRevisionLine.cs.meta new file mode 100644 index 0000000..2659a3c --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryRevisionLine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3c737f7a9d78541d1ab25f28f045dd32 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/HistoryProgressSpinner.cs b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/HistoryProgressSpinner.cs new file mode 100644 index 0000000..fad3b82 --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/HistoryProgressSpinner.cs @@ -0,0 +1,69 @@ +using UnityEngine; + +#if UNITY_2019_1_OR_NEWER +using UnityEngine.UIElements; +#else +using UnityEngine.Experimental.UIElements; +#endif + +namespace UnityEditor.Collaboration +{ + internal class HistoryProgressSpinner : Image + { + private readonly Texture2D[] m_StatusWheelTextures; + private bool m_ProgressEnabled; + private IVisualElementScheduledItem m_Animation; + + public bool ProgressEnabled + { + set + { + if (m_ProgressEnabled == value) + return; + + m_ProgressEnabled = value; + visible = value; + + + if (value) + { + if (m_Animation == null) + { + m_Animation = this.schedule.Execute(AnimateProgress).Every(33); + } + else + { + m_Animation.Resume(); + } + } + else + { + if (m_Animation != null) + { + m_Animation.Pause(); + } + } + } + } + + public HistoryProgressSpinner() + { + m_StatusWheelTextures = new Texture2D[12]; + for (int i = 0; i < 12; i++) + { + m_StatusWheelTextures[i] = EditorGUIUtility.LoadIcon("WaitSpin" + i.ToString("00")); + } + image = m_StatusWheelTextures[0]; + style.width = m_StatusWheelTextures[0].width; + style.height = m_StatusWheelTextures[0].height; + visible = false; + } + + private void AnimateProgress(TimerState obj) + { + int frame = (int)Mathf.Repeat(Time.realtimeSinceStartup * 10, 11.99f); + image = m_StatusWheelTextures[frame]; + MarkDirtyRepaint(); + } + } +} diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/HistoryProgressSpinner.cs.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/HistoryProgressSpinner.cs.meta new file mode 100644 index 0000000..0ded4e8 --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/HistoryProgressSpinner.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cf6aca931950a4a6a886e214e9e649c4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/ICollabHistoryItemFactory.cs b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/ICollabHistoryItemFactory.cs new file mode 100644 index 0000000..03239a3 --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/ICollabHistoryItemFactory.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using UnityEditor.Collaboration; + +#if UNITY_2019_1_OR_NEWER +using UnityEngine.UIElements; +#else +using UnityEngine.Experimental.UIElements; +#endif + +namespace UnityEditor.Collaboration +{ + internal interface ICollabHistoryItemFactory + { + IEnumerable GenerateElements(IEnumerable revsRevisions, int mTotalRevisions, int startIndex, string tipRev, string inProgressRevision, bool revisionActionsEnabled, bool buildServiceEnabled, string currentUser); + } +} diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/ICollabHistoryItemFactory.cs.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/ICollabHistoryItemFactory.cs.meta new file mode 100644 index 0000000..08e9085 --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/ICollabHistoryItemFactory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 821f5482c5a3f4389885f4432433f56f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/PagedListView.cs b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/PagedListView.cs new file mode 100644 index 0000000..472a70e --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/PagedListView.cs @@ -0,0 +1,192 @@ +using System; +using System.Collections.Generic; + +#if UNITY_2019_1_OR_NEWER +using UnityEngine.UIElements; +#else +using UnityEngine.Experimental.UIElements; +using UnityEngine.Experimental.UIElements.StyleEnums; +#endif + +namespace UnityEditor.Collaboration +{ + internal interface IPagerData + { + int curPage { get; } + int totalPages { get; } + PageChangeAction OnPageChanged { get; } + } + + internal class PagerElement : VisualElement + { + IPagerData m_Data; + readonly Label m_PageText; + readonly Button m_DownButton; + readonly Button m_UpButton; + + public PagerElement(IPagerData dataSource) + { + m_Data = dataSource; + + this.style.flexDirection = FlexDirection.Row; + this.style.alignSelf = Align.Center; + + Add(m_DownButton = new Button(OnPageDownClicked) {text = "\u25c5 Newer"}); + m_DownButton.AddToClassList("PagerDown"); + + m_PageText = new Label(); + m_PageText.AddToClassList("PagerLabel"); + Add(m_PageText); + + Add(m_UpButton = new Button(OnPageUpClicked) {text = "Older \u25bb"}); + m_UpButton.AddToClassList("PagerUp"); + + UpdateControls(); + } + + void OnPageDownClicked() + { + CollabAnalytics.SendUserAction(CollabAnalytics.historyCategoryString, "NewerPage"); + m_Data.OnPageChanged(m_Data.curPage - 1); + } + + void OnPageUpClicked() + { + CollabAnalytics.SendUserAction(CollabAnalytics.historyCategoryString, "OlderPage"); + m_Data.OnPageChanged(m_Data.curPage + 1); + } + + public void Refresh() + { + UpdateControls(); + } + + void UpdateControls() + { + var curPage = m_Data.curPage; + var totalPages = m_Data.totalPages; + + m_PageText.text = (curPage + 1) + " / " + totalPages; + m_DownButton.SetEnabled(curPage > 0); + m_UpButton.SetEnabled(curPage < totalPages - 1); + } + } + + internal enum PagerLocation + { + Top, + Bottom, + } + + internal class PagedListView : VisualElement, IPagerData + { + public const int DefaultItemsPerPage = 10; + + readonly VisualElement m_ItemContainer; + readonly PagerElement m_PagerTop, m_PagerBottom; + int m_PageSize = DefaultItemsPerPage; + IEnumerable m_Items; + int m_TotalItems; + int m_CurPage; + + public int pageSize + { + set { m_PageSize = value; } + } + + public IEnumerable items + { + set + { + m_Items = value; + LayoutItems(); + } + } + + public int totalItems + { + set + { + if (m_TotalItems == value) + return; + + m_TotalItems = value; + UpdatePager(); + } + } + + public PageChangeAction OnPageChanged { get; set; } + + public PagedListView() + { + m_PagerTop = new PagerElement(this); + + m_ItemContainer = new VisualElement() + { + name = "PagerItems", + }; + Add(m_ItemContainer); + m_Items = new List(); + + m_PagerBottom = new PagerElement(this); + } + + void LayoutItems() + { + m_ItemContainer.Clear(); + foreach (var item in m_Items) + { + m_ItemContainer.Add(item); + } + } + + void UpdatePager() + { + if (m_PagerTop.parent != this && totalPages > 1 && curPage > 0) + Insert(0, m_PagerTop); + if (m_PagerTop.parent == this && (totalPages <= 1 || curPage == 0)) + Remove(m_PagerTop); + + if (m_PagerBottom.parent != this && totalPages > 1) + Add(m_PagerBottom); + if (m_PagerBottom.parent == this && totalPages <= 1) + Remove(m_PagerBottom); + + m_PagerTop.Refresh(); + m_PagerBottom.Refresh(); + } + + int pageCount + { + get + { + var pages = m_TotalItems / m_PageSize; + if (m_TotalItems % m_PageSize > 0) + pages++; + + return pages; + } + } + + public int curPage + { + get { return m_CurPage; } + set + { + m_CurPage = value; + UpdatePager(); + } + } + + public int totalPages + { + get + { + var extraPage = 0; + if (m_TotalItems % m_PageSize > 0) + extraPage = 1; + return m_TotalItems / m_PageSize + extraPage; + } + } + } +} diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/PagedListView.cs.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/PagedListView.cs.meta new file mode 100644 index 0000000..565f7a2 --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/PagedListView.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 50de529b6a28f4a7093045e08810a5df +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/StatusView.cs b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/StatusView.cs new file mode 100644 index 0000000..9b50e7a --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/StatusView.cs @@ -0,0 +1,88 @@ +using System; +using UnityEditor; +using UnityEngine; + +#if UNITY_2019_1_OR_NEWER +using UnityEngine.UIElements; +#else +using UnityEngine.Experimental.UIElements; +using UnityEngine.Experimental.UIElements.StyleEnums; +#endif + +namespace UnityEditor.Collaboration +{ + internal class StatusView : VisualElement + { + Image m_Image; + Label m_Message; + Button m_Button; + Action m_Callback; + + public Texture icon + { + get { return m_Image.image; } + set + { + m_Image.image = value; + m_Image.visible = value != null; + // Until "display: hidden" is added, this is the only way to hide an element + m_Image.style.height = value != null ? 150 : 0; + } + } + + public string message + { + get { return m_Message.text; } + set + { + m_Message.text = value; + m_Message.visible = value != null; + } + } + + public string buttonText + { + get { return m_Button.text; } + set + { + m_Button.text = value; + UpdateButton(); + } + } + + public Action callback + { + get { return m_Callback; } + set + { + m_Callback = value; + UpdateButton(); + } + } + + public StatusView() + { + name = "StatusView"; + + this.StretchToParentSize(); + + m_Image = new Image() { name = "StatusIcon", visible = false, style = { height = 0f }}; + m_Message = new Label() { name = "StatusMessage", visible = false}; + m_Button = new Button(InternalCallaback) { name = "StatusButton", visible = false}; + + Add(m_Image); + Add(m_Message); + Add(m_Button); + } + + private void UpdateButton() + { + m_Button.visible = m_Button.text != null && m_Callback != null; + } + + private void InternalCallaback() + { + m_Callback(); + } + } +} diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/StatusView.cs.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/StatusView.cs.meta new file mode 100644 index 0000000..bb634b1 --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/StatusView.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 08e9894bdf0834710b22d3c0aa245ac0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources.meta new file mode 100644 index 0000000..01229c2 --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a6ab6fd2b91214e8a9c8ec2224a528de +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles.meta new file mode 100644 index 0000000..0ff0382 --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6b1ae1e78552c459d9ce27048ff51c7f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryCommon.uss b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryCommon.uss new file mode 100644 index 0000000..b20f08e --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryCommon.uss @@ -0,0 +1,259 @@ +.unity-button { + min-height:0; + -unity-text-align:middle-center; + margin-left:4px; + margin-top:3px; + margin-right:4px; + margin-bottom:3px; + border-left-width:6px; + border-top-width:4px; + border-right-width:6px; + border-bottom-width:4px; + padding-left:6px; + padding-top:2px; + padding-right:6px; + padding-bottom:3px; +} + +.unity-label { + overflow: hidden; + margin-left:4px; + margin-top:2px; + margin-right:4px; + margin-bottom:2px; + padding-left:2px; + padding-top:1px; + min-height: 0; +} + +#HistoryContainer { + flex: 1 0 0; +} + +#HistoryItem { + flex: 1 0 0; + flex-direction: row; +} + +#HistoryDetail { + margin-top: 10px; + margin-left: 10px; + margin-bottom: 10px; + margin-right: 10px; + padding-top: 4px; + flex: 1 0 0; +} + +#Author { + -unity-font-style: bold; + font-size: 12px; +} + +#HistoryDetail > Button { + align-self: flex-end; +} + +CollabHistoryRevisionLine { + width: 40px; +} + +#RevisionLine { + flex: 1 0 0; + margin-left: 35px; + width: 1.5px; +} + +#RevisionLine.topLine { + height: 20px; + flex: 0 0 auto; +} + +#RevisionLine.absentDateLine { + background-color: #797676; +} + +.absentRevision #RevisionLine { + background-color: #797676; +} + +.currentRevision #RevisionLine.topLine { + background-color: #797676; +} + +#RevisionIndex { + position: absolute; + min-width: 23px; + -unity-text-align: middle-right; + top: 15.8px; + font-size: 9px; +} + +#RevisionIndicator { + position: absolute; + background-color: #000; + border-radius: 3px; + width: 8px; + height: 8px; + border-bottom-width: 2px; + border-left-width: 2px; + border-right-width: 2px; + border-top-width: 2px; + top: 20px; + left: 32px; +} + +.revisionLineHeader { + width: 200px; + height: 20px; +} + +.revisionLineHeader > .unity-label { + position: absolute; + margin-left: 47px; + margin-top: 3px; +} + +#PagerItems { + flex-direction: column; +} + +PagerElement > .unity-label { + margin-top: 8px; +} + +.absentRevision #RevisionIndicator { + border-color: #797676; +} + +.absentRevision #RevisionIndex { + color: #797676; +} + +.currentRevision #HistoryDetail { + border-top-width: 2px; +} + +#HistoryItem #RevisionDescription { + white-space: normal; +} + +#HistoryItem #ToggleDescription { + align-self: flex-start; + padding-top: 0; + padding-left: 0; + padding-right: 0; + padding-bottom: 2px; +} + +#HistoryItem #ActionButton { + position: absolute; + right: 0; +} + +#HistoryItem #BuildIcon { + width: 16px; + height: 13px; +} + +#HistoryItemActionsTray { + flex: 1 0 0; + flex-direction: row; + align-items: center; + height: 38px; + margin-left: 10px; + margin-right: 10px; +} + +CollabHistoryDropDown { + border-top-width: 1px; +} + +CollabHistoryDropDown > .unity-label { + padding-top: 10px; + padding-bottom: 10px; +} + +CollabHistoryDropDownItem { + flex-direction: row; + border-top-width: 1px; + overflow: hidden; +} + +#FileIcon { + align-self: center; + width: 26px; + height: 26px; +} + +#FileName { + -unity-font-style: bold; + padding-bottom: 0; + margin-bottom: 0; +} + +#FileIcon { + padding-top: 0; + margin-top: 0; +} + +#ErrorBar { + height: 24px; + background-color: #ff0000; + color: #000; + font-size: 12px; +} + +#ErrorBar > #CloseButton { + position: absolute; + right: 0; + top: 0; + width: 24px; + height: 24px; + color: #000; + font-size: 18px; + -unity-font-style: bold; +} + +#StatusView { + flex-direction: column; + justify-content: center; + align-self: center; + align-items: center; + flex: 1 0 0; +} + +#StatusView > #StatusIcon { + width: 115px; + height: 150px; +} + +#StatusView > #StatusMessage { + font-size: 22px; + width: 230px; + white-space: normal; + -unity-text-align: middle-center; +} + +#StatusView > #StatusButton { + font-size: 12px; + margin-top: 20px; + background-image: none; + width: 108px; + height: 29px; +} + +BuildStatusButton.unity-button { + flex-direction: row; + align-self: flex-end; + align-items: center; + margin-right: 10px; + padding-left:0; + padding-top:0; + padding-right:0; + padding-bottom:0; +} + +BuildStatusButton.unity-button .unity-label { + padding-left: 2px; +} + diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryCommon.uss.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryCommon.uss.meta new file mode 100644 index 0000000..035b662 --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryCommon.uss.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 3a2d94c8977984b67984caeff9fa666e +ScriptedImporter: + fileIDToRecycleName: + 11400000: stylesheet + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0} diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryDark.uss b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryDark.uss new file mode 100644 index 0000000..de436f8 --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryDark.uss @@ -0,0 +1,86 @@ +#HistoryContainer { + background-color: #292929; +} + +.obtainedRevision #HistoryDetail { + background-color: #333; +} + +.absentRevision #HistoryDetail { + background-color: #595959; +} + +#StatusView { + background-color: #292929; +} + +#StatusView > #StatusMessage { + color: #959995; +} + +BuildStatusButton.unity-button { + color: #B4B4B4; + background-image: resource("Builtin Skins/DarkSkin/Images/btn.png"); +} + +BuildStatusButton.unity-button:hover { + color: #FFF; +} + +BuildStatusButton.unity-button:hover:active { + background-image: resource("Builtin Skins/DarkSkin/Images/btn act.png"); +} + +BuildStatusButton.unity-button:checked { + color: #F0F0F0; + background-image: resource("Builtin Skins/DarkSkin/Images/btn on.png"); +} + +BuildStatusButton.unity-button:hover:checked { + color: #FFF; +} + +BuildStatusButton.unity-button:hover:active:checked { + background-image: resource("Builtin Skins/DarkSkin/Images/btn onact.png"); +} + +BuildStatusButton.unity-button:focus:checked { + background-image: resource("Builtin Skins/DarkSkin/Images/btn on focus.png"); +} + +CollabHistoryDropDown { + border-color: #292929; +} + +CollabHistoryDropDownItem { + border-color: #292929; +} + +#RevisionLine.obtainedDateLine { + background-color: #0cb4cc; +} + +.obtainedRevision #RevisionLine { + background-color: #0cb4cc; +} + +#RevisionIndex { + color: #0cb4cc; +} + +#RevisionIndicator { + border-color: #0cb4cc; +} + +.currentRevision #RevisionIndicator { + background-color: #0cb4cc; +} + +.currentRevision #HistoryDetail { + border-color: #0cb4cc; +} + +#StatusView > #StatusButton { + background-color: #0cb4cc; + border-color: #0cb4cc; +} diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryDark.uss.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryDark.uss.meta new file mode 100644 index 0000000..35a7d09 --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryDark.uss.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 70d4d75a2877243758b0750cbc75b6eb +ScriptedImporter: + fileIDToRecycleName: + 11400000: stylesheet + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0} diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryLight.uss b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryLight.uss new file mode 100644 index 0000000..3f9b85f --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryLight.uss @@ -0,0 +1,86 @@ +#HistoryContainer { + background-color: #a2a2a2; +} + +.obtainedRevision #HistoryDetail { + background-color: #c2c2c2; +} + +.absentRevision #HistoryDetail { + background-color: #dedede; +} + +#StatusView { + background-color: #a2a2a3; +} + +#StatusView > #StatusMessage { + color: #000; +} + +BuildStatusButton.unity-button { + color: #111; + background-image: resource("Builtin Skins/LightSkin/Images/btn.png"); +} + +BuildStatusButton.unity-button:hover { + color: #000; +} + +BuildStatusButton.unity-button:hover:active { + background-image: resource("Builtin Skins/LightSkin/Images/btn act.png"); +} + +BuildStatusButton.unity-button:checked { + color: #F0F0F0; + background-image: resource("Builtin Skins/LightSkin/Images/btn on.png"); +} + +BuildStatusButton.unity-button:hover:checked { + color: #000; +} + +BuildStatusButton.unity-button:hover:active:checked { + background-image: resource("Builtin Skins/LightSkin/Images/btn onact.png"); +} + +BuildStatusButton.unity-button:focus:checked { + background-image: resource("Builtin Skins/LightSkin/Images/btn on focus.png"); +} + +CollabHistoryDropDown { + border-color: #a2a2a2; +} + +CollabHistoryDropDownItem { + border-color: #a2a2a2; +} + +#RevisionLine.obtainedDateLine { + background-color: #018d98; +} + +.obtainedRevision #RevisionLine { + background-color: #018d98; +} + +#RevisionIndex { + color: #018d98; +} + +#RevisionIndicator { + border-color: #018d98; +} + +.currentRevision #RevisionIndicator { + background-color: #018d98; +} + +.currentRevision #HistoryDetail { + border-color: #018d98; +} + +#StatusView > #StatusButton { + background-color: #018d98; + border-color: #018d98; +} diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryLight.uss.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryLight.uss.meta new file mode 100644 index 0000000..28c860e --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryLight.uss.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: b52bde26a83564960bcb90217f72b910 +ScriptedImporter: + fileIDToRecycleName: + 11400000: stylesheet + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0} diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Unity.CollabProxy.Editor.asmdef b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Unity.CollabProxy.Editor.asmdef new file mode 100644 index 0000000..66511e1 --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Unity.CollabProxy.Editor.asmdef @@ -0,0 +1,7 @@ +{ + "name": "Unity.CollabProxy.Editor", + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [] +} diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Unity.CollabProxy.Editor.asmdef.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Unity.CollabProxy.Editor.asmdef.meta new file mode 100644 index 0000000..03ebeca --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Unity.CollabProxy.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 645165c8169474bfbbeb8fb0bcfd26f5 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/LICENSE.md b/Library/PackageCache/com.unity.collab-proxy@1.2.16/LICENSE.md new file mode 100644 index 0000000..31bde4e --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/LICENSE.md @@ -0,0 +1,31 @@ +**Unity Companion Package License v1.0 ("_License_")** + +Copyright © 2017 Unity Technologies ApS ("**_Unity_**") + +Unity hereby grants to you a worldwide, non-exclusive, no-charge, and royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, sublicense, and distribute the software that is made available with this License ("**_Software_**"), subject to the following terms and conditions: + +1. *Unity Companion Use Only*. Exercise of the license granted herein is limited to exercise for the creation, use, and/or distribution of applications, software, or other content pursuant to a valid Unity development engine software license ("**_Engine License_**"). That means while use of the Software is not limited to use in the software licensed under the Engine License, the Software may not be used for any purpose other than the creation, use, and/or distribution of Engine License-dependent applications, software, or other content. No other exercise of the license granted herein is permitted. + +1. *No Modification of Engine License*. Neither this License nor any exercise of the license granted herein modifies the Engine License in any way. + +1. *Ownership & Grant Back to You*. + + 3.1. You own your content. In this License, "derivative works" means derivatives of the Software itself--works derived only from the Software by you under this License (for example, modifying the code of the Software itself to improve its efficacy); “derivative works” of the Software do not include, for example, games, apps, or content that you create using the Software. You keep all right, title, and interest to your own content. + + 3.2. Unity owns its content. While you keep all right, title, and interest to your own content per the above, as between Unity and you, Unity will own all right, title, and interest to all intellectual property rights (including patent, trademark, and copyright) in the Software and derivative works of the Software, and you hereby assign and agree to assign all such rights in those derivative works to Unity. + + 3.3. You have a license to those derivative works. Subject to this License, Unity grants to you the same worldwide, non-exclusive, no-charge, and royalty-free copyright license to derivative works of the Software you create as is granted to you for the Software under this License. + +1. *Trademarks*. You are not granted any right or license under this License to use any trademarks, service marks, trade names, products names, or branding of Unity or its affiliates ("**_Trademarks_**"). Descriptive uses of Trademarks are permitted; see, for example, Unity’s Branding Usage Guidelines at [https://unity3d.com/public-relations/brand](https://unity3d.com/public-relations/brand). + +1. *Notices & Third-Party Rights*. This License, including the copyright notice above, must be provided in all substantial portions of the Software and derivative works thereof (or, if that is impracticable, in any other location where such notices are customarily placed). Further, if the Software is accompanied by a Unity "third-party notices" or similar file, you acknowledge and agree that software identified in that file is governed by those separate license terms. + +1. *DISCLAIMER, LIMITATION OF LIABILITY*. THE SOFTWARE AND ANY DERIVATIVE WORKS THEREOF IS PROVIDED ON AN "AS IS" BASIS, AND IS PROVIDED WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED, INCLUDING ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND/OR NONINFRINGEMENT. IN NO EVENT SHALL ANY COPYRIGHT HOLDER OR AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES (WHETHER DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL, INCLUDING PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, LOSS OF USE, DATA, OR PROFITS, AND BUSINESS INTERRUPTION), OR OTHER LIABILITY WHATSOEVER, WHETHER IN AN ACTION OF CONTRACT, TORT, OR OTHERWISE, ARISING FROM OR OUT OF, OR IN CONNECTION WITH, THE SOFTWARE OR ANY DERIVATIVE WORKS THEREOF OR THE USE OF OR OTHER DEALINGS IN SAME, EVEN WHERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +1. *USE IS ACCEPTANCE and License Versions*. Your receipt and use of the Software constitutes your acceptance of this License and its terms and conditions. Software released by Unity under this License may be modified or updated and the License with it; upon any such modification or update, you will comply with the terms of the updated License for any use of any of the Software under the updated License. + +1. *Use in Compliance with Law and Termination*. Your exercise of the license granted herein will at all times be in compliance with applicable law and will not infringe any proprietary rights (including intellectual property rights); this License will terminate immediately on any breach by you of this License. + +1. *Severability*. If any provision of this License is held to be unenforceable or invalid, that provision will be enforced to the maximum extent possible and the other provisions will remain in full force and effect. + +1. *Governing Law and Venue*. This License is governed by and construed in accordance with the laws of Denmark, except for its conflict of laws rules; the United Nations Convention on Contracts for the International Sale of Goods will not apply. If you reside (or your principal place of business is) within the United States, you and Unity agree to submit to the personal and exclusive jurisdiction of and venue in the state and federal courts located in San Francisco County, California concerning any dispute arising out of this License ("**_Dispute_**"). If you reside (or your principal place of business is) outside the United States, you and Unity agree to submit to the personal and exclusive jurisdiction of and venue in the courts located in Copenhagen, Denmark concerning any Dispute. diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/LICENSE.md.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.16/LICENSE.md.meta new file mode 100644 index 0000000..30f5c3a --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/LICENSE.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c754112a02f354a6696fa4f2b99e95a5 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/README.md b/Library/PackageCache/com.unity.collab-proxy@1.2.16/README.md new file mode 100644 index 0000000..5cfbd88 --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/README.md @@ -0,0 +1,16 @@ +# Collab Proxy UPM Package +This is the packaged version of Collab, currently limited to containing the History and Toolbar windows, along with supporting classes. + +## Development +Check this repository out in your {$PROJECT}/Packages/ folder, under the name com.unity.collab-proxy. The classes will be built by Unity. + +## Testing +In order to run the tests, you will need to add this project to the testables key in your manifest.json - once you have done this, the tests will be picked up by the Unity Test Runner window. + +## Building +You may build this project using msbuild. The commands to do so can be seen under .gitlab-ci.yml. + +## Deploying +Gitlab will automatically build your project when you deploy. You can download the resulting artifact, which will be a dll, and place it in your Editor/bin/ folder. Open the package in Unity to generate the meta files, and then you will be able to publish. + +We're currently looking into a way to avoid this manual process. diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/README.md.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.16/README.md.meta new file mode 100644 index 0000000..b3ad993 --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/README.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ac281230df7b14becb40b3c479f1b429 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests.meta new file mode 100644 index 0000000..f43ddd3 --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1369382d2c5e64dc5b2ec0b6b0a94531 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests/Editor.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests/Editor.meta new file mode 100644 index 0000000..b80cefd --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4506ac79f5b274cb1b249ed7f4abfb9a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests/Editor/HistoryTests.cs b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests/Editor/HistoryTests.cs new file mode 100644 index 0000000..ba79a20 --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests/Editor/HistoryTests.cs @@ -0,0 +1,583 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using UnityEditor.Collaboration; +using UnityEngine.TestTools; +using NUnit.Framework; + +namespace UnityEditor.Collaboration.Tests +{ + [TestFixture] + internal class HistoryTests + { + private TestHistoryWindow _window; + private TestRevisionsService _service; + private CollabHistoryPresenter _presenter; + + [SetUp] + public void SetUp() + { + _window = new TestHistoryWindow(); + _service = new TestRevisionsService(); + _presenter = new CollabHistoryPresenter(_window, new CollabHistoryItemFactory(), _service); + } + + [TearDown] + public void TearDown() + { + } + + [Test] + public void CollabHistoryPresenter_OnUpdatePage__PropagatesRevisionResult() + { + _service.result = new RevisionsResult() + { + Revisions = new List() + { + new Revision(authorName: "authorName", comment: "comment", revisionID: "revisionID"), + } + }; + + _presenter.OnUpdatePage(0); + var item = _window.items.First(); + + Assert.AreEqual("revisionID", item.id); + Assert.AreEqual("authorName", item.authorName); + Assert.AreEqual("comment", item.comment); + } + + [Test] + public void CollabHistoryPresenter_OnUpdatePage__RevisionNumberingIsInOrder() + { + _service.result = new RevisionsResult() + { + RevisionsInRepo = 4, + Revisions = new List() + { + new Revision(revisionID: "0"), + new Revision(revisionID: "1"), + new Revision(revisionID: "2"), + new Revision(revisionID: "3"), + } + }; + + _presenter.OnUpdatePage(0); + var items = _window.items.ToArray(); + + Assert.AreEqual(4, items[0].index); + Assert.AreEqual(3, items[1].index); + Assert.AreEqual(2, items[2].index); + Assert.AreEqual(1, items[3].index); + } + + [Test] + public void CollabHistoryPresenter_OnUpdatePage__RevisionNumberingChangesForMorePages() + { + _service.result = new RevisionsResult() + { + RevisionsInRepo = 12, + Revisions = new List() + { + new Revision(revisionID: "0"), + new Revision(revisionID: "1"), + new Revision(revisionID: "2"), + new Revision(revisionID: "3"), + new Revision(revisionID: "4"), + } + }; + + _presenter.OnUpdatePage(1); + var items = _window.items.ToArray(); + + Assert.AreEqual(12, items[0].index); + Assert.AreEqual(11, items[1].index); + Assert.AreEqual(10, items[2].index); + Assert.AreEqual(9, items[3].index); + Assert.AreEqual(8, items[4].index); + } + + [Test] + public void CollabHistoryPresenter_OnUpdatePage__ObtainedIsCalculated() + { + _service.result = new RevisionsResult() + { + Revisions = new List() + { + new Revision(isObtained: false), + new Revision(isObtained: true), + } + }; + + _presenter.OnUpdatePage(0); + var items = _window.items.ToArray(); + + Assert.IsFalse(items[0].obtained); + Assert.IsTrue(items[1].obtained); + } + + [Test] + public void CollabHistoryPresenter_OnUpdatePage__CurrentIsCalculated() + { + _service.result = new RevisionsResult() + { + Revisions = new List() + { + new Revision(revisionID: "1"), + new Revision(revisionID: "2"), + new Revision(revisionID: "3"), + } + }; + _service.tipRevision = "2"; + + _presenter.OnUpdatePage(0); + var items = _window.items.ToArray(); + + Assert.AreEqual(false, items[0].current); + Assert.AreEqual(true, items[1].current); + Assert.AreEqual(false, items[2].current); + } + + [Test] + public void CollabHistoryPresenter_OnUpdatePage__InProgressIsCalculated() + { + _service.result = new RevisionsResult() + { + Revisions = new List() + { + new Revision(revisionID: "1"), + new Revision(revisionID: "2"), + new Revision(revisionID: "3"), + } + }; + _window.inProgressRevision = "2"; + + _presenter.OnUpdatePage(0); + var items = _window.items.ToArray(); + + Assert.IsFalse(items[0].inProgress); + Assert.IsTrue(items[1].inProgress); + Assert.IsFalse(items[2].inProgress); + } + + [Test] + public void CollabHistoryPresenter_OnUpdatePage__EnabledIsCalculated() + { + _service.result = new RevisionsResult() + { + Revisions = new List() + { + new Revision(revisionID: "0"), + } + }; + _window.revisionActionsEnabled = true; + + _presenter.OnUpdatePage(0); + var item = _window.items.First(); + + Assert.AreEqual(true, item.enabled); + } + + [Test] + public void CollabHistoryPresenter_OnUpdatePage__DisabledIsCalculated() + { + _service.result = new RevisionsResult() + { + Revisions = new List() + { + new Revision(revisionID: "0"), + } + }; + _window.revisionActionsEnabled = false; + + _presenter.OnUpdatePage(0); + var item = _window.items.First(); + + Assert.AreEqual(false, item.enabled); + } + + [Test] + public void CollabHistoryPresenter_OnUpdatePage__BuildStateHasNoneWhenNotTip() + { + _service.result = new RevisionsResult() + { + Revisions = new List() + { + new Revision(revisionID: "1"), + } + }; + _service.tipRevision = "0"; + _presenter.BuildServiceEnabled = false; + + _presenter.OnUpdatePage(0); + var item = _window.items.First(); + + Assert.AreEqual(BuildState.None, item.buildState); + } + + [Test] + public void CollabHistoryPresenter_OnUpdatePage__BuildStateTipHasNoneWhenEnabled() + { + _service.result = new RevisionsResult() + { + Revisions = new List() + { + new Revision(revisionID: "0"), + } + }; + _service.tipRevision = "0"; + _presenter.BuildServiceEnabled = true; + + _presenter.OnUpdatePage(0); + var item = _window.items.First(); + + Assert.AreEqual(BuildState.None, item.buildState); + } + + [Test] + public void CollabHistoryPresenter_OnUpdatePage__BuildStateHasConfigureWhenTip() + { + _service.result = new RevisionsResult() + { + Revisions = new List() + { + new Revision(revisionID: "0"), + } + }; + _service.tipRevision = "0"; + _presenter.BuildServiceEnabled = false; + + _presenter.OnUpdatePage(0); + var item = _window.items.First(); + + Assert.AreEqual(BuildState.Configure, item.buildState); + } + + [Test] + public void CollabHistoryPresenter_OnUpdatePage__BuildStateHasConfigureWhenZeroBuildStatus() + { + _service.result = new RevisionsResult() + { + Revisions = new List() + { + new Revision(revisionID: "0"), + } + }; + _service.tipRevision = "0"; + _presenter.BuildServiceEnabled = false; + + _presenter.OnUpdatePage(0); + var item = _window.items.First(); + + Assert.AreEqual(BuildState.Configure, item.buildState); + } + + [Test] + public void CollabHistoryPresenter_OnUpdatePage__BuildStateHasNoneWhenZeroBuildStatuses() + { + _service.result = new RevisionsResult() + { + Revisions = new List() + { + new Revision(revisionID: "0"), + } + }; + _service.tipRevision = "0"; + _presenter.BuildServiceEnabled = true; + + _presenter.OnUpdatePage(0); + var item = _window.items.First(); + + Assert.AreEqual(BuildState.None, item.buildState); + } + + [Test] + public void CollabHistoryPresenter_OnUpdatePage__BuildStateHasSuccessWhenCompleteAndSucceeded() + { + _service.result = new RevisionsResult() + { + Revisions = new List() + { + new Revision + ( + revisionID: "0", + buildStatuses: new CloudBuildStatus[1] + { + new CloudBuildStatus(complete: true, success: true), + } + ), + } + }; + _service.tipRevision = "0"; + _presenter.BuildServiceEnabled = true; + + _presenter.OnUpdatePage(0); + var item = _window.items.First(); + + Assert.AreEqual(BuildState.Success, item.buildState); + } + + [Test] + public void CollabHistoryPresenter_OnUpdatePage__BuildStateHasInProgress() + { + _service.result = new RevisionsResult() + { + Revisions = new List() + { + new Revision + ( + revisionID: "0", + buildStatuses: new CloudBuildStatus[1] + { + new CloudBuildStatus(complete: false), + } + ), + } + }; + _service.tipRevision = "0"; + _presenter.BuildServiceEnabled = true; + + _presenter.OnUpdatePage(0); + var item = _window.items.First(); + + Assert.AreEqual(BuildState.InProgress, item.buildState); + } + + [Test] + public void CollabHistoryPresenter_OnUpdatePage__BuildStateHasFailure() + { + _service.result = new RevisionsResult() + { + Revisions = new List() + { + new Revision + ( + revisionID: "0", + buildStatuses: new CloudBuildStatus[1] + { + new CloudBuildStatus(complete: true, success: false), + } + ), + } + }; + _service.tipRevision = "0"; + _presenter.BuildServiceEnabled = true; + + _presenter.OnUpdatePage(0); + var item = _window.items.First(); + + Assert.AreEqual(BuildState.Failed, item.buildState); + } + + [Test] + public void CollabHistoryPresenter_OnUpdatePage__BuildStateHasFailureWhenAnyBuildsFail() + { + _service.result = new RevisionsResult() + { + Revisions = new List() + { + new Revision + ( + revisionID: "0", + buildStatuses: new CloudBuildStatus[3] + { + new CloudBuildStatus(complete: true, success: false), + new CloudBuildStatus(complete: true, success: false), + new CloudBuildStatus(complete: true, success: true), + } + ), + } + }; + _service.tipRevision = "0"; + _presenter.BuildServiceEnabled = true; + + _presenter.OnUpdatePage(0); + var item = _window.items.First(); + + Assert.AreEqual(BuildState.Failed, item.buildState); + } + + [Test] + public void CollabHistoryPresenter_OnUpdatePage__ChangesPropagateThrough() + { + _service.result = new RevisionsResult() + { + Revisions = new List() + { + new Revision(revisionID: "0", entries: GenerateChangeActions(3)), + } + }; + + _presenter.OnUpdatePage(0); + var item = _window.items.First(); + var changes = item.changes.ToList(); + + Assert.AreEqual("Path0", changes[0].path); + Assert.AreEqual("Path1", changes[1].path); + Assert.AreEqual("Path2", changes[2].path); + } + + [Test] + public void CollabHistoryPresenter_OnUpdatePage__ChangesTotalIsCalculated() + { + _service.result = new RevisionsResult() + { + Revisions = new List() + { + new Revision(revisionID: "0", entries: GenerateChangeActions(3)), + } + }; + + _presenter.OnUpdatePage(0); + var item = _window.items.First(); + + Assert.AreEqual(3, item.changes.Count); + } + + [Test] + public void CollabHistoryPresenter_OnUpdatePage__ChangesTruncatedIsCalculated() + { + for (var i = 0; i < 20; i++) + { + _service.result = new RevisionsResult() + { + Revisions = new List() + { + new Revision(revisionID: "0", entries: GenerateChangeActions(i)), + } + }; + + _presenter.OnUpdatePage(0); + var item = _window.items.First(); + + Assert.AreEqual(i > 10, item.changesTruncated); + } + } + + [Test] + public void CollabHistoryPresenter_OnUpdatePage__OnlyKeeps10ChangeActions() + { + _service.result = new RevisionsResult() + { + Revisions = new List() + { + new Revision(authorName: "Test", author: "test", entries: GenerateChangeActions(12)), + } + }; + + _presenter.OnUpdatePage(1); + var item = _window.items.First(); + + Assert.AreEqual(10, item.changes.Count); + Assert.AreEqual(12, item.changesTotal); + Assert.AreEqual(true, item.changesTruncated); + } + + [Test] + public void CollabHistoryPresenter_OnUpdatePage__DeduplicatesMetaFiles() + { + _service.result = new RevisionsResult() + { + Revisions = new List() + { + new Revision + ( + authorName: "Test", + author: "test", + revisionID: "", + entries: new ChangeAction[2] + { + new ChangeAction(path: "Path1", action: "Action1"), + new ChangeAction(path: "Path1.meta", action: "Action1"), + } + ), + } + }; + + _presenter.OnUpdatePage(1); + var item = _window.items.First(); + + Assert.AreEqual(1, item.changes.Count); + Assert.AreEqual(1, item.changesTotal); + Assert.AreEqual("Path1", item.changes.First().path); + } + + [Test] + public void CollabHistoryPresenter_OnUpdatePage__FolderMetaFilesAreCounted() + { + _service.result = new RevisionsResult() + { + Revisions = new List() + { + new Revision + ( + authorName: "Test", + author: "test", + entries: new ChangeAction[1] + { + new ChangeAction(path: "Folder1.meta", action: "Action1"), + } + ), + } + }; + + _presenter.OnUpdatePage(1); + var item = _window.items.First(); + + Assert.AreEqual(1, item.changes.Count); + Assert.AreEqual(1, item.changesTotal); + Assert.AreEqual("Folder1", item.changes.First().path); + } + + private static ChangeAction[] GenerateChangeActions(int count) + { + var entries = new ChangeAction[count]; + for (var i = 0; i < count; i++) + entries[i] = new ChangeAction(path: "Path" + i, action: "Action" + i); + return entries; + } + } + + internal class TestRevisionsService : IRevisionsService + { + public RevisionsResult result; + public event RevisionsDelegate FetchRevisionsCallback; + + public string tipRevision { get; set; } + public string currentUser { get; set; } + + public void GetRevisions(int offset, int count) + { + if(FetchRevisionsCallback != null) + { + FetchRevisionsCallback(result); + } + } + } + + internal class TestHistoryWindow : ICollabHistoryWindow + { + public IEnumerable items; + + public bool revisionActionsEnabled { get; set; } + public int itemsPerPage { get; set; } + public string errMessage { get; set; } + public string inProgressRevision { get; set; } + public PageChangeAction OnPageChangeAction { get; set; } + public RevisionAction OnGoBackAction { get; set; } + public RevisionAction OnUpdateAction { get; set; } + public RevisionAction OnRestoreAction { get; set; } + public ShowBuildAction OnShowBuildAction { get; set; } + public Action OnShowServicesAction { get; set; } + + public void UpdateState(HistoryState state, bool force) + { + } + + public void UpdateRevisions(IEnumerable items, string tip, int totalRevisions, int currPage) + { + this.items = items; + } + } +} diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests/Editor/HistoryTests.cs.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests/Editor/HistoryTests.cs.meta new file mode 100644 index 0000000..d648a7f --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests/Editor/HistoryTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 23a56a19774ed42b6b65646af08a003c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests/Editor/Unity.CollabProxy.EditorTests.asmdef b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests/Editor/Unity.CollabProxy.EditorTests.asmdef new file mode 100644 index 0000000..3467a9e --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests/Editor/Unity.CollabProxy.EditorTests.asmdef @@ -0,0 +1,13 @@ +{ + "name": "Unity.CollabProxy.EditorTests", + "references": [ + "Unity.CollabProxy.Editor" + ], + "optionalUnityReferences": [ + "TestAssemblies" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [] +} diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests/Editor/Unity.CollabProxy.EditorTests.asmdef.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests/Editor/Unity.CollabProxy.EditorTests.asmdef.meta new file mode 100644 index 0000000..57db5c7 --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests/Editor/Unity.CollabProxy.EditorTests.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 782de34c17796430ba8d0ceddb60944e +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/package.json b/Library/PackageCache/com.unity.collab-proxy@1.2.16/package.json new file mode 100644 index 0000000..3402274 --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/package.json @@ -0,0 +1,21 @@ +{ + "name": "com.unity.collab-proxy", + "displayName": "Unity Collaborate", + "version": "1.2.16", + "unity": "2018.3", + "description": "Collaborate is a simple way for teams to save, share, and sync their Unity project", + "keywords": [ + "collab", + "collaborate", + "teams", + "team", + "cloud", + "backup" + ], + "dependencies": {}, + "repository": { + "type": "git", + "url": "https://gitlab.cds.internal.unity3d.com/upm-packages/cloud-services/collab-proxy.git", + "revision": "070e173b6a36e1d6097b1d95e09c08840c23f6ca" + } +} diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.16/package.json.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.16/package.json.meta new file mode 100644 index 0000000..c52d0c6 --- /dev/null +++ b/Library/PackageCache/com.unity.collab-proxy@1.2.16/package.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 57b0c806ba25b48aa8a6ecb3345a4a9b +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.ext.nunit@1.0.0/.gitlab-ci.yml b/Library/PackageCache/com.unity.ext.nunit@1.0.0/.gitlab-ci.yml new file mode 100644 index 0000000..4c64e22 --- /dev/null +++ b/Library/PackageCache/com.unity.ext.nunit@1.0.0/.gitlab-ci.yml @@ -0,0 +1,15 @@ +image: node:6.10.0 + +stages: + - push_to_packman_staging + +push_to_packman_staging: + stage: push_to_packman_staging + only: + - tags + script: + - sed -i "s/0.0.1-PLACEHOLDERVERSION/$CI_COMMIT_TAG/g" package.json + - sed -i "s/PLACEHOLDERSHA/$CI_COMMIT_SHA/g" package.json + - sed -i "s/0.0.1-PLACEHOLDERVERSION/$CI_COMMIT_TAG/g" CHANGELOG.md + - curl -u $USER_NAME:$API_KEY https://staging-packages.unity.com/auth > .npmrc + - npm publish diff --git a/Library/PackageCache/com.unity.ext.nunit@1.0.0/CHANGELOG.md b/Library/PackageCache/com.unity.ext.nunit@1.0.0/CHANGELOG.md new file mode 100644 index 0000000..225baea --- /dev/null +++ b/Library/PackageCache/com.unity.ext.nunit@1.0.0/CHANGELOG.md @@ -0,0 +1,11 @@ +# Changelog +All notable changes to this package will be documented in this file. + +The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). + +## [1.0.0] - 2019-02-21 + +### This is the first release of *Unity Package com.unity.ext.nunit*. + +- Migrated the custom version of nunit from inside of unity. diff --git a/Library/PackageCache/com.unity.ext.nunit@1.0.0/CHANGELOG.md.meta b/Library/PackageCache/com.unity.ext.nunit@1.0.0/CHANGELOG.md.meta new file mode 100644 index 0000000..d91fbde --- /dev/null +++ b/Library/PackageCache/com.unity.ext.nunit@1.0.0/CHANGELOG.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f49bbe06ffa5ae24abe32abdab430c24 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.ext.nunit@1.0.0/Documentation~/ext.nunit.md b/Library/PackageCache/com.unity.ext.nunit@1.0.0/Documentation~/ext.nunit.md new file mode 100644 index 0000000..2a38b9d --- /dev/null +++ b/Library/PackageCache/com.unity.ext.nunit@1.0.0/Documentation~/ext.nunit.md @@ -0,0 +1,6 @@ +# Custom Nunit build to work with Unity + +This version of nunit works with all platforms, il2cpp and Mono AOT. + +For Nunit Documentation: +https://github.com/nunit/docs/wiki/NUnit-Documentation diff --git a/Library/PackageCache/com.unity.ext.nunit@1.0.0/LICENSE.md b/Library/PackageCache/com.unity.ext.nunit@1.0.0/LICENSE.md new file mode 100644 index 0000000..ccc1f59 --- /dev/null +++ b/Library/PackageCache/com.unity.ext.nunit@1.0.0/LICENSE.md @@ -0,0 +1,19 @@ +Copyright (c) 2018 Charlie Poole, Rob Prouse + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file diff --git a/Library/PackageCache/com.unity.ext.nunit@1.0.0/LICENSE.md.meta b/Library/PackageCache/com.unity.ext.nunit@1.0.0/LICENSE.md.meta new file mode 100644 index 0000000..90df748 --- /dev/null +++ b/Library/PackageCache/com.unity.ext.nunit@1.0.0/LICENSE.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f91a00d2dca52b843b2d50ccf750737d +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.ext.nunit@1.0.0/README.md b/Library/PackageCache/com.unity.ext.nunit@1.0.0/README.md new file mode 100644 index 0000000..2a38b9d --- /dev/null +++ b/Library/PackageCache/com.unity.ext.nunit@1.0.0/README.md @@ -0,0 +1,6 @@ +# Custom Nunit build to work with Unity + +This version of nunit works with all platforms, il2cpp and Mono AOT. + +For Nunit Documentation: +https://github.com/nunit/docs/wiki/NUnit-Documentation diff --git a/Library/PackageCache/com.unity.ext.nunit@1.0.0/README.md.meta b/Library/PackageCache/com.unity.ext.nunit@1.0.0/README.md.meta new file mode 100644 index 0000000..e9a7f9f --- /dev/null +++ b/Library/PackageCache/com.unity.ext.nunit@1.0.0/README.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 5da62a0c1c5218c4aa16b74546a7822d +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.ext.nunit@1.0.0/net35.meta b/Library/PackageCache/com.unity.ext.nunit@1.0.0/net35.meta new file mode 100644 index 0000000..278a2fa --- /dev/null +++ b/Library/PackageCache/com.unity.ext.nunit@1.0.0/net35.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a36d8b72880a8004f96ac54ce4598ff9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.ext.nunit@1.0.0/net35/unity-custom.meta b/Library/PackageCache/com.unity.ext.nunit@1.0.0/net35/unity-custom.meta new file mode 100644 index 0000000..750f82c --- /dev/null +++ b/Library/PackageCache/com.unity.ext.nunit@1.0.0/net35/unity-custom.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2347243c7aa3e224f9282dc94e6fc3b2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.ext.nunit@1.0.0/net35/unity-custom/This is a custom build DONT include.txt b/Library/PackageCache/com.unity.ext.nunit@1.0.0/net35/unity-custom/This is a custom build DONT include.txt new file mode 100644 index 0000000..0839eb9 --- /dev/null +++ b/Library/PackageCache/com.unity.ext.nunit@1.0.0/net35/unity-custom/This is a custom build DONT include.txt @@ -0,0 +1,4 @@ +This is a custom nUnit build meant to be used by Unity editor and players. It shoul not be included or referenced from anywhere (unless you know what you're doing) + +Build from this repo +https://github.com/Unity-Technologies/nunit \ No newline at end of file diff --git a/Library/PackageCache/com.unity.ext.nunit@1.0.0/net35/unity-custom/This is a custom build DONT include.txt.meta b/Library/PackageCache/com.unity.ext.nunit@1.0.0/net35/unity-custom/This is a custom build DONT include.txt.meta new file mode 100644 index 0000000..5e251ee --- /dev/null +++ b/Library/PackageCache/com.unity.ext.nunit@1.0.0/net35/unity-custom/This is a custom build DONT include.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 3d67ccdf81bed8247ad0db2d5f47a7d1 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.ext.nunit@1.0.0/net35/unity-custom/nunit.framework.dll b/Library/PackageCache/com.unity.ext.nunit@1.0.0/net35/unity-custom/nunit.framework.dll new file mode 100644 index 0000000..3af863c Binary files /dev/null and b/Library/PackageCache/com.unity.ext.nunit@1.0.0/net35/unity-custom/nunit.framework.dll differ diff --git a/Library/PackageCache/com.unity.ext.nunit@1.0.0/net35/unity-custom/nunit.framework.dll.mdb b/Library/PackageCache/com.unity.ext.nunit@1.0.0/net35/unity-custom/nunit.framework.dll.mdb new file mode 100644 index 0000000..cb688df Binary files /dev/null and b/Library/PackageCache/com.unity.ext.nunit@1.0.0/net35/unity-custom/nunit.framework.dll.mdb differ diff --git a/Library/PackageCache/com.unity.ext.nunit@1.0.0/net35/unity-custom/nunit.framework.dll.mdb.meta b/Library/PackageCache/com.unity.ext.nunit@1.0.0/net35/unity-custom/nunit.framework.dll.mdb.meta new file mode 100644 index 0000000..1e81d1e --- /dev/null +++ b/Library/PackageCache/com.unity.ext.nunit@1.0.0/net35/unity-custom/nunit.framework.dll.mdb.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 6f768c3714a34a549960ea903fbadcc2 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.ext.nunit@1.0.0/net35/unity-custom/nunit.framework.dll.meta b/Library/PackageCache/com.unity.ext.nunit@1.0.0/net35/unity-custom/nunit.framework.dll.meta new file mode 100644 index 0000000..2870dbc --- /dev/null +++ b/Library/PackageCache/com.unity.ext.nunit@1.0.0/net35/unity-custom/nunit.framework.dll.meta @@ -0,0 +1,37 @@ +fileFormatVersion: 2 +guid: f1605f5534186904fa2c4c42acbfe01e +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: ["UNITY_INCLUDE_TESTS"] + isPreloaded: 0 + isOverridable: 1 + isExplicitlyReferenced: 1 + platformData: + - first: + '': Any + second: + enabled: 0 + settings: {} + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.ext.nunit@1.0.0/net35/unity-custom/nunit.framework.pdb b/Library/PackageCache/com.unity.ext.nunit@1.0.0/net35/unity-custom/nunit.framework.pdb new file mode 100644 index 0000000..cae9b39 Binary files /dev/null and b/Library/PackageCache/com.unity.ext.nunit@1.0.0/net35/unity-custom/nunit.framework.pdb differ diff --git a/Library/PackageCache/com.unity.ext.nunit@1.0.0/net35/unity-custom/nunit.framework.pdb.meta b/Library/PackageCache/com.unity.ext.nunit@1.0.0/net35/unity-custom/nunit.framework.pdb.meta new file mode 100644 index 0000000..dc02745 --- /dev/null +++ b/Library/PackageCache/com.unity.ext.nunit@1.0.0/net35/unity-custom/nunit.framework.pdb.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f136f1f122a53c64c9af51baecaa9c96 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.ext.nunit@1.0.0/net35/unity-custom/nunit.framework.xml b/Library/PackageCache/com.unity.ext.nunit@1.0.0/net35/unity-custom/nunit.framework.xml new file mode 100644 index 0000000..aea2099 --- /dev/null +++ b/Library/PackageCache/com.unity.ext.nunit@1.0.0/net35/unity-custom/nunit.framework.xml @@ -0,0 +1,18101 @@ + + + + nunit.framework + + + + + Basic Asserts on strings. + + + + + The Equals method throws an InvalidOperationException. This is done + to make sure there is no mistake by calling this function. + + + + + + + override the default ReferenceEquals to throw an InvalidOperationException. This + implementation makes sure there is no mistake in calling this function + as part of Assert. + + + + + + + Asserts that a string is found within another string. + + The expected string + The string to be examined + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that a string is found within another string. + + The expected string + The string to be examined + + + + Asserts that a string is not found within another string. + + The expected string + The string to be examined + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that a string is found within another string. + + The expected string + The string to be examined + + + + Asserts that a string starts with another string. + + The expected string + The string to be examined + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that a string starts with another string. + + The expected string + The string to be examined + + + + Asserts that a string does not start with another string. + + The expected string + The string to be examined + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that a string does not start with another string. + + The expected string + The string to be examined + + + + Asserts that a string ends with another string. + + The expected string + The string to be examined + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that a string ends with another string. + + The expected string + The string to be examined + + + + Asserts that a string does not end with another string. + + The expected string + The string to be examined + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that a string does not end with another string. + + The expected string + The string to be examined + + + + Asserts that two strings are equal, without regard to case. + + The expected string + The actual string + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that two strings are equal, without regard to case. + + The expected string + The actual string + + + + Asserts that two strings are not equal, without regard to case. + + The expected string + The actual string + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that two strings are not equal, without regard to case. + + The expected string + The actual string + + + + Asserts that a string matches an expected regular expression pattern. + + The regex pattern to be matched + The actual string + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that a string matches an expected regular expression pattern. + + The regex pattern to be matched + The actual string + + + + Asserts that a string does not match an expected regular expression pattern. + + The regex pattern to be used + The actual string + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that a string does not match an expected regular expression pattern. + + The regex pattern to be used + The actual string + + + + Combines multiple filters so that a test must pass all + of them in order to pass this filter. + + + + + A base class for multi-part filters + + + + + Interface to be implemented by filters applied to tests. + The filter applies when running the test, after it has been + loaded, since this is the only time an ITest exists. + + + + + Interface to be implemented by filters applied to tests. + The filter applies when running the test, after it has been + loaded, since this is the only time an ITest exists. + + + + + An object implementing IXmlNodeBuilder is able to build + an XML representation of itself and any children. + + + + + Returns a TNode representing the current object. + + If true, children are included where applicable + A TNode representing the result + + + + Returns a TNode representing the current object after + adding it as a child of the supplied parent node. + + The parent node. + If true, children are included, where applicable + + + + + Determine if a particular test passes the filter criteria. Pass + may examine the parents and/or descendants of a test, depending + on the semantics of the particular filter + + The test to which the filter is applied + True if the test passes the filter, otherwise false + + + + Determine if a test matches the filter expicitly. That is, it must + be a direct match of the test itself or one of it's children. + + The test to which the filter is applied + True if the test matches the filter explicityly, otherwise false + + + + Unique Empty filter. + + + + + Determine if a particular test passes the filter criteria. The default + implementation checks the test itself, its parents and any descendants. + + Derived classes may override this method or any of the Match methods + to change the behavior of the filter. + + The test to which the filter is applied + True if the test passes the filter, otherwise false + + + + Determine if a test matches the filter expicitly. That is, it must + be a direct match of the test itself or one of it's children. + + The test to which the filter is applied + True if the test matches the filter explicityly, otherwise false + + + + Determine whether the test itself matches the filter criteria, without + examining either parents or descendants. This is overridden by each + different type of filter to perform the necessary tests. + + The test to which the filter is applied + True if the filter matches the any parent of the test + + + + Determine whether any ancestor of the test matches the filter criteria + + The test to which the filter is applied + True if the filter matches the an ancestor of the test + + + + Determine whether any descendant of the test matches the filter criteria. + + The test to be matched + True if at least one descendant matches the filter criteria + + + + Create a TestFilter instance from an xml representation. + + + + + Create a TestFilter from it's TNode representation + + + + + Adds an XML node + + True if recursive + The added XML node + + + + Adds an XML node + + Parent node + True if recursive + The added XML node + + + + Indicates whether this is the EmptyFilter + + + + + Indicates whether this is a top-level filter, + not contained in any other filter. + + + + + Nested class provides an empty filter - one that always + returns true when called. It never matches explicitly. + + + + + Constructs an empty CompositeFilter + + + + + Constructs a CompositeFilter from an array of filters + + + + + + Adds a filter to the list of filters + + The filter to be added + + + + Checks whether the CompositeFilter is matched by a test. + + The test to be matched + + + + Checks whether the CompositeFilter is matched by a test. + + The test to be matched + + + + Checks whether the CompositeFilter is explicit matched by a test. + + The test to be matched + + + + Adds an XML node + + Parent node + True if recursive + The added XML node + + + + Return a list of the composing filters. + + + + + Gets the element name + + Element name + + + + Constructs an empty AndFilter + + + + + Constructs an AndFilter from an array of filters + + + + + + Checks whether the AndFilter is matched by a test + + The test to be matched + True if all the component filters pass, otherwise false + + + + Checks whether the AndFilter is matched by a test + + The test to be matched + True if all the component filters match, otherwise false + + + + Checks whether the AndFilter is explicit matched by a test. + + The test to be matched + True if all the component filters explicit match, otherwise false + + + + Gets the element name + + Element name + + + + SubstringConstraint can test whether a string contains + the expected substring. + + + + + StringConstraint is the abstract base for constraints + that operate on strings. It supports the IgnoreCase + modifier for string operations. + + + + + The Constraint class is the base of all built-in constraints + within NUnit. It provides the operator overloads used to combine + constraints. + + + + + Interface for all constraints + + + + + The IResolveConstraint interface is implemented by all + complete and resolvable constraints and expressions. + + + + + Return the top-level constraint for this expression + + + + + + Applies the constraint to an actual value, returning a ConstraintResult. + + The value to be tested + A ConstraintResult + + + + Applies the constraint to an ActualValueDelegate that returns + the value to be tested. The default implementation simply evaluates + the delegate but derived classes may override it to provide for + delayed processing. + + An ActualValueDelegate + A ConstraintResult + + + + Test whether the constraint is satisfied by a given reference. + The default implementation simply dereferences the value but + derived classes may override it to provide for delayed processing. + + A reference to the value to be tested + A ConstraintResult + + + + The display name of this Constraint for use by ToString(). + + + + + The Description of what this constraint tests, for + use in messages and in the ConstraintResult. + + + + + Arguments provided to this Constraint, for use in + formatting the description. + + + + + The ConstraintBuilder holding this constraint + + + + + Construct a constraint with optional arguments + + Arguments to be saved + + + + Applies the constraint to an actual value, returning a ConstraintResult. + + The value to be tested + A ConstraintResult + + + + Applies the constraint to an ActualValueDelegate that returns + the value to be tested. The default implementation simply evaluates + the delegate but derived classes may override it to provide for + delayed processing. + + An ActualValueDelegate + A ConstraintResult + + + + Test whether the constraint is satisfied by a given reference. + The default implementation simply dereferences the value but + derived classes may override it to provide for delayed processing. + + A reference to the value to be tested + A ConstraintResult + + + + Retrieves the value to be tested from an ActualValueDelegate. + The default implementation simply evaluates the delegate but derived + classes may override it to provide for delayed processing. + + An ActualValueDelegate + Delegate evaluation result + + + + Default override of ToString returns the constraint DisplayName + followed by any arguments within angle brackets. + + + + + + Returns the string representation of this constraint + + + + + This operator creates a constraint that is satisfied only if both + argument constraints are satisfied. + + + + + This operator creates a constraint that is satisfied if either + of the argument constraints is satisfied. + + + + + This operator creates a constraint that is satisfied if the + argument constraint is not satisfied. + + + + + Returns a DelayedConstraint with the specified delay time. + + The delay in milliseconds. + + + + + Returns a DelayedConstraint with the specified delay time + and polling interval. + + The delay in milliseconds. + The interval at which to test the constraint. + + + + + Resolves any pending operators and returns the resolved constraint. + + + + + The display name of this Constraint for use by ToString(). + The default value is the name of the constraint with + trailing "Constraint" removed. Derived classes may set + this to another name in their constructors. + + + + + The Description of what this constraint tests, for + use in messages and in the ConstraintResult. + + + + + Arguments provided to this Constraint, for use in + formatting the description. + + + + + The ConstraintBuilder holding this constraint + + + + + Returns a ConstraintExpression by appending And + to the current constraint. + + + + + Returns a ConstraintExpression by appending And + to the current constraint. + + + + + Returns a ConstraintExpression by appending Or + to the current constraint. + + + + + The expected value + + + + + Indicates whether tests should be case-insensitive + + + + + Description of this constraint + + + + + Constructs a StringConstraint without an expected value + + + + + Constructs a StringConstraint given an expected value + + The expected value + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Test whether the constraint is satisfied by a given string + + The string to be tested + True for success, false for failure + + + + The Description of what this constraint tests, for + use in messages and in the ConstraintResult. + + + + + Modify the constraint to ignore case in matching. + + + + + Initializes a new instance of the class. + + The expected. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Abstract base class used for prefixes + + + + + Construct given a base constraint + + + + + + The base constraint + + + + + Prefix used in forming the constraint description + + + + + The Description of what this constraint tests, for + use in messages and in the ConstraintResult. + + + + + AssignableToConstraint is used to test that an object + can be assigned to a given Type. + + + + + TypeConstraint is the abstract base for constraints + that take a Type as their expected value. + + + + + The expected Type used by the constraint + + + + + The type of the actual argument to which the constraint was applied + + + + + Construct a TypeConstraint for a given Type + + The expected type for the constraint + Prefix used in forming the constraint description + + + + Applies the constraint to an actual value, returning a ConstraintResult. + + The value to be tested + A ConstraintResult + + + + Apply the constraint to an actual value, returning true if it succeeds + + The actual argument + True if the constraint succeeds, otherwise false. + + + + Construct an AssignableToConstraint for the type provided + + + + + + Apply the constraint to an actual value, returning true if it succeeds + + The actual argument + True if the constraint succeeds, otherwise false. + + + + Summary description for MaxTimeAttribute. + + + + + PropertyAttribute is used to attach information to a test as a name/value pair.. + + + + + The abstract base class for all custom attributes defined by NUnit. + + + + + Default constructor + + + + + The IApplyToTest interface is implemented by self-applying + attributes that modify the state of a test in some way. + + + + + Modifies a test as defined for the specific attribute. + + The test to modify + + + + Construct a PropertyAttribute with a name and string value + + The name of the property + The property value + + + + Construct a PropertyAttribute with a name and int value + + The name of the property + The property value + + + + Construct a PropertyAttribute with a name and double value + + The name of the property + The property value + + + + Constructor for derived classes that set the + property dictionary directly. + + + + + Constructor for use by derived classes that use the + name of the type as the property name. Derived classes + must ensure that the Type of the property value is + a standard type supported by the BCL. Any custom + types will cause a serialization Exception when + in the client. + + + + + Modifies a test by adding properties to it. + + The test to modify + + + + Gets the property dictionary for this attribute + + + + + Objects implementing this interface are used to wrap + the entire test, including SetUp and TearDown. + + + + + ICommandWrapper is implemented by attributes and other + objects able to wrap a TestCommand with another command. + + + Attributes or other objects should implement one of the + derived interfaces, rather than this one, since they + indicate in which part of the command chain the wrapper + should be applied. + + + + + Wrap a command and return the result. + + The command to be wrapped + The wrapped command + + + + Construct a MaxTimeAttribute, given a time in milliseconds. + + The maximum elapsed time in milliseconds + + + + Randomizer returns a set of random _values in a repeatable + way, to allow re-running of tests if necessary. It extends + the .NET Random class, providing random values for a much + wider range of types. + + The class is used internally by the framework to generate + test case data and is also exposed for use by users through + the TestContext.Random property. + + + For consistency with the underlying Random Type, methods + returning a single value use the prefix "Next..." Those + without an argument return a non-negative value up to + the full positive range of the Type. Overloads are provided + for specifying a maximum or a range. Methods that return + arrays or strings use the prefix "Get..." to avoid + confusion with the single-value methods. + + + + + Default characters for random functions. + + Default characters are the English alphabet (uppercase & lowercase), arabic numerals, and underscore + + + + Get a Randomizer for a particular member, returning + one that has already been created if it exists. + This ensures that the same _values are generated + each time the tests are reloaded. + + + + + Get a randomizer for a particular parameter, returning + one that has already been created if it exists. + This ensures that the same values are generated + each time the tests are reloaded. + + + + + Create a new Randomizer using the next seed + available to ensure that each randomizer gives + a unique sequence of values. + + + + + + Default constructor + + + + + Construct based on seed value + + + + + + Returns a random unsigned int. + + + + + Returns a random unsigned int less than the specified maximum. + + + + + Returns a random unsigned int within a specified range. + + + + + Returns a non-negative random short. + + + + + Returns a non-negative random short less than the specified maximum. + + + + + Returns a non-negative random short within a specified range. + + + + + Returns a random unsigned short. + + + + + Returns a random unsigned short less than the specified maximum. + + + + + Returns a random unsigned short within a specified range. + + + + + Returns a random long. + + + + + Returns a random long less than the specified maximum. + + + + + Returns a non-negative random long within a specified range. + + + + + Returns a random ulong. + + + + + Returns a random ulong less than the specified maximum. + + + + + Returns a non-negative random long within a specified range. + + + + + Returns a random Byte + + + + + Returns a random Byte less than the specified maximum. + + + + + Returns a random Byte within a specified range + + + + + Returns a random SByte + + + + + Returns a random sbyte less than the specified maximum. + + + + + Returns a random sbyte within a specified range + + + + + Returns a random bool + + + + + Returns a random bool based on the probablility a true result + + + + + Returns a random double between 0.0 and the specified maximum. + + + + + Returns a random double within a specified range. + + + + + Returns a random float. + + + + + Returns a random float between 0.0 and the specified maximum. + + + + + Returns a random float within a specified range. + + + + + Returns a random enum value of the specified Type as an object. + + + + + Returns a random enum value of the specified Type. + + + + + Generate a random string based on the characters from the input string. + + desired length of output string. + string representing the set of characters from which to construct the resulting string + A random string of arbitrary length + + + + Generate a random string based on the characters from the input string. + + desired length of output string. + A random string of arbitrary length + Uses DefaultStringChars as the input character set + + + + Generate a random string based on the characters from the input string. + + A random string of the default length + Uses DefaultStringChars as the input character set + + + + Returns a random decimal. + + + + + Returns a random decimal between positive zero and the specified maximum. + + + + + Returns a random decimal within a specified range, which is not + permitted to exceed decimal.MaxVal in the current implementation. + + + A limitation of this implementation is that the range from min + to max must not exceed decimal.MaxVal. + + + + + Initial seed used to create randomizers for this run + + + + + The IFixtureBuilder interface is exposed by a class that knows how to + build a TestFixture from one or more Types. In general, it is exposed + by an attribute, but may be implemented in a helper class used by the + attribute in some cases. + + + + + Build one or more TestFixtures from type provided. At least one + non-null TestSuite must always be returned, since the method is + generally called because the user has marked the target class as + a fixture. If something prevents the fixture from being used, it + will be returned nonetheless, labelled as non-runnable. + + The type info of the fixture to be used. + A TestSuite object or one derived from TestSuite. + + + + The ITestBuilder interface is exposed by a class that knows how to + build one or more TestMethods from a MethodInfo. In general, it is exposed + by an attribute, which has additional information available to provide + the necessary test parameters to distinguish the test cases built. + + + + + Build one or more TestMethods from the provided MethodInfo. + + The method to be used as a test + The TestSuite to which the method will be added + A TestMethod object + + + + The IReflectionInfo interface is implemented by NUnit wrapper objects that perform reflection. + + + + + Returns an array of custom attributes of the specified type applied to this object + + + + + Returns a value indicating whether an attribute of the specified type is defined on this object. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Represents the result of running a test suite + + + + + The TestResult class represents the result of a test. + + + + + The ITestResult interface represents the result of a test. + + + + + Gets the ResultState of the test result, which + indicates the success or failure of the test. + + + + + Gets the name of the test result + + + + + Gets the full name of the test result + + + + + Gets the elapsed time for running the test in seconds + + + + + Gets or sets the time the test started running. + + + + + Gets or sets the time the test finished running. + + + + + Gets the message associated with a test + failure or with not running the test + + + + + Gets any stacktrace associated with an + error or failure. Not available in + the Compact Framework 1.0. + + + + + Gets the number of asserts executed + when running the test and all its children. + + + + + Gets the number of test cases that failed + when running the test and all its children. + + + + + Gets the number of test cases that passed + when running the test and all its children. + + + + + Gets the number of test cases that were skipped + when running the test and all its children. + + + + + Gets the number of test cases that were inconclusive + when running the test and all its children. + + + + + Indicates whether this result has any child results. + Accessing HasChildren should not force creation of the + Children collection in classes implementing this interface. + + + + + Gets the the collection of child results. + + + + + Gets the Test to which this result applies. + + + + + Gets any text output written to this result. + + + + + The minimum duration for tests + + + + + Error message for when child tests have errors + + + + + Error message for when child tests are ignored + + + + + Aggregate assertion count + + + + + Construct a test result given a Test + + The test to be used + + + + Returns the Xml representation of the result. + + If true, descendant results are included + An XmlNode representing the result + + + + Adds the XML representation of the result as a child of the + supplied parent node.. + + The parent node. + If true, descendant results are included + + + + + Set the result of the test + + The ResultState to use in the result + + + + Set the result of the test + + The ResultState to use in the result + A message associated with the result state + + + + Set the result of the test + + The ResultState to use in the result + A message associated with the result state + Stack trace giving the location of the command + + + + Set the test result based on the type of exception thrown + + The exception that was thrown + + + + Set the test result based on the type of exception thrown + + The exception that was thrown + THe FailureSite to use in the result + + + + RecordTearDownException appends the message and stacktrace + from an exception arising during teardown of the test + to any previously recorded information, so that any + earlier failure information is not lost. Note that + calling Assert.Ignore, Assert.Inconclusive, etc. during + teardown is treated as an error. If the current result + represents a suite, it may show a teardown error even + though all contained tests passed. + + The Exception to be recorded + + + + Adds a reason element to a node and returns it. + + The target node. + The new reason element. + + + + Adds a failure element to a node and returns it. + + The target node. + The new failure element. + + + + Gets the test with which this result is associated. + + + + + Gets the ResultState of the test result, which + indicates the success or failure of the test. + + + + + Gets the name of the test result + + + + + Gets the full name of the test result + + + + + Gets or sets the elapsed time for running the test in seconds + + + + + Gets or sets the time the test started running. + + + + + Gets or sets the time the test finished running. + + + + + Gets the message associated with a test + failure or with not running the test + + + + + Gets any stacktrace associated with an + error or failure. + + + + + Gets or sets the count of asserts executed + when running the test. + + + + + Gets the number of test cases that failed + when running the test and all its children. + + + + + Gets the number of test cases that passed + when running the test and all its children. + + + + + Gets the number of test cases that were skipped + when running the test and all its children. + + + + + Gets the number of test cases that were inconclusive + when running the test and all its children. + + + + + Indicates whether this result has any child results. + + + + + Gets the collection of child results. + + + + + Gets a TextWriter, which will write output to be included in the result. + + + + + Gets any text output written to this result. + + + + + Construct a TestSuiteResult base on a TestSuite + + The TestSuite to which the result applies + + + + Adds a child result to this result, setting this result's + ResultState to Failure if the child result failed. + + The result to be added + + + + Gets the number of test cases that failed + when running the test and all its children. + + + + + Gets the number of test cases that passed + when running the test and all its children. + + + + + Gets the number of test cases that were skipped + when running the test and all its children. + + + + + Gets the number of test cases that were inconclusive + when running the test and all its children. + + + + + Indicates whether this result has any child results. + + + + + Gets the collection of child results. + + + + + TestSuite represents a composite test, which contains other tests. + + + + + The Test abstract class represents a test within the framework. + + + + + Common interface supported by all representations + of a test. Only includes informational fields. + The Run method is specifically excluded to allow + for data-only representations of a test. + + + + + Gets the id of the test + + + + + Gets the name of the test + + + + + Gets the fully qualified name of the test + + + + + Gets the name of the class containing this test. Returns + null if the test is not associated with a class. + + + + + Gets the name of the method implementing this test. + Returns null if the test is not implemented as a method. + + + + + Gets the Type of the test fixture, if applicable, or + null if no fixture type is associated with this test. + + + + + Gets an IMethod for the method implementing this test. + Returns null if the test is not implemented as a method. + + + + + Gets the RunState of the test, indicating whether it can be run. + + + + + Count of the test cases ( 1 if this is a test case ) + + + + + Gets the properties of the test + + + + + Gets the parent test, if any. + + The parent test or null if none exists. + + + + Returns true if this is a test suite + + + + + Gets a bool indicating whether the current test + has any descendant tests. + + + + + Gets this test's child tests + + A list of child tests + + + + Gets a fixture object for running this test. + + + + + Static value to seed ids. It's started at 1000 so any + uninitialized ids will stand out. + + + + + The SetUp methods. + + + + + The teardown methods + + + + + Used to cache the declaring type for this MethodInfo + + + + + Method property backing field + + + + + Constructs a test given its name + + The name of the test + + + + Constructs a test given the path through the + test hierarchy to its parent and a name. + + The parent tests full name + The name of the test + + + + TODO: Documentation needed for constructor + + + + + + Construct a test from a MethodInfo + + + + + + Creates a TestResult for this test. + + A TestResult suitable for this type of test. + + + + Modify a newly constructed test by applying any of NUnit's common + attributes, based on a supplied ICustomAttributeProvider, which is + usually the reflection element from which the test was constructed, + but may not be in some instances. The attributes retrieved are + saved for use in subsequent operations. + + An object implementing ICustomAttributeProvider + + + + Add standard attributes and members to a test node. + + + + + + + Returns the Xml representation of the test + + If true, include child tests recursively + + + + + Returns an XmlNode representing the current result after + adding it as a child of the supplied parent node. + + The parent node. + If true, descendant results are included + + + + + Compares this test to another test for sorting purposes + + The other test + Value of -1, 0 or +1 depending on whether the current test is less than, equal to or greater than the other test + + + + Gets or sets the id of the test + + + + + + Gets or sets the name of the test + + + + + Gets or sets the fully qualified name of the test + + + + + + Gets the name of the class where this test was declared. + Returns null if the test is not associated with a class. + + + + + Gets the name of the method implementing this test. + Returns null if the test is not implemented as a method. + + + + + Gets the TypeInfo of the fixture used in running this test + or null if no fixture type is associated with it. + + + + + Gets a MethodInfo for the method implementing this test. + Returns null if the test is not implemented as a method. + + + + + Whether or not the test should be run + + + + + Gets the name used for the top-level element in the + XML representation of this test + + + + + Gets a string representing the type of test. Used as an attribute + value in the XML representation of a test and has no other + function in the framework. + + + + + Gets a count of test cases represented by + or contained under this test. + + + + + Gets the properties for this test + + + + + Returns true if this is a TestSuite + + + + + Gets a bool indicating whether the current test + has any descendant tests. + + + + + Gets the parent as a Test object. + Used by the core to set the parent. + + + + + Gets this test's child tests + + A list of child tests + + + + Gets or sets a fixture object for running this test. + + + + + Static prefix used for ids in this AppDomain. + Set by FrameworkController. + + + + + Gets or Sets the Int value representing the seed for the RandomGenerator + + + + + + Our collection of child tests + + + + + Initializes a new instance of the class. + + The name of the suite. + + + + Initializes a new instance of the class. + + Name of the parent suite. + The name of the suite. + + + + Initializes a new instance of the class. + + Type of the fixture. + + + + Initializes a new instance of the class. + + Type of the fixture. + + + + Sorts tests under this suite. + + + + + Adds a test to the suite. + + The test. + + + + Overridden to return a TestSuiteResult. + + A TestResult for this test. + + + + Returns an XmlNode representing the current result after + adding it as a child of the supplied parent node. + + The parent node. + If true, descendant results are included + + + + + Check that setup and teardown methods marked by certain attributes + meet NUnit's requirements and mark the tests not runnable otherwise. + + The attribute type to check for + + + + Gets this test's child tests + + The list of child tests + + + + Gets a count of test cases represented by + or contained under this test. + + + + + + The arguments to use in creating the fixture + + + + + Set to true to suppress sorting this suite's contents + + + + + Gets a bool indicating whether the current test + has any descendant tests. + + + + + Gets the name used for the top-level element in the + XML representation of this test + + + + + A PropertyBag represents a collection of name value pairs + that allows duplicate entries with the same key. Methods + are provided for adding a new pair as well as for setting + a key to a single value. All keys are strings but _values + may be of any type. Null _values are not permitted, since + a null entry represents the absence of the key. + + + + + A PropertyBag represents a collection of name/value pairs + that allows duplicate entries with the same key. Methods + are provided for adding a new pair as well as for setting + a key to a single value. All keys are strings but _values + may be of any type. Null _values are not permitted, since + a null entry represents the absence of the key. + + The entries in a PropertyBag are of two kinds: those that + take a single value and those that take multiple _values. + However, the PropertyBag has no knowledge of which entries + fall into each category and the distinction is entirely + up to the code using the PropertyBag. + + When working with multi-valued properties, client code + should use the Add method to add name/value pairs and + indexing to retrieve a list of all _values for a given + key. For example: + + bag.Add("Tag", "one"); + bag.Add("Tag", "two"); + Assert.That(bag["Tag"], + Is.EqualTo(new string[] { "one", "two" })); + + When working with single-valued propeties, client code + should use the Set method to set the value and Get to + retrieve the value. The GetSetting methods may also be + used to retrieve the value in a type-safe manner while + also providing default. For example: + + bag.Set("Priority", "low"); + bag.Set("Priority", "high"); // replaces value + Assert.That(bag.Get("Priority"), + Is.EqualTo("high")); + Assert.That(bag.GetSetting("Priority", "low"), + Is.EqualTo("high")); + + + + + Adds a key/value pair to the property bag + + The key + The value + + + + Sets the value for a key, removing any other + _values that are already in the property set. + + + + + + + Gets a single value for a key, using the first + one if multiple _values are present and returning + null if the value is not found. + + + + + Gets a flag indicating whether the specified key has + any entries in the property set. + + The key to be checked + True if their are _values present, otherwise false + + + + Gets or sets the list of _values for a particular key + + The key for which the _values are to be retrieved or set + + + + Gets a collection containing all the keys in the property set + + + + + Adds a key/value pair to the property set + + The key + The value + + + + Sets the value for a key, removing any other + _values that are already in the property set. + + + + + + + Gets a single value for a key, using the first + one if multiple _values are present and returning + null if the value is not found. + + + + + + + Gets a flag indicating whether the specified key has + any entries in the property set. + + The key to be checked + + True if their are _values present, otherwise false + + + + + Returns an XmlNode representating the current PropertyBag. + + Not used + An XmlNode representing the PropertyBag + + + + Returns an XmlNode representing the PropertyBag after + adding it as a child of the supplied parent node. + + The parent node. + Not used + + + + + Gets a collection containing all the keys in the property set + + + + + + Gets or sets the list of _values for a particular key + + + + + Thrown when an assertion failed. Here to preserve the inner + exception and hence its stack trace. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The error message that explains + the reason for the exception + + + + Initializes a new instance of the class. + + The error message that explains + the reason for the exception + The exception that caused the + current exception + + + + Serialization Constructor + + + + + FullName filter selects tests based on their FullName + + + + + ValueMatchFilter selects tests based on some value, which + is expected to be contained in the test. + + + + + Construct a ValueMatchFilter for a single value. + + The value to be included. + + + + Match the input provided by the derived class + + The value to be matchedT + True for a match, false otherwise. + + + + Adds an XML node + + Parent node + True if recursive + The added XML node + + + + Returns the value matched by the filter - used for testing + + + + + Indicates whether the value is a regular expression + + + + + Gets the element name + + Element name + + + + Construct a FullNameFilter for a single name + + The name the filter will recognize. + + + + Match a test against a single value. + + + + + Gets the element name + + Element name + + + + NotFilter negates the operation of another filter + + + + + Construct a not filter on another filter + + The filter to be negated + + + + Determine if a particular test passes the filter criteria. The default + implementation checks the test itself, its parents and any descendants. + + Derived classes may override this method or any of the Match methods + to change the behavior of the filter. + + The test to which the filter is applied + True if the test passes the filter, otherwise false + + + + Check whether the filter matches a test + + The test to be matched + True if it matches, otherwise false + + + + Determine if a test matches the filter expicitly. That is, it must + be a direct match of the test itself or one of it's children. + + The test to which the filter is applied + True if the test matches the filter explicityly, otherwise false + + + + Adds an XML node + + Parent node + True if recursive + The added XML node + + + + Gets the base filter + + + + + SequentialStrategy creates test cases by using all of the + parameter data sources in parallel, substituting null + when any of them run out of data. + + + + + CombiningStrategy is the abstract base for classes that + know how to combine values provided for individual test + parameters to create a set of test cases. + + + + + Gets the test cases generated by the CombiningStrategy. + + The test cases. + + + + Gets the test cases generated by the CombiningStrategy. + + The test cases. + + + + NUnitTestFixtureBuilder is able to build a fixture given + a class marked with a TestFixtureAttribute or an unmarked + class containing test methods. In the first case, it is + called by the attribute and in the second directly by + NUnitSuiteBuilder. + + + + + Build a TestFixture from type provided. A non-null TestSuite + must always be returned, since the method is generally called + because the user has marked the target class as a fixture. + If something prevents the fixture from being used, it should + be returned nonetheless, labelled as non-runnable. + + An ITypeInfo for the fixture to be used. + A TestSuite object or one derived from TestSuite. + + + + Overload of BuildFrom called by tests that have arguments. + Builds a fixture using the provided type and information + in the ITestFixtureData object. + + The TypeInfo for which to construct a fixture. + An object implementing ITestFixtureData or null. + + + + + Method to add test cases to the newly constructed fixture. + + The fixture to which cases should be added + + + + Method to create a test case from a MethodInfo and add + it to the fixture being built. It first checks to see if + any global TestCaseBuilder addin wants to build the + test case. If not, it uses the internal builder + collection maintained by this fixture builder. + + The default implementation has no test case builders. + Derived classes should add builders to the collection + in their constructor. + + The method for which a test is to be created + The test suite being built. + A newly constructed Test + + + + UniqueItemsConstraint tests whether all the items in a + collection are unique. + + + + + CollectionItemsEqualConstraint is the abstract base class for all + collection constraints that apply some notion of item equality + as a part of their operation. + + + + + CollectionConstraint is the abstract base class for + constraints that operate on collections. + + + + + Construct an empty CollectionConstraint + + + + + Construct a CollectionConstraint + + + + + + Determines whether the specified enumerable is empty. + + The enumerable. + + true if the specified enumerable is empty; otherwise, false. + + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Protected method to be implemented by derived classes + + + + + + + Construct an empty CollectionConstraint + + + + + Construct a CollectionConstraint + + + + + + Flag the constraint to use the supplied IComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied Comparison object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IEqualityComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IEqualityComparer object. + + The IComparer object to use. + Self. + + + + Compares two collection members for equality + + + + + Return a new CollectionTally for use in making tests + + The collection to be included in the tally + + + + Flag the constraint to ignore case and return self. + + + + + Check that all items are unique. + + + + + + + The Description of what this constraint tests, for + use in messages and in the ConstraintResult. + + + + + SamePathOrUnderConstraint tests that one path is under another + + + + + PathConstraint serves as the abstract base of constraints + that operate on paths and provides several helper methods. + + + + + Construct a PathConstraint for a give expected path + + The expected path + + + + Returns the string representation of this constraint + + + + + Canonicalize the provided path + + + The path in standardized form + + + + Test whether one path in canonical form is a subpath of another path + + The first path - supposed to be the parent path + The second path - supposed to be the child path + + + + + Modifies the current instance to be case-sensitive + and returns it. + + + + + Initializes a new instance of the class. + + The expected path + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + The Description of what this constraint tests, for + use in messages and in the ConstraintResult. + + + + + NoItemConstraint applies another constraint to each + item in a collection, failing if any of them succeeds. + + + + + Construct a SomeItemsConstraint on top of an existing constraint + + + + + + Apply the item constraint to each item in the collection, + failing if any item fails. + + + + + + + The display name of this Constraint for use by ToString(). + The default value is the name of the constraint with + trailing "Constraint" removed. Derived classes may set + this to another name in their constructors. + + + + + EndsWithConstraint can test whether a string ends + with an expected substring. + + + + + Initializes a new instance of the class. + + The expected string + + + + Test whether the constraint is matched by the actual value. + This is a template method, which calls the IsMatch method + of the derived class. + + + + + + + ValuesAttribute is used to provide literal arguments for + an individual parameter of a test. + + + + + The abstract base class for all data-providing attributes + defined by NUnit. Used to select all data sources for a + method, class or parameter. + + + + + Default constructor + + + + + The IParameterDataSource interface is implemented by types + that can provide data for a test method parameter. + + + + + Gets an enumeration of data items for use as arguments + for a test method parameter. + + The parameter for which data is needed + An enumeration containing individual data items + + + + The collection of data to be returned. Must + be set by any derived attribute classes. + We use an object[] so that the individual + elements may have their type changed in GetData + if necessary + + + + + Constructs for use with an Enum parameter. Will pass every enum + value in to the test. + + + + + Construct with one argument + + + + + + Construct with two arguments + + + + + + + Construct with three arguments + + + + + + + + Construct with an array of arguments + + + + + + Get the collection of _values to be used as arguments + + + + + Marks a test to use a pairwise join of any argument + data provided. Arguments will be combined in such a + way that all possible pairs of arguments are used. + + + + + Marks a test to use a particular CombiningStrategy to join + any parameter data provided. Since this is the default, the + attribute is optional. + + + + + Construct a CombiningStrategyAttribute incorporating an + ICombiningStrategy and an IParamterDataProvider. + + Combining strategy to be used in combining data + An IParameterDataProvider to supply data + + + + Construct a CombiningStrategyAttribute incorporating an object + that implements ICombiningStrategy and an IParameterDataProvider. + This constructor is provided for CLS compliance. + + Combining strategy to be used in combining data + An IParameterDataProvider to supply data + + + + Construct one or more TestMethods from a given MethodInfo, + using available parameter data. + + The MethodInfo for which tests are to be constructed. + The suite to which the tests will be added. + One or more TestMethods + + + + Modify the test by adding the name of the combining strategy + to the properties. + + The test to modify + + + + Default constructor + + + + + CultureAttribute is used to mark a test fixture or an + individual method as applying to a particular Culture only. + + + + + Abstract base for Attributes that are used to include tests + in the test run based on environmental settings. + + + + + Constructor with no included items specified, for use + with named property syntax. + + + + + Constructor taking one or more included items + + Comma-delimited list of included items + + + + Name of the item that is needed in order for + a test to run. Multiple items may be given, + separated by a comma. + + + + + Name of the item to be excluded. Multiple items + may be given, separated by a comma. + + + + + The reason for including or excluding the test + + + + + Constructor with no cultures specified, for use + with named property syntax. + + + + + Constructor taking one or more cultures + + Comma-deliminted list of cultures + + + + Causes a test to be skipped if this CultureAttribute is not satisfied. + + The test to modify + + + + Tests to determine if the current culture is supported + based on the properties of this attribute. + + True, if the current culture is supported + + + + Test to determine if the a particular culture or comma- + delimited set of cultures is in use. + + Name of the culture or comma-separated list of culture ids + True if the culture is in use on the system + + + + Test to determine if one of a collection of cultures + is being used currently. + + + + + + + The current state of a work item + + + + + Ready to run or continue + + + + + Work Item is executing + + + + + Complete + + + + + A WorkItem may be an individual test case, a fixture or + a higher level grouping of tests. All WorkItems inherit + from the abstract WorkItem class, which uses the template + pattern to allow derived classes to perform work in + whatever way is needed. + + A WorkItem is created with a particular TestExecutionContext + and is responsible for re-establishing that context in the + current thread before it begins or resumes execution. + + + + + Creates a work item. + + The test for which this WorkItem is being created. + The filter to be used in selecting any child Tests. + + + + + Construct a WorkItem for a particular test. + + The test that the WorkItem will run + + + + Initialize the TestExecutionContext. This must be done + before executing the WorkItem. + + + Originally, the context was provided in the constructor + but delaying initialization of the context until the item + is about to be dispatched allows changes in the parent + context during OneTimeSetUp to be reflected in the child. + + The TestExecutionContext to use + + + + Execute the current work item, including any + child work items. + + + + + Cancel (abort or stop) a WorkItem + + true if the WorkItem should be aborted, false if it should run to completion + + + + Method that performs actually performs the work. It should + set the State to WorkItemState.Complete when done. + + + + + Method called by the derived class when all work is complete + + + + + Event triggered when the item is complete + + + + + Gets the current state of the WorkItem + + + + + The test being executed by the work item + + + + + The execution context + + + + + The unique id of the worker executing this item. + + + + + The test actions to be performed before and after this test + + + + + The test result + + + + + TODO: Documentation needed for class + + + + + TODO: Documentation needed for class + + + + + TestCommand is the abstract base class for all test commands + in the framework. A TestCommand represents a single stage in + the execution of a test, e.g.: SetUp/TearDown, checking for + Timeout, verifying the returned result from a method, etc. + + TestCommands may decorate other test commands so that the + execution of a lower-level command is nested within that + of a higher level command. All nested commands are executed + synchronously, as a single unit. Scheduling test execution + on separate threads is handled at a higher level, using the + task dispatcher. + + + + + Construct a TestCommand for a test. + + The test to be executed + + + + Runs the test in a specified context, returning a TestResult. + + The TestExecutionContext to be used for running the test. + A TestResult + + + + Gets the test associated with this command. + + + + TODO: Documentation needed for field + + + TODO: Documentation needed for method + + + + TODO: Documentation needed for constructor + + + + + + Initializes a new instance of the class. + + The inner command. + The max time allowed in milliseconds + + + + Runs the test, saving a TestResult in the supplied TestExecutionContext + + The context in which the test should run. + A TestResult + + + + The ITestListener interface is used internally to receive + notifications of significant events while a test is being + run. The events are propagated to clients by means of an + AsyncCallback. NUnit extensions may also monitor these events. + + + + + Called when a test has just started + + The test that is starting + + + + Called when a test has finished + + The result of the test + + + + Called when a test produces output for immediate display + + A TestOutput object containing the text to display + + + + The ITestAssemblyBuilder interface is implemented by a class + that is able to build a suite of tests given an assembly or + an assembly filename. + + + + + Build a suite of tests from a provided assembly + + The assembly from which tests are to be built + A dictionary of options to use in building the suite + A TestSuite containing the tests found in the assembly + + + + Build a suite of tests given the filename of an assembly + + The filename of the assembly from which tests are to be built + A dictionary of options to use in building the suite + A TestSuite containing the tests found in the assembly + + + + InternalTrace provides facilities for tracing the execution + of the NUnit framework. Tests and classes under test may make use + of Console writes, System.Diagnostics.Trace or various loggers and + NUnit itself traps and processes each of them. For that reason, a + separate internal trace is needed. + + Note: + InternalTrace uses a global lock to allow multiple threads to write + trace messages. This can easily make it a bottleneck so it must be + used sparingly. Keep the trace Level as low as possible and only + insert InternalTrace writes where they are needed. + TODO: add some buffering and a separate writer thread as an option. + TODO: figure out a way to turn on trace in specific classes only. + + + + + Initialize the internal trace facility using the name of the log + to be written to and the trace level. + + The log name + The trace level + + + + Initialize the internal trace using a provided TextWriter and level + + A TextWriter + The InternalTraceLevel + + + + Get a named Logger + + + + + + Get a logger named for a particular Type. + + + + + Gets a flag indicating whether the InternalTrace is initialized + + + + + The ITypeInfo interface is an abstraction of a .NET Type + + + + + Returns true if the Type wrapped is equal to the argument + + + + + Get the display name for this typeInfo. + + + + + Get the display name for an oject of this type, constructed with specific arguments + + + + + Returns a Type representing a generic type definition from which this Type can be constructed. + + + + + Returns a new ITypeInfo representing an instance of this generic Type using the supplied Type arguments + + + + + Returns a value indicating whether this type has a method with a specified public attribute + + + + + Returns an array of IMethodInfos for methods of this Type + that match the specified flags. + + + + + Gets the public constructor taking the specified argument Types + + + + + Returns a value indicating whether this Type has a public constructor taking the specified argument Types. + + + + + Construct an object of this Type, using the specified arguments. + + + + + Gets the underlying Type on which this ITypeInfo is based + + + + + Gets the base type of this type as an ITypeInfo + + + + + Gets the Name of the Type + + + + + Gets the FullName of the Type + + + + + Gets the assembly in which the type is declared + + + + + Gets the Namespace of the Type + + + + + Gets a value indicating whether the type is abstract. + + + + + Gets a value indicating whether the Type is a generic Type + + + + + Gets a value indicating whether the Type has generic parameters that have not been replaced by specific Types. + + + + + Gets a value indicating whether the Type is a generic Type definition + + + + + Gets a value indicating whether the type is sealed. + + + + + Gets a value indicating whether this type is a static class. + + + + + Applies the constraint to an actual value, returning a ConstraintResult. + + The value to be tested + A ConstraintResult + + + + The Description of what this constraint tests, for + use in messages and in the ConstraintResult. + + + + + Defines methods to manipulate thread-safe collections intended for producer/consumer usage. + + Specifies the type of elements in the collection. + + All implementations of this interface must enable all members of this interface + to be used concurrently from multiple threads. + + + + + Attempts to add an object to the . + + The object to add to the . + true if the object was added successfully; otherwise, false. + The was invalid for this collection. + + + + Attempts to remove and return an object from the . + + + When this method returns, if the object was removed and returned successfully, contains the removed object. If no object was available to be removed, the value is + unspecified. + + true if an object was removed and returned successfully; otherwise, false. + + + + Copies the elements contained in the to a new array. + + A new array containing the elements copied from the . + + + + Copies the elements of the to + an + , starting at a specified index. + + The one-dimensional that is the destination of + the elements copied from the . + The array must have zero-based indexing. + The zero-based index in at which copying + begins. + is a null reference (Nothing in + Visual Basic). + is less than + zero. + is equal to or greater than the + length of the + -or- The number of elements in the source is greater than the + available space from to the end of the destination . + + + + + Provide the context information of the current test. + This is an adapter for the internal ExecutionContext + class, hiding the internals from the user test. + + + + + + + + + + Construct a TestContext for an ExecutionContext + + The ExecutionContext to adapt + + + + Gets a TextWriter that will send output directly to Console.Error + + + + + Gets a TextWriter for use in displaying immediate progress messages + + + + + TestParameters object holds parameters for the test run, if any are specified + + + + Write the string representation of a boolean value to the current result + + + Write a char to the current result + + + Write a char array to the current result + + + Write the string representation of a double to the current result + + + Write the string representation of an Int32 value to the current result + + + Write the string representation of an Int64 value to the current result + + + Write the string representation of a decimal value to the current result + + + Write the string representation of an object to the current result + + + Write the string representation of a Single value to the current result + + + Write a string to the current result + + + Write the string representation of a UInt32 value to the current result + + + Write the string representation of a UInt64 value to the current result + + + Write a formatted string to the current result + + + Write a formatted string to the current result + + + Write a formatted string to the current result + + + Write a formatted string to the current result + + + Write a line terminator to the current result + + + Write the string representation of a boolean value to the current result followed by a line terminator + + + Write a char to the current result followed by a line terminator + + + Write a char array to the current result followed by a line terminator + + + Write the string representation of a double to the current result followed by a line terminator + + + Write the string representation of an Int32 value to the current result followed by a line terminator + + + Write the string representation of an Int64 value to the current result followed by a line terminator + + + Write the string representation of a decimal value to the current result followed by a line terminator + + + Write the string representation of an object to the current result followed by a line terminator + + + Write the string representation of a Single value to the current result followed by a line terminator + + + Write a string to the current result followed by a line terminator + + + Write the string representation of a UInt32 value to the current result followed by a line terminator + + + Write the string representation of a UInt64 value to the current result followed by a line terminator + + + Write a formatted string to the current result followed by a line terminator + + + Write a formatted string to the current result followed by a line terminator + + + Write a formatted string to the current result followed by a line terminator + + + Write a formatted string to the current result followed by a line terminator + + + + This method adds the a new ValueFormatterFactory to the + chain of responsibility used for fomatting values in messages. + The scope of the change is the current TestContext. + + The factory delegate + + + + This method provides a simplified way to add a ValueFormatter + delegate to the chain of responsibility, creating the factory + delegate internally. It is useful when the Type of the object + is the only criterion for selection of the formatter, since + it can be used without getting involved with a compould function. + + The type supported by this formatter + The ValueFormatter delegate + + + + Get the current test context. This is created + as needed. The user may save the context for + use within a test, but it should not be used + outside the test for which it is created. + + + + + Gets a TextWriter that will send output to the current test result. + + + + + Get a representation of the current test. + + + + + Gets a Representation of the TestResult for the current test. + + + + + Gets the unique name of the Worker that is executing this test. + + + + + Gets the directory containing the current test assembly. + + + + + Gets the directory to be used for outputting files created + by this test run. + + + + + Gets the random generator. + + + The random generator. + + + + + TestAdapter adapts a Test for consumption by + the user test code. + + + + + Construct a TestAdapter for a Test + + The Test to be adapted + + + + Gets the unique Id of a test + + + + + The name of the test, which may or may not be + the same as the method name. + + + + + The name of the method representing the test. + + + + + The FullName of the test + + + + + The ClassName of the test + + + + + The properties of the test. + + + + + ResultAdapter adapts a TestResult for consumption by + the user test code. + + + + + Construct a ResultAdapter for a TestResult + + The TestResult to be adapted + + + + Gets a ResultState representing the outcome of the test. + + + + + Gets the message associated with a test + failure or with not running the test + + + + + Gets any stacktrace associated with an + error or failure. + + + + + Gets the number of test cases that failed + when running the test and all its children. + + + + + Gets the number of test cases that passed + when running the test and all its children. + + + + + Gets the number of test cases that were skipped + when running the test and all its children. + + + + + Gets the number of test cases that were inconclusive + when running the test and all its children. + + + + + ExceptionHelper provides static methods for working with exceptions + + + + + Rethrows an exception, preserving its stack trace + + The exception to rethrow + + + + Builds up a message, using the Message field of the specified exception + as well as any InnerExceptions. + + The exception. + A combined message string. + + + + Builds up a message, using the Message field of the specified exception + as well as any InnerExceptions. + + The exception. + A combined stack trace. + + + + Gets the stack trace of the exception. + + The exception. + A string representation of the stack trace. + + + + CultureDetector is a helper class used by NUnit to determine + whether a test should be run based on the current culture. + + + + + Default constructor uses the current culture. + + + + + Construct a CultureDetector for a particular culture for testing. + + The culture to be used + + + + Test to determine if one of a collection of cultures + is being used currently. + + + + + + + Tests to determine if the current culture is supported + based on a culture attribute. + + The attribute to examine + + + + + Test to determine if the a particular culture or comma- + delimited set of cultures is in use. + + Name of the culture or comma-separated list of culture ids + True if the culture is in use on the system + + + + Return the last failure reason. Results are not + defined if called before IsSupported( Attribute ) + is called. + + + + + PairwiseStrategy creates test cases by combining the parameter + data so that all possible pairs of data items are used. + + + + The number of test cases that cover all possible pairs of test function + parameters values is significantly less than the number of test cases + that cover all possible combination of test function parameters values. + And because different studies show that most of software failures are + caused by combination of no more than two parameters, pairwise testing + can be an effective ways to test the system when it's impossible to test + all combinations of parameters. + + + The PairwiseStrategy code is based on "jenny" tool by Bob Jenkins: + http://burtleburtle.net/bob/math/jenny.html + + + + + + Gets the test cases generated by this strategy instance. + + A set of test cases. + + + + FleaRand is a pseudo-random number generator developed by Bob Jenkins: + http://burtleburtle.net/bob/rand/talksmall.html#flea + + + + + Initializes a new instance of the FleaRand class. + + The seed. + + + + FeatureInfo represents coverage of a single value of test function + parameter, represented as a pair of indices, Dimension and Feature. In + terms of unit testing, Dimension is the index of the test parameter and + Feature is the index of the supplied value in that parameter's list of + sources. + + + + + Initializes a new instance of FeatureInfo class. + + Index of a dimension. + Index of a feature. + + + + A FeatureTuple represents a combination of features, one per test + parameter, which should be covered by a test case. In the + PairwiseStrategy, we are only trying to cover pairs of features, so the + tuples actually may contain only single feature or pair of features, but + the algorithm itself works with triplets, quadruples and so on. + + + + + Initializes a new instance of FeatureTuple class for a single feature. + + Single feature. + + + + Initializes a new instance of FeatureTuple class for a pair of features. + + First feature. + Second feature. + + + + TestCase represents a single test case covering a list of features. + + + + + Initializes a new instance of TestCaseInfo class. + + A number of features in the test case. + + + + PairwiseTestCaseGenerator class implements an algorithm which generates + a set of test cases which covers all pairs of possible values of test + function. + + + + The algorithm starts with creating a set of all feature tuples which we + will try to cover (see method). This set + includes every single feature and all possible pairs of features. We + store feature tuples in the 3-D collection (where axes are "dimension", + "feature", and "all combinations which includes this feature"), and for + every two feature (e.g. "A" and "B") we generate both ("A", "B") and + ("B", "A") pairs. This data structure extremely reduces the amount of + time needed to calculate coverage for a single test case (this + calculation is the most time-consuming part of the algorithm). + + + Then the algorithm picks one tuple from the uncovered tuple, creates a + test case that covers this tuple, and then removes this tuple and all + other tuples covered by this test case from the collection of uncovered + tuples. + + + Picking a tuple to cover + + + There are no any special rules defined for picking tuples to cover. We + just pick them one by one, in the order they were generated. + + + Test generation + + + Test generation starts from creating a completely random test case which + covers, nevertheless, previously selected tuple. Then the algorithm + tries to maximize number of tuples which this test covers. + + + Test generation and maximization process repeats seven times for every + selected tuple and then the algorithm picks the best test case ("seven" + is a magic number which provides good results in acceptable time). + + Maximizing test coverage + + To maximize tests coverage, the algorithm walks thru the list of mutable + dimensions (mutable dimension is a dimension that are not included in + the previously selected tuple). Then for every dimension, the algorithm + walks thru the list of features and checks if this feature provides + better coverage than randomly selected feature, and if yes keeps this + feature. + + + This process repeats while it shows progress. If the last iteration + doesn't improve coverage, the process ends. + + + In addition, for better results, before start every iteration, the + algorithm "scrambles" dimensions - so for every iteration dimension + probes in a different order. + + + + + + Creates a set of test cases for specified dimensions. + + + An array which contains information about dimensions. Each element of + this array represents a number of features in the specific dimension. + + + A set of test cases. + + + + + Provides data from fields marked with the DatapointAttribute or the + DatapointsAttribute. + + + + + The IDataPointProvider interface is used by extensions + that provide data for a single test parameter. + + + + + Determine whether any data is available for a parameter. + + An IParameterInfo representing one + argument to a parameterized test + True if any data is available, otherwise false. + + + + Return an IEnumerable providing data for use with the + supplied parameter. + + An IParameterInfo representing one + argument to a parameterized test + An IEnumerable providing the required data + + + + Determine whether any data is available for a parameter. + + A ParameterInfo representing one + argument to a parameterized test + + True if any data is available, otherwise false. + + + + + Return an IEnumerable providing data for use with the + supplied parameter. + + A ParameterInfo representing one + argument to a parameterized test + + An IEnumerable providing the required data + + + + + CombinatorialStrategy creates test cases by using all possible + combinations of the parameter data. + + + + + Gets the test cases generated by the CombiningStrategy. + + The test cases. + + + + ThrowsNothingConstraint tests that a delegate does not + throw an exception. + + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True if no exception is thrown, otherwise false + + + + Applies the constraint to an ActualValueDelegate that returns + the value to be tested. The default implementation simply evaluates + the delegate but derived classes may override it to provide for + delayed processing. + + An ActualValueDelegate + A ConstraintResult + + + + Gets text describing a constraint + + + + + Operator that requires at least one of it's arguments to succeed + + + + + Abstract base class for all binary operators + + + + + The ConstraintOperator class is used internally by a + ConstraintBuilder to represent an operator that + modifies or combines constraints. + + Constraint operators use left and right precedence + _values to determine whether the top operator on the + stack should be reduced before pushing a new operator. + + + + + The precedence value used when the operator + is about to be pushed to the stack. + + + + + The precedence value used when the operator + is on the top of the stack. + + + + + Reduce produces a constraint from the operator and + any arguments. It takes the arguments from the constraint + stack and pushes the resulting constraint on it. + + + + + + The syntax element preceding this operator + + + + + The syntax element following this operator + + + + + The precedence value used when the operator + is about to be pushed to the stack. + + + + + The precedence value used when the operator + is on the top of the stack. + + + + + Reduce produces a constraint from the operator and + any arguments. It takes the arguments from the constraint + stack and pushes the resulting constraint on it. + + + + + + Abstract method that produces a constraint by applying + the operator to its left and right constraint arguments. + + + + + Gets the left precedence of the operator + + + + + Gets the right precedence of the operator + + + + + Construct an OrOperator + + + + + Apply the operator to produce an OrConstraint + + + + + The Numerics class contains common operations on numeric _values. + + + + + Checks the type of the object, returning true if + the object is a numeric type. + + The object to check + true if the object is a numeric type + + + + Checks the type of the object, returning true if + the object is a floating point numeric type. + + The object to check + true if the object is a floating point numeric type + + + + Checks the type of the object, returning true if + the object is a fixed point numeric type. + + The object to check + true if the object is a fixed point numeric type + + + + Test two numeric _values for equality, performing the usual numeric + conversions and using a provided or default tolerance. If the tolerance + provided is Empty, this method may set it to a default tolerance. + + The expected value + The actual value + A reference to the tolerance in effect + True if the _values are equal + + + + Compare two numeric _values, performing the usual numeric conversions. + + The expected value + The actual value + The relationship of the _values to each other + + + + FalseConstraint tests that the actual value is false + + + + + Initializes a new instance of the class. + + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + TestFixtureAttribute is used to mark a class that represents a TestFixture. + + + + + The ITestCaseData interface is implemented by a class + that is able to return the data required to create an + instance of a parameterized test fixture. + + + + + The ITestData interface is implemented by a class that + represents a single instance of a parameterized test. + + + + + Gets the name to be used for the test + + + + + Gets the RunState for this test case. + + + + + Gets the argument list to be provided to the test + + + + + Gets the property dictionary for the test case + + + + + Get the TypeArgs if separately set + + + + + Default constructor + + + + + Construct with a object[] representing a set of arguments. + In .NET 2.0, the arguments may later be separated into + type arguments and constructor arguments. + + + + + + Build a fixture from type provided. Normally called for a Type + on which the attribute has been placed. + + The type info of the fixture to be used. + A an IEnumerable holding one TestFixture object. + + + + Gets or sets the name of the test. + + The name of the test. + + + + Gets or sets the RunState of this test fixture. + + + + + The arguments originally provided to the attribute + + + + + Properties pertaining to this fixture + + + + + Get or set the type arguments. If not set + explicitly, any leading arguments that are + Types are taken as type arguments. + + + + + Descriptive text for this fixture + + + + + The author of this fixture + + + + + The type that this fixture is testing + + + + + Gets or sets the ignore reason. May set RunState as a side effect. + + The ignore reason. + + + + Gets or sets the reason for not running the fixture. + + The reason. + + + + Gets or sets the ignore reason. When set to a non-null + non-empty value, the test is marked as ignored. + + The ignore reason. + + + + Gets or sets a value indicating whether this is explicit. + + + true if explicit; otherwise, false. + + + + + Gets and sets the category for this fixture. + May be a comma-separated list of categories. + + + + + TestCaseAttribute is used to mark parameterized test cases + and provide them with their arguments. + + + + + The ITestCaseData interface is implemented by a class + that is able to return complete testcases for use by + a parameterized test method. + + + + + Gets the expected result of the test case + + + + + Returns true if an expected result has been set + + + + + IImplyFixture is an empty marker interface used by attributes like + TestAttribute that cause the class where they are used to be treated + as a TestFixture even without a TestFixtureAttribute. + + Marker interfaces are not usually considered a good practice, but + we use it here to avoid cluttering the attribute hierarchy with + classes that don't contain any extra implementation. + + + + + Construct a TestCaseAttribute with a list of arguments. + This constructor is not CLS-Compliant + + + + + + Construct a TestCaseAttribute with a single argument + + + + + + Construct a TestCaseAttribute with a two arguments + + + + + + + Construct a TestCaseAttribute with a three arguments + + + + + + + + Performs several special conversions allowed by NUnit in order to + permit arguments with types that cannot be used in the constructor + of an Attribute such as TestCaseAttribute or to simplify their use. + + The arguments to be converted + The ParameterInfo array for the method + + + + Construct one or more TestMethods from a given MethodInfo, + using available parameter data. + + The MethodInfo for which tests are to be constructed. + The suite to which the tests will be added. + One or more TestMethods + + + + Gets or sets the name of the test. + + The name of the test. + + + + Gets or sets the RunState of this test case. + + + + + Gets the list of arguments to a test case + + + + + Gets the properties of the test case + + + + + Gets or sets the expected result. + + The result. + + + + Returns true if the expected result has been set + + + + + Gets or sets the description. + + The description. + + + + The author of this test + + + + + The type that this test is testing + + + + + Gets or sets the reason for ignoring the test + + + + + Gets or sets a value indicating whether this is explicit. + + + true if explicit; otherwise, false. + + + + + Gets or sets the reason for not running the test. + + The reason. + + + + Gets or sets the ignore reason. When set to a non-null + non-empty value, the test is marked as ignored. + + The ignore reason. + + + + Comma-delimited list of platforms to run the test for + + + + + Comma-delimited list of platforms to not run the test for + + + + + Gets and sets the category for this test case. + May be a comma-separated list of categories. + + + + + GenericMethodHelper is able to deduce the Type arguments for + a generic method from the actual arguments provided. + + + + + Construct a GenericMethodHelper for a method + + MethodInfo for the method to examine + + + + Return the type argments for the method, deducing them + from the arguments actually provided. + + The arguments to the method + An array of type arguments. + + + + TestActionCommand runs the BeforeTest actions for a test, + then runs the test and finally runs the AfterTestActions. + + + + + Initializes a new instance of the class. + + The inner command. + + + + Runs the test, saving a TestResult in the supplied TestExecutionContext. + + The context in which the test should run. + A TestResult + + + + Provides internal logging to the NUnit framework + + + + + Interface for logging within the engine + + + + + Logs the specified message at the error level. + + The message. + + + + Logs the specified message at the error level. + + The message. + The arguments. + + + + Logs the specified message at the warning level. + + The message. + + + + Logs the specified message at the warning level. + + The message. + The arguments. + + + + Logs the specified message at the info level. + + The message. + + + + Logs the specified message at the info level. + + The message. + The arguments. + + + + Logs the specified message at the debug level. + + The message. + + + + Logs the specified message at the debug level. + + The message. + The arguments. + + + + Initializes a new instance of the class. + + The name. + The log level. + The writer where logs are sent. + + + + Logs the message at error level. + + The message. + + + + Logs the message at error level. + + The message. + The message arguments. + + + + Logs the message at warm level. + + The message. + + + + Logs the message at warning level. + + The message. + The message arguments. + + + + Logs the message at info level. + + The message. + + + + Logs the message at info level. + + The message. + The message arguments. + + + + Logs the message at debug level. + + The message. + + + + Logs the message at debug level. + + The message. + The message arguments. + + + + ClassName filter selects tests based on the class FullName + + + + + Construct a FullNameFilter for a single name + + The name the filter will recognize. + + + + Match a test against a single value. + + + + + Gets the element name + + Element name + + + + PropertyFilter is able to select or exclude tests + based on their properties. + + + + + + Construct a PropertyFilter using a property name and expected value + + A property name + The expected value of the property + + + + Check whether the filter matches a test + + The test to be matched + + + + + Adds an XML node + + Parent node + True if recursive + The added XML node + + + + Gets the element name + + Element name + + + + Env is a static class that provides some of the features of + System.Environment that are not available under all runtimes + + + + + The newline sequence in the current environment. + + + + + Path to the 'My Documents' folder + + + + + Directory used for file output if not specified on commandline. + + + + + The Assert class contains a collection of static methods that + implement the most common assertions used in NUnit. + + + The Assert class contains a collection of static methods that + implement the most common assertions used in NUnit. + + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + + + + Asserts that a condition is false. If the condition is true the method throws + an . + + The evaluated condition + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that a condition is false. If the condition is true the method throws + an . + + The evaluated condition + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that a condition is false. If the condition is true the method throws + an . + + The evaluated condition + + + + Asserts that a condition is false. If the condition is true the method throws + an . + + The evaluated condition + + + + Asserts that a condition is false. If the condition is true the method throws + an . + + The evaluated condition + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that a condition is false. If the condition is true the method throws + an . + + The evaluated condition + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that a condition is false. If the condition is true the method throws + an . + + The evaluated condition + + + + Asserts that a condition is false. If the condition is true the method throws + an . + + The evaluated condition + + + + Verifies that the object that is passed in is not equal to null + If the object is null then an + is thrown. + + The object that is to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the object that is passed in is not equal to null + If the object is null then an + is thrown. + + The object that is to be tested + + + + Verifies that the object that is passed in is not equal to null + If the object is null then an + is thrown. + + The object that is to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the object that is passed in is not equal to null + If the object is null then an + is thrown. + + The object that is to be tested + + + + Verifies that the object that is passed in is equal to null + If the object is not null then an + is thrown. + + The object that is to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the object that is passed in is equal to null + If the object is not null then an + is thrown. + + The object that is to be tested + + + + Verifies that the object that is passed in is equal to null + If the object is not null then an + is thrown. + + The object that is to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the object that is passed in is equal to null + If the object is not null then an + is thrown. + + The object that is to be tested + + + + Verifies that the double that is passed in is an NaN value. + If the object is not NaN then an + is thrown. + + The value that is to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the double that is passed in is an NaN value. + If the object is not NaN then an + is thrown. + + The value that is to be tested + + + + Verifies that the double that is passed in is an NaN value. + If the object is not NaN then an + is thrown. + + The value that is to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the double that is passed in is an NaN value. + If the object is not NaN then an + is thrown. + + The value that is to be tested + + + + Assert that a string is empty - that is equal to string.Empty + + The string to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Assert that a string is empty - that is equal to string.Empty + + The string to be tested + + + + Assert that an array, list or other collection is empty + + An array, list or other collection implementing ICollection + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Assert that an array, list or other collection is empty + + An array, list or other collection implementing ICollection + + + + Assert that a string is not empty - that is not equal to string.Empty + + The string to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Assert that a string is not empty - that is not equal to string.Empty + + The string to be tested + + + + Assert that an array, list or other collection is not empty + + An array, list or other collection implementing ICollection + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Assert that an array, list or other collection is not empty + + An array, list or other collection implementing ICollection + + + + Asserts that an int is zero. + + The number to be examined + + + + Asserts that an int is zero. + + The number to be examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an unsigned int is zero. + + The number to be examined + + + + Asserts that an unsigned int is zero. + + The number to be examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that a Long is zero. + + The number to be examined + + + + Asserts that a Long is zero. + + The number to be examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an unsigned Long is zero. + + The number to be examined + + + + Asserts that an unsigned Long is zero. + + The number to be examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that a decimal is zero. + + The number to be examined + + + + Asserts that a decimal is zero. + + The number to be examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that a double is zero. + + The number to be examined + + + + Asserts that a double is zero. + + The number to be examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that a float is zero. + + The number to be examined + + + + Asserts that a float is zero. + + The number to be examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an int is not zero. + + The number to be examined + + + + Asserts that an int is not zero. + + The number to be examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an unsigned int is not zero. + + The number to be examined + + + + Asserts that an unsigned int is not zero. + + The number to be examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that a Long is not zero. + + The number to be examined + + + + Asserts that a Long is not zero. + + The number to be examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an unsigned Long is not zero. + + The number to be examined + + + + Asserts that an unsigned Long is not zero. + + The number to be examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that a decimal is zero. + + The number to be examined + + + + Asserts that a decimal is zero. + + The number to be examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that a double is zero. + + The number to be examined + + + + Asserts that a double is zero. + + The number to be examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that a float is zero. + + The number to be examined + + + + Asserts that a float is zero. + + The number to be examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an int is negative. + + The number to be examined + + + + Asserts that an int is negative. + + The number to be examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an unsigned int is negative. + + The number to be examined + + + + Asserts that an unsigned int is negative. + + The number to be examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that a Long is negative. + + The number to be examined + + + + Asserts that a Long is negative. + + The number to be examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an unsigned Long is negative. + + The number to be examined + + + + Asserts that an unsigned Long is negative. + + The number to be examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that a decimal is negative. + + The number to be examined + + + + Asserts that a decimal is negative. + + The number to be examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that a double is negative. + + The number to be examined + + + + Asserts that a double is negative. + + The number to be examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that a float is negative. + + The number to be examined + + + + Asserts that a float is negative. + + The number to be examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an int is negative. + + The number to be examined + + + + Asserts that an int is negative. + + The number to be examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an unsigned int is negative. + + The number to be examined + + + + Asserts that an unsigned int is negative. + + The number to be examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that a Long is negative. + + The number to be examined + + + + Asserts that a Long is negative. + + The number to be examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an unsigned Long is negative. + + The number to be examined + + + + Asserts that an unsigned Long is negative. + + The number to be examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that a decimal is negative. + + The number to be examined + + + + Asserts that a decimal is negative. + + The number to be examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that a double is negative. + + The number to be examined + + + + Asserts that a double is negative. + + The number to be examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that a float is negative. + + The number to be examined + + + + Asserts that a float is negative. + + The number to be examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object may be assigned a value of a given Type. + + The expected Type. + The object under examination + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object may be assigned a value of a given Type. + + The expected Type. + The object under examination + + + + Asserts that an object may be assigned a value of a given Type. + + The expected Type. + The object under examination + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object may be assigned a value of a given Type. + + The expected Type. + The object under examination + + + + Asserts that an object may not be assigned a value of a given Type. + + The expected Type. + The object under examination + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object may not be assigned a value of a given Type. + + The expected Type. + The object under examination + + + + Asserts that an object may not be assigned a value of a given Type. + + The expected Type. + The object under examination + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object may not be assigned a value of a given Type. + + The expected Type. + The object under examination + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + + + + Verifies that a delegate throws a particular exception when called. + + A constraint to be satisfied by the exception + A TestSnippet delegate + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that a delegate throws a particular exception when called. + + A constraint to be satisfied by the exception + A TestSnippet delegate + + + + Verifies that a delegate throws a particular exception when called. + + The exception Type expected + A TestDelegate + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that a delegate throws a particular exception when called. + + The exception Type expected + A TestDelegate + + + + Verifies that a delegate throws a particular exception when called. + + Type of the expected exception + A TestDelegate + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that a delegate throws a particular exception when called. + + Type of the expected exception + A TestDelegate + + + + Verifies that a delegate throws an exception when called + and returns it. + + A TestDelegate + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that a delegate throws an exception when called + and returns it. + + A TestDelegate + + + + Verifies that a delegate throws an exception of a certain Type + or one derived from it when called and returns it. + + The expected Exception Type + A TestDelegate + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that a delegate throws an exception of a certain Type + or one derived from it when called and returns it. + + The expected Exception Type + A TestDelegate + + + + Verifies that a delegate throws an exception of a certain Type + or one derived from it when called and returns it. + + A TestDelegate + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that a delegate throws an exception of a certain Type + or one derived from it when called and returns it. + + A TestDelegate + + + + Verifies that a delegate does not throw an exception + + A TestDelegate + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that a delegate does not throw an exception. + + A TestDelegate + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + The message to display if the condition is false + Arguments to be used in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + A function to build the message included with the Exception + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + A lambda that returns a Boolean + The message to display if the condition is false + Arguments to be used in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + A lambda that returns a Boolean + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + A lambda that returns a Boolean + A function to build the message included with the Exception + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + The Type being compared. + An ActualValueDelegate returning the value to be tested + A Constraint expression to be applied + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + The Type being compared. + An ActualValueDelegate returning the value to be tested + A Constraint expression to be applied + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + The Type being compared. + An ActualValueDelegate returning the value to be tested + A Constraint expression to be applied + A function to build the message included with the Exception + + + + Asserts that the code represented by a delegate throws an exception + that satisfies the constraint provided. + + A TestDelegate to be executed + A ThrowsConstraint used in the test + + + + Asserts that the code represented by a delegate throws an exception + that satisfies the constraint provided. + + A TestDelegate to be executed + A ThrowsConstraint used in the test + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that the code represented by a delegate throws an exception + that satisfies the constraint provided. + + A TestDelegate to be executed + A ThrowsConstraint used in the test + A function to build the message included with the Exception + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + The Type being compared. + The actual value to test + A Constraint to be applied + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + The Type being compared. + The actual value to test + A Constraint expression to be applied + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + The Type being compared. + The actual value to test + A Constraint expression to be applied + A function to build the message included with the Exception + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + Used as a synonym for That in rare cases where a private setter + causes a Visual Basic compilation error. + + The actual value to test + A Constraint to be applied + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + Used as a synonym for That in rare cases where a private setter + causes a Visual Basic compilation error. + + + This method is provided for use by VB developers needing to test + the value of properties with private setters. + + The actual value to test + A Constraint expression to be applied + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + We don't actually want any instances of this object, but some people + like to inherit from it to add other static methods. Hence, the + protected constructor disallows any instances of this object. + + + + + The Equals method throws an InvalidOperationException. This is done + to make sure there is no mistake by calling this function. + + + + + + + override the default ReferenceEquals to throw an InvalidOperationException. This + implementation makes sure there is no mistake in calling this function + as part of Assert. + + + + + + + Throws a with the message and arguments + that are passed in. This allows a test to be cut short, with a result + of success returned to NUnit. + + The message to initialize the with. + Arguments to be used in formatting the message + + + + Throws a with the message and arguments + that are passed in. This allows a test to be cut short, with a result + of success returned to NUnit. + + The message to initialize the with. + + + + Throws a with the message and arguments + that are passed in. This allows a test to be cut short, with a result + of success returned to NUnit. + + + + + Throws an with the message and arguments + that are passed in. This is used by the other Assert functions. + + The message to initialize the with. + Arguments to be used in formatting the message + + + + Throws an with the message that is + passed in. This is used by the other Assert functions. + + The message to initialize the with. + + + + Throws an . + This is used by the other Assert functions. + + + + + Throws an with the message and arguments + that are passed in. This causes the test to be reported as ignored. + + The message to initialize the with. + Arguments to be used in formatting the message + + + + Throws an with the message that is + passed in. This causes the test to be reported as ignored. + + The message to initialize the with. + + + + Throws an . + This causes the test to be reported as ignored. + + + + + Throws an with the message and arguments + that are passed in. This causes the test to be reported as inconclusive. + + The message to initialize the with. + Arguments to be used in formatting the message + + + + Throws an with the message that is + passed in. This causes the test to be reported as inconclusive. + + The message to initialize the with. + + + + Throws an . + This causes the test to be reported as Inconclusive. + + + + + Asserts that an object is contained in a list. + + The expected object + The list to be examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object is contained in a list. + + The expected object + The list to be examined + + + + Verifies that the first int is greater than the second + int. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first int is greater than the second + int. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is greater than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that two doubles are equal considering a delta. If the + expected value is infinity then the delta value is ignored. If + they are not equal then an is + thrown. + + The expected value + The actual value + The maximum acceptable difference between the + the expected and the actual + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two doubles are equal considering a delta. If the + expected value is infinity then the delta value is ignored. If + they are not equal then an is + thrown. + + The expected value + The actual value + The maximum acceptable difference between the + the expected and the actual + + + + Verifies that two doubles are equal considering a delta. If the + expected value is infinity then the delta value is ignored. If + they are not equal then an is + thrown. + + The expected value + The actual value + The maximum acceptable difference between the + the expected and the actual + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two doubles are equal considering a delta. If the + expected value is infinity then the delta value is ignored. If + they are not equal then an is + thrown. + + The expected value + The actual value + The maximum acceptable difference between the + the expected and the actual + + + + Verifies that two objects are equal. Two objects are considered + equal if both are null, or if both have the same value. NUnit + has special semantics for some object types. + If they are not equal an is thrown. + + The value that is expected + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two objects are equal. Two objects are considered + equal if both are null, or if both have the same value. NUnit + has special semantics for some object types. + If they are not equal an is thrown. + + The value that is expected + The actual value + + + + Verifies that two objects are not equal. Two objects are considered + equal if both are null, or if both have the same value. NUnit + has special semantics for some object types. + If they are equal an is thrown. + + The value that is expected + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two objects are not equal. Two objects are considered + equal if both are null, or if both have the same value. NUnit + has special semantics for some object types. + If they are equal an is thrown. + + The value that is expected + The actual value + + + + Asserts that two objects refer to the same object. If they + are not the same an is thrown. + + The expected object + The actual object + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that two objects refer to the same object. If they + are not the same an is thrown. + + The expected object + The actual object + + + + Asserts that two objects do not refer to the same object. If they + are the same an is thrown. + + The expected object + The actual object + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that two objects do not refer to the same object. If they + are the same an is thrown. + + The expected object + The actual object + + + + Helper for Assert.AreEqual(double expected, double actual, ...) + allowing code generation to work consistently. + + The expected value + The actual value + The maximum acceptable difference between the + the expected and the actual + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Represents a constraint that succeeds if all the + members of a collection match a base constraint. + + + + + Abstract base for operators that indicate how to + apply a constraint to items in a collection. + + + + + PrefixOperator takes a single constraint and modifies + it's action in some way. + + + + + Reduce produces a constraint from the operator and + any arguments. It takes the arguments from the constraint + stack and pushes the resulting constraint on it. + + + + + + Returns the constraint created by applying this + prefix to another constraint. + + + + + + + Constructs a CollectionOperator + + + + + Returns a constraint that will apply the argument + to the members of a collection, succeeding if + they all succeed. + + + + + FileExistsConstraint is used to determine if a file exists + + + + + FileOrDirectoryExistsConstraint is used to determine if a file or directory exists + + + + + Initializes a new instance of the class that + will check files and directories. + + + + + Initializes a new instance of the class that + will only check files if ignoreDirectories is true. + + if set to true [ignore directories]. + + + + Applies the constraint to an actual value, returning a ConstraintResult. + + The value to be tested + A ConstraintResult + + + + If true, the constraint will only check if files exist, not directories + + + + + If true, the constraint will only check if directories exist, not files + + + + + The Description of what this constraint tests, for + use in messages and in the ConstraintResult. + + + + + Initializes a new instance of the class. + + + + + The Description of what this constraint tests, for + use in messages and in the ConstraintResult. + + + + + TestAssemblyDirectoryResolveAttribute is used to mark a test assembly as needing a + special assembly resolution hook that will explicitly search the test assembly's + directory for dependent assemblies. This works around a conflict between mixed-mode + assembly initialization and tests running in their own AppDomain in some cases. + + + + + Helper methods for inspecting a type by reflection. + + Many of these methods take ICustomAttributeProvider as an + argument to avoid duplication, even though certain attributes can + only appear on specific types of members, like MethodInfo or Type. + + In the case where a type is being examined for the presence of + an attribute, interface or named member, the Reflect methods + operate with the full name of the member being sought. This + removes the necessity of the caller having a reference to the + assembly that defines the item being sought and allows the + NUnit core to inspect assemblies that reference an older + version of the NUnit framework. + + + + + Examine a fixture type and return an array of methods having a + particular attribute. The array is order with base methods first. + + The type to examine + The attribute Type to look for + Specifies whether to search the fixture type inheritance chain + The array of methods found + + + + Examine a fixture type and return true if it has a method with + a particular attribute. + + The type to examine + The attribute Type to look for + True if found, otherwise false + + + + Invoke the default constructor on a Type + + The Type to be constructed + An instance of the Type + + + + Invoke a constructor on a Type with arguments + + The Type to be constructed + Arguments to the constructor + An instance of the Type + + + + Returns an array of types from an array of objects. + Used because the compact framework doesn't support + Type.GetTypeArray() + + An array of objects + An array of Types + + + + Invoke a parameterless method returning void on an object. + + A MethodInfo for the method to be invoked + The object on which to invoke the method + + + + Invoke a method, converting any TargetInvocationException to an NUnitException. + + A MethodInfo for the method to be invoked + The object on which to invoke the method + The argument list for the method + The return value from the invoked method + + + + + + + + + Constructor delegate, makes it possible to use a factory to create objects + + + + + InvalidTestFixtureException is thrown when an appropriate test + fixture constructor using the provided arguments cannot be found. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The message. + + + + Initializes a new instance of the class. + + The message. + The inner. + + + + Serialization Constructor + + + + + Class to build ether a parameterized or a normal NUnitTestMethod. + There are four cases that the builder must deal with: + 1. The method needs no params and none are provided + 2. The method needs params and they are provided + 3. The method needs no params but they are provided in error + 4. The method needs params but they are not provided + This could have been done using two different builders, but it + turned out to be simpler to have just one. The BuildFrom method + takes a different branch depending on whether any parameters are + provided, but all four cases are dealt with in lower-level methods + + + + + The ITestCaseBuilder interface is exposed by a class that knows how to + build a test case from certain methods. + + + This interface is not the same as the ITestCaseBuilder interface in NUnit 2.x. + We have reused the name because the two products don't interoperate at all. + + + + + Examine the method and determine if it is suitable for + this builder to use in building a TestCase to be + included in the suite being populated. + + Note that returning false will cause the method to be ignored + in loading the tests. If it is desired to load the method + but label it as non-runnable, ignored, etc., then this + method must return true. + + The test method to examine + The suite being populated + True is the builder can use this method + + + + Build a TestCase from the provided MethodInfo for + inclusion in the suite being constructed. + + The method to be used as a test case + The test suite being populated, or null + A TestCase or null + + + + Determines if the method can be used to build an NUnit test + test method of some kind. The method must normally be marked + with an identifying attribute for this to be true. + + Note that this method does not check that the signature + of the method for validity. If we did that here, any + test methods with invalid signatures would be passed + over in silence in the test run. Since we want such + methods to be reported, the check for validity is made + in BuildFrom rather than here. + + An IMethodInfo for the method being used as a test method + True if the builder can create a test case from this method + + + + Build a Test from the provided MethodInfo. Depending on + whether the method takes arguments and on the availability + of test case data, this method may return a single test + or a group of tests contained in a ParameterizedMethodSuite. + + The method for which a test is to be built + A Test representing one or more method invocations + + + + Determines if the method can be used to build an NUnit test + test method of some kind. The method must normally be marked + with an identifying attribute for this to be true. + + Note that this method does not check that the signature + of the method for validity. If we did that here, any + test methods with invalid signatures would be passed + over in silence in the test run. Since we want such + methods to be reported, the check for validity is made + in BuildFrom rather than here. + + An IMethodInfo for the method being used as a test method + The test suite being built, to which the new test would be added + True if the builder can create a test case from this method + + + + Build a Test from the provided MethodInfo. Depending on + whether the method takes arguments and on the availability + of test case data, this method may return a single test + or a group of tests contained in a ParameterizedMethodSuite. + + The method for which a test is to be built + The test fixture being populated, or null + A Test representing one or more method invocations + + + + Builds a ParameterizedMethodSuite containing individual test cases. + + The method for which a test is to be built. + The list of test cases to include. + A ParameterizedMethodSuite populated with test cases + + + + Build a simple, non-parameterized TestMethod for this method. + + The MethodInfo for which a test is to be built + The test suite for which the method is being built + A TestMethod. + + + + Abstract base class for operators that are able to reduce to a + constraint whether or not another syntactic element follows. + + + + + NUnitEqualityComparer encapsulates NUnit's handling of + equality tests between objects. + + + + + If true, all string comparisons will ignore case + + + + + If true, arrays will be treated as collections, allowing + those of different dimensions to be compared + + + + + Comparison objects used in comparisons for some constraints. + + + + + List of points at which a failure occurred. + + + + + Compares two objects for equality within a tolerance. + + + + + Helper method to compare two arrays + + + + + Method to compare two DirectoryInfo objects + + first directory to compare + second directory to compare + true if equivalent, false if not + + + + Returns the default NUnitEqualityComparer + + + + + Gets and sets a flag indicating whether case should + be ignored in determining equality. + + + + + Gets and sets a flag indicating that arrays should be + compared as collections, without regard to their shape. + + + + + Gets the list of external comparers to be used to + test for equality. They are applied to members of + collections, in place of NUnit's own logic. + + + + + Gets the list of failure points for the last Match performed. + The list consists of objects to be interpreted by the caller. + This generally means that the caller may only make use of + objects it has placed on the list at a particular depthy. + + + + + Flags the comparer to include + property in comparison of two values. + + + Using this modifier does not allow to use the + modifier. + + + + + FailurePoint class represents one point of failure + in an equality test. + + + + + The location of the failure + + + + + The expected value + + + + + The actual value + + + + + Indicates whether the expected value is valid + + + + + Indicates whether the actual value is valid + + + + + NullConstraint tests that the actual value is null + + + + + Initializes a new instance of the class. + + + + + Applies the constraint to an actual value, returning a ConstraintResult. + + The value to be tested + A ConstraintResult + + + + CollectionSubsetConstraint is used to determine whether + one collection is a subset of another + + + + + Construct a CollectionSubsetConstraint + + The collection that the actual value is expected to be a subset of + + + + Test whether the actual collection is a subset of + the expected collection provided. + + + + + + + Flag the constraint to use the supplied predicate function + + The comparison function to use. + Self. + + + + The display name of this Constraint for use by ToString(). + The default value is the name of the constraint with + trailing "Constraint" removed. Derived classes may set + this to another name in their constructors. + + + + + The Description of what this constraint tests, for + use in messages and in the ConstraintResult. + + + + + AndConstraint succeeds only if both members succeed. + + + + + BinaryConstraint is the abstract base of all constraints + that combine two other constraints in some fashion. + + + + + The first constraint being combined + + + + + The second constraint being combined + + + + + Construct a BinaryConstraint from two other constraints + + The first constraint + The second constraint + + + + Create an AndConstraint from two other constraints + + The first constraint + The second constraint + + + + Apply both member constraints to an actual value, succeeding + succeeding only if both of them succeed. + + The actual value + True if the constraints both succeeded + + + + Gets text describing a constraint + + + + + Contain the result of matching a against an actual value. + + + + + Constructs a for a particular . + + The Constraint to which this result applies. + The actual value to which the Constraint was applied. + + + + Constructs a for a particular . + + The Constraint to which this result applies. + The actual value to which the Constraint was applied. + The status of the new ConstraintResult. + + + + Constructs a for a particular . + + The Constraint to which this result applies. + The actual value to which the Constraint was applied. + If true, applies a status of Success to the result, otherwise Failure. + + + + Write the failure message to the MessageWriter provided + as an argument. The default implementation simply passes + the result and the actual value to the writer, which + then displays the constraint description and the value. + + Constraints that need to provide additional details, + such as where the error occured can override this. + + The MessageWriter on which to display the message + + + + Write the actual value for a failing constraint test to a + MessageWriter. The default implementation simply writes + the raw value of actual, leaving it to the writer to + perform any formatting. + + The writer on which the actual value is displayed + + + + The actual value that was passed to the method. + + + + + Gets and sets the ResultStatus for this result. + + + + + True if actual value meets the Constraint criteria otherwise false. + + + + + Display friendly name of the constraint. + + + + + Description of the constraint may be affected by the state the constraint had + when was performed against the actual value. + + + + + Write the actual value for a failing constraint test to a + MessageWriter. The default implementation simply writes + the raw value of actual, leaving it to the writer to + perform any formatting. + + The writer on which the actual value is displayed + + + + Attribute used to identify a method that is called after + all the tests in a fixture have run. The method is + guaranteed to be called, even if an exception is thrown. + + + + + Attribute used to identify a method that is called once + after all the child tests have run. The method is + guaranteed to be called, even if an exception is thrown. + + + + + PlatformAttribute is used to mark a test fixture or an + individual method as applying to a particular platform only. + + + + + Constructor with no platforms specified, for use + with named property syntax. + + + + + Constructor taking one or more platforms + + Comma-delimited list of platforms + + + + Causes a test to be skipped if this PlatformAttribute is not satisfied. + + The test to modify + + + + Attribute used to mark a test that is to be ignored. + Ignored tests result in a warning message when the + tests are run. + + + + + Constructs the attribute giving a reason for ignoring the test + GetActionsFromAttributeProvider + The reason for ignoring the test + + + + Modifies a test by marking it as Ignored. + + The test to modify + + + + + + + + + The date in the future to stop ignoring the test as a string in UTC time. + For example for a date and time, "2014-12-25 08:10:00Z" or for just a date, + "2014-12-25". If just a date is given, the Ignore will expire at midnight UTC. + + + Once the ignore until date has passed, the test will be marked + as runnable. Tests with an ignore until date will have an IgnoreUntilDate + property set which will appear in the test results. + + The string does not contain a valid string representation of a date and time. + + + + The IApplyToContext interface is implemented by attributes + that want to make changes to the execution context before + a test is run. + + + + + Apply changes to the execution context + + The execution context + + + + A SimpleWorkItem represents a single test case and is + marked as completed immediately upon execution. This + class is also used for skipped or ignored test suites. + + + + + Construct a simple work item for a test. + + The test to be executed + The filter used to select this test + + + + Method that performs actually performs the work. + + + + + ContextSettingsCommand applies specified changes to the + TestExecutionContext prior to running a test. No special + action is needed after the test runs, since the prior + context will be restored automatically. + + + + + Initializes a new instance of the class. + + + + + + + + + + + + + + + + + + + + The RunState enum indicates whether a test can be executed. + + + + + The test is not runnable. + + + + + The test is runnable. + + + + + The test can only be run explicitly + + + + + The test has been skipped. This value may + appear on a Test when certain attributes + are used to skip the test. + + + + + The test has been ignored. May appear on + a Test, when the IgnoreAttribute is used. + + + + + Helper class with properties and methods that supply + a number of constraints used in Asserts. + + + + + Returns a new CollectionContainsConstraint checking for the + presence of a particular object in the collection. + + + + + Returns a new ContainsConstraint. This constraint + will, in turn, make use of the appropriate second-level + constraint, depending on the type of the actual argument. + This overload is only used if the item sought is a string, + since any other type implies that we are looking for a + collection member. + + + + + Returns a constraint that succeeds if the actual + value starts with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value ends with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value matches the regular expression supplied as an argument. + + + + + Returns a ConstraintExpression that negates any + following constraint. + + + + + Returns a constraint that succeeds if the value + is a file or directory and it exists. + + + + + AssemblyHelper provides static methods for working + with assemblies. + + + + + Gets the path from which an assembly was loaded. + For builds where this is not possible, returns + the name of the assembly. + + The assembly. + The path. + + + + Gets the path to the directory from which an assembly was loaded. + + The assembly. + The path. + + + + Gets the AssemblyName of an assembly. + + The assembly + An AssemblyName + + + + Loads an assembly given a string, which may be the + path to the assembly or the AssemblyName + + + + + + + Gets the assembly path from code base. + + Public for testing purposes + The code base. + + + + + FrameworkController provides a facade for use in loading, browsing + and running tests without requiring a reference to the NUnit + framework. All calls are encapsulated in constructors for + this class and its nested classes, which only require the + types of the Common Type System as arguments. + + The controller supports four actions: Load, Explore, Count and Run. + They are intended to be called by a driver, which should allow for + proper sequencing of calls. Load must be called before any of the + other actions. The driver may support other actions, such as + reload on run, by combining these calls. + + + + + A MarshalByRefObject that lives forever + + + + + Obtains a lifetime service object to control the lifetime policy for this instance. + + + + + Construct a FrameworkController using the default builder and runner. + + The AssemblyName or path to the test assembly + A prefix used for all test ids created under this controller. + A Dictionary of settings to use in loading and running the tests + + + + Construct a FrameworkController using the default builder and runner. + + The test assembly + A prefix used for all test ids created under this controller. + A Dictionary of settings to use in loading and running the tests + + + + Construct a FrameworkController, specifying the types to be used + for the runner and builder. This constructor is provided for + purposes of development. + + The full AssemblyName or the path to the test assembly + A prefix used for all test ids created under this controller. + A Dictionary of settings to use in loading and running the tests + The Type of the test runner + The Type of the test builder + + + + Construct a FrameworkController, specifying the types to be used + for the runner and builder. This constructor is provided for + purposes of development. + + The test assembly + A prefix used for all test ids created under this controller. + A Dictionary of settings to use in loading and running the tests + The Type of the test runner + The Type of the test builder + + + + Loads the tests in the assembly + + + + + + Returns info about the tests in an assembly + + A string containing the XML representation of the filter to use + The XML result of exploring the tests + + + + Runs the tests in an assembly + + A string containing the XML representation of the filter to use + The XML result of the test run + + + + Runs the tests in an assembly syncronously reporting back the test results through the callback + or through the return value + + The callback that receives the test results + A string containing the XML representation of the filter to use + The XML result of the test run + + + + Runs the tests in an assembly asyncronously reporting back the test results through the callback + + The callback that receives the test results + A string containing the XML representation of the filter to use + + + + Stops the test run + + True to force the stop, false for a cooperative stop + + + + Counts the number of test cases in the loaded TestSuite + + A string containing the XML representation of the filter to use + The number of tests + + + + Inserts environment element + + Target node + The new node + + + + Inserts settings element + + Target node + Settings dictionary + The new node + + + + Gets the ITestAssemblyBuilder used by this controller instance. + + The builder. + + + + Gets the ITestAssemblyRunner used by this controller instance. + + The runner. + + + + Gets the AssemblyName or the path for which this FrameworkController was created + + + + + Gets the Assembly for which this + + + + + Gets a dictionary of settings for the FrameworkController + + + + + A shim of the .NET interface for platforms that do not support it. + Used to indicate that a control can be the target of a callback event on the server. + + + + + Processes a callback event that targets a control. + + + + + + Returns the results of a callback event that targets a control. + + + + + + FrameworkControllerAction is the base class for all actions + performed against a FrameworkController. + + + + + LoadTestsAction loads a test into the FrameworkController + + + + + LoadTestsAction loads the tests in an assembly. + + The controller. + The callback handler. + + + + ExploreTestsAction returns info about the tests in an assembly + + + + + Initializes a new instance of the class. + + The controller for which this action is being performed. + Filter used to control which tests are included (NYI) + The callback handler. + + + + CountTestsAction counts the number of test cases in the loaded TestSuite + held by the FrameworkController. + + + + + Construct a CountsTestAction and perform the count of test cases. + + A FrameworkController holding the TestSuite whose cases are to be counted + A string containing the XML representation of the filter to use + A callback handler used to report results + + + + RunTestsAction runs the loaded TestSuite held by the FrameworkController. + + + + + Construct a RunTestsAction and run all tests in the loaded TestSuite. + + A FrameworkController holding the TestSuite to run + A string containing the XML representation of the filter to use + A callback handler used to report results + + + + RunAsyncAction initiates an asynchronous test run, returning immediately + + + + + Construct a RunAsyncAction and run all tests in the loaded TestSuite. + + A FrameworkController holding the TestSuite to run + A string containing the XML representation of the filter to use + A callback handler used to report results + + + + StopRunAction stops an ongoing run. + + + + + Construct a StopRunAction and stop any ongoing run. If no + run is in process, no error is raised. + + The FrameworkController for which a run is to be stopped. + True the stop should be forced, false for a cooperative stop. + >A callback handler used to report results + A forced stop will cause threads and processes to be killed as needed. + + + + ExceptionTypeConstraint is a special version of ExactTypeConstraint + used to provided detailed info about the exception thrown in + an error message. + + + + + ExactTypeConstraint is used to test that an object + is of the exact type provided in the constructor + + + + + Construct an ExactTypeConstraint for a given Type + + The expected Type. + + + + Apply the constraint to an actual value, returning true if it succeeds + + The actual argument + True if the constraint succeeds, otherwise false. + + + + The display name of this Constraint for use by ToString(). + The default value is the name of the constraint with + trailing "Constraint" removed. Derived classes may set + this to another name in their constructors. + + + + + Constructs an ExceptionTypeConstraint + + + + + Applies the constraint to an actual value, returning a ConstraintResult. + + The value to be tested + A ConstraintResult + + + + TestProgressReporter translates ITestListener events into + the async callbacks that are used to inform the client + software about the progress of a test run. + + + + + Initializes a new instance of the class. + + The callback handler to be used for reporting progress. + + + + Called when a test has just started + + The test that is starting + + + + Called when a test has finished. Sends a result summary to the callback. + to + + The result of the test + + + + Called when a test produces output for immediate display + + A TestOutput object containing the text to display + + + + Returns the parent test item for the targer test item if it exists + + + parent test item + + + + Makes a string safe for use as an attribute, replacing + characters characters that can't be used with their + corresponding xml representations. + + The string to be used + A new string with the _values replaced + + + + Operator used to test for the presence of a named Property + on an object and optionally apply further tests to the + value of that property. + + + + + Constructs a PropOperator for a particular named property + + + + + Reduce produces a constraint from the operator and + any arguments. It takes the arguments from the constraint + stack and pushes the resulting constraint on it. + + + + + + Gets the name of the property to which the operator applies + + + + + NaNConstraint tests that the actual value is a double or float NaN + + + + + Test that the actual value is an NaN + + + + + + + The Description of what this constraint tests, for + use in messages and in the ConstraintResult. + + + + + CollectionContainsConstraint is used to test whether a collection + contains an expected object as a member. + + + + + Construct a CollectionContainsConstraint + + + + + + Test whether the expected item is contained in the collection + + + + + + + Flag the constraint to use the supplied predicate function + + The comparison function to use. + Self. + + + + The display name of this Constraint for use by ToString(). + The default value is the name of the constraint with + trailing "Constraint" removed. Derived classes may set + this to another name in their constructors. + + + + + The Description of what this constraint tests, for + use in messages and in the ConstraintResult. + + + + + Gets the expected object + + + + + Attribute used to mark a class that contains one-time SetUp + and/or TearDown methods that apply to all the tests in a + namespace or an assembly. + + + + + Attribute used to mark a class that contains one-time SetUp + and/or TearDown methods that apply to all the tests in a + namespace or an assembly. + + + + + Attribute used to mark a class that contains one-time SetUp + and/or TearDown methods that apply to all the tests in a + namespace or an assembly. + + + + + RepeatAttribute may be applied to test case in order + to run it multiple times. + + + + + Construct a RepeatAttribute + + The number of times to run the test + + + + Wrap a command and return the result. + + The command to be wrapped + The wrapped command + + + + The test command for the RepeatAttribute + + + + + Initializes a new instance of the class. + + The inner command. + The number of repetitions + + + + Runs the test, saving a TestResult in the supplied TestExecutionContext. + + The context in which the test should run. + A TestResult + + + + A simplified implementation of .NET 4 CountdownEvent + for use in earlier versions of .NET. Only the methods + used by NUnit are implemented. + + + + + Construct a CountdownEvent + + The initial count + + + + Decrement the count by one + + + + + Block the thread until the count reaches zero + + + + + Gets the initial count established for the CountdownEvent + + + + + Gets the current count remaining for the CountdownEvent + + + + + TheoryResultCommand adjusts the result of a Theory so that + it fails if all the results were inconclusive. + + + + + Constructs a TheoryResultCommand + + The command to be wrapped by this one + + + + Overridden to call the inner command and adjust the result + in case all chlid results were inconclusive. + + + + + + + NUnitTestCaseBuilder is a utility class used by attributes + that build test cases. + + + + + Constructs an + + + + + Builds a single NUnitTestMethod, either as a child of the fixture + or as one of a set of test cases under a ParameterizedTestMethodSuite. + + The MethodInfo from which to construct the TestMethod + The suite or fixture to which the new test will be added + The ParameterSet to be used, or null + + + + + Helper method that checks the signature of a TestMethod and + any supplied parameters to determine if the test is valid. + + Currently, NUnitTestMethods are required to be public, + non-abstract methods, either static or instance, + returning void. They may take arguments but the _values must + be provided or the TestMethod is not considered runnable. + + Methods not meeting these criteria will be marked as + non-runnable and the method will return false in that case. + + The TestMethod to be checked. If it + is found to be non-runnable, it will be modified. + Parameters to be used for this test, or null + True if the method signature is valid, false if not + + The return value is no longer used internally, but is retained + for testing purposes. + + + + + The TestStatus enum indicates the result of running a test + + + + + The test was inconclusive + + + + + The test has skipped + + + + + The test succeeded + + + + + The test failed + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TestNameGenerator is able to create test names according to + a coded pattern. + + + + + Default pattern used to generate names + + + + + Construct a TestNameGenerator + + + + + Construct a TestNameGenerator + + The pattern used by this generator. + + + + Get the display name for a TestMethod and it's arguments + + A TestMethod + The display name + + + + Get the display name for a TestMethod and it's arguments + + A TestMethod + Arguments to be used + The display name + + + + The EqualConstraintResult class is tailored for formatting + and displaying the result of an EqualConstraint. + + + + + Construct an EqualConstraintResult + + + + + Write a failure message. Overridden to provide custom + failure messages for EqualConstraint. + + The MessageWriter to write to + + + + Display the failure information for two collections that did not match. + + The MessageWriter on which to display + The expected collection. + The actual collection + The depth of this failure in a set of nested collections + + + + Displays a single line showing the types and sizes of the expected + and actual collections or arrays. If both are identical, the value is + only shown once. + + The MessageWriter on which to display + The expected collection or array + The actual collection or array + The indentation level for the message line + + + + Displays a single line showing the point in the expected and actual + arrays at which the comparison failed. If the arrays have different + structures or dimensions, both _values are shown. + + The MessageWriter on which to display + The expected array + The actual array + Index of the failure point in the underlying collections + The indentation level for the message line + + + + Display the failure information for two IEnumerables that did not match. + + The MessageWriter on which to display + The expected enumeration. + The actual enumeration + The depth of this failure in a set of nested collections + + + + Provides NUnit specific extensions to aid in Reflection + across multiple frameworks + + + This version of the class supplies GetTypeInfo() on platforms + that don't support it. + + + + + GetTypeInfo gives access to most of the Type information we take for granted + on .NET Core and Windows Runtime. Rather than #ifdef different code for different + platforms, it is easiest to just code all platforms as if they worked this way, + thus the simple passthrough. + + + + + + + Extensions for Assembly that are not available in pre-4.5 .NET releases + + + + + An easy way to get a single custom attribute from an assembly + + The attribute Type + The assembly + An attribute of Type T + + + + Type extensions that apply to all target frameworks + + + + + Determines if the given array is castable/matches the array. + + + + + + + + Determines if one type can be implicitly converted from another + + + + + + + + This class is used as a flag when we get a parameter list for a method/constructor, but + we do not know one of the types because null was passed in. + + + + + The TestCaseData class represents a set of arguments + and other parameter info to be used for a parameterized + test case. It is derived from TestCaseParameters and adds a + fluent syntax for use in initializing the test case. + + + + + The TestCaseParameters class encapsulates method arguments and + other selected parameters needed for constructing + a parameterized test case. + + + + + TestParameters is the abstract base class for all classes + that know how to provide data for constructing a test. + + + + + Default Constructor creates an empty parameter set + + + + + Construct a parameter set with a list of arguments + + + + + + Construct a non-runnable ParameterSet, specifying + the provider exception that made it invalid. + + + + + Construct a ParameterSet from an object implementing ITestData + + + + + + Applies ParameterSet _values to the test itself. + + A test. + + + + The RunState for this set of parameters. + + + + + The arguments to be used in running the test, + which must match the method signature. + + + + + A name to be used for this test case in lieu + of the standard generated name containing + the argument list. + + + + + Gets the property dictionary for this test + + + + + The original arguments provided by the user, + used for display purposes. + + + + + The expected result to be returned + + + + + Default Constructor creates an empty parameter set + + + + + Construct a non-runnable ParameterSet, specifying + the provider exception that made it invalid. + + + + + Construct a parameter set with a list of arguments + + + + + + Construct a ParameterSet from an object implementing ITestCaseData + + + + + + The expected result of the test, which + must match the method return type. + + + + + Gets a value indicating whether an expected result was specified. + + + + + Initializes a new instance of the class. + + The arguments. + + + + Initializes a new instance of the class. + + The argument. + + + + Initializes a new instance of the class. + + The first argument. + The second argument. + + + + Initializes a new instance of the class. + + The first argument. + The second argument. + The third argument. + + + + Sets the expected result for the test + + The expected result + A modified TestCaseData + + + + Sets the name of the test case + + The modified TestCaseData instance + + + + Sets the description for the test case + being constructed. + + The description. + The modified TestCaseData instance. + + + + Applies a category to the test + + + + + + + Applies a named property to the test + + + + + + + + Applies a named property to the test + + + + + + + + Applies a named property to the test + + + + + + + + Marks the test case as explicit. + + + + + Marks the test case as explicit, specifying the reason. + + + + + Ignores this TestCase, specifying the reason. + + The reason. + + + + + + + + + + + + + + + + + + + + + Gets or sets the current test + + + + + The time the current test started execution + + + + + The time the current test started in Ticks + + + + + Gets or sets the current test result + + + + + Gets a TextWriter that will send output to the current test result. + + + + + The current test object - that is the user fixture + object on which tests are being executed. + + + + + Get or set the working directory + + + + + Get or set indicator that run should stop on the first error + + + + + Gets an enum indicating whether a stop has been requested. + + + + + The current WorkItemDispatcher. Made public for + use by nunitlite.tests + + + + + The ParallelScope to be used by tests running in this context. + For builds with out the parallel feature, it has no effect. + + + + + The unique name of the worker that spawned the context. + For builds with out the parallel feature, it is null. + + + + + Gets the RandomGenerator specific to this Test + + + + + Gets or sets the test case timeout value + + + + + Gets a list of ITestActions set by upstream tests + + + + + Saves or restores the CurrentCulture + + + + + Saves or restores the CurrentUICulture + + + + + The current head of the ValueFormatter chain, copied from MsgUtils.ValueFormatter + + + + + If true, all tests must run on the same thread. No new thread may be spawned. + + + + + Helper class used to save and restore certain static or + singleton settings in the environment that affect tests + or which might be changed by the user tests. + + An internal class is used to hold settings and a stack + of these objects is pushed and popped as Save and Restore + are called. + + + + + Link to a prior saved context + + + + + Indicates that a stop has been requested + + + + + The event listener currently receiving notifications + + + + + The number of assertions for the current test + + + + + The current culture + + + + + The current UI culture + + + + + The current test result + + + + + The current Principal. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + An existing instance of TestExecutionContext. + + + + Get the current context or return null if none is found. + + + + + + Clear the current context. This is provided to + prevent "leakage" of the CallContext containing + the current context back to any runners. + + + + + Record any changes in the environment made by + the test code in the execution context so it + will be passed on to lower level tests. + + + + + Set up the execution environment to match a context. + Note that we may be running on the same thread where the + context was initially created or on a different thread. + + + + + Increments the assert count by one. + + + + + Increments the assert count by a specified amount. + + + + + Adds a new ValueFormatterFactory to the chain of formatters + + The new factory + + + + Obtain lifetime service object + + + + + + Gets and sets the current context. + + + + + Gets or sets the current test + + + + + The time the current test started execution + + + + + The time the current test started in Ticks + + + + + Gets or sets the current test result + + + + + Gets a TextWriter that will send output to the current test result. + + + + + The current test object - that is the user fixture + object on which tests are being executed. + + + + + Get or set the working directory + + + + + Get or set indicator that run should stop on the first error + + + + + Gets an enum indicating whether a stop has been requested. + + + + + The current test event listener + + + + + The current WorkItemDispatcher. Made public for + use by nunitlite.tests + + + + + The ParallelScope to be used by tests running in this context. + For builds with out the parallel feature, it has no effect. + + + + + The unique name of the worker that spawned the context. + For builds with out the parallel feature, it is null. + + + + + Gets the RandomGenerator specific to this Test + + + + + Gets the assert count. + + The assert count. + + + + Gets or sets the test case timeout value + + + + + Gets a list of ITestActions set by upstream tests + + + + + Saves or restores the CurrentCulture + + + + + Saves or restores the CurrentUICulture + + + + + Gets or sets the current for the Thread. + + + + + The current head of the ValueFormatter chain, copied from MsgUtils.ValueFormatter + + + + + If true, all tests must run on the same thread. No new thread may be spawned. + + + + + Thrown when a test executes inconclusively. + + + + + Abstract base for Exceptions that terminate a test and provide a ResultState. + + + + The error message that explains + the reason for the exception + + + The error message that explains + the reason for the exception + The exception that caused the + current exception + + + + Serialization Constructor + + + + + Gets the ResultState provided by this exception + + + + The error message that explains + the reason for the exception + + + The error message that explains + the reason for the exception + The exception that caused the + current exception + + + + Serialization Constructor + + + + + Gets the ResultState provided by this exception + + + + + Helper class with properties and methods that supply + a number of constraints used in Asserts. + + + + + Returns a new CollectionContainsConstraint checking for the + presence of a particular object in the collection. + + + + + Returns a new DictionaryContainsKeyConstraint checking for the + presence of a particular key in the dictionary. + + + + + Returns a new DictionaryContainsValueConstraint checking for the + presence of a particular value in the dictionary. + + + + + Returns a constraint that succeeds if the actual + value contains the substring supplied as an argument. + + + + + EqualConstraint is able to compare an actual value with the + expected value provided in its constructor. Two objects are + considered equal if both are null, or if both have the same + value. NUnit has special semantics for some object types. + + + + + NUnitEqualityComparer used to test equality. + + + + + Initializes a new instance of the class. + + The expected value. + + + + Flag the constraint to use a tolerance when determining equality. + + Tolerance value to be used + Self. + + + + Flag the constraint to use the supplied IComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied Comparison object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IEqualityComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IEqualityComparer object. + + The IComparer object to use. + Self. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Gets the tolerance for this comparison. + + + The tolerance. + + + + + Gets a value indicating whether to compare case insensitive. + + + true if comparing case insensitive; otherwise, false. + + + + + Gets a value indicating whether or not to clip strings. + + + true if set to clip strings otherwise, false. + + + + + Gets the failure points. + + + The failure points. + + + + + Flag the constraint to ignore case and return self. + + + + + Flag the constraint to suppress string clipping + and return self. + + + + + Flag the constraint to compare arrays as collections + and return self. + + + + + Flags the constraint to include + property in comparison of two values. + + + Using this modifier does not allow to use the + constraint modifier. + + + + + Switches the .Within() modifier to interpret its tolerance as + a distance in representable _values (see remarks). + + Self. + + Ulp stands for "unit in the last place" and describes the minimum + amount a given value can change. For any integers, an ulp is 1 whole + digit. For floating point _values, the accuracy of which is better + for smaller numbers and worse for larger numbers, an ulp depends + on the size of the number. Using ulps for comparison of floating + point results instead of fixed tolerances is safer because it will + automatically compensate for the added inaccuracy of larger numbers. + + + + + Switches the .Within() modifier to interpret its tolerance as + a percentage that the actual _values is allowed to deviate from + the expected value. + + Self + + + + Causes the tolerance to be interpreted as a TimeSpan in days. + + Self + + + + Causes the tolerance to be interpreted as a TimeSpan in hours. + + Self + + + + Causes the tolerance to be interpreted as a TimeSpan in minutes. + + Self + + + + Causes the tolerance to be interpreted as a TimeSpan in seconds. + + Self + + + + Causes the tolerance to be interpreted as a TimeSpan in milliseconds. + + Self + + + + Causes the tolerance to be interpreted as a TimeSpan in clock ticks. + + Self + + + + The Description of what this constraint tests, for + use in messages and in the ConstraintResult. + + + + + Applies a delay to the match so that a match can be evaluated in the future. + + + + + Creates a new DelayedConstraint + + The inner constraint to decorate + The time interval after which the match is performed + If the value of is less than 0 + + + + Creates a new DelayedConstraint + + The inner constraint to decorate + The time interval after which the match is performed, in milliseconds + The time interval used for polling, in milliseconds + If the value of is less than 0 + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for if the base constraint fails, false if it succeeds + + + + Test whether the constraint is satisfied by a delegate + + The delegate whose value is to be tested + A ConstraintResult + + + + Test whether the constraint is satisfied by a given reference. + Overridden to wait for the specified delay period before + calling the base constraint with the dereferenced value. + + A reference to the value to be tested + True for success, false for failure + + + + Returns the string representation of the constraint. + + + + + Adjusts a Timestamp by a given TimeSpan + + + + + + + + Returns the difference between two Timestamps as a TimeSpan + + + + + + + + Gets text describing a constraint + + + + + CollectionOrderedConstraint is used to test whether a collection is ordered. + + + + + Construct a CollectionOrderedConstraint + + + + + Modifies the constraint to use an and returns self. + + + + + Modifies the constraint to use an and returns self. + + + + + Modifies the constraint to use a and returns self. + + + + + Modifies the constraint to test ordering by the value of + a specified property and returns self. + + + + + Test whether the collection is ordered + + + + + + + Returns the string representation of the constraint. + + + + + + The display name of this Constraint for use by ToString(). + The default value is the name of the constraint with + trailing "Constraint" removed. Derived classes may set + this to another name in their constructors. + + + + + If used performs a default ascending comparison + + + + + If used performs a reverse comparison + + + + + Then signals a break between two ordering steps + + + + + The Description of what this constraint tests, for + use in messages and in the ConstraintResult. + + + + + An OrderingStep represents one stage of the sort + + + + + Attribute used to provide descriptive text about a + test case or fixture. + + + + + Construct a description Attribute + + The text of the description + + + + InvalidTestFixtureException is thrown when an appropriate test + fixture constructor using the provided arguments cannot be found. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The message. + + + + Initializes a new instance of the class. + + The message. + The inner. + + + + Serialization Constructor + + + + + A CompositeWorkItem represents a test suite and + encapsulates the execution of the suite as well + as all its child tests. + + + + + A count of how many tests in the work item have a value for the Order Property + + + + + Construct a CompositeWorkItem for executing a test suite + using a filter to select child tests. + + The TestSuite to be executed + A filter used to select child tests + + + + Method that actually performs the work. Overridden + in CompositeWorkItem to do setup, run all child + items and then do teardown. + + + + + Sorts tests under this suite. + + + + + Cancel (abort or stop) a CompositeWorkItem and all of its children + + true if the CompositeWorkItem and all of its children should be aborted, false if it should allow all currently running tests to complete + + + + List of Child WorkItems + + + + + Compares two objects and returns a value indicating whether one is less than, equal to, or greater than the other. + + + A signed integer that indicates the relative values of and , as shown in the following table.Value Meaning Less than zero is less than .Zero equals .Greater than zero is greater than . + + The first object to compare.The second object to compare. + + + + The ISimpleTestBuilder interface is exposed by a class that knows how to + build a single TestMethod from a suitable MethodInfo Types. In general, + it is exposed by an attribute, but may be implemented in a helper class + used by the attribute in some cases. + + + + + Build a TestMethod from the provided MethodInfo. + + The method to be used as a test + The TestSuite to which the method will be added + A TestMethod object + + + + The TypeWrapper class wraps a Type so it may be used in + a platform-independent manner. + + + + + Construct a TypeWrapper for a specified Type. + + + + + Returns true if the Type wrapped is T + + + + + Get the display name for this type + + + + + Get the display name for an object of this type, constructed with the specified args. + + + + + Returns a new ITypeInfo representing an instance of this generic Type using the supplied Type arguments + + + + + Returns a Type representing a generic type definition from which this Type can be constructed. + + + + + Returns an array of custom attributes of the specified type applied to this type + + + + + Returns a value indicating whether the type has an attribute of the specified type. + + + + + + + + Returns a flag indicating whether this type has a method with an attribute of the specified type. + + + + + + + Returns an array of IMethodInfos for methods of this Type + that match the specified flags. + + + + + Gets the public constructor taking the specified argument Types + + + + + Returns a value indicating whether this Type has a public constructor taking the specified argument Types. + + + + + Construct an object of this Type, using the specified arguments. + + + + + Override ToString() so that error messages in NUnit's own tests make sense + + + + + Gets the underlying Type on which this TypeWrapper is based. + + + + + Gets the base type of this type as an ITypeInfo + + + + + Gets the Name of the Type + + + + + Gets the FullName of the Type + + + + + Gets the assembly in which the type is declared + + + + + Gets the namespace of the Type + + + + + Gets a value indicating whether the type is abstract. + + + + + Gets a value indicating whether the Type is a generic Type + + + + + Gets a value indicating whether the Type has generic parameters that have not been replaced by specific Types. + + + + + Gets a value indicating whether the Type is a generic Type definition + + + + + Gets a value indicating whether the type is sealed. + + + + + Gets a value indicating whether this type represents a static class. + + + + + DictionaryContainsValueConstraint is used to test whether a dictionary + contains an expected object as a value. + + + + + Construct a DictionaryContainsValueConstraint + + + + + + Test whether the expected value is contained in the dictionary + + + + + The display name of this Constraint for use by ToString(). + The default value is the name of the constraint with + trailing "Constraint" removed. Derived classes may set + this to another name in their constructors. + + + + + The Description of what this constraint tests, for + use in messages and in the ConstraintResult. + + + + + TestCaseSourceAttribute indicates the source to be used to + provide test fixture instances for a test class. + + + + + Error message string is public so the tests can use it + + + + + Construct with the name of the method, property or field that will provide data + + The name of a static method, property or field that will provide data. + + + + Construct with a Type and name + + The Type that will provide data + The name of a static method, property or field that will provide data. + + + + Construct with a Type + + The type that will provide data + + + + Construct one or more TestFixtures from a given Type, + using available parameter data. + + The TypeInfo for which fixures are to be constructed. + One or more TestFixtures as TestSuite + + + + Returns a set of ITestFixtureData items for use as arguments + to a parameterized test fixture. + + The type for which data is needed. + + + + + The name of a the method, property or fiend to be used as a source + + + + + A Type to be used as a source + + + + + Gets or sets the category associated with every fixture created from + this attribute. May be a single category or a comma-separated list. + + + + + Attribute used to identify a method that is called once + to perform setup before any child tests are run. + + + + + Provides the Author of a test or test fixture. + + + + + Initializes a new instance of the class. + + The name of the author. + + + + Initializes a new instance of the class. + + The name of the author. + The email address of the author. + + + + The different targets a test action attribute can be applied to + + + + + Default target, which is determined by where the action attribute is attached + + + + + Target a individual test case + + + + + Target a suite of test cases + + + + + TestListener provides an implementation of ITestListener that + does nothing. It is used only through its NULL property. + + + + + Called when a test has just started + + The test that is starting + + + + Called when a test case has finished + + The result of the test + + + + Called when a test produces output for immediate display + + A TestOutput object containing the text to display + + + + Construct a new TestListener - private so it may not be used. + + + + + Get a listener that does nothing + + + + + PlatformHelper class is used by the PlatformAttribute class to + determine whether a platform is supported. + + + + + Comma-delimited list of all supported OS platform constants + + + + + Comma-delimited list of all supported Runtime platform constants + + + + + Default constructor uses the operating system and + common language runtime of the system. + + + + + Construct a PlatformHelper for a particular operating + system and common language runtime. Used in testing. + + OperatingSystem to be used + RuntimeFramework to be used + + + + Test to determine if one of a collection of platforms + is being used currently. + + + + + + + Tests to determine if the current platform is supported + based on a platform attribute. + + The attribute to examine + + + + + Tests to determine if the current platform is supported + based on a platform attribute. + + The attribute to examine + + + + + Test to determine if the a particular platform or comma- + delimited set of platforms is in use. + + Name of the platform or comma-separated list of platform ids + True if the platform is in use on the system + + + + Return the last failure reason. Results are not + defined if called before IsSupported( Attribute ) + is called. + + + + + DefaultTestAssemblyBuilder loads a single assembly and builds a TestSuite + containing test fixtures present in the assembly. + + + + + The default suite builder used by the test assembly builder. + + + + + Initializes a new instance of the class. + + + + + Build a suite of tests from a provided assembly + + The assembly from which tests are to be built + A dictionary of options to use in building the suite + + A TestSuite containing the tests found in the assembly + + + + + Build a suite of tests given the filename of an assembly + + The filename of the assembly from which tests are to be built + A dictionary of options to use in building the suite + + A TestSuite containing the tests found in the assembly + + + + + Helper class with properties and methods that supply + a number of constraints used in Asserts. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding only if a specified number of them succeed. + + + + + Returns a new PropertyConstraintExpression, which will either + test for the existence of the named property on the object + being tested or apply any following constraint to that property. + + + + + Returns a new AttributeConstraint checking for the + presence of a particular attribute on an object. + + + + + Returns a new AttributeConstraint checking for the + presence of a particular attribute on an object. + + + + + Returns a new CollectionContainsConstraint checking for the + presence of a particular object in the collection. + + + + + Returns a ConstraintExpression that negates any + following constraint. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if all of them succeed. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if at least one of them succeeds. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if all of them fail. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Length property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Count property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Message property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the InnerException property of the object being tested. + + + + + EmptyConstraint tests a whether a string or collection is empty, + postponing the decision about which test is applied until the + type of the actual argument is known. + + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + The Description of what this constraint tests, for + use in messages and in the ConstraintResult. + + + + + ComparisonAdapter class centralizes all comparisons of + _values in NUnit, adapting to the use of any provided + , + or . + + + + + Returns a ComparisonAdapter that wraps an + + + + + Returns a ComparisonAdapter that wraps an + + + + + Returns a ComparisonAdapter that wraps a + + + + + Compares two objects + + + + + Gets the default ComparisonAdapter, which wraps an + NUnitComparer object. + + + + + Construct a ComparisonAdapter for an + + + + + Compares two objects + + + + + + + + Construct a default ComparisonAdapter + + + + + ComparerAdapter extends and + allows use of an or + to actually perform the comparison. + + + + + Construct a ComparisonAdapter for an + + + + + Compare a Type T to an object + + + + + Construct a ComparisonAdapter for a + + + + + Compare a Type T to an object + + + + + AssignableFromConstraint is used to test that an object + can be assigned from a given Type. + + + + + Construct an AssignableFromConstraint for the type provided + + + + + + Apply the constraint to an actual value, returning true if it succeeds + + The actual argument + True if the constraint succeeds, otherwise false. + + + + Marks a test to use a Sequential join of any argument + data provided. Arguments will be combined into test cases, + taking the next value of each argument until all are used. + + + + + Default constructor + + + + + RangeAttribute is used to supply a range of _values to an + individual parameter of a parameterized test. + + + + + Construct a range of ints using default step of 1 + + + + + + + Construct a range of ints specifying the step size + + + + + + + + Construct a range of unsigned ints using default step of 1 + + + + + + + Construct a range of unsigned ints specifying the step size + + + + + + + + Construct a range of longs using a default step of 1 + + + + + + + Construct a range of longs + + + + + + + + Construct a range of unsigned longs using default step of 1 + + + + + + + Construct a range of unsigned longs specifying the step size + + + + + + + + Construct a range of doubles + + + + + + + + Construct a range of floats + + + + + + + + Used to mark a field, property or method providing a set of datapoints to + be used in executing any theories within the same fixture that require an + argument of the Type provided. The data source may provide an array of + the required Type or an . + Synonymous with DatapointsAttribute. + + + + + StackFilter class is used to remove internal NUnit + entries from a stack trace so that the resulting + trace provides better information about the test. + + + + + Filters a raw stack trace and returns the result. + + The original stack trace + A filtered stack trace + + + + A utility class to create TestCommands + + + + + Gets the command to be executed before any of + the child tests are run. + + A TestCommand + + + + Gets the command to be executed after all of the + child tests are run. + + A TestCommand + + + + Creates a test command for use in running this test. + + + + + + Creates a command for skipping a test. The result returned will + depend on the test RunState. + + + + + Builds the set up tear down list. + + Type of the fixture. + Type of the set up attribute. + Type of the tear down attribute. + A list of SetUpTearDownItems + + + + The ParameterWrapper class wraps a ParameterInfo so that it may + be used in a platform-independent manner. + + + + + The IParameterInfo interface is an abstraction of a .NET parameter. + + + + + Gets a value indicating whether the parameter is optional + + + + + Gets an IMethodInfo representing the method for which this is a parameter + + + + + Gets the underlying .NET ParameterInfo + + + + + Gets the Type of the parameter + + + + + Construct a ParameterWrapper for a given method and parameter + + + + + + + Returns an array of custom attributes of the specified type applied to this method + + + + + Gets a value indicating whether one or more attributes of the specified type are defined on the parameter. + + + + + Gets a value indicating whether the parameter is optional + + + + + Gets an IMethodInfo representing the method for which this is a parameter. + + + + + Gets the underlying ParameterInfo + + + + + Gets the Type of the parameter + + + + + A trace listener that writes to a separate file per domain + and process using it. + + + + + Construct an InternalTraceWriter that writes to a file. + + Path to the file to use + + + + Construct an InternalTraceWriter that writes to a + TextWriter provided by the caller. + + + + + + Writes a character to the text string or stream. + + The character to write to the text stream. + + + + Writes a string to the text string or stream. + + The string to write. + + + + Writes a string followed by a line terminator to the text string or stream. + + The string to write. If is null, only the line terminator is written. + + + + Releases the unmanaged resources used by the and optionally releases the managed resources. + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + Clears all buffers for the current writer and causes any buffered data to be written to the underlying device. + + + + + Returns the character encoding in which the output is written. + + The character encoding in which the output is written. + + + + FullName filter selects tests based on their FullName + + + + + Construct a MethodNameFilter for a single name + + The name the filter will recognize. + + + + Match a test against a single value. + + + + + Gets the element name + + Element name + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Provides a platform-independent methods for getting attributes + for use by AttributeConstraint and AttributeExistsConstraint. + + + + + Gets the custom attributes from the given object. + + Portable libraries do not have an ICustomAttributeProvider, so we need to cast to each of + it's direct subtypes and try to get attributes off those instead. + The actual. + Type of the attribute. + if set to true [inherit]. + A list of the given attribute on the given object. + + + + The SpecialValue enum is used to represent TestCase arguments + that cannot be used as arguments to an Attribute. + + + + + Null represents a null value, which cannot be used as an + argument to an attriute under .NET 1.x + + + + + TypeHelper provides static methods that operate on Types. + + + + + A special value, which is used to indicate that BestCommonType() method + was unable to find a common type for the specified arguments. + + + + + Gets the display name for a Type as used by NUnit. + + The Type for which a display name is needed. + The display name for the Type + + + + Gets the display name for a Type as used by NUnit. + + The Type for which a display name is needed. + The arglist provided. + The display name for the Type + + + + Returns the best fit for a common type to be used in + matching actual arguments to a methods Type parameters. + + The first type. + The second type. + Either type1 or type2, depending on which is more general. + + + + Determines whether the specified type is numeric. + + The type to be examined. + + true if the specified type is numeric; otherwise, false. + + + + + Convert an argument list to the required parameter types. + Currently, only widening numeric conversions are performed. + + An array of args to be converted + A ParameterInfo[] whose types will be used as targets + + + + Determines whether this instance can deduce type args for a generic type from the supplied arguments. + + The type to be examined. + The arglist. + The type args to be used. + + true if this the provided args give sufficient information to determine the type args to be used; otherwise, false. + + + + + Gets the _values for an enumeration, using Enum.GetTypes + where available, otherwise through reflection. + + + + + + + Gets the ids of the _values for an enumeration, + using Enum.GetNames where available, otherwise + through reflection. + + + + + + + ThreadUtility provides a set of static methods convenient + for working with threads. + + + + + Do our best to Kill a thread + + The thread to kill + + + + Do our best to kill a thread, passing state info + + The thread to kill + Info for the ThreadAbortException handler + + + + TestFixture is a surrogate for a user test fixture class, + containing one or more tests. + + + + + Any ITest that implements this interface is at a level that the implementing + class should be disposed at the end of the test run + + + + + Initializes a new instance of the class. + + Type of the fixture. + + + + Predicate constraint wraps a Predicate in a constraint, + returning success if the predicate is true. + + + + + Construct a PredicateConstraint from a predicate + + + + + Determines whether the predicate succeeds when applied + to the actual value. + + + + + Gets text describing a constraint + + + + + NotConstraint negates the effect of some other constraint + + + + + Initializes a new instance of the class. + + The base constraint to be negated. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for if the base constraint fails, false if it succeeds + + + + Custom value formatter function + + The value + + + + + Custom value formatter factory function + + The next formatter function + ValueFormatter + If the given formatter is unable to handle a certain format, it must call the next formatter in the chain + + + + Static methods used in creating messages + + + + + Static string used when strings are clipped + + + + + Formatting strings used for expected and actual _values + + + + + Add a formatter to the chain of responsibility. + + + + + + Formats text to represent a generalized value. + + The value + The formatted text + + + + Formats text for a collection value, + starting at a particular point, to a max length + + The collection containing elements to write. + The starting point of the elements to write + The maximum number of elements to write + + + + Returns the representation of a type as used in NUnitLite. + This is the same as Type.ToString() except for arrays, + which are displayed with their declared sizes. + + + + + + + Converts any control characters in a string + to their escaped representation. + + The string to be converted + The converted string + + + + Converts any null characters in a string + to their escaped representation. + + The string to be converted + The converted string + + + + Return the a string representation for a set of indices into an array + + Array of indices for which a string is needed + + + + Get an array of indices representing the point in a collection or + array corresponding to a single int index into the collection. + + The collection to which the indices apply + Index in the collection + Array of indices + + + + Clip a string to a given length, starting at a particular offset, returning the clipped + string with ellipses representing the removed parts + + The string to be clipped + The maximum permitted length of the result string + The point at which to start clipping + The clipped string + + + + Clip the expected and actual strings in a coordinated fashion, + so that they may be displayed together. + + + + + + + + + Shows the position two strings start to differ. Comparison + starts at the start index. + + The expected string + The actual string + The index in the strings at which comparison should start + Boolean indicating whether case should be ignored + -1 if no mismatch found, or the index where mismatch found + + + + Current head of chain of value formatters. Public for testing. + + + + + Adding this attribute to a method within a + class makes the method callable from the NUnit test runner. There is a property + called Description which is optional which you can provide a more detailed test + description. This class cannot be inherited. + + + + [TestFixture] + public class Fixture + { + [Test] + public void MethodToTest() + {} + + [Test(Description = "more detailed description")] + public void TestDescriptionMethod() + {} + } + + + + + + Construct the attribute, specifying a combining strategy and source of parameter data. + + + + + Enumeration indicating whether the tests are + running normally or being cancelled. + + + + + Running normally with no stop requested + + + + + A graceful stop has been requested + + + + + A forced stop has been requested + + + + + The TestCaseParameters class encapsulates method arguments and + other selected parameters needed for constructing + a parameterized test case. + + + + + Default Constructor creates an empty parameter set + + + + + Construct a non-runnable ParameterSet, specifying + the provider exception that made it invalid. + + + + + Construct a parameter set with a list of arguments + + + + + + Construct a ParameterSet from an object implementing ITestCaseData + + + + + + Type arguments used to create a generic fixture instance + + + + + Provides methods to support legacy string comparison methods. + + + + + Compares two strings for equality, ignoring case if requested. + + The first string. + The second string.. + if set to true, the case of the letters in the strings is ignored. + Zero if the strings are equivalent, a negative number if strA is sorted first, a positive number if + strB is sorted first + + + + Compares two strings for equality, ignoring case if requested. + + The first string. + The second string.. + if set to true, the case of the letters in the strings is ignored. + True if the strings are equivalent, false if not. + + + + OneTimeSetUpCommand runs any one-time setup methods for a suite, + constructing the user test object if necessary. + + + + + Constructs a OneTimeSetUpCommand for a suite + + The suite to which the command applies + A SetUpTearDownList for use by the command + A List of TestActionItems to be run after Setup + + + + Overridden to run the one-time setup for a suite. + + The TestExecutionContext to be used. + A TestResult + + + + The TestOutput class holds a unit of output from + a test to a specific output stream + + + + + Construct with text, ouput destination type and + the name of the test that produced the output. + + Text to be output + Name of the stream or channel to which the text should be written + FullName of test that produced the output + + + + Return string representation of the object for debugging + + + + + + Convert the TestOutput object to an XML string + + + + + Get the text + + + + + Get the output type + + + + + Get the name of the test that created the output + + + + + The IMethodInfo class is used to encapsulate information + about a method in a platform-independent manner. + + + + + Gets the parameters of the method. + + + + + + Returns the Type arguments of a generic method or the Type parameters of a generic method definition. + + + + + Replaces the type parameters of the method with the array of types provided and returns a new IMethodInfo. + + The type arguments to be used + A new IMethodInfo with the type arguments replaced + + + + Invokes the method, converting any TargetInvocationException to an NUnitException. + + The object on which to invoke the method + The argument list for the method + The return value from the invoked method + + + + Gets the Type from which this method was reflected. + + + + + Gets the MethodInfo for this method. + + + + + Gets the name of the method. + + + + + Gets a value indicating whether the method is abstract. + + + + + Gets a value indicating whether the method is public. + + + + + Gets a value indicating whether the method contains unassigned generic type parameters. + + + + + Gets a value indicating whether the method is a generic method. + + + + + Gets a value indicating whether the MethodInfo represents the definition of a generic method. + + + + + Gets the return Type of the method. + + + + + ThrowsExceptionConstraint tests that an exception has + been thrown, without any further tests. + + + + + Executes the code and returns success if an exception is thrown. + + A delegate representing the code to be tested + True if an exception is thrown, otherwise false + + + + Returns the ActualValueDelegate itself as the value to be tested. + + A delegate representing the code to be tested + The delegate itself + + + + The Description of what this constraint tests, for + use in messages and in the ConstraintResult. + + + + + LevelOfParallelismAttribute is used to set the number of worker threads + that may be allocated by the framework for running tests. + + + + + Construct a LevelOfParallelismAttribute. + + The number of worker threads to be created by the framework. + + + + RepeatAttribute may be applied to test case in order + to run it multiple times. + + + + + Construct a RepeatAttribute + + The number of times to run the test + + + + Wrap a command and return the result. + + The command to be wrapped + The wrapped command + + + + The test command for the RetryAttribute + + + + + Initializes a new instance of the class. + + The inner command. + The number of repetitions + + + + Runs the test, saving a TestResult in the supplied TestExecutionContext. + + The context in which the test should run. + A TestResult + + + + Represents the result of running a single test case. + + + + + Construct a TestCaseResult based on a TestMethod + + A TestMethod to which the result applies. + + + + Gets the number of test cases that failed + when running the test and all its children. + + + + + Gets the number of test cases that passed + when running the test and all its children. + + + + + Gets the number of test cases that were skipped + when running the test and all its children. + + + + + Gets the number of test cases that were inconclusive + when running the test and all its children. + + + + + Indicates whether this result has any child results. + + + + + Gets the collection of child results. + + + + + TestParameters class holds any named parameters supplied to the test run + + + + + Gets a flag indicating whether a parameter with the specified name exists.N + + Name of the parameter + True if it exists, otherwise false + + + + Get method is a simple alternative to the indexer + + Name of the paramter + Value of the parameter or null if not present + + + + Get the value of a parameter or a default string + + Name of the parameter + Default value of the parameter + Value of the parameter or default value if not present + + + + Get the value of a parameter or return a default + + The return Type + Name of the parameter + Default value of the parameter + Value of the parameter or default value if not present + + + + Adds a parameter to the list + + Name of the parameter + Value of the parameter + + + + Gets the number of test parameters + + + + + Gets a collection of the test parameter names + + + + + Indexer provides access to the internal dictionary + + Name of the parameter + Value of the parameter or null if not present + + + + ParameterDataSourceProvider supplies individual argument _values for + single parameters using attributes implementing IParameterDataSource. + + + + + Determine whether any data is available for a parameter. + + A ParameterInfo representing one + argument to a parameterized test + + True if any data is available, otherwise false. + + + + + Return an IEnumerable providing data for use with the + supplied parameter. + + An IParameterInfo representing one + argument to a parameterized test + + An IEnumerable providing the required data + + + + + Thrown when an assertion failed. + + + + + + + The error message that explains + the reason for the exception + The exception that caused the + current exception + + + + Serialization Constructor + + + + + Gets the ResultState provided by this exception + + + + + OrConstraint succeeds if either member succeeds + + + + + Create an OrConstraint from two other constraints + + The first constraint + The second constraint + + + + Apply the member constraints to an actual value, succeeding + succeeding as soon as one of them succeeds. + + The actual value + True if either constraint succeeded + + + + Gets text describing a constraint + + + + + Operator that tests for the presence of a particular attribute + on a type and optionally applies further tests to the attribute. + + + + + Construct an AttributeOperator for a particular Type + + The Type of attribute tested + + + + Reduce produces a constraint from the operator and + any arguments. It takes the arguments from the constraint + stack and pushes the resulting constraint on it. + + + + + MessageWriter is the abstract base for classes that write + constraint descriptions and messages in some form. The + class has separate methods for writing various components + of a message, allowing implementations to tailor the + presentation as needed. + + + + + Construct a MessageWriter given a culture + + + + + Method to write single line message with optional args, usually + written to precede the general failure message. + + The message to be written + Any arguments used in formatting the message + + + + Method to write single line message with optional args, usually + written to precede the general failure message, at a givel + indentation level. + + The indentation level of the message + The message to be written + Any arguments used in formatting the message + + + + Display Expected and Actual lines for a constraint. This + is called by MessageWriter's default implementation of + WriteMessageTo and provides the generic two-line display. + + The failing constraint result + + + + Display Expected and Actual lines for given _values. This + method may be called by constraints that need more control over + the display of actual and expected _values than is provided + by the default implementation. + + The expected value + The actual value causing the failure + + + + Display Expected and Actual lines for given _values, including + a tolerance value on the Expected line. + + The expected value + The actual value causing the failure + The tolerance within which the test was made + + + + Display the expected and actual string _values on separate lines. + If the mismatch parameter is >=0, an additional line is displayed + line containing a caret that points to the mismatch point. + + The expected string value + The actual string value + The point at which the strings don't match or -1 + If true, case is ignored in locating the point where the strings differ + If true, the strings should be clipped to fit the line + + + + Writes the text for an actual value. + + The actual value. + + + + Writes the text for a generalized value. + + The value. + + + + Writes the text for a collection value, + starting at a particular point, to a max length + + The collection containing elements to write. + The starting point of the elements to write + The maximum number of elements to write + + + + Abstract method to get the max line length + + + + + Tests whether a value is less than the value supplied to its constructor + + + + + Abstract base class for constraints that compare _values to + determine if one is greater than, equal to or less than + the other. + + + + + The value against which a comparison is to be made + + + + + If true, less than returns success + + + + + if true, equal returns success + + + + + if true, greater than returns success + + + + + ComparisonAdapter to be used in making the comparison + + + + + Initializes a new instance of the class. + + The value against which to make a comparison. + if set to true less succeeds. + if set to true equal succeeds. + if set to true greater succeeds. + String used in describing the constraint. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Modifies the constraint to use an and returns self + + The comparer used for comparison tests + A constraint modified to use the given comparer + + + + Modifies the constraint to use an and returns self + + The comparer used for comparison tests + A constraint modified to use the given comparer + + + + Modifies the constraint to use a and returns self + + The comparer used for comparison tests + A constraint modified to use the given comparer + + + + Initializes a new instance of the class. + + The expected value. + + + + EmptyStringConstraint tests whether a string is empty. + + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + The Description of what this constraint tests, for + use in messages and in the ConstraintResult. + + + + + EmptyDirectoryConstraint is used to test that a directory is empty + + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + The Description of what this constraint tests, for + use in messages and in the ConstraintResult. + + + + + ConstraintBuilder maintains the stacks that are used in + processing a ConstraintExpression. An OperatorStack + is used to hold operators that are waiting for their + operands to be reorganized. a ConstraintStack holds + input constraints as well as the results of each + operator applied. + + + + + Initializes a new instance of the class. + + + + + Appends the specified operator to the expression by first + reducing the operator stack and then pushing the new + operator on the stack. + + The operator to push. + + + + Appends the specified constraint to the expression by pushing + it on the constraint stack. + + The constraint to push. + + + + Sets the top operator right context. + + The right context. + + + + Reduces the operator stack until the topmost item + precedence is greater than or equal to the target precedence. + + The target precedence. + + + + Resolves this instance, returning a Constraint. If the Builder + is not currently in a resolvable state, an exception is thrown. + + The resolved constraint + + + + Gets a value indicating whether this instance is resolvable. + + + true if this instance is resolvable; otherwise, false. + + + + + OperatorStack is a type-safe stack for holding ConstraintOperators + + + + + Initializes a new instance of the class. + + The ConstraintBuilder using this stack. + + + + Pushes the specified operator onto the stack. + + The operator to put onto the stack. + + + + Pops the topmost operator from the stack. + + The topmost operator on the stack + + + + Gets a value indicating whether this is empty. + + true if empty; otherwise, false. + + + + Gets the topmost operator without modifying the stack. + + + + + ConstraintStack is a type-safe stack for holding Constraints + + + + + Initializes a new instance of the class. + + The ConstraintBuilder using this stack. + + + + Pushes the specified constraint. As a side effect, + the constraint's Builder field is set to the + ConstraintBuilder owning this stack. + + The constraint to put onto the stack + + + + Pops this topmost constraint from the stack. + As a side effect, the constraint's Builder + field is set to null. + + The topmost contraint on the stack + + + + Gets a value indicating whether this is empty. + + true if empty; otherwise, false. + + + + CollectionEquivalentConstraint is used to determine whether two + collections are equivalent. + + + + + Construct a CollectionEquivalentConstraint + + + + + + Test whether two collections are equivalent + + + + + + + Flag the constraint to use the supplied predicate function + + The comparison function to use. + Self. + + + + The display name of this Constraint for use by ToString(). + The default value is the name of the constraint with + trailing "Constraint" removed. Derived classes may set + this to another name in their constructors. + + + + + The Description of what this constraint tests, for + use in messages and in the ConstraintResult. + + + + + AttributeExistsConstraint tests for the presence of a + specified attribute on a Type. + + + + + Constructs an AttributeExistsConstraint for a specific attribute Type + + + + + + Tests whether the object provides the expected attribute. + + A Type, MethodInfo, or other ICustomAttributeProvider + True if the expected attribute is present, otherwise false + + + + The Description of what this constraint tests, for + use in messages and in the ConstraintResult. + + + + + Marks a test that must run on a separate thread. + + + + + Construct a RequiresThreadAttribute + + + + + Construct a RequiresThreadAttribute, specifying the apartment + + + + + ExplicitAttribute marks a test or test fixture so that it will + only be run if explicitly executed from the gui or command line + or if it is included by use of a filter. The test will not be + run simply because an enclosing suite is run. + + + + + Default constructor + + + + + Constructor with a reason + + The reason test is marked explicit + + + + Modifies a test by marking it as explicit. + + The test to modify + + + + OneTimeTearDownCommand performs any teardown actions + specified for a suite and calls Dispose on the user + test object, if any. + + + + + Construct a OneTimeTearDownCommand + + The test suite to which the command applies + A SetUpTearDownList for use by the command + A List of TestActionItems to be run before teardown. + + + + Overridden to run the teardown methods specified on the test. + + The TestExecutionContext to be used. + A TestResult + + + + Class that can build a tree of automatic namespace + suites from a group of fixtures. + + + + + NamespaceDictionary of all test suites we have created to represent + namespaces. Used to locate namespace parent suites for fixtures. + + + + + The root of the test suite being created by this builder. + + + + + Initializes a new instance of the class. + + The root suite. + + + + Adds the specified fixtures to the tree. + + The fixtures to be added. + + + + Adds the specified fixture to the tree. + + The fixture to be added. + + + + Gets the root entry in the tree created by the NamespaceTreeBuilder. + + The root suite. + + + + Built-in SuiteBuilder for all types of test classes. + + + + + The ISuiteBuilder interface is exposed by a class that knows how to + build a suite from one or more Types. + + + + + Examine the type and determine if it is suitable for + this builder to use in building a TestSuite. + + Note that returning false will cause the type to be ignored + in loading the tests. If it is desired to load the suite + but label it as non-runnable, ignored, etc., then this + method must return true. + + The type of the fixture to be used + True if the type can be used to build a TestSuite + + + + Build a TestSuite from type provided. + + The type of the fixture to be used + A TestSuite + + + + Checks to see if the provided Type is a fixture. + To be considered a fixture, it must be a non-abstract + class with one or more attributes implementing the + IFixtureBuilder interface or one or more methods + marked as tests. + + The fixture type to check + True if the fixture can be built, false if not + + + + Build a TestSuite from TypeInfo provided. + + The fixture type to build + A TestSuite built from that type + + + + We look for attributes implementing IFixtureBuilder at one level + of inheritance at a time. Attributes on base classes are not used + unless there are no fixture builder attributes at all on the derived + class. This is by design. + + The type being examined for attributes + A list of the attributes found. + + + + + + + + + + + + + + + + + + + + + + + + Provide actions to execute before and after tests. + + + + + When implemented by an attribute, this interface implemented to provide actions to execute before and after tests. + + + + + Executed before each test is run + + The test that is going to be run. + + + + Executed after each test is run + + The test that has just been run. + + + + Provides the target for the action attribute + + The target for the action attribute + + + + Executed before each test is run + + The test that is going to be run. + + + + Executed after each test is run + + The test that has just been run. + + + + Provides the target for the action attribute + + + + + Marks a test that must run in a particular threading apartment state, causing it + to run in a separate thread if necessary. + + + + + Construct an ApartmentAttribute + + The apartment state that this test must be run under. You must pass in a valid apartment state. + + + + The Iz class is a synonym for Is intended for use in VB, + which regards Is as a keyword. + + + + + Helper class with properties and methods that supply + a number of constraints used in Asserts. + + + + + Returns a constraint that tests two items for equality + + + + + Returns a constraint that tests that two references are the same object + + + + + Returns a constraint that tests whether the + actual value is greater than the supplied argument + + + + + Returns a constraint that tests whether the + actual value is greater than or equal to the supplied argument + + + + + Returns a constraint that tests whether the + actual value is greater than or equal to the supplied argument + + + + + Returns a constraint that tests whether the + actual value is less than the supplied argument + + + + + Returns a constraint that tests whether the + actual value is less than or equal to the supplied argument + + + + + Returns a constraint that tests whether the + actual value is less than or equal to the supplied argument + + + + + Returns a constraint that tests whether the actual + value is of the exact type supplied as an argument. + + + + + Returns a constraint that tests whether the actual + value is of the exact type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable to the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable to the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is a collection containing the same elements as the + collection supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is a subset of the collection supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is a superset of the collection supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value contains the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value starts with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value ends with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value matches the regular expression supplied as an argument. + + + + + Returns a constraint that tests whether the path provided + is the same as an expected path after canonicalization. + + + + + Returns a constraint that tests whether the path provided + is a subpath of the expected path after canonicalization. + + + + + Returns a constraint that tests whether the path provided + is the same path or under an expected path after canonicalization. + + + + + Returns a constraint that tests whether the actual value falls + inclusively within a specified range. + + from must be less than or equal to true + Inclusive beginning of the range. Must be less than or equal to to. + Inclusive end of the range. Must be greater than or equal to from. + + + + + Returns a ConstraintExpression that negates any + following constraint. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if all of them succeed. + + + + + Returns a constraint that tests for null + + + + + Returns a constraint that tests for True + + + + + Returns a constraint that tests for False + + + + + Returns a constraint that tests for a positive value + + + + + Returns a constraint that tests for a negative value + + + + + Returns a constraint that tests for equality with zero + + + + + Returns a constraint that tests for NaN + + + + + Returns a constraint that tests for empty + + + + + Returns a constraint that tests whether a collection + contains all unique items. + + + + + Returns a constraint that tests whether an object graph is serializable in binary format. + + + + + Returns a constraint that tests whether an object graph is serializable in xml format. + + + + + Returns a constraint that tests whether a collection is ordered + + + + + Objects implementing this interface are used to wrap + the TestMethodCommand itself. They apply after SetUp + has been run and before TearDown. + + + + + The CommandStage enumeration represents the defined stages + of execution for a series of TestCommands. The int _values + of the enum are used to apply decorators in the proper + order. Lower _values are applied first and are therefore + "closer" to the actual test execution. + + + No CommandStage is defined for actual invocation of the test or + for creation of the context. Execution may be imagined as + proceeding from the bottom of the list upwards, with cleanup + after the test running in the opposite order. + + + + + Use an application-defined default value. + + + + + Make adjustments needed before and after running + the raw test - that is, after any SetUp has run + and before TearDown. + + + + + Run SetUp and TearDown for the test. This stage is used + internally by NUnit and should not normally appear + in user-defined decorators. + + + + + Make adjustments needed before and after running + the entire test - including SetUp and TearDown. + + + + + ThrowsConstraint is used to test the exception thrown by + a delegate by applying a constraint to it. + + + + + Initializes a new instance of the class, + using a constraint to be applied to the exception. + + A constraint to apply to the caught exception. + + + + Executes the code of the delegate and captures any exception. + If a non-null base constraint was provided, it applies that + constraint to the exception. + + A delegate representing the code to be tested + True if an exception is thrown and the constraint succeeds, otherwise false + + + + Converts an ActualValueDelegate to a TestDelegate + before calling the primary overload. + + + + + + + Get the actual exception thrown - used by Assert.Throws. + + + + + Gets text describing a constraint + + + + + Write the actual value for a failing constraint test to a + MessageWriter. This override only handles the special message + used when an exception is expected but none is thrown. + + The writer on which the actual value is displayed + + + + Summary description for SamePathConstraint. + + + + + Initializes a new instance of the class. + + The expected path + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + The Description of what this constraint tests, for + use in messages and in the ConstraintResult. + + + + + Operator that requires both it's arguments to succeed + + + + + Construct an AndOperator + + + + + Apply the operator to produce an AndConstraint + + + + + Provides static methods to express the assumptions + that must be met for a test to give a meaningful + result. If an assumption is not met, the test + should produce an inconclusive result. + + + + + The Equals method throws an InvalidOperationException. This is done + to make sure there is no mistake by calling this function. + + The left object. + The right object. + Not applicable + + + + override the default ReferenceEquals to throw an InvalidOperationException. This + implementation makes sure there is no mistake in calling this function + as part of Assert. + + The left object. + The right object. + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an InconclusiveException on failure. + + The Type being compared. + An ActualValueDelegate returning the value to be tested + A Constraint expression to be applied + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an InconclusiveException on failure. + + The Type being compared. + An ActualValueDelegate returning the value to be tested + A Constraint expression to be applied + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an InconclusiveException on failure. + + The Type being compared. + An ActualValueDelegate returning the value to be tested + A Constraint expression to be applied + A function to build the message included with the Exception + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + The message to display if the condition is false + Arguments to be used in formatting the message + + + + Asserts that a condition is true. If the condition is false the + method throws an . + + The evaluated condition + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + A function to build the message included with the Exception + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + A lambda that returns a Boolean + The message to display if the condition is false + Arguments to be used in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + A lambda that returns a Boolean + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + A lambda that returns a Boolean + A function to build the message included with the Exception + + + + Asserts that the code represented by a delegate throws an exception + that satisfies the constraint provided. + + A TestDelegate to be executed + A ThrowsConstraint used in the test + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an InconclusiveException on failure. + + The Type being compared. + The actual value to test + A Constraint to be applied + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an InconclusiveException on failure. + + The Type being compared. + The actual value to test + A Constraint expression to be applied + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an InconclusiveException on failure. + + The Type being compared. + The actual value to test + A Constraint to be applied + A function to build the message included with the Exception + + + + TODO: Documentation needed for class + + + + + Initializes a new instance of the class. + + The test being skipped. + + + + Overridden to simply set the CurrentResult to the + appropriate Skipped state. + + The execution context for the test + A TestResult + + + + The TextCapture class intercepts console output and writes it + to the current execution context, if one is present on the thread. + If no execution context is found, the output is written to a + default destination, normally the original destination of the + intercepted output. + + + + + Construct a TextCapture object + + The default destination for non-intercepted output + + + + Writes a single character + + The char to write + + + + Writes a string + + The string to write + + + + Writes a string followed by a line terminator + + The string to write + + + + Gets the Encoding in use by this TextWriter + + + + + SimpleWorkItemDispatcher handles execution of WorkItems by + directly executing them. It is provided so that a dispatcher + is always available in the context, thereby simplifying the + code needed to run child tests. + + + + + An IWorkItemDispatcher handles execution of work items. + + + + + Dispatch a single work item for execution. The first + work item dispatched is saved as the top-level + work item and used when stopping the run. + + The item to dispatch + + + + Cancel the ongoing run completely. + If no run is in process, the call has no effect. + + true if the IWorkItemDispatcher should abort all currently running WorkItems, false if it should allow all currently running WorkItems to complete + + + + Dispatch a single work item for execution. The first + work item dispatched is saved as the top-level + work item and a thread is created on which to + run it. Subsequent calls come from the top level + item or its descendants on the proper thread. + + The item to dispatch + + + + Cancel (abort or stop) the ongoing run. + If no run is in process, the call has no effect. + + true if the run should be aborted, false if it should allow its currently running test to complete + + + + Asserts on Directories + + + + + The Equals method throws an InvalidOperationException. This is done + to make sure there is no mistake by calling this function. + + + + + + + override the default ReferenceEquals to throw an InvalidOperationException. This + implementation makes sure there is no mistake in calling this function + as part of Assert. + + + + + + + Verifies that two directories are equal. Two directories are considered + equal if both are null, or if both point to the same directory. + If they are not equal an is thrown. + + A directory containing the value that is expected + A directory containing the actual value + The message to display if the directories are not equal + Arguments to be used in formatting the message + + + + Verifies that two directories are equal. Two directories are considered + equal if both are null, or if both point to the same directory. + If they are not equal an is thrown. + + A directory containing the value that is expected + A directory containing the actual value + + + + Asserts that two directories are not equal. If they are equal + an is thrown. + + A directory containing the value that is expected + A directory containing the actual value + The message to display if directories are not equal + Arguments to be used in formatting the message + + + + Asserts that two directories are not equal. If they are equal + an is thrown. + + A directory containing the value that is expected + A directory containing the actual value + + + + Asserts that the directory exists. If it does not exist + an is thrown. + + A directory containing the actual value + The message to display if directories are not equal + Arguments to be used in formatting the message + + + + Asserts that the directory exists. If it does not exist + an is thrown. + + A directory containing the actual value + + + + Asserts that the directory exists. If it does not exist + an is thrown. + + The path to a directory containing the actual value + The message to display if directories are not equal + Arguments to be used in formatting the message + + + + Asserts that the directory exists. If it does not exist + an is thrown. + + The path to a directory containing the actual value + + + + Asserts that the directory does not exist. If it does exist + an is thrown. + + A directory containing the actual value + The message to display if directories are not equal + Arguments to be used in formatting the message + + + + Asserts that the directory does not exist. If it does exist + an is thrown. + + A directory containing the actual value + + + + Asserts that the directory does not exist. If it does exist + an is thrown. + + The path to a directory containing the actual value + The message to display if directories are not equal + Arguments to be used in formatting the message + + + + Asserts that the directory does not exist. If it does exist + an is thrown. + + The path to a directory containing the actual value + + + + TestName filter selects tests based on their Name + + + + + Construct a TestNameFilter for a single name + + The name the filter will recognize. + + + + Match a test against a single value. + + + + + Gets the element name + + Element name + + + + The ParameterDataProvider class implements IParameterDataProvider + and hosts one or more individual providers. + + + + + Construct with a collection of individual providers + + + + + Determine whether any data is available for a parameter. + + An IParameterInfo representing one + argument to a parameterized test + True if any data is available, otherwise false. + + + + Return an IEnumerable providing data for use with the + supplied parameter. + + An IParameterInfo representing one + argument to a parameterized test + An IEnumerable providing the required data + + + + ExactCountConstraint applies another constraint to each + item in a collection, succeeding only if a specified + number of items succeed. + + + + + Construct an ExactCountConstraint on top of an existing constraint + + + + + + + Apply the item constraint to each item in the collection, + succeeding only if the expected number of items pass. + + + + + + + Thrown when an assertion failed. + + + + The error message that explains + the reason for the exception + + + The error message that explains + the reason for the exception + The exception that caused the + current exception + + + + Serialization Constructor + + + + + Gets the ResultState provided by this exception + + + + + XmlSerializableConstraint tests whether + an object is serializable in xml format. + + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Returns the string representation of this constraint + + + + + Gets text describing a constraint + + + + Helper routines for working with floating point numbers + + + The floating point comparison code is based on this excellent article: + http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm + + + "ULP" means Unit in the Last Place and in the context of this library refers to + the distance between two adjacent floating point numbers. IEEE floating point + numbers can only represent a finite subset of natural numbers, with greater + accuracy for smaller numbers and lower accuracy for very large numbers. + + + If a comparison is allowed "2 ulps" of deviation, that means the _values are + allowed to deviate by up to 2 adjacent floating point _values, which might be + as low as 0.0000001 for small numbers or as high as 10.0 for large numbers. + + + + + Compares two floating point _values for equality + First floating point value to be compared + Second floating point value t be compared + + Maximum number of representable floating point _values that are allowed to + be between the left and the right floating point _values + + True if both numbers are equal or close to being equal + + + Floating point _values can only represent a finite subset of natural numbers. + For example, the _values 2.00000000 and 2.00000024 can be stored in a float, + but nothing inbetween them. + + + This comparison will count how many possible floating point _values are between + the left and the right number. If the number of possible _values between both + numbers is less than or equal to maxUlps, then the numbers are considered as + being equal. + + + Implementation partially follows the code outlined here: + http://www.anttirt.net/2007/08/19/proper-floating-point-comparisons/ + + + + + Compares two double precision floating point _values for equality + First double precision floating point value to be compared + Second double precision floating point value t be compared + + Maximum number of representable double precision floating point _values that are + allowed to be between the left and the right double precision floating point _values + + True if both numbers are equal or close to being equal + + + Double precision floating point _values can only represent a limited series of + natural numbers. For example, the _values 2.0000000000000000 and 2.0000000000000004 + can be stored in a double, but nothing inbetween them. + + + This comparison will count how many possible double precision floating point + _values are between the left and the right number. If the number of possible + _values between both numbers is less than or equal to maxUlps, then the numbers + are considered as being equal. + + + Implementation partially follows the code outlined here: + http://www.anttirt.net/2007/08/19/proper-floating-point-comparisons/ + + + + + + Reinterprets the memory contents of a floating point value as an integer value + + + Floating point value whose memory contents to reinterpret + + + The memory contents of the floating point value interpreted as an integer + + + + + Reinterprets the memory contents of a double precision floating point + value as an integer value + + + Double precision floating point value whose memory contents to reinterpret + + + The memory contents of the double precision floating point value + interpreted as an integer + + + + + Reinterprets the memory contents of an integer as a floating point value + + Integer value whose memory contents to reinterpret + + The memory contents of the integer value interpreted as a floating point value + + + + + Reinterprets the memory contents of an integer value as a double precision + floating point value + + Integer whose memory contents to reinterpret + + The memory contents of the integer interpreted as a double precision + floating point value + + + + Union of a floating point variable and an integer + + + The union's value as a floating point variable + + + The union's value as an integer + + + The union's value as an unsigned integer + + + Union of a double precision floating point variable and a long + + + The union's value as a double precision floating point variable + + + The union's value as a long + + + The union's value as an unsigned long + + + + EqualityAdapter class handles all equality comparisons + that use an , + or a . + + + + + Compares two objects, returning true if they are equal + + + + + Returns true if the two objects can be compared by this adapter. + The base adapter cannot handle IEnumerables except for strings. + + + + + Returns an that wraps an . + + + + + Returns an that wraps an . + + + + + Returns an EqualityAdapter that uses a predicate function for items comparison. + + + + + + + + + Returns an that wraps an . + + + + + Returns an that wraps an . + + + + + Returns an that wraps a . + + + + + that wraps an . + + + + + Returns true if the two objects can be compared by this adapter. + The base adapter cannot handle IEnumerables except for strings. + + + + + Compares two objects, returning true if they are equal + + + + + Returns true if the two objects can be compared by this adapter. + Generic adapter requires objects of the specified type. + + + + + that wraps an . + + + + + EmptyCollectionConstraint tests whether a collection is empty. + + + + + Check that the collection is empty + + + + + + + The Description of what this constraint tests, for + use in messages and in the ConstraintResult. + + + + + Helper class with properties and methods that supply + a number of constraints used in Asserts. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding only if a specified number of them succeed. + + + + + Returns a new PropertyConstraintExpression, which will either + test for the existence of the named property on the object + being tested or apply any following constraint to that property. + + + + + Returns a new AttributeConstraint checking for the + presence of a particular attribute on an object. + + + + + Returns a new AttributeConstraint checking for the + presence of a particular attribute on an object. + + + + + Returns a constraint that tests two items for equality + + + + + Returns a constraint that tests that two references are the same object + + + + + Returns a constraint that tests whether the + actual value is greater than the supplied argument + + + + + Returns a constraint that tests whether the + actual value is greater than or equal to the supplied argument + + + + + Returns a constraint that tests whether the + actual value is greater than or equal to the supplied argument + + + + + Returns a constraint that tests whether the + actual value is less than the supplied argument + + + + + Returns a constraint that tests whether the + actual value is less than or equal to the supplied argument + + + + + Returns a constraint that tests whether the + actual value is less than or equal to the supplied argument + + + + + Returns a constraint that tests whether the actual + value is of the exact type supplied as an argument. + + + + + Returns a constraint that tests whether the actual + value is of the exact type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is a collection containing the same elements as the + collection supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is a subset of the collection supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is a superset of the collection supplied as an argument. + + + + + Returns a new CollectionContainsConstraint checking for the + presence of a particular object in the collection. + + + + + Returns a new CollectionContainsConstraint checking for the + presence of a particular object in the collection. + + + + + Returns a new ContainsConstraint. This constraint + will, in turn, make use of the appropriate second-level + constraint, depending on the type of the actual argument. + This overload is only used if the item sought is a string, + since any other type implies that we are looking for a + collection member. + + + + + Returns a constraint that succeeds if the actual + value contains the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value contains the substring supplied as an argument. + + + + + Returns a constraint that fails if the actual + value contains the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value starts with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value starts with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value starts with the substring supplied as an argument. + + + + + Returns a constraint that fails if the actual + value starts with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value ends with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value ends with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value ends with the substring supplied as an argument. + + + + + Returns a constraint that fails if the actual + value ends with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value matches the regular expression supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value matches the regular expression supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value matches the regular expression supplied as an argument. + + + + + Returns a constraint that fails if the actual + value matches the pattern supplied as an argument. + + + + + Returns a constraint that tests whether the path provided + is the same as an expected path after canonicalization. + + + + + Returns a constraint that tests whether the path provided + is a subpath of the expected path after canonicalization. + + + + + Returns a constraint that tests whether the path provided + is the same path or under an expected path after canonicalization. + + + + + Returns a constraint that tests whether the actual value falls + within a specified range. + + + + + Returns a ConstraintExpression that negates any + following constraint. + + + + + Returns a ConstraintExpression that negates any + following constraint. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if all of them succeed. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if at least one of them succeeds. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if all of them fail. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Length property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Count property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Message property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the InnerException property of the object being tested. + + + + + Returns a constraint that tests for null + + + + + Returns a constraint that tests for True + + + + + Returns a constraint that tests for False + + + + + Returns a constraint that tests for a positive value + + + + + Returns a constraint that tests for a negative value + + + + + Returns a constraint that tests for equality with zero + + + + + Returns a constraint that tests for NaN + + + + + Returns a constraint that tests for empty + + + + + Returns a constraint that tests whether a collection + contains all unique items. + + + + + Returns a constraint that tests whether an object graph is serializable in binary format. + + + + + Returns a constraint that tests whether an object graph is serializable in xml format. + + + + + Returns a constraint that tests whether a collection is ordered + + + + + BinarySerializableConstraint tests whether + an object is serializable in binary format. + + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Returns the string representation + + + + + The Description of what this constraint tests, for + use in messages and in the ConstraintResult. + + + + + Used on a method, marks the test with a timeout value in milliseconds. + The test will be run in a separate thread and is cancelled if the timeout + is exceeded. Used on a class or assembly, sets the default timeout + for all contained test methods. + + + + + Construct a TimeoutAttribute given a time in milliseconds + + The timeout value in milliseconds + + + + Adding this attribute to a method within a + class makes the method callable from the NUnit test runner. There is a property + called Description which is optional which you can provide a more detailed test + description. This class cannot be inherited. + + + + [TestFixture] + public class Fixture + { + [Test] + public void MethodToTest() + {} + + [Test(Description = "more detailed description")] + public void TestDescriptionMethod() + {} + } + + + + + + Modifies a test by adding a description, if not already set. + + The test to modify + + + + Construct a TestMethod from a given method. + + The method for which a test is to be constructed. + The suite to which the test will be added. + A TestMethod + + + + Descriptive text for this test + + + + + The author of this test + + + + + The type that this test is testing + + + + + Gets or sets the expected result. + + The result. + + + + Returns true if an expected result has been set + + + + + Summary description for SetUICultureAttribute. + + + + + Construct given the name of a culture + + + + + + Marks a test that must run in the STA, causing it + to run in a separate thread if necessary. + + + + + Construct a RequiresSTAAttribute + + + + + Used to mark a field, property or method providing a set of datapoints to + be used in executing any theories within the same fixture that require an + argument of the Type provided. The data source may provide an array of + the required Type or an . + Synonymous with DatapointSourceAttribute. + + + + + TestActionItem represents a single execution of an + ITestAction. It is used to track whether the BeforeTest + method has been called and suppress calling the + AfterTest method if it has not. + + + + + Construct a TestActionItem + + The ITestAction to be included + + + + Run the BeforeTest method of the action and remember that it has been run. + + The test to which the action applies + + + + Run the AfterTest action, but only if the BeforeTest + action was actually run. + + The test to which the action applies + + + + InternalTraceLevel is an enumeration controlling the + level of detailed presented in the internal log. + + + + + Use the default settings as specified by the user. + + + + + Do not display any trace messages + + + + + Display Error messages only + + + + + Display Warning level and higher messages + + + + + Display informational and higher messages + + + + + Display debug messages and higher - i.e. all messages + + + + + Display debug messages and higher - i.e. all messages + + + + + The ParallelScope enumeration permits specifying the degree to + which a test and its descendants may be run in parallel. + + + + + No Parallelism is permitted + + + + + The test itself may be run in parallel with others at the same level + + + + + Descendants of the test may be run in parallel with one another + + + + + Descendants of the test down to the level of TestFixtures may be run in parallel + + + + + ListMapper is used to transform a collection used as an actual argument + producing another collection to be used in the assertion. + + + + + Construct a ListMapper based on a collection + + The collection to be transformed + + + + Produces a collection containing all the _values of a property + + The collection of property _values + + + + + The List class is a helper class with properties and methods + that supply a number of constraints used with lists and collections. + + + + + List.Map returns a ListMapper, which can be used to map + the original collection to another collection. + + + + + + + TestAssembly is a TestSuite that represents the execution + of tests in a managed assembly. + + + + + Initializes a new instance of the class + specifying the Assembly and the path from which it was loaded. + + The assembly this test represents. + The path used to load the assembly. + + + + Initializes a new instance of the class + for a path which could not be loaded. + + The path used to load the assembly. + + + + Gets the Assembly represented by this instance. + + + + + Gets the name used for the top-level element in the + XML representation of this test + + + + + SetUpFixture extends TestSuite and supports + Setup and TearDown methods. + + + + + Initializes a new instance of the class. + + The type. + + + + TrueConstraint tests that the actual value is true + + + + + Initializes a new instance of the class. + + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + The Tolerance class generalizes the notion of a tolerance + within which an equality test succeeds. Normally, it is + used with numeric types, but it can be used with any + type that supports taking a difference between two + objects and comparing that difference to a value. + + + + + Constructs a linear tolerance of a specified amount + + + + + Constructs a tolerance given an amount and + + + + + Tests that the current Tolerance is linear with a + numeric value, throwing an exception if it is not. + + + + + Returns a default Tolerance object, equivalent to + specifying an exact match unless + is set, in which case, the + will be used. + + + + + Returns an empty Tolerance object, equivalent to + specifying an exact match even if + is set. + + + + + Gets the for the current Tolerance + + + + + Gets the value of the current Tolerance instance. + + + + + Returns a new tolerance, using the current amount as a percentage. + + + + + Returns a new tolerance, using the current amount in Ulps + + + + + Returns a new tolerance with a as the amount, using + the current amount as a number of days. + + + + + Returns a new tolerance with a as the amount, using + the current amount as a number of hours. + + + + + Returns a new tolerance with a as the amount, using + the current amount as a number of minutes. + + + + + Returns a new tolerance with a as the amount, using + the current amount as a number of seconds. + + + + + Returns a new tolerance with a as the amount, using + the current amount as a number of milliseconds. + + + + + Returns a new tolerance with a as the amount, using + the current amount as a number of clock ticks. + + + + + Returns true if the current tolerance has not been set or is using the . + + + + + StartsWithConstraint can test whether a string starts + with an expected substring. + + + + + Initializes a new instance of the class. + + The expected string + + + + Test whether the constraint is matched by the actual value. + This is a template method, which calls the IsMatch method + of the derived class. + + + + + + + Operator that tests that an exception is thrown and + optionally applies further tests to the exception. + + + + + Construct a ThrowsOperator + + + + + Reduce produces a constraint from the operator and + any arguments. It takes the arguments from the constraint + stack and pushes the resulting constraint on it. + + + + + ConstraintExpression represents a compound constraint in the + process of being constructed from a series of syntactic elements. + + Individual elements are appended to the expression as they are + reorganized. When a constraint is appended, it is returned as the + value of the operation so that modifiers may be applied. However, + any partially built expression is attached to the constraint for + later resolution. When an operator is appended, the partial + expression is returned. If it's a self-resolving operator, then + a ResolvableConstraintExpression is returned. + + + + + The ConstraintBuilder holding the elements recognized so far + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the + class passing in a ConstraintBuilder, which may be pre-populated. + + The builder. + + + + Returns a string representation of the expression as it + currently stands. This should only be used for testing, + since it has the side-effect of resolving the expression. + + + + + + Appends an operator to the expression and returns the + resulting expression itself. + + + + + Appends a self-resolving operator to the expression and + returns a new ResolvableConstraintExpression. + + + + + Appends a constraint to the expression and returns that + constraint, which is associated with the current state + of the expression being built. Note that the constraint + is not reduced at this time. For example, if there + is a NotOperator on the stack we don't reduce and + return a NotConstraint. The original constraint must + be returned because it may support modifiers that + are yet to be applied. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding only if a specified number of them succeed. + + + + + Returns a new PropertyConstraintExpression, which will either + test for the existence of the named property on the object + being tested or apply any following constraint to that property. + + + + + Returns a new AttributeConstraint checking for the + presence of a particular attribute on an object. + + + + + Returns a new AttributeConstraint checking for the + presence of a particular attribute on an object. + + + + + Returns the constraint provided as an argument - used to allow custom + custom constraints to easily participate in the syntax. + + + + + Returns the constraint provided as an argument - used to allow custom + custom constraints to easily participate in the syntax. + + + + + Returns a constraint that tests two items for equality + + + + + Returns a constraint that tests that two references are the same object + + + + + Returns a constraint that tests whether the + actual value is greater than the supplied argument + + + + + Returns a constraint that tests whether the + actual value is greater than or equal to the supplied argument + + + + + Returns a constraint that tests whether the + actual value is greater than or equal to the supplied argument + + + + + Returns a constraint that tests whether the + actual value is less than the supplied argument + + + + + Returns a constraint that tests whether the + actual value is less than or equal to the supplied argument + + + + + Returns a constraint that tests whether the + actual value is less than or equal to the supplied argument + + + + + Returns a constraint that tests whether the actual + value is of the exact type supplied as an argument. + + + + + Returns a constraint that tests whether the actual + value is of the exact type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is a collection containing the same elements as the + collection supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is a subset of the collection supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is a superset of the collection supplied as an argument. + + + + + Returns a new CollectionContainsConstraint checking for the + presence of a particular object in the collection. + + + + + Returns a new CollectionContainsConstraint checking for the + presence of a particular object in the collection. + + + + + Returns a new ContainsConstraint. This constraint + will, in turn, make use of the appropriate second-level + constraint, depending on the type of the actual argument. + This overload is only used if the item sought is a string, + since any other type implies that we are looking for a + collection member. + + + + + Returns a new ContainsConstraint. This constraint + will, in turn, make use of the appropriate second-level + constraint, depending on the type of the actual argument. + This overload is only used if the item sought is a string, + since any other type implies that we are looking for a + collection member. + + + + + Returns a constraint that succeeds if the actual + value contains the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value contains the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value starts with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value starts with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value starts with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value ends with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value ends with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value ends with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value matches the regular expression supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value matches the regular expression supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value matches the regular expression supplied as an argument. + + + + + Returns a constraint that tests whether the path provided + is the same as an expected path after canonicalization. + + + + + Returns a constraint that tests whether the path provided + is the a subpath of the expected path after canonicalization. + + + + + Returns a constraint that tests whether the path provided + is the same path or under an expected path after canonicalization. + + + + + Returns a constraint that tests whether the actual value falls + within a specified range. + + + + + Returns a ConstraintExpression that negates any + following constraint. + + + + + Returns a ConstraintExpression that negates any + following constraint. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if all of them succeed. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if at least one of them succeeds. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if all of them fail. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Length property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Count property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Message property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the InnerException property of the object being tested. + + + + + With is currently a NOP - reserved for future use. + + + + + Returns a constraint that tests for null + + + + + Returns a constraint that tests for True + + + + + Returns a constraint that tests for False + + + + + Returns a constraint that tests for a positive value + + + + + Returns a constraint that tests for a negative value + + + + + Returns a constraint that tests if item is equal to zero + + + + + Returns a constraint that tests for NaN + + + + + Returns a constraint that tests for empty + + + + + Returns a constraint that tests whether a collection + contains all unique items. + + + + + Returns a constraint that tests whether an object graph is serializable in binary format. + + + + + Returns a constraint that tests whether an object graph is serializable in xml format. + + + + + Returns a constraint that tests whether a collection is ordered + + + + + Returns a constraint that succeeds if the value + is a file or directory and it exists. + + + + + Attribute used to apply a category to a test + + + + + The name of the category + + + + + Construct attribute for a given category based on + a name. The name may not contain the characters ',', + '+', '-' or '!'. However, this is not checked in the + constructor since it would cause an error to arise at + as the test was loaded without giving a clear indication + of where the problem is located. The error is handled + in NUnitFramework.cs by marking the test as not + runnable. + + The name of the category + + + + Protected constructor uses the Type name as the name + of the category. + + + + + Modifies a test by adding a category to it. + + The test to modify + + + + The name of the category + + + + + IdFilter selects tests based on their id + + + + + Construct an IdFilter for a single value + + The id the filter will recognize. + + + + Match a test against a single value. + + + + + Gets the element name + + Element name + + + + Represents a constraint that succeeds if none of the + members of a collection match a base constraint. + + + + + Returns a constraint that will apply the argument + to the members of a collection, succeeding if + none of them succeed. + + + + + Indicates which class the test or test fixture is testing + + + + + Initializes a new instance of the class. + + The type that is being tested. + + + + Initializes a new instance of the class. + + The type that is being tested. + + + + Defines the order that the test will run in + + + + + Defines the order that the test will run in + + + + + Defines the order that the test will run in + + + + + + Modifies a test as defined for the specific attribute. + + The test to modify + + + + SingleThreadedAttribute applies to a test fixture and indicates + that all the child tests must be run on the same thread as the + OneTimeSetUp and OneTimeTearDown. It sets a flag in the + TestExecutionContext and forces all tests to be run sequentially + on the current thread. Any ParallelScope setting is ignored. + + + + + Apply changes to the TestExecutionContext + + The TestExecutionContext + + + + FrameworkPackageSettings is a static class containing constant values that + are used as keys in setting up a TestPackage. These values are used in + the framework, and set in the runner. Setting values may be a string, int or bool. + + + + + Flag (bool) indicating whether tests are being debugged. + + + + + Flag (bool) indicating whether to pause execution of tests to allow + the user to attache a debugger. + + + + + The InternalTraceLevel for this run. Values are: "Default", + "Off", "Error", "Warning", "Info", "Debug", "Verbose". + Default is "Off". "Debug" and "Verbose" are synonyms. + + + + + Full path of the directory to be used for work and result files. + This path is provided to tests by the frameowrk TestContext. + + + + + Integer value in milliseconds for the default timeout value + for test cases. If not specified, there is no timeout except + as specified by attributes on the tests themselves. + + + + + A TextWriter to which the internal trace will be sent. + + + + + A list of tests to be loaded. + + + + + The number of test threads to run for the assembly. If set to + 1, a single queue is used. If set to 0, tests are executed + directly, without queuing. + + + + + The random seed to be used for this assembly. If specified + as the value reported from a prior run, the framework should + generate identical random values for tests as were used for + that run, provided that no change has been made to the test + assembly. Default is a random value itself. + + + + + If true, execution stops after the first error or failure. + + + + + If true, use of the event queue is suppressed and test events are synchronous. + + + + + The default naming pattern used in generating test names + + + + + Parameters to be passed on to the test + + + + + Represents a constraint that succeeds if the specified + count of members of a collection match a base constraint. + + + + + Construct an ExactCountOperator for a specified count + + The expected count + + + + Returns a constraint that will apply the argument + to the members of a collection, succeeding if + none of them succeed. + + + + + ParameterizedFixtureSuite serves as a container for the set of test + fixtures created from a given Type using various parameters. + + + + + Initializes a new instance of the class. + + The ITypeInfo for the type that represents the suite. + + + + Gets a string representing the type of test + + + + + + ReusableConstraint wraps a constraint expression after + resolving it so that it can be reused consistently. + + + + + Construct a ReusableConstraint from a constraint expression + + The expression to be resolved and reused + + + + Converts a constraint to a ReusableConstraint + + The constraint to be converted + A ReusableConstraint + + + + Returns a that represents this instance. + + + A that represents this instance. + + + + + Return the top-level constraint for this expression + + + + + + PropertyExistsConstraint tests that a named property + exists on the object provided through Match. + + Originally, PropertyConstraint provided this feature + in addition to making optional tests on the value + of the property. The two constraints are now separate. + + + + + Initializes a new instance of the class. + + The name of the property. + + + + Test whether the property exists for a given object + + The object to be tested + True for success, false for failure + + + + Returns the string representation of the constraint. + + + + + + The Description of what this constraint tests, for + use in messages and in the ConstraintResult. + + + + + PropertyConstraint extracts a named property and uses + its value as the actual value for a chained constraint. + + + + + Initializes a new instance of the class. + + The name. + The constraint to apply to the property. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Returns the string representation of the constraint. + + + + + + Represents a constraint that simply wraps the + constraint provided as an argument, without any + further functionality, but which modifies the + order of evaluation because of its precedence. + + + + + Constructor for the WithOperator + + + + + Returns a constraint that wraps its argument + + + + + NUnitComparer encapsulates NUnit's default behavior + in comparing two objects. + + + + + Compares two objects + + + + + + + + Returns the default NUnitComparer. + + + + + Tests whether a value is less than or equal to the value supplied to its constructor + + + + + Initializes a new instance of the class. + + The expected value. + + + + Attribute used to identify a method that is + called before any tests in a fixture are run. + + + + + Used to mark a field for use as a datapoint when executing a theory + within the same fixture that requires an argument of the field's Type. + + + + + AssertionHelper is an optional base class for user tests, + allowing the use of shorter ids for constraints and + asserts and avoiding conflict with the definition of + , from which it inherits much of its + behavior, in certain mock object frameworks. + + + + + Asserts that a condition is true. If the condition is false the method throws + an . Works Identically to + . + + The evaluated condition + The message to display if the condition is false + Arguments to be used in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . Works Identically to . + + The evaluated condition + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint expression to be applied + An ActualValueDelegate returning the value to be tested + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + An ActualValueDelegate returning the value to be tested + A Constraint expression to be applied + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that the code represented by a delegate throws an exception + that satisfies the constraint provided. + + A TestDelegate to be executed + A ThrowsConstraint used in the test + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint to be applied + The actual value to test + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint expression to be applied + The actual value to test + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Returns a ListMapper based on a collection. + + The original collection + + + + + TextMessageWriter writes constraint descriptions and messages + in displayable form as a text stream. It tailors the display + of individual message components to form the standard message + format of NUnit assertion failure messages. + + + + + Prefix used for the expected value line of a message + + + + + Prefix used for the actual value line of a message + + + + + Length of a message prefix + + + + + Construct a TextMessageWriter + + + + + Construct a TextMessageWriter, specifying a user message + and optional formatting arguments. + + + + + + + Method to write single line message with optional args, usually + written to precede the general failure message, at a given + indentation level. + + The indentation level of the message + The message to be written + Any arguments used in formatting the message + + + + Display Expected and Actual lines for a constraint. This + is called by MessageWriter's default implementation of + WriteMessageTo and provides the generic two-line display. + + The result of the constraint that failed + + + + Display Expected and Actual lines for given _values. This + method may be called by constraints that need more control over + the display of actual and expected _values than is provided + by the default implementation. + + The expected value + The actual value causing the failure + + + + Display Expected and Actual lines for given _values, including + a tolerance value on the expected line. + + The expected value + The actual value causing the failure + The tolerance within which the test was made + + + + Display the expected and actual string _values on separate lines. + If the mismatch parameter is >=0, an additional line is displayed + line containing a caret that points to the mismatch point. + + The expected string value + The actual string value + The point at which the strings don't match or -1 + If true, case is ignored in string comparisons + If true, clip the strings to fit the max line length + + + + Writes the text for an actual value. + + The actual value. + + + + Writes the text for a generalized value. + + The value. + + + + Writes the text for a collection value, + starting at a particular point, to a max length + + The collection containing elements to write. + The starting point of the elements to write + The maximum number of elements to write + + + + Write the generic 'Expected' line for a constraint + + The constraint that failed + + + + Write the generic 'Expected' line for a given value + + The expected value + + + + Write the generic 'Expected' line for a given value + and tolerance. + + The expected value + The tolerance within which the test was made + + + + Write the generic 'Actual' line for a constraint + + The ConstraintResult for which the actual value is to be written + + + + Write the generic 'Actual' line for a given value + + The actual value causing a failure + + + + Gets or sets the maximum line length for this writer + + + + + EventListenerTextWriter sends text output to the currently active + ITestEventListener in the form of a TestOutput object. If no event + listener is active in the contet, or if there is no context, + the output is forwarded to the supplied default writer. + + + + + Construct an EventListenerTextWriter + + The name of the stream to use for events + The default writer to use if no listener is available + + + + Write a single char + + + + + Write a string + + + + + Write a string followed by a newline + + + + + Get the Encoding for this TextWriter + + + + + CollectionSupersetConstraint is used to determine whether + one collection is a superset of another + + + + + Construct a CollectionSupersetConstraint + + The collection that the actual value is expected to be a superset of + + + + Test whether the actual collection is a superset of + the expected collection provided. + + + + + + + Flag the constraint to use the supplied predicate function + + The comparison function to use. + Self. + + + + The display name of this Constraint for use by ToString(). + The default value is the name of the constraint with + trailing "Constraint" removed. Derived classes may set + this to another name in their constructors. + + + + + The Description of what this constraint tests, for + use in messages and in the ConstraintResult. + + + + + ParameterizedMethodSuite holds a collection of individual + TestMethods with their arguments applied. + + + + + Construct from a MethodInfo + + + + + + Gets a string representing the type of test + + + + + + OSPlatform represents a particular operating system platform + + + + + Platform ID for Unix as defined by Microsoft .NET 2.0 and greater + + + + + Platform ID for Unix as defined by Mono + + + + + Platform ID for XBox as defined by .NET and Mono, but not CF + + + + + Platform ID for MacOSX as defined by .NET and Mono, but not CF + + + + + Gets the actual OS Version, not the incorrect value that might be + returned for Win 8.1 and Win 10 + + + If an application is not manifested as Windows 8.1 or Windows 10, + the version returned from Environment.OSVersion will not be 6.3 and 10.0 + respectively, but will be 6.2 and 6.3. The correct value can be found in + the registry. + + The original version + The correct OS version + + + + Construct from a platform ID and version + + + + + Construct from a platform ID, version and product type + + + + + Get the OSPlatform under which we are currently running + + + + + Get the platform ID of this instance + + + + + Get the Version of this instance + + + + + Get the Product Type of this instance + + + + + Return true if this is a windows platform + + + + + Return true if this is a Unix or Linux platform + + + + + Return true if the platform is Win32S + + + + + Return true if the platform is Win32Windows + + + + + Return true if the platform is Win32NT + + + + + Return true if the platform is Windows CE + + + + + Return true if the platform is Xbox + + + + + Return true if the platform is MacOSX + + + + + Return true if the platform is Windows 95 + + + + + Return true if the platform is Windows 98 + + + + + Return true if the platform is Windows ME + + + + + Return true if the platform is NT 3 + + + + + Return true if the platform is NT 4 + + + + + Return true if the platform is NT 5 + + + + + Return true if the platform is Windows 2000 + + + + + Return true if the platform is Windows XP + + + + + Return true if the platform is Windows 2003 Server + + + + + Return true if the platform is NT 6 + + + + + Return true if the platform is NT 6.0 + + + + + Return true if the platform is NT 6.1 + + + + + Return true if the platform is NT 6.2 + + + + + Return true if the platform is NT 6.3 + + + + + Return true if the platform is Vista + + + + + Return true if the platform is Windows 2008 Server (original or R2) + + + + + Return true if the platform is Windows 2008 Server (original) + + + + + Return true if the platform is Windows 2008 Server R2 + + + + + Return true if the platform is Windows 2012 Server (original or R2) + + + + + Return true if the platform is Windows 2012 Server (original) + + + + + Return true if the platform is Windows 2012 Server R2 + + + + + Return true if the platform is Windows 7 + + + + + Return true if the platform is Windows 8 + + + + + Return true if the platform is Windows 8.1 + + + + + Return true if the platform is Windows 10 + + + + + Return true if the platform is Windows Server. This is named Windows + Server 10 to distinguish it from previous versions of Windows Server. + + + + + Product Type Enumeration used for Windows + + + + + Product type is unknown or unspecified + + + + + Product type is Workstation + + + + + Product type is Domain Controller + + + + + Product type is Server + + + + + Combines multiple filters so that a test must pass one + of them in order to pass this filter. + + + + + Constructs an empty OrFilter + + + + + Constructs an AndFilter from an array of filters + + + + + + Checks whether the OrFilter is matched by a test + + The test to be matched + True if any of the component filters pass, otherwise false + + + + Checks whether the OrFilter is matched by a test + + The test to be matched + True if any of the component filters match, otherwise false + + + + Checks whether the OrFilter is explicit matched by a test + + The test to be matched + True if any of the component filters explicit match, otherwise false + + + + Gets the element name + + Element name + + + + InstanceOfTypeConstraint is used to test that an object + is of the same type provided or derived from it. + + + + + Construct an InstanceOfTypeConstraint for the type provided + + The expected Type + + + + Apply the constraint to an actual value, returning true if it succeeds + + The actual argument + True if the constraint succeeds, otherwise false. + + + + The display name of this Constraint for use by ToString(). + The default value is the name of the constraint with + trailing "Constraint" removed. Derived classes may set + this to another name in their constructors. + + + + + Tests whether a value is greater than the value supplied to its constructor + + + + + Initializes a new instance of the class. + + The expected value. + + + + DictionaryContainsKeyConstraint is used to test whether a dictionary + contains an expected object as a key. + + + + + Construct a DictionaryContainsKeyConstraint + + + + + + Test whether the expected key is contained in the dictionary + + + + + The display name of this Constraint for use by ToString(). + The default value is the name of the constraint with + trailing "Constraint" removed. Derived classes may set + this to another name in their constructors. + + + + + The Description of what this constraint tests, for + use in messages and in the ConstraintResult. + + + + + ContainsConstraint tests a whether a string contains a substring + or a collection contains an object. It postpones the decision of + which test to use until the type of the actual argument is known. + This allows testing whether a string is contained in a collection + or as a substring of another string using the same syntax. + + + + + Initializes a new instance of the class. + + The _expected. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + The Description of what this constraint tests, for + use in messages and in the ConstraintResult. + + + + + Flag the constraint to ignore case and return self. + + + + + CollectionTally counts (tallies) the number of + occurrences of each object in one or more enumerations. + + + + + Construct a CollectionTally object from a comparer and a collection + + + + + Try to remove an object from the tally + + The object to remove + True if successful, false if the object was not found + + + + Try to remove a set of objects from the tally + + The objects to remove + True if successful, false if any object was not found + + + + The number of objects remaining in the tally + + + + + AllItemsConstraint applies another constraint to each + item in a collection, succeeding if they all succeed. + + + + + Construct an AllItemsConstraint on top of an existing constraint + + + + + + Apply the item constraint to each item in the collection, + failing if any item fails. + + + + + + + The display name of this Constraint for use by ToString(). + The default value is the name of the constraint with + trailing "Constraint" removed. Derived classes may set + this to another name in their constructors. + + + + + A set of Assert methods operating on one or more collections + + + + + The Equals method throws an InvalidOperationException. This is done + to make sure there is no mistake by calling this function. + + + + + + + override the default ReferenceEquals to throw an InvalidOperationException. This + implementation makes sure there is no mistake in calling this function + as part of Assert. + + + + + + + Asserts that all items contained in collection are of the type specified by expectedType. + + IEnumerable containing objects to be considered + System.Type that all objects in collection must be instances of + + + + Asserts that all items contained in collection are of the type specified by expectedType. + + IEnumerable containing objects to be considered + System.Type that all objects in collection must be instances of + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that all items contained in collection are not equal to null. + + IEnumerable containing objects to be considered + + + + Asserts that all items contained in collection are not equal to null. + + IEnumerable of objects to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Ensures that every object contained in collection exists within the collection + once and only once. + + IEnumerable of objects to be considered + + + + Ensures that every object contained in collection exists within the collection + once and only once. + + IEnumerable of objects to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that expected and actual are exactly equal. The collections must have the same count, + and contain the exact same objects in the same order. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + + + + Asserts that expected and actual are exactly equal. The collections must have the same count, + and contain the exact same objects in the same order. + If comparer is not null then it will be used to compare the objects. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The IComparer to use in comparing objects from each IEnumerable + + + + Asserts that expected and actual are exactly equal. The collections must have the same count, + and contain the exact same objects in the same order. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that expected and actual are exactly equal. The collections must have the same count, + and contain the exact same objects in the same order. + If comparer is not null then it will be used to compare the objects. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The IComparer to use in comparing objects from each IEnumerable + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that expected and actual are equivalent, containing the same objects but the match may be in any order. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + + + + Asserts that expected and actual are equivalent, containing the same objects but the match may be in any order. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that expected and actual are not exactly equal. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + + + + Asserts that expected and actual are not exactly equal. + If comparer is not null then it will be used to compare the objects. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The IComparer to use in comparing objects from each IEnumerable + + + + Asserts that expected and actual are not exactly equal. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that expected and actual are not exactly equal. + If comparer is not null then it will be used to compare the objects. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The IComparer to use in comparing objects from each IEnumerable + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that expected and actual are not equivalent. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + + + + Asserts that expected and actual are not equivalent. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that collection contains actual as an item. + + IEnumerable of objects to be considered + Object to be found within collection + + + + Asserts that collection contains actual as an item. + + IEnumerable of objects to be considered + Object to be found within collection + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that collection does not contain actual as an item. + + IEnumerable of objects to be considered + Object that cannot exist within collection + + + + Asserts that collection does not contain actual as an item. + + IEnumerable of objects to be considered + Object that cannot exist within collection + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that the superset does not contain the subset + + The IEnumerable subset to be considered + The IEnumerable superset to be considered + + + + Asserts that the superset does not contain the subset + + The IEnumerable subset to be considered + The IEnumerable superset to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that the superset contains the subset. + + The IEnumerable subset to be considered + The IEnumerable superset to be considered + + + + Asserts that the superset contains the subset. + + The IEnumerable subset to be considered + The IEnumerable superset to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that the subset does not contain the superset + + The IEnumerable superset to be considered + The IEnumerable subset to be considered + + + + Asserts that the subset does not contain the superset + + The IEnumerable superset to be considered + The IEnumerable subset to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that the subset contains the superset. + + The IEnumerable superset to be considered + The IEnumerable subset to be considered + + + + Asserts that the subset contains the superset. + + The IEnumerable superset to be considered + The IEnumerable subset to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Assert that an array, list or other collection is empty + + An array, list or other collection implementing IEnumerable + The message to be displayed on failure + Arguments to be used in formatting the message + + + + Assert that an array,list or other collection is empty + + An array, list or other collection implementing IEnumerable + + + + Assert that an array, list or other collection is empty + + An array, list or other collection implementing IEnumerable + The message to be displayed on failure + Arguments to be used in formatting the message + + + + Assert that an array,list or other collection is empty + + An array, list or other collection implementing IEnumerable + + + + Assert that an array, list or other collection is ordered + + An array, list or other collection implementing IEnumerable + The message to be displayed on failure + Arguments to be used in formatting the message + + + + Assert that an array, list or other collection is ordered + + An array, list or other collection implementing IEnumerable + + + + Assert that an array, list or other collection is ordered + + An array, list or other collection implementing IEnumerable + A custom comparer to perform the comparisons + The message to be displayed on failure + Arguments to be used in formatting the message + + + + Assert that an array, list or other collection is ordered + + An array, list or other collection implementing IEnumerable + A custom comparer to perform the comparisons + + + + TestCaseSourceAttribute indicates the source to be used to + provide test cases for a test method. + + + + + Construct with the name of the method, property or field that will provide data + + The name of a static method, property or field that will provide data. + + + + Construct with a Type and name + + The Type that will provide data + The name of a static method, property or field that will provide data. + A set of parameters passed to the method, works only if the Source Name is a method. + If the source name is a field or property has no effect. + + + + Construct with a Type and name + + The Type that will provide data + The name of a static method, property or field that will provide data. + + + + Construct with a Type + + The type that will provide data + + + + Construct one or more TestMethods from a given MethodInfo, + using available parameter data. + + The IMethod for which tests are to be constructed. + The suite to which the tests will be added. + One or more TestMethods + + + + Returns a set of ITestCaseDataItems for use as arguments + to a parameterized test method. + + The method for which data is needed. + + + + + A set of parameters passed to the method, works only if the Source Name is a method. + If the source name is a field or property has no effect. + + + + + The name of a the method, property or fiend to be used as a source + + + + + A Type to be used as a source + + + + + Gets or sets the category associated with every fixture created from + this attribute. May be a single category or a comma-separated list. + + + + + TestMethodCommand is the lowest level concrete command + used to run actual test cases. + + + + + Initializes a new instance of the class. + + The test. + + + + Runs the test, saving a TestResult in the execution context, as + well as returning it. If the test has an expected result, it + is asserts on that value. Since failed tests and errors throw + an exception, this command must be wrapped in an outer command, + will handle that exception and records the failure. This role + is usually played by the SetUpTearDown command. + + The execution context + + + + SetUpTearDownCommand runs any SetUp methods for a suite, + runs the test and then runs any TearDown methods. + + + + + Initializes a new instance of the class. + + The inner command. + + + + Runs the test, saving a TestResult in the supplied TestExecutionContext. + + The context in which the test should run. + A TestResult + + + + SetUpTearDownItem holds the setup and teardown methods + for a single level of the inheritance hierarchy. + + + + + Construct a SetUpTearDownNode + + A list of setup methods for this level + A list teardown methods for this level + + + + Run SetUp on this level. + + The execution context to use for running. + + + + Run TearDown for this level. + + + + + + Returns true if this level has any methods at all. + This flag is used to discard levels that do nothing. + + + + + Class used to guard against unexpected argument values + or operations by throwing an appropriate exception. + + + + + Throws an exception if an argument is null + + The value to be tested + The name of the argument + + + + Throws an exception if a string argument is null or empty + + The value to be tested + The name of the argument + + + + Throws an ArgumentOutOfRangeException if the specified condition is not met. + + The condition that must be met + The exception message to be used + The name of the argument + + + + Throws an ArgumentException if the specified condition is not met. + + The condition that must be met + The exception message to be used + The name of the argument + + + + Throws an InvalidOperationException if the specified condition is not met. + + The condition that must be met + The exception message to be used + + + + SubPathConstraint tests that the actual path is under the expected path + + + + + Initializes a new instance of the class. + + The expected path + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + The Description of what this constraint tests, for + use in messages and in the ConstraintResult. + + + + + ParallelizableAttribute is used to mark tests that may be run in parallel. + + + + + Construct a ParallelizableAttribute using default ParallelScope.Self. + + + + + Construct a ParallelizableAttribute with a specified scope. + + The ParallelScope associated with this attribute. + + + + Modify the context to be used for child tests + + The current TestExecutionContext + + + + Helper class with properties and methods that supply + constraints that operate on exceptions. + + + + + Creates a constraint specifying the exact type of exception expected + + + + + Creates a constraint specifying the exact type of exception expected + + + + + Creates a constraint specifying the type of exception expected + + + + + Creates a constraint specifying the type of exception expected + + + + + Creates a constraint specifying an expected exception + + + + + Creates a constraint specifying an exception with a given InnerException + + + + + Creates a constraint specifying an expected TargetInvocationException + + + + + Creates a constraint specifying an expected ArgumentException + + + + + Creates a constraint specifying an expected ArgumentNUllException + + + + + Creates a constraint specifying an expected InvalidOperationException + + + + + Creates a constraint specifying that no exception is thrown + + + + + Enumeration identifying a common language + runtime implementation. + + + + Any supported runtime framework + + + Microsoft .NET Framework + + + Microsoft .NET Compact Framework + + + Microsoft Shared Source CLI + + + Mono + + + Silverlight + + + MonoTouch + + + + RuntimeFramework represents a particular version + of a common language runtime implementation. + + + + + DefaultVersion is an empty Version, used to indicate that + NUnit should select the CLR version to use for the test. + + + + + Construct from a runtime type and version. If the version has + two parts, it is taken as a framework version. If it has three + or more, it is taken as a CLR version. In either case, the other + version is deduced based on the runtime type and provided version. + + The runtime type of the framework + The version of the framework + + + + Parses a string representing a RuntimeFramework. + The string may be just a RuntimeType name or just + a Version or a hyphenated RuntimeType-Version or + a Version prefixed by 'versionString'. + + + + + + + Overridden to return the short name of the framework + + + + + + Returns true if the current framework matches the + one supplied as an argument. Two frameworks match + if their runtime types are the same or either one + is RuntimeType.Any and all specified version components + are equal. Negative (i.e. unspecified) version + components are ignored. + + The RuntimeFramework to be matched. + True on match, otherwise false + + + + Static method to return a RuntimeFramework object + for the framework that is currently in use. + + + + + The type of this runtime framework + + + + + The framework version for this runtime framework + + + + + The CLR version for this runtime framework + + + + + Return true if any CLR version may be used in + matching this RuntimeFramework object. + + + + + Returns the Display name for this framework + + + + + CategoryFilter is able to select or exclude tests + based on their categories. + + + + + + Construct a CategoryFilter using a single category name + + A category name + + + + Check whether the filter matches a test + + The test to be matched + + + + + Gets the element name + + Element name + + + + GlobalSettings is a place for setting default values used + by the framework in performing asserts. Anything set through + this class applies to the entire test run. It should not normally + be used from within a test, since it is not thread-safe. + + + + + Default tolerance for floating point equality + + + + + Asserts on Files + + + + + The Equals method throws an InvalidOperationException. This is done + to make sure there is no mistake by calling this function. + + + + + + + override the default ReferenceEquals to throw an InvalidOperationException. This + implementation makes sure there is no mistake in calling this function + as part of Assert. + + + + + + + Verifies that two Streams are equal. Two Streams are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + The expected Stream + The actual Stream + The message to display if Streams are not equal + Arguments to be used in formatting the message + + + + Verifies that two Streams are equal. Two Streams are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + The expected Stream + The actual Stream + + + + Verifies that two files are equal. Two files are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + A file containing the value that is expected + A file containing the actual value + The message to display if Streams are not equal + Arguments to be used in formatting the message + + + + Verifies that two files are equal. Two files are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + A file containing the value that is expected + A file containing the actual value + + + + Verifies that two files are equal. Two files are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + The path to a file containing the value that is expected + The path to a file containing the actual value + The message to display if Streams are not equal + Arguments to be used in formatting the message + + + + Verifies that two files are equal. Two files are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + The path to a file containing the value that is expected + The path to a file containing the actual value + + + + Asserts that two Streams are not equal. If they are equal + an is thrown. + + The expected Stream + The actual Stream + The message to be displayed when the two Stream are the same. + Arguments to be used in formatting the message + + + + Asserts that two Streams are not equal. If they are equal + an is thrown. + + The expected Stream + The actual Stream + + + + Asserts that two files are not equal. If they are equal + an is thrown. + + A file containing the value that is expected + A file containing the actual value + The message to display if Streams are not equal + Arguments to be used in formatting the message + + + + Asserts that two files are not equal. If they are equal + an is thrown. + + A file containing the value that is expected + A file containing the actual value + + + + Asserts that two files are not equal. If they are equal + an is thrown. + + The path to a file containing the value that is expected + The path to a file containing the actual value + The message to display if Streams are not equal + Arguments to be used in formatting the message + + + + Asserts that two files are not equal. If they are equal + an is thrown. + + The path to a file containing the value that is expected + The path to a file containing the actual value + + + + Asserts that the file exists. If it does not exist + an is thrown. + + A file containing the actual value + The message to display if Streams are not equal + Arguments to be used in formatting the message + + + + Asserts that the file exists. If it does not exist + an is thrown. + + A file containing the actual value + + + + Asserts that the file exists. If it does not exist + an is thrown. + + The path to a file containing the actual value + The message to display if Streams are not equal + Arguments to be used in formatting the message + + + + Asserts that the file exists. If it does not exist + an is thrown. + + The path to a file containing the actual value + + + + Asserts that the file does not exist. If it does exist + an is thrown. + + A file containing the actual value + The message to display if Streams are not equal + Arguments to be used in formatting the message + + + + Asserts that the file does not exist. If it does exist + an is thrown. + + A file containing the actual value + + + + Asserts that the file does not exist. If it does exist + an is thrown. + + The path to a file containing the actual value + The message to display if Streams are not equal + Arguments to be used in formatting the message + + + + Asserts that the file does not exist. If it does exist + an is thrown. + + The path to a file containing the actual value + + + + Thrown when an assertion failed. + + + + + + + The error message that explains + the reason for the exception + The exception that caused the + current exception + + + + Serialization Constructor + + + + + Gets the ResultState provided by this exception + + + + + SomeItemsConstraint applies another constraint to each + item in a collection, succeeding if any of them succeeds. + + + + + Construct a SomeItemsConstraint on top of an existing constraint + + + + + + Apply the item constraint to each item in the collection, + succeeding if any item succeeds. + + + + + + + The display name of this Constraint for use by ToString(). + The default value is the name of the constraint with + trailing "Constraint" removed. Derived classes may set + this to another name in their constructors. + + + + + SameAsConstraint tests whether an object is identical to + the object passed to its constructor + + + + + Initializes a new instance of the class. + + The expected object. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + The Description of what this constraint tests, for + use in messages and in the ConstraintResult. + + + + + RegexConstraint can test whether a string matches + the pattern provided. + + + + + Initializes a new instance of the class. + + The pattern. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + ConstraintStatus represents the status of a ConstraintResult + returned by a Constraint being applied to an actual value. + + + + + The status has not yet been set + + + + + The constraint succeeded + + + + + The constraint failed + + + + + An error occured in applying the constraint (reserved for future use) + + + + + Attribute used to identify a method that is called + immediately after each test is run. The method is + guaranteed to be called, even if an exception is thrown. + + + + + Marks a test to use a combinatorial join of any argument + data provided. Since this is the default, the attribute is + optional. + + + + + Default constructor + + + + + The PropertyNames class provides static constants for the + standard property ids that NUnit uses on tests. + + + + + The FriendlyName of the AppDomain in which the assembly is running + + + + + The selected strategy for joining parameter data into test cases + + + + + The process ID of the executing assembly + + + + + The stack trace from any data provider that threw + an exception. + + + + + The reason a test was not run + + + + + The author of the tests + + + + + The ApartmentState required for running the test + + + + + The categories applying to a test + + + + + The Description of a test + + + + + The number of threads to be used in running tests + + + + + The maximum time in ms, above which the test is considered to have failed + + + + + The ParallelScope associated with a test + + + + + The number of times the test should be repeated + + + + + Indicates that the test should be run on a separate thread + + + + + The culture to be set for a test + + + + + The UI culture to be set for a test + + + + + The type that is under test + + + + + The timeout value for the test + + + + + The test will be ignored until the given date + + + + + The optional Order the test will run in + + + + + The MethodWrapper class wraps a MethodInfo so that it may + be used in a platform-independent manner. + + + + + Construct a MethodWrapper for a Type and a MethodInfo. + + + + + Construct a MethodInfo for a given Type and method name. + + + + + Gets the parameters of the method. + + + + + + Returns the Type arguments of a generic method or the Type parameters of a generic method definition. + + + + + Replaces the type parameters of the method with the array of types provided and returns a new IMethodInfo. + + The type arguments to be used + A new IMethodInfo with the type arguments replaced + + + + Returns an array of custom attributes of the specified type applied to this method + + + + + Gets a value indicating whether one or more attributes of the spcified type are defined on the method. + + + + + Invokes the method, converting any TargetInvocationException to an NUnitException. + + The object on which to invoke the method + The argument list for the method + The return value from the invoked method + + + + Override ToString() so that error messages in NUnit's own tests make sense + + + + + Gets the Type from which this method was reflected. + + + + + Gets the MethodInfo for this method. + + + + + Gets the name of the method. + + + + + Gets a value indicating whether the method is abstract. + + + + + Gets a value indicating whether the method is public. + + + + + Gets a value indicating whether the method contains unassigned generic type parameters. + + + + + Gets a value indicating whether the method is a generic method. + + + + + Gets a value indicating whether the MethodInfo represents the definition of a generic method. + + + + + Gets the return Type of the method. + + + + + Represents a constraint that succeeds if any of the + members of a collection match a base constraint. + + + + + Returns a constraint that will apply the argument + to the members of a collection, succeeding if + any of them succeed. + + + + + The TestMethod class represents a Test implemented as a method. + + + + + The ParameterSet used to create this test method + + + + + Initializes a new instance of the class. + + The method to be used as a test. + + + + Initializes a new instance of the class. + + The method to be used as a test. + The suite or fixture to which the new test will be added + + + + Overridden to return a TestCaseResult. + + A TestResult for this test. + + + + Returns a TNode representing the current result after + adding it as a child of the supplied parent node. + + The parent node. + If true, descendant results are included + + + + + Gets a bool indicating whether the current test + has any descendant tests. + + + + + Gets this test's child tests + + A list of child tests + + + + Gets the name used for the top-level element in the + XML representation of this test + + + + + Returns the name of the method + + + + + RangeConstraint tests whether two _values are within a + specified range. + + + + + Initializes a new instance of the class. + + from must be less than or equal to true + Inclusive beginning of the range. Must be less than or equal to to. + Inclusive end of the range. Must be greater than or equal to from. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Modifies the constraint to use an and returns self. + + + + + Modifies the constraint to use an and returns self. + + + + + Modifies the constraint to use a and returns self. + + + + + Gets text describing a constraint + + + + + Tests whether a value is greater than or equal to the value supplied to its constructor + + + + + Initializes a new instance of the class. + + The expected value. + + + + Delegate used to delay evaluation of the actual value + to be used in evaluating a constraint + + + + + AttributeConstraint tests that a specified attribute is present + on a Type or other provider and that the value of the attribute + satisfies some other constraint. + + + + + Constructs an AttributeConstraint for a specified attribute + Type and base constraint. + + + + + + + Determines whether the Type or other provider has the + expected attribute and if its value matches the + additional constraint specified. + + + + + Returns a string representation of the constraint. + + + + + ValueSourceAttribute indicates the source to be used to + provide data for one parameter of a test method. + + + + + Construct with the name of the factory - for use with languages + that don't support params arrays. + + The name of a static method, property or field that will provide data. + + + + Construct with a Type and name - for use with languages + that don't support params arrays. + + The Type that will provide data + The name of a static method, property or field that will provide data. + + + + Gets an enumeration of data items for use as arguments + for a test method parameter. + + The parameter for which data is needed + + An enumeration containing individual data items + + + + + The name of a the method, property or fiend to be used as a source + + + + + A Type to be used as a source + + + + + Summary description for SetCultureAttribute. + + + + + Construct given the name of a culture + + + + + + RandomAttribute is used to supply a set of random _values + to a single parameter of a parameterized test. + + + + + Construct a random set of values appropriate for the Type of the + parameter on which the attribute appears, specifying only the count. + + + + + + Construct a set of ints within a specified range + + + + + Construct a set of unsigned ints within a specified range + + + + + Construct a set of longs within a specified range + + + + + Construct a set of unsigned longs within a specified range + + + + + Construct a set of shorts within a specified range + + + + + Construct a set of unsigned shorts within a specified range + + + + + Construct a set of doubles within a specified range + + + + + Construct a set of floats within a specified range + + + + + Construct a set of bytes within a specified range + + + + + Construct a set of sbytes within a specified range + + + + + Get the collection of _values to be used as arguments. + + + + + Delegate used by tests that execute code and + capture any thrown exception. + + + + + TNode represents a single node in the XML representation + of a Test or TestResult. It replaces System.Xml.XmlNode and + System.Xml.Linq.XElement, providing a minimal set of methods + for operating on the XML in a platform-independent manner. + + + + + Constructs a new instance of TNode + + The name of the node + + + + Constructs a new instance of TNode with a value + + The name of the node + The text content of the node + + + + Constructs a new instance of TNode with a value + + The name of the node + The text content of the node + Flag indicating whether to use CDATA when writing the text + + + + Create a TNode from it's XML text representation + + The XML text to be parsed + A TNode + + + + Adds a new element as a child of the current node and returns it. + + The element name. + The newly created child element + + + + Adds a new element with a value as a child of the current node and returns it. + + The element name + The text content of the new element + The newly created child element + + + + Adds a new element with a value as a child of the current node and returns it. + The value will be output using a CDATA section. + + The element name + The text content of the new element + The newly created child element + + + + Adds an attribute with a specified name and value to the XmlNode. + + The name of the attribute. + The value of the attribute. + + + + Finds a single descendant of this node matching an xpath + specification. The format of the specification is + limited to what is needed by NUnit and its tests. + + + + + + + Finds all descendants of this node matching an xpath + specification. The format of the specification is + limited to what is needed by NUnit and its tests. + + + + + Writes the XML representation of the node to an XmlWriter + + + + + + Gets the name of the node + + + + + Gets the value of the node + + + + + Gets a flag indicating whether the value should be output using CDATA. + + + + + Gets the dictionary of attributes + + + + + Gets a list of child nodes + + + + + Gets the first ChildNode + + + + + Gets the XML representation of this node. + + + + + Class used to represent a list of XmlResults + + + + + Class used to represent the attributes of a node + + + + + Gets or sets the value associated with the specified key. + Overridden to return null if attribute is not found. + + The key. + Value of the attribute or null + + + + The ITestAssemblyRunner interface is implemented by classes + that are able to execute a suite of tests loaded + from an assembly. + + + + + Loads the tests found in an Assembly, returning an + indication of whether or not the load succeeded. + + File name of the assembly to load + Dictionary of options to use in loading the test + An ITest representing the loaded tests + + + + Loads the tests found in an Assembly, returning an + indication of whether or not the load succeeded. + + The assembly to load + Dictionary of options to use in loading the test + An ITest representing the loaded tests + + + + Count Test Cases using a filter + + The filter to apply + The number of test cases found + + + + Run selected tests and return a test result. The test is run synchronously, + and the listener interface is notified as it progresses. + + Interface to receive ITestListener notifications. + A test filter used to select tests to be run + + + + Run selected tests asynchronously, notifying the listener interface as it progresses. + + Interface to receive EventListener notifications. + A test filter used to select tests to be run + + + + Wait for the ongoing run to complete. + + Time to wait in milliseconds + True if the run completed, otherwise false + + + + Signal any test run that is in process to stop. Return without error if no test is running. + + If true, kill any test-running threads + + + + Gets the tree of loaded tests, or null if + no tests have been loaded. + + + + + Gets the tree of test results, if the test + run is completed, otherwise null. + + + + + Indicates whether a test has been loaded + + + + + Indicates whether a test is currently running + + + + + Indicates whether a test run is complete + + + + + Modes in which the tolerance value for a comparison can be interpreted. + + + + + The tolerance was created with a value, without specifying + how the value would be used. This is used to prevent setting + the mode more than once and is generally changed to Linear + upon execution of the test. + + + + + The tolerance is used as a numeric range within which + two compared _values are considered to be equal. + + + + + Interprets the tolerance as the percentage by which + the two compared _values my deviate from each other. + + + + + Compares two _values based in their distance in + representable numbers. + + + + + ResolvableConstraintExpression is used to represent a compound + constraint being constructed at a point where the last operator + may either terminate the expression or may have additional + qualifying constraints added to it. + + It is used, for example, for a Property element or for + an Exception element, either of which may be optionally + followed by constraints that apply to the property or + exception. + + + + + Create a new instance of ResolvableConstraintExpression + + + + + Create a new instance of ResolvableConstraintExpression, + passing in a pre-populated ConstraintBuilder. + + + + + Resolve the current expression to a Constraint + + + + + Appends an And Operator to the expression + + + + + Appends an Or operator to the expression. + + + + + Negates the test of the constraint it wraps. + + + + + Constructs a new NotOperator + + + + + Returns a NotConstraint applied to its argument. + + + + + SetUpFixtureAttribute is used to identify a SetUpFixture + + + + + Build a SetUpFixture from type provided. Normally called for a Type + on which the attribute has been placed. + + The type info of the fixture to be used. + A SetUpFixture object as a TestSuite. + + + + Marks a test that must run in the MTA, causing it + to run in a separate thread if necessary. + + On methods, you may also use MTAThreadAttribute + to serve the same purpose. + + + + + Construct a RequiresMTAAttribute + + + + + The ResultState class represents the outcome of running a test. + It contains two pieces of information. The Status of the test + is an enum indicating whether the test passed, failed, was + skipped or was inconclusive. The Label provides a more + detailed breakdown for use by client runners. + + + + + Initializes a new instance of the class. + + The TestStatus. + + + + Initializes a new instance of the class. + + The TestStatus. + The label. + + + + Initializes a new instance of the class. + + The TestStatus. + The stage at which the result was produced + + + + Initializes a new instance of the class. + + The TestStatus. + The label. + The stage at which the result was produced + + + + The result is inconclusive + + + + + The test has been skipped. + + + + + The test has been ignored. + + + + + The test was skipped because it is explicit + + + + + The test succeeded + + + + + The test failed + + + + + The test encountered an unexpected exception + + + + + The test was cancelled by the user + + + + + The test was not runnable. + + + + + A suite failed because one or more child tests failed or had errors + + + + + A suite failed in its OneTimeSetUp + + + + + A suite had an unexpected exception in its OneTimeSetUp + + + + + A suite had an unexpected exception in its OneTimeDown + + + + + Get a new ResultState, which is the same as the current + one but with the FailureSite set to the specified value. + + The FailureSite to use + A new ResultState + + + + Determines whether the specified , is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Returns a hash code for this instance. + + + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + + + + + Returns a that represents this instance. + + + A that represents this instance. + + + + + Gets the TestStatus for the test. + + The status. + + + + Gets the label under which this test result is + categorized, if any. + + + + + Gets the stage of test execution in which + the failure or other result took place. + + + + + The FailureSite enum indicates the stage of a test + in which an error or failure occurred. + + + + + Failure in the test itself + + + + + Failure in the SetUp method + + + + + Failure in the TearDown method + + + + + Failure of a parent test + + + + + Failure of a child test + + + + + The TestFixtureData class represents a set of arguments + and other parameter info to be used for a parameterized + fixture. It is derived from TestFixtureParameters and adds a + fluent syntax for use in initializing the fixture. + + + + + Initializes a new instance of the class. + + The arguments. + + + + Initializes a new instance of the class. + + The argument. + + + + Initializes a new instance of the class. + + The first argument. + The second argument. + + + + Initializes a new instance of the class. + + The first argument. + The second argument. + The third argument. + + + + Marks the test fixture as explicit. + + + + + Marks the test fixture as explicit, specifying the reason. + + + + + Ignores this TestFixture, specifying the reason. + + The reason. + + + + + Represents a thread-safe first-in, first-out collection of objects. + + Specifies the type of elements in the queue. + + All public and protected members of are thread-safe and may be used + concurrently from multiple threads. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the + class that contains elements copied from the specified collection + + The collection whose elements are copied to the new . + The argument is + null. + + + + Adds an object to the end of the . + + The object to add to the end of the . The value can be a null reference + (Nothing in Visual Basic) for reference types. + + + + + Attempts to add an object to the . + + The object to add to the . The value can be a null + reference (Nothing in Visual Basic) for reference types. + + true if the object was added successfully; otherwise, false. + For , this operation will always add the object to the + end of the + and return true. + + + + Attempts to remove and return the object at the beginning of the . + + + When this method returns, if the operation was successful, contains the + object removed. If no object was available to be removed, the value is unspecified. + + true if an element was removed and returned from the beginning of the + successfully; otherwise, false. + + + + Attempts to return an object from the beginning of the + without removing it. + + When this method returns, contains an object from + the beginning of the or an + unspecified value if the operation failed. + true if and object was returned successfully; otherwise, false. + + + + Returns an enumerator that iterates through a collection. + + An that can be used to iterate through the collection. + + + + Returns an enumerator that iterates through the . + + An enumerator for the contents of the . + + The enumeration represents a moment-in-time snapshot of the contents + of the queue. It does not reflect any updates to the collection after + was called. The enumerator is safe to use + concurrently with reads from and writes to the queue. + + + + + Copies the elements of the to an , starting at a particular + index. + + The one-dimensional Array that is the + destination of the elements copied from the + . The Array must have zero-based indexing. + The zero-based index in at which copying + begins. + is a null reference (Nothing in + Visual Basic). + is less than + zero. + + is multidimensional. -or- + does not have zero-based indexing. -or- + is equal to or greater than the length of the + -or- The number of elements in the source is + greater than the available space from to the end of the destination + . -or- The type of the source cannot be cast automatically to the type of the + destination . + + + + + Copies the elements to an existing one-dimensional Array, starting at the specified array index. + + The one-dimensional Array that is the + destination of the elements copied from the + . The Array must have zero-based + indexing. + The zero-based index in at which copying + begins. + is a null reference (Nothing in + Visual Basic). + is less than + zero. + is equal to or greater than the + length of the + -or- The number of elements in the source is greater than the + available space from to the end of the destination . + + + + + Copies the elements stored in the to a new array. + + A new array containing a snapshot of elements copied from the . + + + + Attempts to remove and return an object from the . + + + When this method returns, if the operation was successful, contains the + object removed. If no object was available to be removed, the value is unspecified. + + true if an element was removed and returned successfully; otherwise, false. + For , this operation will attempt to remove the object + from the beginning of the . + + + + + Gets a value indicating whether access to the is + synchronized with the SyncRoot. + + true if access to the is synchronized + with the SyncRoot; otherwise, false. For , this property always + returns false. + + + + Gets an object that can be used to synchronize access to the . This property is not supported. + + The SyncRoot property is not supported. + + + + Gets the number of elements contained in the . + + The number of elements contained in the . + + For determining whether the collection contains any items, use of the + property is recommended rather than retrieving the number of items from the + property and comparing it to 0. + + + + + Gets a value that indicates whether the is empty. + + true if the is empty; otherwise, false. + + For determining whether the collection contains any items, use of this property is recommended + rather than retrieving the number of items from the property and comparing it + to 0. However, as this collection is intended to be accessed concurrently, it may be the case + that another thread will modify the collection after returns, thus invalidating + the result. + + + + + Implementation of ITestAssemblyRunner + + + + + Initializes a new instance of the class. + + The builder. + + + + Loads the tests found in an Assembly + + File name of the assembly to load + Dictionary of option settings for loading the assembly + True if the load was successful + + + + Loads the tests found in an Assembly + + The assembly to load + Dictionary of option settings for loading the assembly + True if the load was successful + + + + Count Test Cases using a filter + + The filter to apply + The number of test cases found + + + + Run selected tests and return a test result. The test is run synchronously, + and the listener interface is notified as it progresses. + + Interface to receive EventListener notifications. + A test filter used to select tests to be run + + + + + Run selected tests asynchronously, notifying the listener interface as it progresses. + + Interface to receive EventListener notifications. + A test filter used to select tests to be run + + RunAsync is a template method, calling various abstract and + virtual methods to be overridden by derived classes. + + + + + Wait for the ongoing run to complete. + + Time to wait in milliseconds + True if the run completed, otherwise false + + + + Signal any test run that is in process to stop. Return without error if no test is running. + + If true, kill any tests that are currently running + + + + Initiate the test run. + + + + + Create the initial TestExecutionContext used to run tests + + The ITestListener specified in the RunAsync call + + + + Handle the the Completed event for the top level work item + + + + + The tree of tests that was loaded by the builder + + + + + The test result, if a run has completed + + + + + Indicates whether a test is loaded + + + + + Indicates whether a test is running + + + + + Indicates whether a test run is complete + + + + + Our settings, specified when loading the assembly + + + + + The top level WorkItem created for the assembly as a whole + + + + + The TestExecutionContext for the top level WorkItem + + + + diff --git a/Library/PackageCache/com.unity.ext.nunit@1.0.0/net35/unity-custom/nunit.framework.xml.meta b/Library/PackageCache/com.unity.ext.nunit@1.0.0/net35/unity-custom/nunit.framework.xml.meta new file mode 100644 index 0000000..bed4a72 --- /dev/null +++ b/Library/PackageCache/com.unity.ext.nunit@1.0.0/net35/unity-custom/nunit.framework.xml.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 9c7ad350fb20c854a9112cf4156d1b6e +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.ext.nunit@1.0.0/package.json b/Library/PackageCache/com.unity.ext.nunit@1.0.0/package.json new file mode 100644 index 0000000..c0bc305 --- /dev/null +++ b/Library/PackageCache/com.unity.ext.nunit@1.0.0/package.json @@ -0,0 +1,16 @@ +{ + "displayName": "Custom NUnit", + "name": "com.unity.ext.nunit", + "version": "1.0.0", + "unity": "2019.1", + "description": "Custom version of the nunit package build to work with Unity. Used by the Unity Test Framework.", + "keywords": ["nunit", "unittest", "test"], + "category": "Libraries", + "repository": { + "type": "git", + "url": "git@gitlab.cds.internal.unity3d.com/upm-packages/core/com.unity.ext.nunit.git", + "revision": "c8f5044ffe6adb909f9836160b0bdaa30f2d1ec9" + }, + "dependencies": { + } +} diff --git a/Library/PackageCache/com.unity.ext.nunit@1.0.0/package.json.meta b/Library/PackageCache/com.unity.ext.nunit@1.0.0/package.json.meta new file mode 100644 index 0000000..ad88492 --- /dev/null +++ b/Library/PackageCache/com.unity.ext.nunit@1.0.0/package.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8143d3a8390f2c64685e3bc272bd9e90 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.ide.rider@1.1.4/.editorconfig b/Library/PackageCache/com.unity.ide.rider@1.1.4/.editorconfig new file mode 100644 index 0000000..ca12169 --- /dev/null +++ b/Library/PackageCache/com.unity.ide.rider@1.1.4/.editorconfig @@ -0,0 +1,6 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf \ No newline at end of file diff --git a/Library/PackageCache/com.unity.ide.rider@1.1.4/CHANGELOG.md b/Library/PackageCache/com.unity.ide.rider@1.1.4/CHANGELOG.md new file mode 100644 index 0000000..bd5aad6 --- /dev/null +++ b/Library/PackageCache/com.unity.ide.rider@1.1.4/CHANGELOG.md @@ -0,0 +1,74 @@ +# Code Editor Package for Rider + +## [1.1.4] - 2019-11-21 + +fix warning - unreachable code + + +## [1.1.3] - 2019-10-17 + + - Update External Editor, when new toolbox build was installed + - Add xaml to default list of extensions to include in csproj + - Avoid initializing Rider package in secondary Unity process, which does Asset processing + - Reflect multiple csc.rsp arguments to generated csproj files: https://github.com/JetBrains/resharper-unity/issues/1337 + - Setting, which allowed to override LangVersion removed in favor of langversion in csc.rsp + - Environment.NewLine is used in generated project files instead of Windows line separator. + +## [1.1.2] - 2019-09-18 + +performance optimizations: + - avoid multiple evaluations + - avoid reflection in DisableSyncSolutionOnceCallBack + - project generation optimization +fixes: + - avoid compilation error with incompatible `Test Framework` package + +## [1.1.1] - 2019-08-26 + +parse nowarn in csc.rsp +warning, when Unity was started from Rider, but external editor was different +improved unit test support +workaround to avoid Unity internal project-generation (fix #28) + + +## [1.1.0] - 2019-07-02 + +new setting to manage list of extensions to be opened with Rider +avoid breaking everything on any unhandled exception in RiderScriptEditor cctor +hide Rider settings, when different Editor is selected +dynamically load only newer rider plugins +path detection (work on unix symlinks) +speed up for project generation +lots of bug fixing + +## [1.0.8] - 2019-05-20 + +Fix NullReferenceException when External editor was pointing to non-existing Rider everything was broken by null-ref. + +## [1.0.7] - 2019-05-16 + +Initial migration steps from rider plugin to package. +Fix OSX check and opening of files. + +## [1.0.6] - 2019-04-30 + +Ensure asset database is refreshed when generating csproj and solution files. + +## [1.0.5] - 2019-04-27 + +Add support for generating all csproj files. + +## [1.0.4] - 2019-04-18 + +Fix relative package paths. +Fix opening editor on mac. + +## [1.0.3] - 2019-04-12 + +Fixing null reference issue for callbacks to Asset pipeline. + +## [1.0.2] - 2019-01-01 + +### This is the first release of *Unity Package rider_editor*. + +Using the newly created api to integrate Rider with Unity. diff --git a/Library/PackageCache/com.unity.ide.rider@1.1.4/CHANGELOG.md.meta b/Library/PackageCache/com.unity.ide.rider@1.1.4/CHANGELOG.md.meta new file mode 100644 index 0000000..d8f7ef8 --- /dev/null +++ b/Library/PackageCache/com.unity.ide.rider@1.1.4/CHANGELOG.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8645aa9c3c74fb34ba9499e14fb332b5 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.ide.rider@1.1.4/CONTRIBUTING.md b/Library/PackageCache/com.unity.ide.rider@1.1.4/CONTRIBUTING.md new file mode 100644 index 0000000..f0005f6 --- /dev/null +++ b/Library/PackageCache/com.unity.ide.rider@1.1.4/CONTRIBUTING.md @@ -0,0 +1,6 @@ +# Contributing + +## All contributions are subject to the [Unity Contribution Agreement(UCA)](https://unity3d.com/legal/licenses/Unity_Contribution_Agreement) +By making a pull request, you are confirming agreement to the terms and conditions of the UCA, including that your Contributions are your original creation and that you have complete right and authority to make your Contributions. + +## Once you have a change ready following these ground rules. Simply make a pull request \ No newline at end of file diff --git a/Library/PackageCache/com.unity.ide.rider@1.1.4/CONTRIBUTING.md.meta b/Library/PackageCache/com.unity.ide.rider@1.1.4/CONTRIBUTING.md.meta new file mode 100644 index 0000000..147d8ae --- /dev/null +++ b/Library/PackageCache/com.unity.ide.rider@1.1.4/CONTRIBUTING.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 5e83f8baac96eaa47bdd9ca781cd2002 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.ide.rider@1.1.4/Documentation~/README.md b/Library/PackageCache/com.unity.ide.rider@1.1.4/Documentation~/README.md new file mode 100644 index 0000000..d9e6b90 --- /dev/null +++ b/Library/PackageCache/com.unity.ide.rider@1.1.4/Documentation~/README.md @@ -0,0 +1,4 @@ +# Code Editor Package for Rider + +This package is not intended to be modified by users. +Nor does it provide any api intended to be included in user projects. \ No newline at end of file diff --git a/Library/PackageCache/com.unity.ide.rider@1.1.4/LICENSE.md b/Library/PackageCache/com.unity.ide.rider@1.1.4/LICENSE.md new file mode 100644 index 0000000..8098f2d --- /dev/null +++ b/Library/PackageCache/com.unity.ide.rider@1.1.4/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 Unity Technologies + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Library/PackageCache/com.unity.ide.rider@1.1.4/LICENSE.md.meta b/Library/PackageCache/com.unity.ide.rider@1.1.4/LICENSE.md.meta new file mode 100644 index 0000000..30b6ed7 --- /dev/null +++ b/Library/PackageCache/com.unity.ide.rider@1.1.4/LICENSE.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 5598b14661b5f4c43bed757f34b6d172 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider.meta b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider.meta new file mode 100644 index 0000000..1bafafc --- /dev/null +++ b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9129183a42052cd43b9c284d6dbd541e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor.meta b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor.meta new file mode 100644 index 0000000..61363f1 --- /dev/null +++ b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1b393f6b29a9ee84c803af1ab4944b71 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Discovery.cs b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Discovery.cs new file mode 100644 index 0000000..150d70c --- /dev/null +++ b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Discovery.cs @@ -0,0 +1,457 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using JetBrains.Annotations; +using Microsoft.Win32; +using Unity.CodeEditor; +using UnityEngine; + +namespace Packages.Rider.Editor +{ + public interface IDiscovery + { + CodeEditor.Installation[] PathCallback(); + } + + public class Discovery : IDiscovery + { + public CodeEditor.Installation[] PathCallback() + { + return RiderPathLocator.GetAllRiderPaths() + .Select(riderInfo => new CodeEditor.Installation + { + Path = riderInfo.Path, + Name = riderInfo.Presentation + }) + .OrderBy(a=>a.Name) + .ToArray(); + } + } + + /// + /// This code is a modified version of the JetBrains resharper-unity plugin listed here: + /// https://github.com/JetBrains/resharper-unity/blob/master/unity/JetBrains.Rider.Unity.Editor/EditorPlugin/RiderPathLocator.cs + /// + public static class RiderPathLocator + { +#if !(UNITY_4_7 || UNITY_5_5) + [UsedImplicitly] // Used in com.unity.ide.rider + public static RiderInfo[] GetAllRiderPaths() + { + try + { + switch (SystemInfo.operatingSystemFamily) + { + case OperatingSystemFamily.Windows: + { + return CollectRiderInfosWindows(); + } + + case OperatingSystemFamily.MacOSX: + { + return CollectRiderInfosMac(); + } + + case OperatingSystemFamily.Linux: + { + return CollectAllRiderPathsLinux(); + } + } + } + catch (Exception e) + { + Debug.LogException(e); + } + + return new RiderInfo[0]; + } +#endif + +#if RIDER_EDITOR_PLUGIN // can't be used in com.unity.ide.rider + internal static RiderInfo[] GetAllFoundInfos(OperatingSystemFamilyRider operatingSystemFamily) + { + try + { + switch (operatingSystemFamily) + { + case OperatingSystemFamilyRider.Windows: + { + return CollectRiderInfosWindows(); + } + case OperatingSystemFamilyRider.MacOSX: + { + return CollectRiderInfosMac(); + } + case OperatingSystemFamilyRider.Linux: + { + return CollectAllRiderPathsLinux(); + } + } + } + catch (Exception e) + { + Debug.LogException(e); + } + + return new RiderInfo[0]; + } + + internal static string[] GetAllFoundPaths(OperatingSystemFamilyRider operatingSystemFamily) + { + return GetAllFoundInfos(operatingSystemFamily).Select(a=>a.Path).ToArray(); + } +#endif + + private static RiderInfo[] CollectAllRiderPathsLinux() + { + var installInfos = new List(); + var home = Environment.GetEnvironmentVariable("HOME"); + if (!string.IsNullOrEmpty(home)) + { + var toolboxRiderRootPath = GetToolboxBaseDir(); + installInfos.AddRange(CollectPathsFromToolbox(toolboxRiderRootPath, "bin", "rider.sh", false) + .Select(a => new RiderInfo(a, true)).ToList()); + + //$Home/.local/share/applications/jetbrains-rider.desktop + var shortcut = new FileInfo(Path.Combine(home, @".local/share/applications/jetbrains-rider.desktop")); + + if (shortcut.Exists) + { + var lines = File.ReadAllLines(shortcut.FullName); + foreach (var line in lines) + { + if (!line.StartsWith("Exec=\"")) + continue; + var path = line.Split('"').Where((item, index) => index == 1).SingleOrDefault(); + if (string.IsNullOrEmpty(path)) + continue; + + if (installInfos.Any(a => a.Path == path)) // avoid adding similar build as from toolbox + continue; + installInfos.Add(new RiderInfo(path, false)); + } + } + } + + // snap install + var snapInstallPath = "/snap/rider/current/bin/rider.sh"; + if (new FileInfo(snapInstallPath).Exists) + installInfos.Add(new RiderInfo(snapInstallPath, false)); + + return installInfos.ToArray(); + } + + private static RiderInfo[] CollectRiderInfosMac() + { + var installInfos = new List(); + // "/Applications/*Rider*.app" + var folder = new DirectoryInfo("/Applications"); + if (folder.Exists) + { + installInfos.AddRange(folder.GetDirectories("*Rider*.app") + .Select(a => new RiderInfo(a.FullName, false)) + .ToList()); + } + + // /Users/user/Library/Application Support/JetBrains/Toolbox/apps/Rider/ch-1/181.3870.267/Rider EAP.app + var toolboxRiderRootPath = GetToolboxBaseDir(); + var paths = CollectPathsFromToolbox(toolboxRiderRootPath, "", "Rider*.app", true) + .Select(a => new RiderInfo(a, true)); + installInfos.AddRange(paths); + + return installInfos.ToArray(); + } + + private static RiderInfo[] CollectRiderInfosWindows() + { + var installInfos = new List(); + var toolboxRiderRootPath = GetToolboxBaseDir(); + var installPathsToolbox = CollectPathsFromToolbox(toolboxRiderRootPath, "bin", "rider64.exe", false).ToList(); + installInfos.AddRange(installPathsToolbox.Select(a => new RiderInfo(a, true)).ToList()); + + var installPaths = new List(); + const string registryKey = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"; + CollectPathsFromRegistry(registryKey, installPaths); + const string wowRegistryKey = @"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall"; + CollectPathsFromRegistry(wowRegistryKey, installPaths); + + installInfos.AddRange(installPaths.Select(a => new RiderInfo(a, false)).ToList()); + + return installInfos.ToArray(); + } + + private static string GetToolboxBaseDir() + { + switch (SystemInfo.operatingSystemFamily) + { + case OperatingSystemFamily.Windows: + { + var localAppData = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); + return Path.Combine(localAppData, @"JetBrains\Toolbox\apps\Rider"); + } + + case OperatingSystemFamily.MacOSX: + { + var home = Environment.GetEnvironmentVariable("HOME"); + if (!string.IsNullOrEmpty(home)) + { + return Path.Combine(home, @"Library/Application Support/JetBrains/Toolbox/apps/Rider"); + } + break; + } + + case OperatingSystemFamily.Linux: + { + var home = Environment.GetEnvironmentVariable("HOME"); + if (!string.IsNullOrEmpty(home)) + { + return Path.Combine(home, @".local/share/JetBrains/Toolbox/apps/Rider"); + } + break; + } + } + return string.Empty; + } + + internal static string GetBuildNumber(string path) + { + var file = new FileInfo(Path.Combine(path, GetRelativePathToBuildTxt())); + if (!file.Exists) + return string.Empty; + var text = File.ReadAllText(file.FullName); + if (text.Length > 3) + return text.Substring(3); + return string.Empty; + } + + internal static bool IsToolbox(string path) + { + return path.StartsWith(GetToolboxBaseDir()); + } + + private static string GetRelativePathToBuildTxt() + { + switch (SystemInfo.operatingSystemFamily) + { + case OperatingSystemFamily.Windows: + case OperatingSystemFamily.Linux: + return "../../build.txt"; + case OperatingSystemFamily.MacOSX: + return "Contents/Resources/build.txt"; + } + throw new Exception("Unknown OS"); + } + + private static void CollectPathsFromRegistry(string registryKey, List installPaths) + { + using (var key = Registry.LocalMachine.OpenSubKey(registryKey)) + { + if (key == null) return; + foreach (var subkeyName in key.GetSubKeyNames().Where(a => a.Contains("Rider"))) + { + using (var subkey = key.OpenSubKey(subkeyName)) + { + var folderObject = subkey?.GetValue("InstallLocation"); + if (folderObject == null) continue; + var folder = folderObject.ToString(); + var possiblePath = Path.Combine(folder, @"bin\rider64.exe"); + if (File.Exists(possiblePath)) + installPaths.Add(possiblePath); + } + } + } + } + + private static string[] CollectPathsFromToolbox(string toolboxRiderRootPath, string dirName, string searchPattern, + bool isMac) + { + if (!Directory.Exists(toolboxRiderRootPath)) + return new string[0]; + + var channelDirs = Directory.GetDirectories(toolboxRiderRootPath); + var paths = channelDirs.SelectMany(channelDir => + { + try + { + // use history.json - last entry stands for the active build https://jetbrains.slack.com/archives/C07KNP99D/p1547807024066500?thread_ts=1547731708.057700&cid=C07KNP99D + var historyFile = Path.Combine(channelDir, ".history.json"); + if (File.Exists(historyFile)) + { + var json = File.ReadAllText(historyFile); + var build = ToolboxHistory.GetLatestBuildFromJson(json); + if (build != null) + { + var buildDir = Path.Combine(channelDir, build); + var executablePaths = GetExecutablePaths(dirName, searchPattern, isMac, buildDir); + if (executablePaths.Any()) + return executablePaths; + } + } + + var channelFile = Path.Combine(channelDir, ".channel.settings.json"); + if (File.Exists(channelFile)) + { + var json = File.ReadAllText(channelFile).Replace("active-application", "active_application"); + var build = ToolboxInstallData.GetLatestBuildFromJson(json); + if (build != null) + { + var buildDir = Path.Combine(channelDir, build); + var executablePaths = GetExecutablePaths(dirName, searchPattern, isMac, buildDir); + if (executablePaths.Any()) + return executablePaths; + } + } + + // changes in toolbox json files format may brake the logic above, so return all found Rider installations + return Directory.GetDirectories(channelDir) + .SelectMany(buildDir => GetExecutablePaths(dirName, searchPattern, isMac, buildDir)); + } + catch (Exception e) + { + // do not write to Debug.Log, just log it. + Logger.Warn($"Failed to get RiderPath from {channelDir}", e); + } + + return new string[0]; + }) + .Where(c => !string.IsNullOrEmpty(c)) + .ToArray(); + return paths; + } + + private static string[] GetExecutablePaths(string dirName, string searchPattern, bool isMac, string buildDir) + { + var folder = new DirectoryInfo(Path.Combine(buildDir, dirName)); + if (!folder.Exists) + return new string[0]; + + if (!isMac) + return new[] {Path.Combine(folder.FullName, searchPattern)}.Where(File.Exists).ToArray(); + return folder.GetDirectories(searchPattern).Select(f => f.FullName) + .Where(Directory.Exists).ToArray(); + } + + // Disable the "field is never assigned" compiler warning. We never assign it, but Unity does. + // Note that Unity disable this warning in the generated C# projects +#pragma warning disable 0649 + + [Serializable] + class ToolboxHistory + { + public List history; + + [CanBeNull] + public static string GetLatestBuildFromJson(string json) + { + try + { +#if UNITY_4_7 || UNITY_5_5 + return JsonConvert.DeserializeObject(json).history.LastOrDefault()?.item.build; +#else + return JsonUtility.FromJson(json).history.LastOrDefault()?.item.build; +#endif + } + catch (Exception) + { + Logger.Warn($"Failed to get latest build from json {json}"); + } + + return null; + } + } + + [Serializable] + class ItemNode + { + public BuildNode item; + } + + [Serializable] + class BuildNode + { + public string build; + } + + // ReSharper disable once ClassNeverInstantiated.Global + [Serializable] + class ToolboxInstallData + { + // ReSharper disable once InconsistentNaming + public ActiveApplication active_application; + + [CanBeNull] + public static string GetLatestBuildFromJson(string json) + { + try + { +#if UNITY_4_7 || UNITY_5_5 + var toolbox = JsonConvert.DeserializeObject(json); +#else + var toolbox = JsonUtility.FromJson(json); +#endif + var builds = toolbox.active_application.builds; + if (builds != null && builds.Any()) + return builds.First(); + } + catch (Exception) + { + Logger.Warn($"Failed to get latest build from json {json}"); + } + + return null; + } + } + + [Serializable] + class ActiveApplication + { + // ReSharper disable once InconsistentNaming + public List builds; + } + +#pragma warning restore 0649 + + public struct RiderInfo + { + public bool IsToolbox; + public string Presentation; + public string BuildVersion; + public string Path; + + public RiderInfo(string path, bool isToolbox) + { + if (path == RiderScriptEditor.CurrentEditor) + { + RiderScriptEditorData.instance.Init(); + BuildVersion = RiderScriptEditorData.instance.currentEditorVersion; + } + else + BuildVersion = GetBuildNumber(path); + Path = new FileInfo(path).FullName; // normalize separators + var presentation = "Rider " + BuildVersion; + if (isToolbox) + presentation += " (JetBrains Toolbox)"; + + Presentation = presentation; + IsToolbox = isToolbox; + } + } + + private static class Logger + { + internal static void Warn(string message, Exception e = null) + { +#if RIDER_EDITOR_PLUGIN // can't be used in com.unity.ide.rider + Log.GetLog(typeof(RiderPathLocator).Name).Warn(message); + if (e != null) + Log.GetLog(typeof(RiderPathLocator).Name).Warn(e); +#else + Debug.LogError(message); + if (e != null) + Debug.LogException(e); +#endif + } + } + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Discovery.cs.meta b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Discovery.cs.meta new file mode 100644 index 0000000..fc30914 --- /dev/null +++ b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Discovery.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dab656c79e1985c40b31faebcda44442 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/EditorPluginInterop.cs b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/EditorPluginInterop.cs new file mode 100644 index 0000000..749218f --- /dev/null +++ b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/EditorPluginInterop.cs @@ -0,0 +1,136 @@ +using System; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Runtime.CompilerServices; +using Debug = UnityEngine.Debug; + +namespace Packages.Rider.Editor +{ + public static class EditorPluginInterop + { + private static string ourEntryPointTypeName = "JetBrains.Rider.Unity.Editor.PluginEntryPoint"; + + private static Assembly ourEditorPluginAssembly; + + public static Assembly EditorPluginAssembly + { + get + { + if (ourEditorPluginAssembly != null) + return ourEditorPluginAssembly; + var assemblies = AppDomain.CurrentDomain.GetAssemblies(); + ourEditorPluginAssembly = assemblies.FirstOrDefault(a => a.GetName().Name.Equals("JetBrains.Rider.Unity.Editor.Plugin.Full.Repacked")); + return ourEditorPluginAssembly; + } + } + + + private static void DisableSyncSolutionOnceCallBack() + { + // RiderScriptableSingleton.Instance.CsprojProcessedOnce = true; + // Otherwise EditorPlugin regenerates all on every AppDomain reload + var assembly = EditorPluginAssembly; + if (assembly == null) return; + var type = assembly.GetType("JetBrains.Rider.Unity.Editor.Utils.RiderScriptableSingleton"); + if (type == null) return; + var baseType = type.BaseType; + if (baseType == null) return; + var instance = baseType.GetProperty("Instance"); + if (instance == null) return; + var instanceVal = instance.GetValue(null); + var member = type.GetProperty("CsprojProcessedOnce"); + if (member==null) return; + member.SetValue(instanceVal, true); + } + + public static string LogPath + { + get + { + try + { + var assembly = EditorPluginAssembly; + if (assembly == null) return null; + var type = assembly.GetType(ourEntryPointTypeName); + if (type == null) return null; + var field = type.GetField("LogPath", BindingFlags.NonPublic | BindingFlags.Static); + if (field == null) return null; + return field.GetValue(null) as string; + } + catch (Exception) + { + Debug.Log("Unable to do OpenFile to Rider from dll, fallback to com.unity.ide.rider implementation."); + } + + return null; + } + } + + public static bool OpenFileDllImplementation(string path, int line, int column) + { + var openResult = false; + // reflection for fast OpenFileLineCol, when Rider is started and protocol connection is established + try + { + var assembly = EditorPluginAssembly; + if (assembly == null) return false; + var type = assembly.GetType(ourEntryPointTypeName); + if (type == null) return false; + var field = type.GetField("OpenAssetHandler", BindingFlags.NonPublic | BindingFlags.Static); + if (field == null) return false; + var handlerInstance = field.GetValue(null); + var method = handlerInstance.GetType() + .GetMethod("OnOpenedAsset", new[] {typeof(string), typeof(int), typeof(int)}); + if (method == null) return false; + var assetFilePath = path; + if (!string.IsNullOrEmpty(path)) + assetFilePath = Path.GetFullPath(path); + + openResult = (bool) method.Invoke(handlerInstance, new object[] {assetFilePath, line, column}); + } + catch (Exception e) + { + Debug.Log("Unable to do OpenFile to Rider from dll, fallback to com.unity.ide.rider implementation."); + Debug.LogException(e); + } + + return openResult; + } + + public static bool EditorPluginIsLoadedFromAssets(Assembly assembly) + { + if (assembly == null) + return false; + var location = assembly.Location; + var currentDir = Directory.GetCurrentDirectory(); + return location.StartsWith(currentDir, StringComparison.InvariantCultureIgnoreCase); + } + + + internal static void InitEntryPoint(Assembly assembly) + { + try + { + if (Version.TryParse(RiderScriptEditorData.instance.currentEditorVersion, out var version)) + { + if (version.Major < 192) + DisableSyncSolutionOnceCallBack(); // is require for Rider prior to 2019.2 + } + else + DisableSyncSolutionOnceCallBack(); + + var type = assembly.GetType("JetBrains.Rider.Unity.Editor.AfterUnity56.EntryPoint"); + if (type == null) + type = assembly.GetType("JetBrains.Rider.Unity.Editor.UnitTesting.EntryPoint"); // oldRider + RuntimeHelpers.RunClassConstructor(type.TypeHandle); + } + catch (TypeInitializationException ex) + { + Debug.LogException(ex); + if (ex.InnerException != null) + Debug.LogException(ex.InnerException); + } + } + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/EditorPluginInterop.cs.meta b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/EditorPluginInterop.cs.meta new file mode 100644 index 0000000..2c34764 --- /dev/null +++ b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/EditorPluginInterop.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f9bd02a3a916be64c9b47b1305149423 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/LoggingLevel.cs b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/LoggingLevel.cs new file mode 100644 index 0000000..0fb025d --- /dev/null +++ b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/LoggingLevel.cs @@ -0,0 +1,22 @@ +namespace Packages.Rider.Editor +{ + public enum LoggingLevel + { + /// + /// Do not use it in logging. Only in config to disable logging. + /// + OFF, + /// For errors that lead to application failure + FATAL, + /// For errors that must be shown in Exception Browser + ERROR, + /// Suspicious situations but not errors + WARN, + /// Regular level for important events + INFO, + /// Additional info for debbuging + VERBOSE, + /// Methods & callstacks tracing, more than verbose + TRACE, + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/LoggingLevel.cs.meta b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/LoggingLevel.cs.meta new file mode 100644 index 0000000..45be604 --- /dev/null +++ b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/LoggingLevel.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 71bb46b59a9a7a346bbab1e185c723df +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/PluginSettings.cs b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/PluginSettings.cs new file mode 100644 index 0000000..d3c139a --- /dev/null +++ b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/PluginSettings.cs @@ -0,0 +1,128 @@ +using Unity.CodeEditor; +using UnityEditor; +using UnityEngine; + +namespace Packages.Rider.Editor +{ + public class PluginSettings + { + public static LoggingLevel SelectedLoggingLevel + { + get => (LoggingLevel) EditorPrefs.GetInt("Rider_SelectedLoggingLevel", 0); + set + { + EditorPrefs.SetInt("Rider_SelectedLoggingLevel", (int) value); + } + } + + public static bool LogEventsCollectorEnabled + { + get { return EditorPrefs.GetBool("Rider_LogEventsCollectorEnabled", true); } + private set { EditorPrefs.SetBool("Rider_LogEventsCollectorEnabled", value); } + } + + + private static GUIStyle ourVersionInfoStyle = new GUIStyle() + { + normal = new GUIStyleState() + { + textColor = new Color(0, 0, 0, .6f), + }, + margin = new RectOffset(4, 4, 4, 4), + }; + + /// + /// Preferences menu layout + /// + /// + /// Contains all 3 toggles: Enable/Disable; Debug On/Off; Writing Launch File On/Off + /// + [SettingsProvider] + private static SettingsProvider RiderPreferencesItem() + { + if (!RiderScriptEditor.IsRiderInstallation(RiderScriptEditor.CurrentEditor)) + return null; + if (!RiderScriptEditorData.instance.shouldLoadEditorPlugin) + return null; + var provider = new SettingsProvider("Preferences/Rider", SettingsScope.User) + { + label = "Rider", + keywords = new[] { "Rider" }, + guiHandler = (searchContext) => + { + EditorGUIUtility.labelWidth = 200f; + EditorGUILayout.BeginVertical(); + + GUILayout.BeginVertical(); + LogEventsCollectorEnabled = + EditorGUILayout.Toggle(new GUIContent("Pass Console to Rider:"), LogEventsCollectorEnabled); + + GUILayout.EndVertical(); + GUILayout.Label(""); + + if (!string.IsNullOrEmpty(EditorPluginInterop.LogPath)) + { + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.PrefixLabel("Log file:"); + var previous = GUI.enabled; + GUI.enabled = previous && SelectedLoggingLevel != LoggingLevel.OFF; + var button = GUILayout.Button(new GUIContent("Open log")); + if (button) + { + //UnityEditorInternal.InternalEditorUtility.OpenFileAtLineExternal(PluginEntryPoint.LogPath, 0); + // works much faster than the commented code, when Rider is already started + CodeEditor.CurrentEditor.OpenProject(EditorPluginInterop.LogPath, 0, 0); + } + + GUI.enabled = previous; + GUILayout.EndHorizontal(); + } + + var loggingMsg = + @"Sets the amount of Rider Debug output. If you are about to report an issue, please select Verbose logging level and attach Unity console output to the issue."; + SelectedLoggingLevel = + (LoggingLevel) EditorGUILayout.EnumPopup(new GUIContent("Logging Level:", loggingMsg), + SelectedLoggingLevel); + + + EditorGUILayout.HelpBox(loggingMsg, MessageType.None); + + var githubRepo = "https://github.com/JetBrains/resharper-unity"; + var caption = $"{githubRepo}"; + LinkButton(caption: caption, url: githubRepo); + + GUILayout.FlexibleSpace(); + GUILayout.BeginHorizontal(); + + GUILayout.FlexibleSpace(); + var assembly = EditorPluginInterop.EditorPluginAssembly; + if (assembly != null) + { + var version = assembly.GetName().Version; + GUILayout.Label("Plugin version: " + version, ourVersionInfoStyle); + } + + GUILayout.EndHorizontal(); + + EditorGUILayout.EndVertical(); + } + }; + return provider; + } + + private static void LinkButton(string caption, string url) + { + var style = GUI.skin.label; + style.richText = true; + + var bClicked = GUILayout.Button(caption, style); + + var rect = GUILayoutUtility.GetLastRect(); + rect.width = style.CalcSize(new GUIContent(caption)).x; + EditorGUIUtility.AddCursorRect(rect, MouseCursor.Link); + + if (bClicked) + Application.OpenURL(url); + } + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/PluginSettings.cs.meta b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/PluginSettings.cs.meta new file mode 100644 index 0000000..a2b0299 --- /dev/null +++ b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/PluginSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1bfe12aa306c0c74db4f4f1a1a0ae5ce +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/PostProcessors.meta b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/PostProcessors.meta new file mode 100644 index 0000000..6a6a961 --- /dev/null +++ b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/PostProcessors.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: aa290bd9a165a0543a4bf85ac73914bc +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/PostProcessors/RiderAssetPostprocessor.cs b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/PostProcessors/RiderAssetPostprocessor.cs new file mode 100644 index 0000000..c442dd1 --- /dev/null +++ b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/PostProcessors/RiderAssetPostprocessor.cs @@ -0,0 +1,16 @@ +using Unity.CodeEditor; +using UnityEditor; + +namespace Packages.Rider.Editor.PostProcessors +{ + public class RiderAssetPostprocessor: AssetPostprocessor + { + public static bool OnPreGeneratingCSProjectFiles() + { + var path = RiderScriptEditor.GetEditorRealPath(CodeEditor.CurrentEditorInstallation); + if (RiderScriptEditor.IsRiderInstallation(path)) + return !ProjectGeneration.isRiderProjectGeneration; + return false; + } + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/PostProcessors/RiderAssetPostprocessor.cs.meta b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/PostProcessors/RiderAssetPostprocessor.cs.meta new file mode 100644 index 0000000..f3e3377 --- /dev/null +++ b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/PostProcessors/RiderAssetPostprocessor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 45471ad7b8c1f964da5e3c07d57fbf4f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration.meta b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration.meta new file mode 100644 index 0000000..2afe02d --- /dev/null +++ b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 313cbe17019f1934397f91069831062c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration/FileIOProvider.cs b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration/FileIOProvider.cs new file mode 100644 index 0000000..c7896c7 --- /dev/null +++ b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration/FileIOProvider.cs @@ -0,0 +1,23 @@ +using System; +using System.IO; +using System.Text; + +namespace Packages.Rider.Editor { + class FileIOProvider : IFileIO + { + public bool Exists(string fileName) + { + return File.Exists(fileName); + } + + public string ReadAllText(string fileName) + { + return File.ReadAllText(fileName); + } + + public void WriteAllText(string fileName, string content) + { + File.WriteAllText(fileName, content, Encoding.UTF8); + } + } +} diff --git a/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration/FileIOProvider.cs.meta b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration/FileIOProvider.cs.meta new file mode 100644 index 0000000..59ead4f --- /dev/null +++ b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration/FileIOProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a6ba838b1348d5e46a7eaacd1646c1d3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration/GUIDProvider.cs b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration/GUIDProvider.cs new file mode 100644 index 0000000..54851ce --- /dev/null +++ b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration/GUIDProvider.cs @@ -0,0 +1,16 @@ +using System; + +namespace Packages.Rider.Editor { + class GUIDProvider : IGUIDGenerator + { + public string ProjectGuid(string projectName, string assemblyName) + { + return SolutionGuidGenerator.GuidForProject(projectName + assemblyName); + } + + public string SolutionGuid(string projectName, string extension) + { + return SolutionGuidGenerator.GuidForSolution(projectName, extension); // GetExtensionOfSourceFiles(assembly.sourceFiles) + } + } +} diff --git a/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration/GUIDProvider.cs.meta b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration/GUIDProvider.cs.meta new file mode 100644 index 0000000..e1bc7ef --- /dev/null +++ b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration/GUIDProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8cfde1a59fb35574189691a9de1df93b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration/ProjectGeneration.cs b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration/ProjectGeneration.cs new file mode 100644 index 0000000..7f5ec31 --- /dev/null +++ b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration/ProjectGeneration.cs @@ -0,0 +1,1090 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Security; +using System.Security.Cryptography; +using System.Text; +using System.Text.RegularExpressions; +using Packages.Rider.Editor.Util; +using UnityEditor; +using UnityEditor.Compilation; +using UnityEditor.PackageManager; +using UnityEditorInternal; +using UnityEngine; + +namespace Packages.Rider.Editor +{ + public interface IGenerator + { + bool SyncIfNeeded(IEnumerable affectedFiles, IEnumerable reimportedFiles); + void Sync(); + bool HasSolutionBeenGenerated(); + string SolutionFile(); + string ProjectDirectory { get; } + void GenerateAll(bool generateAll); + } + + public interface IFileIO + { + bool Exists(string fileName); + + string ReadAllText(string fileName); + void WriteAllText(string fileName, string content); + } + + public interface IGUIDGenerator + { + string ProjectGuid(string projectName, string assemblyName); + string SolutionGuid(string projectName, string extension); + } + + public interface IAssemblyNameProvider + { + string GetAssemblyNameFromScriptPath(string path); + IEnumerable GetAssemblies(Func shouldFileBePartOfSolution); + IEnumerable GetAllAssetPaths(); + UnityEditor.PackageManager.PackageInfo FindForAssetPath(string assetPath); + ResponseFileData ParseResponseFile(string responseFilePath, string projectDirectory, string[] systemReferenceDirectories); + } + + class AssemblyNameProvider : IAssemblyNameProvider + { + public string GetAssemblyNameFromScriptPath(string path) + { + return CompilationPipeline.GetAssemblyNameFromScriptPath(path); + } + + public IEnumerable GetAssemblies(Func shouldFileBePartOfSolution) + { + return CompilationPipeline.GetAssemblies() + .Where(i => 0 < i.sourceFiles.Length && i.sourceFiles.Any(shouldFileBePartOfSolution)); + } + + public IEnumerable GetAllAssetPaths() + { + return AssetDatabase.GetAllAssetPaths(); + } + + public UnityEditor.PackageManager.PackageInfo FindForAssetPath(string assetPath) + { + return UnityEditor.PackageManager.PackageInfo.FindForAssetPath(assetPath); + } + + public ResponseFileData ParseResponseFile(string responseFilePath, string projectDirectory, string[] systemReferenceDirectories) + { + return CompilationPipeline.ParseResponseFile( + responseFilePath, + projectDirectory, + systemReferenceDirectories + ); + } + } + + public class ProjectGeneration : IGenerator + { + enum ScriptingLanguage + { + None, + CSharp + } + + public static readonly string MSBuildNamespaceUri = "http://schemas.microsoft.com/developer/msbuild/2003"; + + /// + /// Map source extensions to ScriptingLanguages + /// + static readonly Dictionary k_BuiltinSupportedExtensions = + new Dictionary + { + {"cs", ScriptingLanguage.CSharp}, + {"uxml", ScriptingLanguage.None}, + {"uss", ScriptingLanguage.None}, + {"shader", ScriptingLanguage.None}, + {"compute", ScriptingLanguage.None}, + {"cginc", ScriptingLanguage.None}, + {"hlsl", ScriptingLanguage.None}, + {"glslinc", ScriptingLanguage.None}, + {"template", ScriptingLanguage.None}, + {"raytrace", ScriptingLanguage.None} + }; + + string m_SolutionProjectEntryTemplate = string.Join(Environment.NewLine, + @"Project(""{{{0}}}"") = ""{1}"", ""{2}"", ""{{{3}}}""", + @"EndProject").Replace(" ", "\t"); + + string m_SolutionProjectConfigurationTemplate = string.Join(Environment.NewLine, + @" {{{0}}}.Debug|Any CPU.ActiveCfg = Debug|Any CPU", + @" {{{0}}}.Debug|Any CPU.Build.0 = Debug|Any CPU", + @" {{{0}}}.Release|Any CPU.ActiveCfg = Release|Any CPU", + @" {{{0}}}.Release|Any CPU.Build.0 = Release|Any CPU").Replace(" ", "\t"); + + static readonly string[] k_ReimportSyncExtensions = {".dll", ".asmdef"}; + + /// + /// Map ScriptingLanguages to project extensions + /// + /*static readonly Dictionary k_ProjectExtensions = new Dictionary + { + { ScriptingLanguage.CSharp, ".csproj" }, + { ScriptingLanguage.None, ".csproj" }, + };*/ + static readonly Regex k_ScriptReferenceExpression = new Regex( + @"^Library.ScriptAssemblies.(?(?.*)\.dll$)", + RegexOptions.Compiled | RegexOptions.IgnoreCase); + + string[] m_ProjectSupportedExtensions = new string[0]; + bool m_ShouldGenerateAll; + + public string ProjectDirectory { get; } + + public void GenerateAll(bool generateAll) + { + m_ShouldGenerateAll = generateAll; + } + + readonly string m_ProjectName; + readonly IAssemblyNameProvider m_AssemblyNameProvider; + readonly IFileIO m_FileIOProvider; + readonly IGUIDGenerator m_GUIDGenerator; + internal static bool isRiderProjectGeneration; // workaround to https://github.cds.internal.unity3d.com/unity/com.unity.ide.rider/issues/28 + + const string k_ToolsVersion = "4.0"; + const string k_ProductVersion = "10.0.20506"; + const string k_BaseDirectory = "."; + const string k_TargetFrameworkVersion = "v4.7.1"; + const string k_TargetLanguageVersion = "latest"; + + static readonly Regex scriptReferenceExpression = new Regex( + @"^Library.ScriptAssemblies.(?(?.*)\.dll$)", + RegexOptions.Compiled | RegexOptions.IgnoreCase); + + public ProjectGeneration() : this(Directory.GetParent(Application.dataPath).FullName) + { + } + + public ProjectGeneration(string tempDirectory) : this(tempDirectory, new AssemblyNameProvider(), new FileIOProvider(), new GUIDProvider()) + { + } + + public ProjectGeneration(string tempDirectory, IAssemblyNameProvider assemblyNameProvider, IFileIO fileIoProvider, IGUIDGenerator guidGenerator) + { + ProjectDirectory = tempDirectory.Replace('\\', '/'); + m_ProjectName = Path.GetFileName(ProjectDirectory); + m_AssemblyNameProvider = assemblyNameProvider; + m_FileIOProvider = fileIoProvider; + m_GUIDGenerator = guidGenerator; + } + + /// + /// Syncs the scripting solution if any affected files are relevant. + /// + /// + /// Whether the solution was synced. + /// + /// + /// A set of files whose status has changed + /// + /// + /// A set of files that got reimported + /// + public bool SyncIfNeeded(IEnumerable affectedFiles, IEnumerable reimportedFiles) + { + SetupProjectSupportedExtensions(); + + if (HasFilesBeenModified(affectedFiles, reimportedFiles)) + { + Sync(); + return true; + } + + return false; + } + + bool HasFilesBeenModified(IEnumerable affectedFiles, IEnumerable reimportedFiles) + { + return affectedFiles.Any(ShouldFileBePartOfSolution) || reimportedFiles.Any(ShouldSyncOnReimportedAsset); + } + + static bool ShouldSyncOnReimportedAsset(string asset) + { + return k_ReimportSyncExtensions.Contains(new FileInfo(asset).Extension); + } + + public void Sync() + { + SetupProjectSupportedExtensions(); + var types = GetAssetPostprocessorTypes(); + isRiderProjectGeneration = true; + bool externalCodeAlreadyGeneratedProjects = OnPreGeneratingCSProjectFiles(types); + isRiderProjectGeneration = false; + if (!externalCodeAlreadyGeneratedProjects) + { + GenerateAndWriteSolutionAndProjects(types); + } + + OnGeneratedCSProjectFiles(types); + } + + public bool HasSolutionBeenGenerated() + { + return m_FileIOProvider.Exists(SolutionFile()); + } + + void SetupProjectSupportedExtensions() + { + m_ProjectSupportedExtensions = EditorSettings.projectGenerationUserExtensions; + } + + bool ShouldFileBePartOfSolution(string file) + { + string extension = Path.GetExtension(file); + + // Exclude files coming from packages except if they are internalized. + if (!m_ShouldGenerateAll && IsInternalizedPackagePath(file)) + { + return false; + } + + // Dll's are not scripts but still need to be included.. + if (extension == ".dll") + return true; + + if (file.ToLower().EndsWith(".asmdef")) + return true; + + return IsSupportedExtension(extension); + } + + bool IsSupportedExtension(string extension) + { + extension = extension.TrimStart('.'); + if (k_BuiltinSupportedExtensions.ContainsKey(extension)) + return true; + if (m_ProjectSupportedExtensions.Contains(extension)) + return true; + return false; + } + + static ScriptingLanguage ScriptingLanguageFor(Assembly island) + { + return ScriptingLanguageFor(GetExtensionOfSourceFiles(island.sourceFiles)); + } + + static string GetExtensionOfSourceFiles(string[] files) + { + return files.Length > 0 ? GetExtensionOfSourceFile(files[0]) : "NA"; + } + + static string GetExtensionOfSourceFile(string file) + { + var ext = Path.GetExtension(file).ToLower(); + ext = ext.Substring(1); //strip dot + return ext; + } + + static ScriptingLanguage ScriptingLanguageFor(string extension) + { + return k_BuiltinSupportedExtensions.TryGetValue(extension.TrimStart('.'), out var result) + ? result + : ScriptingLanguage.None; + } + + public void GenerateAndWriteSolutionAndProjects(Type[] types) + { + // Only synchronize islands that have associated source files and ones that we actually want in the project. + // This also filters out DLLs coming from .asmdef files in packages. + var assemblies = m_AssemblyNameProvider.GetAssemblies(ShouldFileBePartOfSolution); + + var allAssetProjectParts = GenerateAllAssetProjectParts(); + + var monoIslands = assemblies.ToList(); + + SyncSolution(monoIslands, types); + var allProjectIslands = RelevantIslandsForMode(monoIslands).ToList(); + foreach (Assembly assembly in allProjectIslands) + { + var responseFileData = ParseResponseFileData(assembly); + SyncProject(assembly, allAssetProjectParts, responseFileData, allProjectIslands, types); + } + } + + IEnumerable ParseResponseFileData(Assembly assembly) + { + var systemReferenceDirectories = + CompilationPipeline.GetSystemAssemblyDirectories(assembly.compilerOptions.ApiCompatibilityLevel); + + Dictionary responseFilesData = assembly.compilerOptions.ResponseFiles.ToDictionary( + x => x, x => m_AssemblyNameProvider.ParseResponseFile( + x, + ProjectDirectory, + systemReferenceDirectories + )); + + Dictionary responseFilesWithErrors = responseFilesData.Where(x => x.Value.Errors.Any()) + .ToDictionary(x => x.Key, x => x.Value); + + if (responseFilesWithErrors.Any()) + { + foreach (var error in responseFilesWithErrors) + foreach (var valueError in error.Value.Errors) + { + Debug.LogError($"{error.Key} Parse Error : {valueError}"); + } + } + + return responseFilesData.Select(x => x.Value); + } + + Dictionary GenerateAllAssetProjectParts() + { + Dictionary stringBuilders = new Dictionary(); + + foreach (string asset in m_AssemblyNameProvider.GetAllAssetPaths()) + { + // Exclude files coming from packages except if they are internalized. + if (!m_ShouldGenerateAll && IsInternalizedPackagePath(asset)) + { + continue; + } + + string extension = Path.GetExtension(asset); + if (IsSupportedExtension(extension) && ScriptingLanguage.None == ScriptingLanguageFor(extension)) + { + // Find assembly the asset belongs to by adding script extension and using compilation pipeline. + var assemblyName = m_AssemblyNameProvider.GetAssemblyNameFromScriptPath(asset + ".cs"); + + if (string.IsNullOrEmpty(assemblyName)) + { + continue; + } + + assemblyName = FileSystemUtil.FileNameWithoutExtension(assemblyName); + + if (!stringBuilders.TryGetValue(assemblyName, out var projectBuilder)) + { + projectBuilder = new StringBuilder(); + stringBuilders[assemblyName] = projectBuilder; + } + + projectBuilder.Append(" ") + .Append(Environment.NewLine); + } + } + + var result = new Dictionary(); + + foreach (var entry in stringBuilders) + result[entry.Key] = entry.Value.ToString(); + + return result; + } + + bool IsInternalizedPackagePath(string file) + { + if (string.IsNullOrWhiteSpace(file)) + { + return false; + } + + var packageInfo = m_AssemblyNameProvider.FindForAssetPath(file); + if (packageInfo == null) + { + return false; + } + + var packageSource = packageInfo.source; + return packageSource != PackageSource.Embedded && packageSource != PackageSource.Local; + } + + void SyncProject( + Assembly island, + Dictionary allAssetsProjectParts, + IEnumerable responseFilesData, + List allProjectIslands, + Type[] types) + { + SyncProjectFileIfNotChanged(ProjectFile(island), + ProjectText(island, allAssetsProjectParts, responseFilesData.ToList(), allProjectIslands), types); + } + + void SyncProjectFileIfNotChanged(string path, string newContents, Type[] types) + { + if (Path.GetExtension(path) == ".csproj") + { + newContents = OnGeneratedCSProject(path, newContents, types); + } + + SyncFileIfNotChanged(path, newContents); + } + + void SyncSolutionFileIfNotChanged(string path, string newContents, Type[] types) + { + newContents = OnGeneratedSlnSolution(path, newContents, types); + + SyncFileIfNotChanged(path, newContents); + } + + static List SafeGetTypes(System.Reflection.Assembly a) + { + List ret; + + try + { + ret = a.GetTypes().ToList(); + } + catch (System.Reflection.ReflectionTypeLoadException rtl) + { + ret = rtl.Types.ToList(); + } + catch (Exception) + { + return new List(); + } + + return ret.Where(r => r != null).ToList(); + } + + static void OnGeneratedCSProjectFiles(Type[] types) + { + var args = new object[0]; + foreach (var type in types) + { + var method = type.GetMethod("OnGeneratedCSProjectFiles", + System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic | + System.Reflection.BindingFlags.Static); + if (method == null) + { + continue; + } + + method.Invoke(null, args); + } + } + + public static Type[] GetAssetPostprocessorTypes() + { + return TypeCache.GetTypesDerivedFrom().ToArray(); // doesn't find types from EditorPlugin, which is fine + } + + static bool OnPreGeneratingCSProjectFiles(Type[] types) + { + bool result = false; + foreach (var type in types) + { + var args = new object[0]; + var method = type.GetMethod("OnPreGeneratingCSProjectFiles", + System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic | + System.Reflection.BindingFlags.Static); + if (method == null) + { + continue; + } + + var returnValue = method.Invoke(null, args); + if (method.ReturnType == typeof(bool)) + { + result |= (bool) returnValue; + } + } + + return result; + } + + static string OnGeneratedCSProject(string path, string content, Type[] types) + { + foreach (var type in types) + { + var args = new[] {path, content}; + var method = type.GetMethod("OnGeneratedCSProject", + System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic | + System.Reflection.BindingFlags.Static); + if (method == null) + { + continue; + } + + var returnValue = method.Invoke(null, args); + if (method.ReturnType == typeof(string)) + { + content = (string) returnValue; + } + } + + return content; + } + + static string OnGeneratedSlnSolution(string path, string content, Type[] types) + { + foreach (var type in types) + { + var args = new[] {path, content}; + var method = type.GetMethod("OnGeneratedSlnSolution", + System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic | + System.Reflection.BindingFlags.Static); + if (method == null) + { + continue; + } + + var returnValue = method.Invoke(null, args); + if (method.ReturnType == typeof(string)) + { + content = (string) returnValue; + } + } + + return content; + } + + void SyncFileIfNotChanged(string filename, string newContents) + { + try + { + if (m_FileIOProvider.Exists(filename) && newContents == m_FileIOProvider.ReadAllText(filename)) + { + return; + } + } + catch (Exception exception) + { + Debug.LogException(exception); + } + + m_FileIOProvider.WriteAllText(filename, newContents); + } + + string ProjectText(Assembly assembly, + Dictionary allAssetsProjectParts, + List responseFilesData, + List allProjectIslands) + { + var projectBuilder = new StringBuilder(ProjectHeader(assembly, responseFilesData)); + var references = new List(); + var projectReferences = new List(); + + foreach (string file in assembly.sourceFiles) + { + if (!ShouldFileBePartOfSolution(file)) + continue; + + var extension = Path.GetExtension(file).ToLower(); + var fullFile = EscapedRelativePathFor(file); + if (".dll" != extension) + { + projectBuilder.Append(" ").Append(Environment.NewLine); + } + else + { + references.Add(fullFile); + } + } + + // Append additional non-script files that should be included in project generation. + if (allAssetsProjectParts.TryGetValue(assembly.name, out var additionalAssetsForProject)) + projectBuilder.Append(additionalAssetsForProject); + + var islandRefs = references.Union(assembly.allReferences); + foreach (string reference in islandRefs) + { + if (reference.EndsWith("/UnityEditor.dll", StringComparison.Ordinal) + || reference.EndsWith("/UnityEngine.dll", StringComparison.Ordinal) + || reference.EndsWith("\\UnityEditor.dll", StringComparison.Ordinal) + || reference.EndsWith("\\UnityEngine.dll", StringComparison.Ordinal)) + continue; + + var match = k_ScriptReferenceExpression.Match(reference); + if (match.Success) + { + // assume csharp language + // Add a reference to a project except if it's a reference to a script assembly + // that we are not generating a project for. This will be the case for assemblies + // coming from .assembly.json files in non-internalized packages. + var dllName = match.Groups["dllname"].Value; + if (allProjectIslands.Any(i => Path.GetFileName(i.outputPath) == dllName)) + { + projectReferences.Add(match); + continue; + } + } + + string fullReference = Path.IsPathRooted(reference) ? reference : Path.Combine(ProjectDirectory, reference); + + AppendReference(fullReference, projectBuilder); + } + + var responseRefs = responseFilesData.SelectMany(x => x.FullPathReferences.Select(r => r)); + foreach (var reference in responseRefs) + { + AppendReference(reference, projectBuilder); + } + + if (0 < projectReferences.Count) + { + projectBuilder.AppendLine(" "); + projectBuilder.AppendLine(" "); + foreach (Match reference in projectReferences) + { + var referencedProject = reference.Groups["project"].Value; + + projectBuilder.Append(" ").Append(Environment.NewLine); + projectBuilder + .Append(" {") + .Append(m_GUIDGenerator.ProjectGuid(m_ProjectName, reference.Groups["project"].Value)) + .Append("}") + .Append(Environment.NewLine); + projectBuilder.Append(" ").Append(referencedProject).Append("").Append(Environment.NewLine); + projectBuilder.AppendLine(" "); + } + } + + projectBuilder.Append(ProjectFooter()); + return projectBuilder.ToString(); + } + + static void AppendReference(string fullReference, StringBuilder projectBuilder) + { + //replace \ with / and \\ with / + var escapedFullPath = SecurityElement.Escape(fullReference); + escapedFullPath = escapedFullPath.Replace("\\\\", "/").Replace("\\", "/"); + projectBuilder.Append(" ").Append(Environment.NewLine); + projectBuilder.Append(" ").Append(escapedFullPath).Append("").Append(Environment.NewLine); + projectBuilder.Append(" ").Append(Environment.NewLine); + } + + public string ProjectFile(Assembly assembly) + { + return Path.Combine(ProjectDirectory, $"{assembly.name}.csproj"); + } + + public string SolutionFile() + { + return Path.Combine(ProjectDirectory, $"{m_ProjectName}.sln"); + } + + string ProjectHeader( + Assembly assembly, + List responseFilesData + ) + { + var otherResponseFilesData = GetOtherArgumentsFromResponseFilesData(responseFilesData); + var arguments = new object[] + { + k_ToolsVersion, k_ProductVersion, m_GUIDGenerator.ProjectGuid(m_ProjectName, assembly.name), + InternalEditorUtility.GetEngineAssemblyPath(), + InternalEditorUtility.GetEditorAssemblyPath(), + string.Join(";", + new[] {"DEBUG", "TRACE"}.Concat(EditorUserBuildSettings.activeScriptCompilationDefines).Concat(assembly.defines) + .Concat(responseFilesData.SelectMany(x => x.Defines)).Distinct().ToArray()), + MSBuildNamespaceUri, + assembly.name, + EditorSettings.projectGenerationRootNamespace, + k_TargetFrameworkVersion, + GenerateLangVersion(otherResponseFilesData["langversion"]), + k_BaseDirectory, + assembly.compilerOptions.AllowUnsafeCode | responseFilesData.Any(x => x.Unsafe), + GenerateNoWarn(otherResponseFilesData["nowarn"].Distinct().ToArray()), + GenerateAnalyserItemGroup(otherResponseFilesData["analyzer"].Concat(otherResponseFilesData["a"]).SelectMany(x=>x.Split(';')).Distinct().ToArray()), + GenerateAnalyserAdditionalFiles(otherResponseFilesData["additionalfile"].SelectMany(x=>x.Split(';')).Distinct().ToArray()), + GenerateAnalyserRuleSet(otherResponseFilesData["ruleset"].Distinct().ToArray()), + GenerateWarningLevel(otherResponseFilesData["warn"].Concat(otherResponseFilesData["w"]).Distinct()), + GenerateWarningAsError(otherResponseFilesData["warnaserror"]), + GenerateDocumentationFile(otherResponseFilesData["doc"]) + }; + + try + { + return string.Format(GetProjectHeaderTemplate(), arguments); + } + catch (Exception) + { + throw new NotSupportedException( + "Failed creating c# project because the c# project header did not have the correct amount of arguments, which is " + + arguments.Length); + } + } + + private string GenerateDocumentationFile(IEnumerable paths) + { + if (!paths.Any()) + return String.Empty; + + + return $"{Environment.NewLine}{string.Join(Environment.NewLine, paths.Select(a => $" {a}"))}"; + } + + private string GenerateWarningAsError(IEnumerable enumerable) + { + string returnValue = String.Empty; + bool allWarningsAsErrors = false; + List warningIds = new List(); + + foreach (string s in enumerable) + { + if (s == "+") allWarningsAsErrors = true; + else if (s == "-") allWarningsAsErrors = false; + else + { + warningIds.Add(s); + } + } + + returnValue += $@" {allWarningsAsErrors}"; + if (warningIds.Any()) + { + returnValue += $"{Environment.NewLine} {string.Join(";", warningIds)}"; + } + + return $"{Environment.NewLine}{returnValue}"; + } + + private string GenerateWarningLevel(IEnumerable warningLevel) + { + var level = warningLevel.FirstOrDefault(); + if (!string.IsNullOrWhiteSpace(level)) + return level; + + return 4.ToString(); + } + + static string GetSolutionText() + { + return string.Join(Environment.NewLine, + @"", + @"Microsoft Visual Studio Solution File, Format Version {0}", + @"# Visual Studio {1}", + @"{2}", + @"Global", + @" GlobalSection(SolutionConfigurationPlatforms) = preSolution", + @" Debug|Any CPU = Debug|Any CPU", + @" Release|Any CPU = Release|Any CPU", + @" EndGlobalSection", + @" GlobalSection(ProjectConfigurationPlatforms) = postSolution", + @"{3}", + @" EndGlobalSection", + @" GlobalSection(SolutionProperties) = preSolution", + @" HideSolutionNode = FALSE", + @" EndGlobalSection", + @"EndGlobal", + @"").Replace(" ", "\t"); + } + + static string GetProjectFooterTemplate() + { + return string.Join(Environment.NewLine, + @" ", + @" ", + @" ", + @"", + @""); + } + + static string GetProjectHeaderTemplate() + { + var header = new[] + { + @"", + @"", + @" ", + @" {10}", + @" <_TargetFrameworkDirectories>non_empty_path_generated_by_unity.rider.package", + @" <_FullFrameworkReferenceAssemblyPaths>non_empty_path_generated_by_unity.rider.package", + @" true{16}", + @" ", + @" ", + @" Debug", + @" AnyCPU", + @" {1}", + @" 2.0", + @" {8}", + @" {{{2}}}", + @" Library", + @" Properties", + @" {7}", + @" {9}", + @" 512", + @" {11}", + @" ", + @" ", + @" true", + @" full", + @" false", + @" Temp\bin\Debug\", + @" {5}", + @" prompt", + @" {17}", + @" 0169{13}", + @" {12}{18}{19}", + @" ", + @" ", + @" pdbonly", + @" true", + @" Temp\bin\Release\", + @" prompt", + @" {17}", + @" 0169{13}", + @" {12}{18}{19}", + @" " + }; + + var forceExplicitReferences = new[] + { + @" ", + @" true", + @" true", + @" false", + @" false", + @" false", + @" " + }; + + var itemGroupStart = new[] + { + @" " + }; + + var footer = new[] + { + @" ", + @" {3}", + @" ", + @" ", + @" {4}", + @" ", + @" {14}{15}", + @" ", + @"" + }; + + var pieces = header.Concat(forceExplicitReferences).Concat(itemGroupStart).Concat(footer).ToArray(); + return string.Join(Environment.NewLine, pieces); + } + + void SyncSolution(IEnumerable islands, Type[] types) + { + SyncSolutionFileIfNotChanged(SolutionFile(), SolutionText(islands), types); + } + + string SolutionText(IEnumerable islands) + { + var fileversion = "11.00"; + var vsversion = "2010"; + + var relevantIslands = RelevantIslandsForMode(islands); + string projectEntries = GetProjectEntries(relevantIslands); + string projectConfigurations = string.Join(Environment.NewLine, + relevantIslands.Select(i => GetProjectActiveConfigurations(m_GUIDGenerator.ProjectGuid(m_ProjectName, i.name))).ToArray()); + return string.Format(GetSolutionText(), fileversion, vsversion, projectEntries, projectConfigurations); + } + + private static string GenerateAnalyserItemGroup(string[] paths) + { + // + // + // + // + if (!paths.Any()) + return string.Empty; + + var analyserBuilder = new StringBuilder(); + analyserBuilder.AppendLine(" "); + foreach (var path in paths) + { + analyserBuilder.AppendLine($" "); + } + analyserBuilder.AppendLine(" "); + return analyserBuilder.ToString(); + } + + private static ILookup GetOtherArgumentsFromResponseFilesData(List responseFilesData) + { + var paths = responseFilesData.SelectMany(x => + { + return x.OtherArguments + .Where(a => a.StartsWith("/") || a.StartsWith("-")) + .Select(b => + { + var index = b.IndexOf(":", StringComparison.Ordinal); + if (index > 0 && b.Length > index) + { + var key = b.Substring(1, index - 1); + return new KeyValuePair(key, b.Substring(index + 1)); + } + + const string warnaserror = "warnaserror"; + if (b.Substring(1).StartsWith(warnaserror)) + { + return new KeyValuePair(warnaserror, b.Substring(warnaserror.Length+ 1) ); + } + + return default; + }); + }) + .Distinct() + .ToLookup(o => o.Key, pair => pair.Value); + return paths; + } + + private string GenerateLangVersion(IEnumerable langVersionList) + { + var langVersion = langVersionList.FirstOrDefault(); + if (!string.IsNullOrWhiteSpace(langVersion)) + return langVersion; + return k_TargetLanguageVersion; + } + + private static string GenerateAnalyserRuleSet(string[] paths) + { + //..\path\to\myrules.ruleset + if (!paths.Any()) + return string.Empty; + + return $"{Environment.NewLine}{string.Join(Environment.NewLine, paths.Select(a => $" {a}"))}"; + } + + private static string GenerateAnalyserAdditionalFiles(string[] paths) + { + if (!paths.Any()) + return string.Empty; + + + var analyserBuilder = new StringBuilder(); + analyserBuilder.AppendLine(" "); + foreach (var path in paths) + { + analyserBuilder.AppendLine($" "); + } + analyserBuilder.AppendLine(" "); + return analyserBuilder.ToString(); + } + + private static string GenerateNoWarn(string[] codes) + { + if (!codes.Any()) + return string.Empty; + + return $",{string.Join(",", codes)}"; + } + + static IEnumerable RelevantIslandsForMode(IEnumerable islands) + { + IEnumerable relevantIslands = islands.Where(i => ScriptingLanguage.CSharp == ScriptingLanguageFor(i)); + return relevantIslands; + } + + /// + /// Get a Project("{guid}") = "MyProject", "MyProject.unityproj", "{projectguid}" + /// entry for each relevant language + /// + string GetProjectEntries(IEnumerable islands) + { + var projectEntries = islands.Select(i => string.Format( + m_SolutionProjectEntryTemplate, + m_GUIDGenerator.SolutionGuid(m_ProjectName, GetExtensionOfSourceFiles(i.sourceFiles)), + i.name, + Path.GetFileName(ProjectFile(i)), + m_GUIDGenerator.ProjectGuid(m_ProjectName, i.name) + )); + + return string.Join(Environment.NewLine, projectEntries.ToArray()); + } + + /// + /// Generate the active configuration string for a given project guid + /// + string GetProjectActiveConfigurations(string projectGuid) + { + return string.Format( + m_SolutionProjectConfigurationTemplate, + projectGuid); + } + + string EscapedRelativePathFor(string file) + { + var projectDir = ProjectDirectory.Replace('/', '\\'); + file = file.Replace('/', '\\'); + var path = SkipPathPrefix(file, projectDir); + + var packageInfo = m_AssemblyNameProvider.FindForAssetPath(path.Replace('\\', '/')); + if (packageInfo != null) + { + // We have to normalize the path, because the PackageManagerRemapper assumes + // dir seperators will be os specific. + var absolutePath = Path.GetFullPath(NormalizePath(path)).Replace('/', '\\'); + path = SkipPathPrefix(absolutePath, projectDir); + } + + return SecurityElement.Escape(path); + } + + static string SkipPathPrefix(string path, string prefix) + { + if (path.Replace("\\", "/").StartsWith($"{prefix}/")) + return path.Substring(prefix.Length + 1); + return path; + } + + static string NormalizePath(string path) + { + if (Path.DirectorySeparatorChar == '\\') + return path.Replace('/', Path.DirectorySeparatorChar); + return path.Replace('\\', Path.DirectorySeparatorChar); + } + + static string ProjectFooter() + { + return GetProjectFooterTemplate(); + } + + static string GetProjectExtension() + { + return ".csproj"; + } + } + + public static class SolutionGuidGenerator + { + public static string GuidForProject(string projectName) + { + return ComputeGuidHashFor(projectName + "salt"); + } + + public static string GuidForSolution(string projectName, string sourceFileExtension) + { + if (sourceFileExtension.ToLower() == "cs") + // GUID for a C# class library: http://www.codeproject.com/Reference/720512/List-of-Visual-Studio-Project-Type-GUIDs + return "FAE04EC0-301F-11D3-BF4B-00C04F79EFBC"; + + return ComputeGuidHashFor(projectName); + } + + static string ComputeGuidHashFor(string input) + { + var hash = MD5.Create().ComputeHash(Encoding.Default.GetBytes(input)); + return HashAsGuid(HashToString(hash)); + } + + static string HashAsGuid(string hash) + { + var guid = hash.Substring(0, 8) + "-" + hash.Substring(8, 4) + "-" + hash.Substring(12, 4) + "-" + + hash.Substring(16, 4) + "-" + hash.Substring(20, 12); + return guid.ToUpper(); + } + + static string HashToString(byte[] bs) + { + var sb = new StringBuilder(); + foreach (byte b in bs) + sb.Append(b.ToString("x2")); + return sb.ToString(); + } + } +} diff --git a/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration/ProjectGeneration.cs.meta b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration/ProjectGeneration.cs.meta new file mode 100644 index 0000000..182b400 --- /dev/null +++ b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration/ProjectGeneration.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7078f19173ceac84fb9e29b9f6175201 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/RiderInitializer.cs b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/RiderInitializer.cs new file mode 100644 index 0000000..f64ee8d --- /dev/null +++ b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/RiderInitializer.cs @@ -0,0 +1,38 @@ +using System; +using System.IO; +using UnityEngine; +using Debug = UnityEngine.Debug; + +namespace Packages.Rider.Editor +{ + internal class RiderInitializer + { + public void Initialize(string editorPath) + { + var assembly = EditorPluginInterop.EditorPluginAssembly; + if (EditorPluginInterop.EditorPluginIsLoadedFromAssets(assembly)) + { + Debug.LogError($"Please delete {assembly.Location}. Unity 2019.2+ loads it directly from Rider installation. To disable this, open Rider's settings, search and uncheck 'Automatically install and update Rider's Unity editor plugin'."); + return; + } + + var dllName = "JetBrains.Rider.Unity.Editor.Plugin.Full.Repacked.dll"; + var relPath = "../../plugins/rider-unity/EditorPlugin"; + if (SystemInfo.operatingSystemFamily == OperatingSystemFamily.MacOSX) + relPath = "Contents/plugins/rider-unity/EditorPlugin"; + var dllFile = new FileInfo(Path.Combine(Path.Combine(editorPath, relPath), dllName)); + + if (dllFile.Exists) + { + var bytes = File.ReadAllBytes(dllFile.FullName); + assembly = AppDomain.CurrentDomain.Load(bytes); // doesn't lock assembly on disk + // assembly = AppDomain.CurrentDomain.Load(AssemblyName.GetAssemblyName(dllFile.FullName)); // use this for external source debug + EditorPluginInterop.InitEntryPoint(assembly); + } + else + { + Debug.Log($"Unable to find Rider EditorPlugin {dllFile.FullName} for Unity "); + } + } + } +} diff --git a/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/RiderInitializer.cs.meta b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/RiderInitializer.cs.meta new file mode 100644 index 0000000..b37687a --- /dev/null +++ b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/RiderInitializer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f5a0cc9645f0e2d4fb816156dcf3f4dd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/RiderScriptEditor.cs b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/RiderScriptEditor.cs new file mode 100644 index 0000000..c53c6b1 --- /dev/null +++ b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/RiderScriptEditor.cs @@ -0,0 +1,404 @@ +using System; +using System.Diagnostics; +using System.IO; +using System.Linq; +using Packages.Rider.Editor.Util; +using Unity.CodeEditor; +using UnityEditor; +using UnityEngine; +using Debug = UnityEngine.Debug; + +namespace Packages.Rider.Editor +{ + [InitializeOnLoad] + public class RiderScriptEditor : IExternalCodeEditor + { + IDiscovery m_Discoverability; + IGenerator m_ProjectGeneration; + RiderInitializer m_Initiliazer = new RiderInitializer(); + + static RiderScriptEditor() + { + try + { + var projectGeneration = new ProjectGeneration(); + var editor = new RiderScriptEditor(new Discovery(), projectGeneration); + CodeEditor.Register(editor); + var path = GetEditorRealPath(CodeEditor.CurrentEditorInstallation); + + if (IsRiderInstallation(path)) + { + if (!RiderScriptEditorData.instance.InitializedOnce) + { + var installations = editor.Installations; + // is toolbox and outdated - update + if (installations.Any() && RiderPathLocator.IsToolbox(path) && installations.All(a => a.Path != path)) + { + var toolboxInstallations = installations.Where(a => a.Name.Contains("(JetBrains Toolbox)")).ToArray(); + if (toolboxInstallations.Any()) + { + var newEditor = toolboxInstallations.Last().Path; + CodeEditor.SetExternalScriptEditor(newEditor); + path = newEditor; + } + else + { + var newEditor = installations.Last().Path; + CodeEditor.SetExternalScriptEditor(newEditor); + path = newEditor; + } + } + + // exists, is non toolbox and outdated - notify + if (installations.Any() && FileSystemUtil.EditorPathExists(path) && installations.All(a => a.Path != path)) + { + var newEditorName = installations.Last().Name; + Debug.LogWarning($"Consider updating External Editor in Unity to Rider {newEditorName}."); + } + + ShowWarningOnUnexpectedScriptEditor(path); + RiderScriptEditorData.instance.InitializedOnce = true; + } + + if (!FileSystemUtil.EditorPathExists(path)) // previously used rider was removed + { + var installations = editor.Installations; + if (installations.Any()) + { + var newEditor = installations.Last().Path; + CodeEditor.SetExternalScriptEditor(newEditor); + path = newEditor; + } + } + RiderScriptEditorData.instance.Init(); + + editor.CreateSolutionIfDoesntExist(); + if (RiderScriptEditorData.instance.shouldLoadEditorPlugin) + { + editor.m_Initiliazer.Initialize(path); + } + + InitProjectFilesWatcher(); + } + } + catch (Exception e) + { + Debug.LogException(e); + } + } + + private static void ShowWarningOnUnexpectedScriptEditor(string path) + { + // Show warning, when Unity was started from Rider, but external editor is different https://github.com/JetBrains/resharper-unity/issues/1127 + var args = Environment.GetCommandLineArgs(); + var commandlineParser = new CommandLineParser(args); + if (commandlineParser.Options.ContainsKey("-riderPath")) + { + var originRiderPath = commandlineParser.Options["-riderPath"]; + var originRealPath = GetEditorRealPath(originRiderPath); + var originVersion = RiderPathLocator.GetBuildNumber(originRealPath); + var version = RiderPathLocator.GetBuildNumber(path); + if (originVersion != string.Empty && originVersion != version) + { + Debug.LogWarning("Unity was started by a version of Rider that is not the current default external editor. Advanced integration features cannot be enabled."); + Debug.Log($"Unity was started by Rider {originVersion}, but external editor is set to: {path}"); + } + } + } + + private static void InitProjectFilesWatcher() + { + var watcher = new FileSystemWatcher(); + watcher.Path = Directory.GetCurrentDirectory(); + watcher.NotifyFilter = NotifyFilters.LastWrite; //Watch for changes in LastWrite times + watcher.Filter = "*.*"; + + // Add event handlers. + watcher.Changed += OnChanged; + watcher.Created += OnChanged; + + watcher.EnableRaisingEvents = true; // Begin watching. + + AppDomain.CurrentDomain.DomainUnload += (EventHandler) ((_, __) => + { + watcher.Dispose(); + }); + } + + private static void OnChanged(object sender, FileSystemEventArgs e) + { + var extension = Path.GetExtension(e.FullPath); + if (extension == ".sln" || extension == ".csproj") + RiderScriptEditorData.instance.HasChanges = true; + } + + internal static string GetEditorRealPath(string path) + { + if (string.IsNullOrEmpty(path)) + { + return path; + } + + if (!FileSystemUtil.EditorPathExists(path)) + return path; + + if (SystemInfo.operatingSystemFamily != OperatingSystemFamily.Windows) + { + var realPath = FileSystemUtil.GetFinalPathName(path); + + // case of snap installation + if (SystemInfo.operatingSystemFamily == OperatingSystemFamily.Linux) + { + if (new FileInfo(path).Name.ToLowerInvariant() == "rider" && + new FileInfo(realPath).Name.ToLowerInvariant() == "snap") + { + var snapInstallPath = "/snap/rider/current/bin/rider.sh"; + if (new FileInfo(snapInstallPath).Exists) + return snapInstallPath; + } + } + + // in case of symlink + return realPath; + } + + return path; + } + + const string unity_generate_all = "unity_generate_all_csproj"; + + public RiderScriptEditor(IDiscovery discovery, IGenerator projectGeneration) + { + m_Discoverability = discovery; + m_ProjectGeneration = projectGeneration; + } + + private static string[] defaultExtensions + { + get + { + var customExtensions = new[] {"json", "asmdef", "log", "xaml"}; + return EditorSettings.projectGenerationBuiltinExtensions.Concat(EditorSettings.projectGenerationUserExtensions) + .Concat(customExtensions).Distinct().ToArray(); + } + } + + private static string[] HandledExtensions + { + get + { + return HandledExtensionsString.Split(new[] {';'}, StringSplitOptions.RemoveEmptyEntries).Select(s => s.TrimStart('.', '*')) + .ToArray(); + } + } + + private static string HandledExtensionsString + { + get { return EditorPrefs.GetString("Rider_UserExtensions", string.Join(";", defaultExtensions));} + set { EditorPrefs.SetString("Rider_UserExtensions", value); } + } + + private static bool SupportsExtension(string path) + { + var extension = Path.GetExtension(path); + if (string.IsNullOrEmpty(extension)) + return false; + return HandledExtensions.Contains(extension.TrimStart('.')); + } + + public void OnGUI() + { + var prevGenerate = EditorPrefs.GetBool(unity_generate_all, false); + var generateAll = EditorGUILayout.Toggle("Generate all .csproj files.", prevGenerate); + if (generateAll != prevGenerate) + { + EditorPrefs.SetBool(unity_generate_all, generateAll); + } + + m_ProjectGeneration.GenerateAll(generateAll); + + if (RiderScriptEditorData.instance.shouldLoadEditorPlugin) + { + HandledExtensionsString = EditorGUILayout.TextField(new GUIContent("Extensions handled: "), HandledExtensionsString); + } + } + + public void SyncIfNeeded(string[] addedFiles, string[] deletedFiles, string[] movedFiles, string[] movedFromFiles, + string[] importedFiles) + { + m_ProjectGeneration.SyncIfNeeded(addedFiles.Union(deletedFiles).Union(movedFiles).Union(movedFromFiles), + importedFiles); + } + + public void SyncAll() + { + AssetDatabase.Refresh(); + if (RiderScriptEditorData.instance.HasChanges) + { + m_ProjectGeneration.Sync(); + RiderScriptEditorData.instance.HasChanges = false; + } + } + + public void Initialize(string editorInstallationPath) // is called each time ExternalEditor is changed + { + RiderScriptEditorData.instance.Invalidate(editorInstallationPath); + m_ProjectGeneration.Sync(); // regenerate csproj and sln for new editor + } + + public bool OpenProject(string path, int line, int column) + { + if (path != "" && !SupportsExtension(path)) // Assets - Open C# Project passes empty path here + { + return false; + } + + if (path == "" && SystemInfo.operatingSystemFamily == OperatingSystemFamily.MacOSX) + { + // there is a bug in DllImplementation - use package implementation here instead https://github.cds.internal.unity3d.com/unity/com.unity.ide.rider/issues/21 + return OpenOSXApp(path, line, column); + } + + if (!IsUnityScript(path)) + { + var fastOpenResult = EditorPluginInterop.OpenFileDllImplementation(path, line, column); + if (fastOpenResult) + return true; + } + + if (SystemInfo.operatingSystemFamily == OperatingSystemFamily.MacOSX) + { + return OpenOSXApp(path, line, column); + } + + var solution = GetSolutionFile(path); // TODO: If solution file doesn't exist resync. + solution = solution == "" ? "" : $"\"{solution}\""; + var process = new Process + { + StartInfo = new ProcessStartInfo + { + FileName = CodeEditor.CurrentEditorInstallation, + Arguments = $"{solution} -l {line} \"{path}\"", + UseShellExecute = true, + } + }; + + process.Start(); + + return true; + } + + private bool OpenOSXApp(string path, int line, int column) + { + var solution = GetSolutionFile(path); // TODO: If solution file doesn't exist resync. + solution = solution == "" ? "" : $"\"{solution}\""; + var pathArguments = path == "" ? "" : $"-l {line} \"{path}\""; + var process = new Process + { + StartInfo = new ProcessStartInfo + { + FileName = "open", + Arguments = $"-n \"{CodeEditor.CurrentEditorInstallation}\" --args {solution} {pathArguments}", + CreateNoWindow = true, + UseShellExecute = true, + } + }; + + process.Start(); + + return true; + } + + private string GetSolutionFile(string path) + { + if (IsUnityScript(path)) + { + return Path.Combine(GetBaseUnityDeveloperFolder(), "Projects/CSharp/Unity.CSharpProjects.gen.sln"); + } + + var solutionFile = m_ProjectGeneration.SolutionFile(); + if (File.Exists(solutionFile)) + { + return solutionFile; + } + + return ""; + } + + static bool IsUnityScript(string path) + { + if (UnityEditor.Unsupported.IsDeveloperBuild()) + { + var baseFolder = GetBaseUnityDeveloperFolder().Replace("\\", "/"); + var lowerPath = path.ToLowerInvariant().Replace("\\", "/"); + + if (lowerPath.Contains((baseFolder + "/Runtime").ToLowerInvariant()) + || lowerPath.Contains((baseFolder + "/Editor").ToLowerInvariant())) + { + return true; + } + } + + return false; + } + + static string GetBaseUnityDeveloperFolder() + { + return Directory.GetParent(EditorApplication.applicationPath).Parent.Parent.FullName; + } + + public bool TryGetInstallationForPath(string editorPath, out CodeEditor.Installation installation) + { + if (FileSystemUtil.EditorPathExists(editorPath) && IsRiderInstallation(editorPath)) + { + var info = new RiderPathLocator.RiderInfo(editorPath, false); + installation = new CodeEditor.Installation + { + Name = info.Presentation, + Path = info.Path + }; + return true; + } + + installation = default; + return false; + } + + public static bool IsRiderInstallation(string path) + { + if (IsAssetImportWorkerProcess()) + return false; + + if (string.IsNullOrEmpty(path)) + { + return false; + } + + var fileInfo = new FileInfo(path); + var filename = fileInfo.Name.ToLowerInvariant(); + return filename.StartsWith("rider", StringComparison.Ordinal); + } + + private static bool IsAssetImportWorkerProcess() + { +#if UNITY_2019_3_OR_NEWER + return UnityEditor.Experimental.AssetDatabaseExperimental.IsAssetImportWorkerProcess(); +#else + return false; +#endif + } + + public static string CurrentEditor // works fast, doesn't validate if executable really exists + => EditorPrefs.GetString("kScriptsDefaultApp"); + + public CodeEditor.Installation[] Installations => m_Discoverability.PathCallback(); + + public void CreateSolutionIfDoesntExist() + { + if (!m_ProjectGeneration.HasSolutionBeenGenerated()) + { + m_ProjectGeneration.Sync(); + } + } + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/RiderScriptEditor.cs.meta b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/RiderScriptEditor.cs.meta new file mode 100644 index 0000000..ca34793 --- /dev/null +++ b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/RiderScriptEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c4095d72f77fbb64ea39b8b3ca246622 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/RiderScriptEditorData.cs b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/RiderScriptEditorData.cs new file mode 100644 index 0000000..47c7781 --- /dev/null +++ b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/RiderScriptEditorData.cs @@ -0,0 +1,29 @@ +using System; +using UnityEditor; +using UnityEngine; + +namespace Packages.Rider.Editor +{ + public class RiderScriptEditorData : ScriptableSingleton + { + [SerializeField] internal bool HasChanges = true; // sln/csproj files were changed + [SerializeField] internal bool shouldLoadEditorPlugin; + [SerializeField] internal bool InitializedOnce; + [SerializeField] internal string currentEditorVersion; + + public void Init() + { + if (string.IsNullOrEmpty(currentEditorVersion)) + Invalidate(RiderScriptEditor.CurrentEditor); + } + + public void Invalidate(string editorInstallationPath) + { + currentEditorVersion = RiderPathLocator.GetBuildNumber(editorInstallationPath); + if (!Version.TryParse(currentEditorVersion, out var version)) + shouldLoadEditorPlugin = false; + + shouldLoadEditorPlugin = version >= new Version("191.7141.156"); + } + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/RiderScriptEditorData.cs.meta b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/RiderScriptEditorData.cs.meta new file mode 100644 index 0000000..e09363c --- /dev/null +++ b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/RiderScriptEditorData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f079e3afd077fb94fa2bda74d6409499 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting.meta b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting.meta new file mode 100644 index 0000000..4362802 --- /dev/null +++ b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a52391bc44c477f40a547ed4ef3b9560 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/CallbackData.cs b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/CallbackData.cs new file mode 100644 index 0000000..99232f6 --- /dev/null +++ b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/CallbackData.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using JetBrains.Annotations; +using UnityEditor; + +namespace Packages.Rider.Editor.UnitTesting +{ + public class CallbackData : ScriptableSingleton + { + public bool isRider; + + [UsedImplicitly] public static event EventHandler Changed = (sender, args) => { }; + + internal void RaiseChangedEvent() + { + Changed(null, EventArgs.Empty); + } + + public List events = new List(); + + [UsedImplicitly] + public void Clear() + { + events.Clear(); + } + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/CallbackData.cs.meta b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/CallbackData.cs.meta new file mode 100644 index 0000000..c58daeb --- /dev/null +++ b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/CallbackData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 010246a07de7cb34185a2a7b1c1fad59 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/CallbackInitializer.cs b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/CallbackInitializer.cs new file mode 100644 index 0000000..f9dc5b9 --- /dev/null +++ b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/CallbackInitializer.cs @@ -0,0 +1,18 @@ +#if TEST_FRAMEWORK +using UnityEditor; +using UnityEditor.TestTools.TestRunner.Api; +using UnityEngine; + +namespace Packages.Rider.Editor.UnitTesting +{ + [InitializeOnLoad] + internal static class CallbackInitializer + { + static CallbackInitializer() + { + if (CallbackData.instance.isRider) + ScriptableObject.CreateInstance().RegisterCallbacks(ScriptableObject.CreateInstance(), 0); + } + } +} +#endif \ No newline at end of file diff --git a/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/CallbackInitializer.cs.meta b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/CallbackInitializer.cs.meta new file mode 100644 index 0000000..11042d6 --- /dev/null +++ b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/CallbackInitializer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: aa1c6b1a353ab464782fc1e7c051eb02 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/RiderTestRunner.cs b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/RiderTestRunner.cs new file mode 100644 index 0000000..eb3b249 --- /dev/null +++ b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/RiderTestRunner.cs @@ -0,0 +1,47 @@ +using JetBrains.Annotations; +using UnityEngine; +#if TEST_FRAMEWORK +using UnityEditor; +using UnityEditor.TestTools.TestRunner.Api; +#endif + +namespace Packages.Rider.Editor.UnitTesting +{ + public static class RiderTestRunner + { +#if TEST_FRAMEWORK + private static readonly TestsCallback Callback = ScriptableObject.CreateInstance(); +#endif + [UsedImplicitly] + public static void RunTests(int testMode, string[] assemblyNames, string[] testNames, string[] categoryNames, string[] groupNames, int? buildTarget) + { +#if !TEST_FRAMEWORK + Debug.LogError("Update Test Framework package to v.1.1.1+ to run tests from Rider."); +#else + CallbackData.instance.isRider = true; + + var api = ScriptableObject.CreateInstance(); + var settings = new ExecutionSettings(); + var filter = new Filter + { + assemblyNames = assemblyNames, + testNames = testNames, + categoryNames = categoryNames, + groupNames = groupNames, + targetPlatform = (BuildTarget?) buildTarget + }; + + if (testMode > 0) // for future use - test-framework would allow running both Edit and Play test at once + filter.testMode = (TestMode) testMode; + + settings.filters = new []{ + filter + }; + api.Execute(settings); + + api.UnregisterCallbacks(Callback); // avoid multiple registrations + api.RegisterCallbacks(Callback); // This can be used to receive information about when the test suite and individual tests starts and stops. Provide this with a scriptable object implementing ICallbacks +#endif + } + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/RiderTestRunner.cs.meta b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/RiderTestRunner.cs.meta new file mode 100644 index 0000000..8ec5502 --- /dev/null +++ b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/RiderTestRunner.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5c3b27069cb3ddf42ba1260eeefcdd1c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/TestEvent.cs b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/TestEvent.cs new file mode 100644 index 0000000..9e3fff2 --- /dev/null +++ b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/TestEvent.cs @@ -0,0 +1,31 @@ +using System; +using NUnit.Framework.Interfaces; + +namespace Packages.Rider.Editor.UnitTesting +{ + [Serializable] + public enum EventType { TestStarted, TestFinished, RunFinished } + + [Serializable] + public class TestEvent + { + public EventType type; + public string id; + public string assemblyName; + public string output; + public TestStatus testStatus; + public double duration; + public string parentId; + + public TestEvent(EventType type, string id, string assemblyName, string output, double duration, TestStatus testStatus, string parentID) + { + this.type = type; + this.id = id; + this.assemblyName = assemblyName; + this.output = output; + this.testStatus = testStatus; + this.duration = duration; + parentId = parentID; + } + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/TestEvent.cs.meta b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/TestEvent.cs.meta new file mode 100644 index 0000000..a6afa14 --- /dev/null +++ b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/TestEvent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f9413c47b3a14a64e8810ce76d1a6032 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/TestsCallback.cs b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/TestsCallback.cs new file mode 100644 index 0000000..b6a5637 --- /dev/null +++ b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/TestsCallback.cs @@ -0,0 +1,83 @@ +#if TEST_FRAMEWORK +using System; +using System.Text; +using UnityEditor.TestTools.TestRunner.Api; +using UnityEngine; + +namespace Packages.Rider.Editor.UnitTesting +{ + public class TestsCallback : ScriptableObject, ICallbacks + { + public void RunFinished(ITestResultAdaptor result) + { + CallbackData.instance.isRider = false; + + CallbackData.instance.events.Add( + new TestEvent(EventType.RunFinished, "", "","", 0, ParseTestStatus(result.TestStatus), "")); + CallbackData.instance.RaiseChangedEvent(); + } + + public void TestStarted(ITestAdaptor result) + { + if (result.Method == null) return; + + CallbackData.instance.events.Add( + new TestEvent(EventType.TestStarted, GetUniqueName(result), result.Method.TypeInfo.Assembly.GetName().Name, "", 0, ParseTestStatus(TestStatus.Passed), result.ParentFullName)); + CallbackData.instance.RaiseChangedEvent(); + } + + public void TestFinished(ITestResultAdaptor result) + { + if (result.Test.Method == null) return; + + CallbackData.instance.events.Add( + new TestEvent(EventType.TestFinished, GetUniqueName(result.Test), result.Test.Method.TypeInfo.Assembly.GetName().Name, ExtractOutput(result), result.Duration, ParseTestStatus(result.TestStatus), result.Test.ParentFullName)); + CallbackData.instance.RaiseChangedEvent(); + } + + // todo: reimplement JetBrains.Rider.Unity.Editor.AfterUnity56.UnitTesting.TestEventsSender.GetUniqueName + private static string GetUniqueName(ITestAdaptor test) + { + string str = test.FullName; + return str; + } + + public void RunStarted(ITestAdaptor testsToRun) + { + } + + private static NUnit.Framework.Interfaces.TestStatus ParseTestStatus(TestStatus testStatus) + { + return (NUnit.Framework.Interfaces.TestStatus)Enum.Parse(typeof(NUnit.Framework.Interfaces.TestStatus), testStatus.ToString()); + } + + private static string ExtractOutput(ITestResultAdaptor testResult) + { + var stringBuilder = new StringBuilder(); + if (testResult.Message != null) + { + stringBuilder.AppendLine("Message: "); + stringBuilder.AppendLine(testResult.Message); + } + + if (!string.IsNullOrEmpty(testResult.Output)) + { + stringBuilder.AppendLine("Output: "); + stringBuilder.AppendLine(testResult.Output); + } + + if (!string.IsNullOrEmpty(testResult.StackTrace)) + { + stringBuilder.AppendLine("Stacktrace: "); + stringBuilder.AppendLine(testResult.StackTrace); + } + + var result = stringBuilder.ToString(); + if (result.Length > 0) + return result; + + return testResult.Output ?? string.Empty; + } + } +} +#endif \ No newline at end of file diff --git a/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/TestsCallback.cs.meta b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/TestsCallback.cs.meta new file mode 100644 index 0000000..345e1ce --- /dev/null +++ b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/TestsCallback.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 58aa570dbe0761f43b25ff6c2265bbe2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util.meta b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util.meta new file mode 100644 index 0000000..f801d0b --- /dev/null +++ b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5e726086cd652f82087d59d67d2c24cd +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/CommandLineParser.cs b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/CommandLineParser.cs new file mode 100644 index 0000000..4d4d3c9 --- /dev/null +++ b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/CommandLineParser.cs @@ -0,0 +1,36 @@ +using System.Collections.Generic; + +namespace Packages.Rider.Editor.Util +{ + public class CommandLineParser + { + public Dictionary Options = new Dictionary(); + + public CommandLineParser(string[] args) + { + var i = 0; + while (i < args.Length) + { + var arg = args[i]; + if (!arg.StartsWith("-")) + { + i++; + continue; + } + + string value = null; + if (i + 1 < args.Length && !args[i + 1].StartsWith("-")) + { + value = args[i + 1]; + i++; + } + + if (!(Options.ContainsKey(arg))) + { + Options.Add(arg, value); + } + i++; + } + } + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/CommandLineParser.cs.meta b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/CommandLineParser.cs.meta new file mode 100644 index 0000000..409ea02 --- /dev/null +++ b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/CommandLineParser.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 154ace4bd16de9f4e84052ac257786d6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/FileSystemUtil.cs b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/FileSystemUtil.cs new file mode 100644 index 0000000..1ee32cc --- /dev/null +++ b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/FileSystemUtil.cs @@ -0,0 +1,66 @@ +using System; +using System.ComponentModel; +using System.IO; +using System.Text; +using JetBrains.Annotations; +using UnityEngine; + +namespace Packages.Rider.Editor.Util +{ + public static class FileSystemUtil + { + [NotNull] + public static string GetFinalPathName([NotNull] string path) + { + if (path == null) throw new ArgumentNullException("path"); + + // up to MAX_PATH. MAX_PATH on Linux currently 4096, on Mac OS X 1024 + // doc: http://man7.org/linux/man-pages/man3/realpath.3.html + var sb = new StringBuilder(8192); + var result = LibcNativeInterop.realpath(path, sb); + if (result == IntPtr.Zero) + { + throw new Win32Exception($"{path} was not resolved."); + } + + return new FileInfo(sb.ToString()).FullName; + } + + public static string FileNameWithoutExtension(string path) + { + if (string.IsNullOrEmpty(path)) + { + return ""; + } + + var indexOfDot = -1; + var indexOfSlash = 0; + for (var i = path.Length - 1; i >= 0; i--) + { + if (indexOfDot == -1 && path[i] == '.') + { + indexOfDot = i; + } + + if (indexOfSlash == 0 && path[i] == '/' || path[i] == '\\') + { + indexOfSlash = i + 1; + break; + } + } + + if (indexOfDot == -1) + { + indexOfDot = path.Length; + } + + return path.Substring(indexOfSlash, indexOfDot - indexOfSlash); + } + + public static bool EditorPathExists(string editorPath) + { + return SystemInfo.operatingSystemFamily == OperatingSystemFamily.MacOSX && new DirectoryInfo(editorPath).Exists + || SystemInfo.operatingSystemFamily != OperatingSystemFamily.MacOSX && new FileInfo(editorPath).Exists; + } + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/FileSystemUtil.cs.meta b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/FileSystemUtil.cs.meta new file mode 100644 index 0000000..caac41a --- /dev/null +++ b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/FileSystemUtil.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bdbd564a9fdad0b738e76d030cad1204 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/LibcNativeInterop.cs b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/LibcNativeInterop.cs new file mode 100644 index 0000000..5f023f9 --- /dev/null +++ b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/LibcNativeInterop.cs @@ -0,0 +1,12 @@ +using System; +using System.Runtime.InteropServices; +using System.Text; + +namespace Packages.Rider.Editor.Util +{ + internal static class LibcNativeInterop + { + [DllImport("libc", SetLastError = true)] + public static extern IntPtr realpath(string path, StringBuilder resolved_path); + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/LibcNativeInterop.cs.meta b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/LibcNativeInterop.cs.meta new file mode 100644 index 0000000..21b229d --- /dev/null +++ b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/LibcNativeInterop.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 071c17858dc6c47ada7b2a1f1ded5402 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/RiderMenu.cs b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/RiderMenu.cs new file mode 100644 index 0000000..1909342 --- /dev/null +++ b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/RiderMenu.cs @@ -0,0 +1,25 @@ +using JetBrains.Annotations; +using Packages.Rider.Editor; +using Unity.CodeEditor; + +// Is called via commandline from Rider Notification after checking out from source control. + +// ReSharper disable once CheckNamespace +namespace JetBrains.Rider.Unity.Editor +{ + public static class RiderMenu + { + [UsedImplicitly] + public static void MenuOpenProject() + { + if (RiderScriptEditor.IsRiderInstallation(RiderScriptEditor.CurrentEditor)) + { + // Force the project files to be sync + CodeEditor.CurrentEditor.SyncAll(); + + // Load Project + CodeEditor.CurrentEditor.OpenProject(); + } + } + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/RiderMenu.cs.meta b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/RiderMenu.cs.meta new file mode 100644 index 0000000..ab43887 --- /dev/null +++ b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/RiderMenu.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a8860c53ca4073d4f92c403e709c12ba +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/UnityUtils.cs b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/UnityUtils.cs new file mode 100644 index 0000000..de03492 --- /dev/null +++ b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/UnityUtils.cs @@ -0,0 +1,20 @@ +using System; +using System.Linq; +using UnityEngine; + +namespace Packages.Rider.Editor.Util +{ + public static class UnityUtils + { + internal static readonly string UnityApplicationVersion = Application.unityVersion; + + public static Version UnityVersion + { + get + { + var ver = UnityApplicationVersion.Split(".".ToCharArray()).Take(2).Aggregate((a, b) => a + "." + b); + return new Version(ver); + } + } + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/UnityUtils.cs.meta b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/UnityUtils.cs.meta new file mode 100644 index 0000000..fe2ac7b --- /dev/null +++ b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/UnityUtils.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3ec9edad2de6c4df3a146b543a0fbc4c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/com.unity.ide.rider.asmdef b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/com.unity.ide.rider.asmdef new file mode 100644 index 0000000..ad87d48 --- /dev/null +++ b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/com.unity.ide.rider.asmdef @@ -0,0 +1,22 @@ +{ + "name": "Unity.Rider.Editor", + "references": [ + "GUID:0acc523941302664db1f4e527237feb3" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [ + { + "name": "com.unity.test-framework", + "expression": "1.1.1", + "define": "TEST_FRAMEWORK" + } + ] +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/com.unity.ide.rider.asmdef.meta b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/com.unity.ide.rider.asmdef.meta new file mode 100644 index 0000000..2e67d0c --- /dev/null +++ b/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/com.unity.ide.rider.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d528c8c98d269ca44a06cd9624a03945 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.ide.rider@1.1.4/package.json b/Library/PackageCache/com.unity.ide.rider@1.1.4/package.json new file mode 100755 index 0000000..7159e5f --- /dev/null +++ b/Library/PackageCache/com.unity.ide.rider@1.1.4/package.json @@ -0,0 +1,19 @@ +{ + "name": "com.unity.ide.rider", + "displayName": "Rider Editor", + "description": "Code editor integration for supporting Rider as code editor for unity. Adds support for generating csproj files for code completion, auto discovery of installations, etc.", + "version": "1.1.4", + "unity": "2019.2", + "unityRelease": "0a12", + "dependencies": { + "com.unity.test-framework": "1.1.3" + }, + "relatedPackages": { + "com.unity.ide.rider.tests": "1.1.4" + }, + "repository": { + "type": "git", + "url": "git@github.cds.internal.unity3d.com:unity/com.unity.ide.rider.git", + "revision": "d2ef95989104a4ce866cdcb7f94cf3c67476fcc9" + } +} diff --git a/Library/PackageCache/com.unity.ide.rider@1.1.4/package.json.meta b/Library/PackageCache/com.unity.ide.rider@1.1.4/package.json.meta new file mode 100644 index 0000000..6f72a9c --- /dev/null +++ b/Library/PackageCache/com.unity.ide.rider@1.1.4/package.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 66c95bb3c74257f41bae2622511dc02d +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.ide.vscode@1.1.4/CHANGELOG.md b/Library/PackageCache/com.unity.ide.vscode@1.1.4/CHANGELOG.md new file mode 100644 index 0000000..6302846 --- /dev/null +++ b/Library/PackageCache/com.unity.ide.vscode@1.1.4/CHANGELOG.md @@ -0,0 +1,55 @@ +# Code Editor Package for Visual Studio Code + +## [1.1.4] - 2020-01-02 + +Delta project generation, only recompute the csproj files whose script modified. + + +## [1.1.3] - 2019-10-22 + +Exe version of vscode will use Normal ProcessWindowStyle while cmd will use Hidden + + +## [1.1.2] - 2019-08-30 + +Fixing OSX open command arguments + + +## [1.1.1] - 2019-08-19 + +Support for Player Project. Generates specific csproj files containing files, reference, defines, +etc. that will show how the assembly will be compiled for a target platform. + + +## [1.1.0] - 2019-08-07 + +Adds support for choosing extensions to be opened with VSCode. This can be done through the GUI in Preferences. +Avoids opening all extensions after the change in core unity. + + +## [1.0.7] - 2019-05-15 + +Fix various OSX specific issues. +Generate project on load if they are not generated. +Fix path recognition. + + +## [1.0.6] - 2019-04-30 + +Ensure asset database is refreshed when generating csproj and solution files. + +## [1.0.5] - 2019-04-27 + +Add support for generating all csproj files. + +## [1.0.4] - 2019-04-18 + +Fix relative package paths. +Fix opening editor on mac. +Add %LOCALAPPDATA%/Programs to the path of install paths. + +## [1.0.3] - 2019-01-01 + +### This is the first release of *Unity Package vscode_editor*. + +Using the newly created api to integrate Visual Studio Code with Unity. diff --git a/Library/PackageCache/com.unity.ide.vscode@1.1.4/CHANGELOG.md.meta b/Library/PackageCache/com.unity.ide.vscode@1.1.4/CHANGELOG.md.meta new file mode 100644 index 0000000..65aea0b --- /dev/null +++ b/Library/PackageCache/com.unity.ide.vscode@1.1.4/CHANGELOG.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 4ddcdc3816429494a8bea67e973875f7 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.ide.vscode@1.1.4/CONTRIBUTING.md b/Library/PackageCache/com.unity.ide.vscode@1.1.4/CONTRIBUTING.md new file mode 100644 index 0000000..576d096 --- /dev/null +++ b/Library/PackageCache/com.unity.ide.vscode@1.1.4/CONTRIBUTING.md @@ -0,0 +1,6 @@ +# Contributing + +## All contributions are subject to the [Unity Contribution Agreement(UCA)](https://unity3d.com/legal/licenses/Unity_Contribution_Agreement) +By making a pull request, you are confirming agreement to the terms and conditions of the UCA, including that your Contributions are your original creation and that you have complete right and authority to make your Contributions. + +## Once you have a change ready following these ground rules. Simply make a pull request \ No newline at end of file diff --git a/Library/PackageCache/com.unity.ide.vscode@1.1.4/CONTRIBUTING.md.meta b/Library/PackageCache/com.unity.ide.vscode@1.1.4/CONTRIBUTING.md.meta new file mode 100644 index 0000000..31e836f --- /dev/null +++ b/Library/PackageCache/com.unity.ide.vscode@1.1.4/CONTRIBUTING.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: fcb9be00baf924c4183fc0313e6185c5 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.ide.vscode@1.1.4/Documentation~/README.md b/Library/PackageCache/com.unity.ide.vscode@1.1.4/Documentation~/README.md new file mode 100644 index 0000000..d0a565f --- /dev/null +++ b/Library/PackageCache/com.unity.ide.vscode@1.1.4/Documentation~/README.md @@ -0,0 +1,4 @@ +# Code Editor Package for Visual Studio Code + +This package is not intended to be modified by users. +Nor does it provide any api intended to be included in user projects. \ No newline at end of file diff --git a/Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor.meta b/Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor.meta new file mode 100644 index 0000000..568fa03 --- /dev/null +++ b/Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 58628227479c34542ac8c5193ccced84 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor/ProjectGeneration.meta b/Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor/ProjectGeneration.meta new file mode 100644 index 0000000..48ed36c --- /dev/null +++ b/Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor/ProjectGeneration.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c779d3735d950f341ba35154e8b3234b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor/ProjectGeneration/AssemblyNameProvider.cs b/Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor/ProjectGeneration/AssemblyNameProvider.cs new file mode 100644 index 0000000..43e0972 --- /dev/null +++ b/Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor/ProjectGeneration/AssemblyNameProvider.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using UnityEditor; +using UnityEditor.Compilation; + +namespace VSCodeEditor +{ + public interface IAssemblyNameProvider + { + string GetAssemblyNameFromScriptPath(string path); + IEnumerable GetAssemblies(Func shouldFileBePartOfSolution); + IEnumerable GetAllAssetPaths(); + UnityEditor.PackageManager.PackageInfo FindForAssetPath(string assetPath); + ResponseFileData ParseResponseFile(string responseFilePath, string projectDirectory, string[] systemReferenceDirectories); + } + + internal class AssemblyNameProvider : IAssemblyNameProvider + { + public string GetAssemblyNameFromScriptPath(string path) + { + return CompilationPipeline.GetAssemblyNameFromScriptPath(path); + } + + public IEnumerable GetAssemblies(Func shouldFileBePartOfSolution) + { + return CompilationPipeline.GetAssemblies() + .Where(i => 0 < i.sourceFiles.Length && i.sourceFiles.Any(shouldFileBePartOfSolution)); + } + + public IEnumerable GetAllAssetPaths() + { + return AssetDatabase.GetAllAssetPaths(); + } + + public UnityEditor.PackageManager.PackageInfo FindForAssetPath(string assetPath) + { + return UnityEditor.PackageManager.PackageInfo.FindForAssetPath(assetPath); + } + + public ResponseFileData ParseResponseFile(string responseFilePath, string projectDirectory, string[] systemReferenceDirectories) + { + return CompilationPipeline.ParseResponseFile( + responseFilePath, + projectDirectory, + systemReferenceDirectories + ); + } + } +} diff --git a/Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor/ProjectGeneration/AssemblyNameProvider.cs.meta b/Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor/ProjectGeneration/AssemblyNameProvider.cs.meta new file mode 100644 index 0000000..a8ae38b --- /dev/null +++ b/Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor/ProjectGeneration/AssemblyNameProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1d93ffb668978f7488211a331977b73b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor/ProjectGeneration/FileIO.cs b/Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor/ProjectGeneration/FileIO.cs new file mode 100644 index 0000000..aeff22e --- /dev/null +++ b/Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor/ProjectGeneration/FileIO.cs @@ -0,0 +1,38 @@ +using System.IO; +using System.Text; + +namespace VSCodeEditor +{ + public interface IFileIO + { + bool Exists(string fileName); + + string ReadAllText(string fileName); + void WriteAllText(string fileName, string content); + + void CreateDirectory(string pathName); + } + + class FileIOProvider : IFileIO + { + public bool Exists(string fileName) + { + return File.Exists(fileName); + } + + public string ReadAllText(string fileName) + { + return File.ReadAllText(fileName); + } + + public void WriteAllText(string fileName, string content) + { + File.WriteAllText(fileName, content, Encoding.UTF8); + } + + public void CreateDirectory(string pathName) + { + Directory.CreateDirectory(pathName); + } + } +} diff --git a/Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor/ProjectGeneration/FileIO.cs.meta b/Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor/ProjectGeneration/FileIO.cs.meta new file mode 100644 index 0000000..91d8212 --- /dev/null +++ b/Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor/ProjectGeneration/FileIO.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: eb221cf55b3544646b0c3b6bc790080f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor/ProjectGeneration/GUIDGenerator.cs b/Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor/ProjectGeneration/GUIDGenerator.cs new file mode 100644 index 0000000..0654966 --- /dev/null +++ b/Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor/ProjectGeneration/GUIDGenerator.cs @@ -0,0 +1,21 @@ +namespace VSCodeEditor +{ + public interface IGUIDGenerator + { + string ProjectGuid(string projectName, string assemblyName); + string SolutionGuid(string projectName, string extension); + } + + class GUIDProvider : IGUIDGenerator + { + public string ProjectGuid(string projectName, string assemblyName) + { + return SolutionGuidGenerator.GuidForProject(projectName + assemblyName); + } + + public string SolutionGuid(string projectName, string extension) + { + return SolutionGuidGenerator.GuidForSolution(projectName, extension); // GetExtensionOfSourceFiles(assembly.sourceFiles) + } + } +} diff --git a/Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor/ProjectGeneration/GUIDGenerator.cs.meta b/Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor/ProjectGeneration/GUIDGenerator.cs.meta new file mode 100644 index 0000000..9ce342e --- /dev/null +++ b/Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor/ProjectGeneration/GUIDGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e58bd3cca6475e54b93632bb6837aeea +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor/ProjectGeneration/ProjectGeneration.cs b/Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor/ProjectGeneration/ProjectGeneration.cs new file mode 100644 index 0000000..61e86e1 --- /dev/null +++ b/Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor/ProjectGeneration/ProjectGeneration.cs @@ -0,0 +1,718 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Security; +using System.Security.Cryptography; +using System.Text; +using System.Text.RegularExpressions; +using UnityEditor; +using UnityEditor.Compilation; +using UnityEditor.PackageManager; +using UnityEngine; +using UnityEngine.Profiling; + +namespace VSCodeEditor +{ + public interface IGenerator + { + bool SyncIfNeeded(List affectedFiles, string[] reimportedFiles); + void Sync(); + string SolutionFile(); + string ProjectDirectory { get; } + void GenerateAll(bool generateAll); + bool SolutionExists(); + } + + public class ProjectGeneration : IGenerator + { + enum ScriptingLanguage + { + None, + CSharp + } + + public static readonly string MSBuildNamespaceUri = "http://schemas.microsoft.com/developer/msbuild/2003"; + + const string k_WindowsNewline = "\r\n"; + + const string k_SettingsJson = @"{ + ""files.exclude"": + { + ""**/.DS_Store"":true, + ""**/.git"":true, + ""**/.gitignore"":true, + ""**/.gitmodules"":true, + ""**/*.booproj"":true, + ""**/*.pidb"":true, + ""**/*.suo"":true, + ""**/*.user"":true, + ""**/*.userprefs"":true, + ""**/*.unityproj"":true, + ""**/*.dll"":true, + ""**/*.exe"":true, + ""**/*.pdf"":true, + ""**/*.mid"":true, + ""**/*.midi"":true, + ""**/*.wav"":true, + ""**/*.gif"":true, + ""**/*.ico"":true, + ""**/*.jpg"":true, + ""**/*.jpeg"":true, + ""**/*.png"":true, + ""**/*.psd"":true, + ""**/*.tga"":true, + ""**/*.tif"":true, + ""**/*.tiff"":true, + ""**/*.3ds"":true, + ""**/*.3DS"":true, + ""**/*.fbx"":true, + ""**/*.FBX"":true, + ""**/*.lxo"":true, + ""**/*.LXO"":true, + ""**/*.ma"":true, + ""**/*.MA"":true, + ""**/*.obj"":true, + ""**/*.OBJ"":true, + ""**/*.asset"":true, + ""**/*.cubemap"":true, + ""**/*.flare"":true, + ""**/*.mat"":true, + ""**/*.meta"":true, + ""**/*.prefab"":true, + ""**/*.unity"":true, + ""build/"":true, + ""Build/"":true, + ""Library/"":true, + ""library/"":true, + ""obj/"":true, + ""Obj/"":true, + ""ProjectSettings/"":true, + ""temp/"":true, + ""Temp/"":true + } +}"; + + /// + /// Map source extensions to ScriptingLanguages + /// + static readonly Dictionary k_BuiltinSupportedExtensions = new Dictionary + { + { "cs", ScriptingLanguage.CSharp }, + { "uxml", ScriptingLanguage.None }, + { "uss", ScriptingLanguage.None }, + { "shader", ScriptingLanguage.None }, + { "compute", ScriptingLanguage.None }, + { "cginc", ScriptingLanguage.None }, + { "hlsl", ScriptingLanguage.None }, + { "glslinc", ScriptingLanguage.None }, + { "template", ScriptingLanguage.None }, + { "raytrace", ScriptingLanguage.None } + }; + + string m_SolutionProjectEntryTemplate = string.Join("\r\n", @"Project(""{{{0}}}"") = ""{1}"", ""{2}"", ""{{{3}}}""", @"EndProject").Replace(" ", "\t"); + + string m_SolutionProjectConfigurationTemplate = string.Join("\r\n", @" {{{0}}}.Debug|Any CPU.ActiveCfg = Debug|Any CPU", @" {{{0}}}.Debug|Any CPU.Build.0 = Debug|Any CPU", @" {{{0}}}.Release|Any CPU.ActiveCfg = Release|Any CPU", @" {{{0}}}.Release|Any CPU.Build.0 = Release|Any CPU").Replace(" ", "\t"); + + static readonly string[] k_ReimportSyncExtensions = { ".dll", ".asmdef" }; + + string[] m_ProjectSupportedExtensions = new string[0]; + public string ProjectDirectory { get; } + bool m_ShouldGenerateAll; + + public void GenerateAll(bool generateAll) + { + m_ShouldGenerateAll = generateAll; + } + + readonly string m_ProjectName; + readonly IAssemblyNameProvider m_AssemblyNameProvider; + readonly IFileIO m_FileIOProvider; + readonly IGUIDGenerator m_GUIDProvider; + + const string k_ToolsVersion = "4.0"; + const string k_ProductVersion = "10.0.20506"; + const string k_BaseDirectory = "."; + const string k_TargetFrameworkVersion = "v4.7.1"; + const string k_TargetLanguageVersion = "latest"; + + public ProjectGeneration(string tempDirectory) + : this(tempDirectory, new AssemblyNameProvider(), new FileIOProvider(), new GUIDProvider()) { } + + public ProjectGeneration(string tempDirectory, IAssemblyNameProvider assemblyNameProvider, IFileIO fileIO, IGUIDGenerator guidGenerator) + { + ProjectDirectory = tempDirectory.Replace('\\', '/'); + m_ProjectName = Path.GetFileName(ProjectDirectory); + m_AssemblyNameProvider = assemblyNameProvider; + m_FileIOProvider = fileIO; + m_GUIDProvider = guidGenerator; + } + + /// + /// Syncs the scripting solution if any affected files are relevant. + /// + /// + /// Whether the solution was synced. + /// + /// + /// A set of files whose status has changed + /// + /// + /// A set of files that got reimported + /// + public bool SyncIfNeeded(List affectedFiles, string[] reimportedFiles) + { + Profiler.BeginSample("SolutionSynchronizerSync"); + SetupProjectSupportedExtensions(); + + // Don't sync if we haven't synced before + if (SolutionExists() && HasFilesBeenModified(affectedFiles, reimportedFiles)) + { + var assemblies = m_AssemblyNameProvider.GetAssemblies(ShouldFileBePartOfSolution); + var allProjectAssemblies = RelevantAssembliesForMode(assemblies).ToList(); + var allAssetProjectParts = GenerateAllAssetProjectParts(); + + var affectedNames = affectedFiles.Select(asset => m_AssemblyNameProvider.GetAssemblyNameFromScriptPath(asset)?.Split(new [] {".dll"}, StringSplitOptions.RemoveEmptyEntries)[0]); + var reimportedNames = reimportedFiles.Select(asset => m_AssemblyNameProvider.GetAssemblyNameFromScriptPath(asset)?.Split(new [] {".dll"}, StringSplitOptions.RemoveEmptyEntries)[0]); + var affectedAndReimported = new HashSet(affectedNames.Concat(reimportedNames)); + var assemblyNames = new HashSet(allProjectAssemblies.Select(assembly => Path.GetFileName(assembly.outputPath))); + + foreach (var assembly in allProjectAssemblies) + { + if (!affectedAndReimported.Contains(assembly.name)) + continue; + + SyncProject(assembly, allAssetProjectParts, ParseResponseFileData(assembly), assemblyNames); + } + + Profiler.EndSample(); + return true; + } + + Profiler.EndSample(); + return false; + } + + bool HasFilesBeenModified(List affectedFiles, string[] reimportedFiles) + { + return affectedFiles.Any(ShouldFileBePartOfSolution) || reimportedFiles.Any(ShouldSyncOnReimportedAsset); + } + + static bool ShouldSyncOnReimportedAsset(string asset) + { + return k_ReimportSyncExtensions.Contains(new FileInfo(asset).Extension); + } + + public void Sync() + { + SetupProjectSupportedExtensions(); + GenerateAndWriteSolutionAndProjects(); + } + + public bool SolutionExists() + { + return m_FileIOProvider.Exists(SolutionFile()); + } + + void SetupProjectSupportedExtensions() + { + m_ProjectSupportedExtensions = EditorSettings.projectGenerationUserExtensions; + } + + bool ShouldFileBePartOfSolution(string file) + { + string extension = Path.GetExtension(file); + + // Exclude files coming from packages except if they are internalized. + if (!m_ShouldGenerateAll && IsInternalizedPackagePath(file)) + { + return false; + } + + // Dll's are not scripts but still need to be included.. + if (extension == ".dll") + return true; + + if (file.ToLower().EndsWith(".asmdef")) + return true; + + return IsSupportedExtension(extension); + } + + bool IsSupportedExtension(string extension) + { + extension = extension.TrimStart('.'); + if (k_BuiltinSupportedExtensions.ContainsKey(extension)) + return true; + if (m_ProjectSupportedExtensions.Contains(extension)) + return true; + return false; + } + + static ScriptingLanguage ScriptingLanguageFor(Assembly assembly) + { + return ScriptingLanguageFor(GetExtensionOfSourceFiles(assembly.sourceFiles)); + } + + static string GetExtensionOfSourceFiles(string[] files) + { + return files.Length > 0 ? GetExtensionOfSourceFile(files[0]) : "NA"; + } + + static string GetExtensionOfSourceFile(string file) + { + var ext = Path.GetExtension(file).ToLower(); + ext = ext.Substring(1); //strip dot + return ext; + } + + static ScriptingLanguage ScriptingLanguageFor(string extension) + { + return k_BuiltinSupportedExtensions.TryGetValue(extension.TrimStart('.'), out var result) + ? result + : ScriptingLanguage.None; + } + + public void GenerateAndWriteSolutionAndProjects() + { + // Only synchronize assemblies that have associated source files and ones that we actually want in the project. + // This also filters out DLLs coming from .asmdef files in packages. + var assemblies = m_AssemblyNameProvider.GetAssemblies(ShouldFileBePartOfSolution); + + var allAssetProjectParts = GenerateAllAssetProjectParts(); + + SyncSolution(assemblies); + var allProjectAssemblies = RelevantAssembliesForMode(assemblies).ToList(); + var assemblyNames = new HashSet(allProjectAssemblies.Select(assembly => Path.GetFileName(assembly.outputPath))); + foreach (Assembly assembly in allProjectAssemblies) + { + var responseFileData = ParseResponseFileData(assembly); + SyncProject(assembly, allAssetProjectParts, responseFileData, assemblyNames); + } + + WriteVSCodeSettingsFiles(); + } + + IEnumerable ParseResponseFileData(Assembly assembly) + { + var systemReferenceDirectories = CompilationPipeline.GetSystemAssemblyDirectories(assembly.compilerOptions.ApiCompatibilityLevel); + + Dictionary responseFilesData = assembly.compilerOptions.ResponseFiles.ToDictionary(x => x, x => m_AssemblyNameProvider.ParseResponseFile( + x, + ProjectDirectory, + systemReferenceDirectories + )); + + Dictionary responseFilesWithErrors = responseFilesData.Where(x => x.Value.Errors.Any()) + .ToDictionary(x => x.Key, x => x.Value); + + if (responseFilesWithErrors.Any()) + { + foreach (var error in responseFilesWithErrors) + foreach (var valueError in error.Value.Errors) + { + Debug.LogError($"{error.Key} Parse Error : {valueError}"); + } + } + + return responseFilesData.Select(x => x.Value); + } + + Dictionary GenerateAllAssetProjectParts() + { + Dictionary stringBuilders = new Dictionary(); + + foreach (string asset in m_AssemblyNameProvider.GetAllAssetPaths()) + { + // Exclude files coming from packages except if they are internalized. + // TODO: We need assets from the assembly API + if (!m_ShouldGenerateAll && IsInternalizedPackagePath(asset)) + { + continue; + } + + string extension = Path.GetExtension(asset); + if (IsSupportedExtension(extension) && ScriptingLanguage.None == ScriptingLanguageFor(extension)) + { + // Find assembly the asset belongs to by adding script extension and using compilation pipeline. + var assemblyName = m_AssemblyNameProvider.GetAssemblyNameFromScriptPath(asset); + + if (string.IsNullOrEmpty(assemblyName)) + { + continue; + } + + assemblyName = Path.GetFileNameWithoutExtension(assemblyName); + + if (!stringBuilders.TryGetValue(assemblyName, out var projectBuilder)) + { + projectBuilder = new StringBuilder(); + stringBuilders[assemblyName] = projectBuilder; + } + + projectBuilder.Append(" ").Append(k_WindowsNewline); + } + } + + var result = new Dictionary(); + + foreach (var entry in stringBuilders) + result[entry.Key] = entry.Value.ToString(); + + return result; + } + + bool IsInternalizedPackagePath(string file) + { + if (string.IsNullOrWhiteSpace(file)) + { + return false; + } + + var packageInfo = m_AssemblyNameProvider.FindForAssetPath(file); + if (packageInfo == null) + { + return false; + } + + var packageSource = packageInfo.source; + return packageSource != PackageSource.Embedded && packageSource != PackageSource.Local; + } + + void SyncProject( + Assembly assembly, + Dictionary allAssetsProjectParts, + IEnumerable responseFilesData, + HashSet assemblyNames) + { + SyncProjectFileIfNotChanged(ProjectFile(assembly), ProjectText(assembly, allAssetsProjectParts, responseFilesData, assemblyNames)); + } + + void SyncProjectFileIfNotChanged(string path, string newContents) + { + SyncFileIfNotChanged(path, newContents); + } + + void SyncSolutionFileIfNotChanged(string path, string newContents) + { + SyncFileIfNotChanged(path, newContents); + } + + void SyncFileIfNotChanged(string filename, string newContents) + { + if (m_FileIOProvider.Exists(filename)) + { + var currentContents = m_FileIOProvider.ReadAllText(filename); + + if (currentContents == newContents) + { + return; + } + } + + m_FileIOProvider.WriteAllText(filename, newContents); + } + + string ProjectText( + Assembly assembly, + Dictionary allAssetsProjectParts, + IEnumerable responseFilesData, + HashSet assemblyNames) + { + var projectBuilder = new StringBuilder(); + ProjectHeader(assembly, responseFilesData, projectBuilder); + var references = new List(); + var projectReferences = new List(); + + foreach (string file in assembly.sourceFiles) + { + if (!ShouldFileBePartOfSolution(file)) + continue; + + var extension = Path.GetExtension(file).ToLower(); + var fullFile = EscapedRelativePathFor(file); + if (".dll" != extension) + { + projectBuilder.Append(" ").Append(k_WindowsNewline); + } + else + { + references.Add(fullFile); + } + } + + // Append additional non-script files that should be included in project generation. + if (allAssetsProjectParts.TryGetValue(assembly.name, out var additionalAssetsForProject)) + projectBuilder.Append(additionalAssetsForProject); + + var responseRefs = responseFilesData.SelectMany(x => x.FullPathReferences.Select(r => r)); + foreach (var reference in assembly.compiledAssemblyReferences.Union(responseRefs).Union(references)) + { + string fullReference = Path.IsPathRooted(reference) ? reference : Path.Combine(ProjectDirectory, reference); + AppendReference(fullReference, projectBuilder); + } + + if (0 < assembly.assemblyReferences.Length) + { + projectBuilder.Append(" ").Append(k_WindowsNewline); + projectBuilder.Append(" ").Append(k_WindowsNewline); + foreach (Assembly reference in assembly.assemblyReferences) + { + var referencedProject = reference.outputPath; + + projectBuilder.Append(" ").Append(k_WindowsNewline); + projectBuilder.Append(" {").Append(ProjectGuid(reference.name)).Append("}").Append(k_WindowsNewline); + projectBuilder.Append(" ").Append(reference.name).Append("").Append(k_WindowsNewline); + projectBuilder.Append(" ").Append(k_WindowsNewline); + } + } + + projectBuilder.Append(ProjectFooter()); + return projectBuilder.ToString(); + } + + static void AppendReference(string fullReference, StringBuilder projectBuilder) + { + //replace \ with / and \\ with / + var escapedFullPath = SecurityElement.Escape(fullReference); + escapedFullPath = escapedFullPath.Replace("\\\\", "/"); + escapedFullPath = escapedFullPath.Replace("\\", "/"); + projectBuilder.Append(" ").Append(k_WindowsNewline); + projectBuilder.Append(" ").Append(escapedFullPath).Append("").Append(k_WindowsNewline); + projectBuilder.Append(" ").Append(k_WindowsNewline); + } + + public string ProjectFile(Assembly assembly) + { + var fileBuilder = new StringBuilder(assembly.name); + fileBuilder.Append(".csproj"); + return Path.Combine(ProjectDirectory, fileBuilder.ToString()); + } + + public string SolutionFile() + { + return Path.Combine(ProjectDirectory, $"{m_ProjectName}.sln"); + } + + void ProjectHeader( + Assembly assembly, + IEnumerable responseFilesData, + StringBuilder builder + ) + { + // TODO: .Concat(EditorUserBuildSettings.activeScriptCompilationDefines) + GetProjectHeaderTemplate( + builder, + ProjectGuid(assembly.name), + assembly.name, + string.Join(";", new[] { "DEBUG", "TRACE" }.Concat(assembly.defines).Concat(responseFilesData.SelectMany(x => x.Defines)).Distinct().ToArray()), + assembly.compilerOptions.AllowUnsafeCode | responseFilesData.Any(x => x.Unsafe)); + } + + static string GetSolutionText() + { + return string.Join("\r\n", @"", @"Microsoft Visual Studio Solution File, Format Version {0}", @"# Visual Studio {1}", @"{2}", @"Global", @" GlobalSection(SolutionConfigurationPlatforms) = preSolution", @" Debug|Any CPU = Debug|Any CPU", @" Release|Any CPU = Release|Any CPU", @" EndGlobalSection", @" GlobalSection(ProjectConfigurationPlatforms) = postSolution", @"{3}", @" EndGlobalSection", @" GlobalSection(SolutionProperties) = preSolution", @" HideSolutionNode = FALSE", @" EndGlobalSection", @"EndGlobal", @"").Replace(" ", "\t"); + } + + static string GetProjectFooterTemplate() + { + return string.Join("\r\n", @" ", @" ", @" ", @"", @""); + } + + static void GetProjectHeaderTemplate( + StringBuilder builder, + string assemblyGUID, + string assemblyName, + string defines, + bool allowUnsafe + ) + { + builder.Append(@"").Append(k_WindowsNewline); + builder.Append(@"").Append(k_WindowsNewline); + builder.Append(@" ").Append(k_WindowsNewline); + builder.Append(@" ").Append(k_TargetLanguageVersion).Append("").Append(k_WindowsNewline); + builder.Append(@" ").Append(k_WindowsNewline); + builder.Append(@" ").Append(k_WindowsNewline); + builder.Append(@" Debug").Append(k_WindowsNewline); + builder.Append(@" AnyCPU").Append(k_WindowsNewline); + builder.Append(@" ").Append(k_ProductVersion).Append("").Append(k_WindowsNewline); + builder.Append(@" 2.0").Append(k_WindowsNewline); + builder.Append(@" ").Append(EditorSettings.projectGenerationRootNamespace).Append("").Append(k_WindowsNewline); + builder.Append(@" {").Append(assemblyGUID).Append("}").Append(k_WindowsNewline); + builder.Append(@" Library").Append(k_WindowsNewline); + builder.Append(@" Properties").Append(k_WindowsNewline); + builder.Append(@" ").Append(assemblyName).Append("").Append(k_WindowsNewline); + builder.Append(@" ").Append(k_TargetFrameworkVersion).Append("").Append(k_WindowsNewline); + builder.Append(@" 512").Append(k_WindowsNewline); + builder.Append(@" ").Append(k_BaseDirectory).Append("").Append(k_WindowsNewline); + builder.Append(@" ").Append(k_WindowsNewline); + builder.Append(@" ").Append(k_WindowsNewline); + builder.Append(@" true").Append(k_WindowsNewline); + builder.Append(@" full").Append(k_WindowsNewline); + builder.Append(@" false").Append(k_WindowsNewline); + builder.Append(@" Temp\bin\Debug\").Append(k_WindowsNewline); + builder.Append(@" ").Append(defines).Append("").Append(k_WindowsNewline); + builder.Append(@" prompt").Append(k_WindowsNewline); + builder.Append(@" 4").Append(k_WindowsNewline); + builder.Append(@" 0169").Append(k_WindowsNewline); + builder.Append(@" ").Append(allowUnsafe).Append("").Append(k_WindowsNewline); + builder.Append(@" ").Append(k_WindowsNewline); + builder.Append(@" ").Append(k_WindowsNewline); + builder.Append(@" pdbonly").Append(k_WindowsNewline); + builder.Append(@" true").Append(k_WindowsNewline); + builder.Append(@" Temp\bin\Release\").Append(k_WindowsNewline); + builder.Append(@" prompt").Append(k_WindowsNewline); + builder.Append(@" 4").Append(k_WindowsNewline); + builder.Append(@" 0169").Append(k_WindowsNewline); + builder.Append(@" ").Append(allowUnsafe).Append("").Append(k_WindowsNewline); + builder.Append(@" ").Append(k_WindowsNewline); + builder.Append(@" ").Append(k_WindowsNewline); + builder.Append(@" true").Append(k_WindowsNewline); + builder.Append(@" true").Append(k_WindowsNewline); + builder.Append(@" false").Append(k_WindowsNewline); + builder.Append(@" false").Append(k_WindowsNewline); + builder.Append(@" false").Append(k_WindowsNewline); + builder.Append(@" ").Append(k_WindowsNewline); + builder.Append(@" ").Append(k_WindowsNewline); + } + + void SyncSolution(IEnumerable assemblies) + { + SyncSolutionFileIfNotChanged(SolutionFile(), SolutionText(assemblies)); + } + + string SolutionText(IEnumerable assemblies) + { + var fileversion = "11.00"; + var vsversion = "2010"; + + var relevantAssemblies = RelevantAssembliesForMode(assemblies); + string projectEntries = GetProjectEntries(relevantAssemblies); + string projectConfigurations = string.Join(k_WindowsNewline, relevantAssemblies.Select(i => GetProjectActiveConfigurations(ProjectGuid(i.name))).ToArray()); + return string.Format(GetSolutionText(), fileversion, vsversion, projectEntries, projectConfigurations); + } + + static IEnumerable RelevantAssembliesForMode(IEnumerable assemblies) + { + return assemblies.Where(i => ScriptingLanguage.CSharp == ScriptingLanguageFor(i)); + } + + /// + /// Get a Project("{guid}") = "MyProject", "MyProject.csproj", "{projectguid}" + /// entry for each relevant language + /// + string GetProjectEntries(IEnumerable assemblies) + { + var projectEntries = assemblies.Select(i => string.Format( + m_SolutionProjectEntryTemplate, + SolutionGuid(i), + i.name, + Path.GetFileName(ProjectFile(i)), + ProjectGuid(i.name) + )); + + return string.Join(k_WindowsNewline, projectEntries.ToArray()); + } + + /// + /// Generate the active configuration string for a given project guid + /// + string GetProjectActiveConfigurations(string projectGuid) + { + return string.Format( + m_SolutionProjectConfigurationTemplate, + projectGuid); + } + + string EscapedRelativePathFor(string file) + { + var projectDir = ProjectDirectory.Replace('/', '\\'); + file = file.Replace('/', '\\'); + var path = SkipPathPrefix(file, projectDir); + + var packageInfo = m_AssemblyNameProvider.FindForAssetPath(path.Replace('\\', '/')); + if (packageInfo != null) + { + // We have to normalize the path, because the PackageManagerRemapper assumes + // dir seperators will be os specific. + var absolutePath = Path.GetFullPath(NormalizePath(path)).Replace('/', '\\'); + path = SkipPathPrefix(absolutePath, projectDir); + } + + return SecurityElement.Escape(path); + } + + static string SkipPathPrefix(string path, string prefix) + { + if (path.StartsWith($@"{prefix}\")) + return path.Substring(prefix.Length + 1); + return path; + } + + static string NormalizePath(string path) + { + if (Path.DirectorySeparatorChar == '\\') + return path.Replace('/', Path.DirectorySeparatorChar); + return path.Replace('\\', Path.DirectorySeparatorChar); + } + + string ProjectGuid(string assembly) + { + return m_GUIDProvider.ProjectGuid(m_ProjectName, assembly); + } + + string SolutionGuid(Assembly assembly) + { + return m_GUIDProvider.SolutionGuid(m_ProjectName, GetExtensionOfSourceFiles(assembly.sourceFiles)); + } + + static string ProjectFooter() + { + return GetProjectFooterTemplate(); + } + + static string GetProjectExtension() + { + return ".csproj"; + } + + void WriteVSCodeSettingsFiles() + { + var vsCodeDirectory = Path.Combine(ProjectDirectory, ".vscode"); + + if (!m_FileIOProvider.Exists(vsCodeDirectory)) + m_FileIOProvider.CreateDirectory(vsCodeDirectory); + + var vsCodeSettingsJson = Path.Combine(vsCodeDirectory, "settings.json"); + + if (!m_FileIOProvider.Exists(vsCodeSettingsJson)) + m_FileIOProvider.WriteAllText(vsCodeSettingsJson, k_SettingsJson); + } + } + + public static class SolutionGuidGenerator + { + static MD5 mD5 = MD5CryptoServiceProvider.Create(); + + public static string GuidForProject(string projectName) + { + return ComputeGuidHashFor(projectName + "salt"); + } + + public static string GuidForSolution(string projectName, string sourceFileExtension) + { + if (sourceFileExtension.ToLower() == "cs") + + // GUID for a C# class library: http://www.codeproject.com/Reference/720512/List-of-Visual-Studio-Project-Type-GUIDs + return "FAE04EC0-301F-11D3-BF4B-00C04F79EFBC"; + + return ComputeGuidHashFor(projectName); + } + + static string ComputeGuidHashFor(string input) + { + var hash = mD5.ComputeHash(Encoding.Default.GetBytes(input)); + return new Guid(hash).ToString(); + } + } +} diff --git a/Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor/ProjectGeneration/ProjectGeneration.cs.meta b/Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor/ProjectGeneration/ProjectGeneration.cs.meta new file mode 100644 index 0000000..5039705 --- /dev/null +++ b/Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor/ProjectGeneration/ProjectGeneration.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 97d6c87381e3e51488b49f5891490b70 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor/Unity.com.unity.vscode.Editor.asmdef b/Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor/Unity.com.unity.vscode.Editor.asmdef new file mode 100644 index 0000000..032da7c --- /dev/null +++ b/Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor/Unity.com.unity.vscode.Editor.asmdef @@ -0,0 +1,9 @@ +{ + "name": "Unity.VSCode.Editor", + "references": [], + "optionalUnityReferences": [], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [] +} diff --git a/Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor/Unity.com.unity.vscode.Editor.asmdef.meta b/Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor/Unity.com.unity.vscode.Editor.asmdef.meta new file mode 100644 index 0000000..4c94f56 --- /dev/null +++ b/Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor/Unity.com.unity.vscode.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8b845b123ab418448a8be2935fa804e0 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor/VSCodeDiscovery.cs b/Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor/VSCodeDiscovery.cs new file mode 100644 index 0000000..609d2cd --- /dev/null +++ b/Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor/VSCodeDiscovery.cs @@ -0,0 +1,137 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using Unity.CodeEditor; + +namespace VSCodeEditor +{ + public interface IDiscovery + { + CodeEditor.Installation[] PathCallback(); + } + + public class VSCodeDiscovery : IDiscovery + { + List m_Installations; + + public CodeEditor.Installation[] PathCallback() + { + if (m_Installations == null) + { + m_Installations = new List(); + FindInstallationPaths(); + } + + return m_Installations.ToArray(); + } + + void FindInstallationPaths() + { + string[] possiblePaths = +#if UNITY_EDITOR_OSX + { + "/Applications/Visual Studio Code.app", + "/Applications/Visual Studio Code - Insiders.app" + }; +#elif UNITY_EDITOR_WIN + { + GetProgramFiles() + @"/Microsoft VS Code/bin/code.cmd", + GetProgramFiles() + @"/Microsoft VS Code/Code.exe", + GetProgramFiles() + @"/Microsoft VS Code Insiders/bin/code-insiders.cmd", + GetProgramFiles() + @"/Microsoft VS Code Insiders/Code.exe", + GetLocalAppData() + @"/Programs/Microsoft VS Code/bin/code.cmd", + GetLocalAppData() + @"/Programs/Microsoft VS Code/Code.exe", + GetLocalAppData() + @"/Programs/Microsoft VS Code Insiders/bin/code-insiders.cmd", + GetLocalAppData() + @"/Programs/Microsoft VS Code Insiders/Code.exe", + }; +#else + { + "/usr/bin/code", + "/bin/code", + "/usr/local/bin/code", + "/var/lib/flatpak/exports/bin/com.visualstudio.code", + "/snap/current/bin/code" + }; +#endif + var existingPaths = possiblePaths.Where(VSCodeExists).ToList(); + if (!existingPaths.Any()) + { + return; + } + + var lcp = GetLongestCommonPrefix(existingPaths); + switch (existingPaths.Count) + { + case 1: + { + var path = existingPaths.First(); + m_Installations = new List + { + new CodeEditor.Installation + { + Path = path, + Name = path.Contains("Insiders") + ? "Visual Studio Code Insiders" + : "Visual Studio Code" + } + }; + break; + } + case 2 when existingPaths.Any(path => !(path.Substring(lcp.Length).Contains("/") || path.Substring(lcp.Length).Contains("\\"))): + { + goto case 1; + } + default: + { + m_Installations = existingPaths.Select(path => new CodeEditor.Installation + { + Name = $"Visual Studio Code Insiders ({path.Substring(lcp.Length)})", + Path = path + }).ToList(); + + break; + } + } + } + +#if UNITY_EDITOR_WIN + static string GetProgramFiles() + { + return Environment.GetEnvironmentVariable("ProgramFiles")?.Replace("\\", "/"); + } + + static string GetLocalAppData() + { + return Environment.GetEnvironmentVariable("LOCALAPPDATA")?.Replace("\\", "/"); + } +#endif + + static string GetLongestCommonPrefix(List paths) + { + var baseLength = paths.First().Length; + for (var pathIndex = 1; pathIndex < paths.Count; pathIndex++) + { + baseLength = Math.Min(baseLength, paths[pathIndex].Length); + for (var i = 0; i < baseLength; i++) + { + if (paths[pathIndex][i] == paths[0][i]) continue; + + baseLength = i; + break; + } + } + + return paths[0].Substring(0, baseLength); + } + + static bool VSCodeExists(string path) + { +#if UNITY_EDITOR_OSX + return System.IO.Directory.Exists(path); +#else + return new FileInfo(path).Exists; +#endif + } + } +} diff --git a/Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor/VSCodeDiscovery.cs.meta b/Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor/VSCodeDiscovery.cs.meta new file mode 100644 index 0000000..cbeca1b --- /dev/null +++ b/Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor/VSCodeDiscovery.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 380f7372e785c7d408552e2c760d269d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor/VSCodeScriptEditor.cs b/Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor/VSCodeScriptEditor.cs new file mode 100644 index 0000000..f1657cd --- /dev/null +++ b/Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor/VSCodeScriptEditor.cs @@ -0,0 +1,257 @@ +using System; +using System.IO; +using System.Linq; +using System.Diagnostics; +using UnityEditor; +using UnityEngine; +using Unity.CodeEditor; + +namespace VSCodeEditor +{ + [InitializeOnLoad] + public class VSCodeScriptEditor : IExternalCodeEditor + { + const string vscode_argument = "vscode_arguments"; + const string vscode_generate_all = "unity_generate_all_csproj"; + const string vscode_extension = "vscode_userExtensions"; + static readonly GUIContent k_ResetArguments = EditorGUIUtility.TrTextContent("Reset argument"); + string m_Arguments; + + IDiscovery m_Discoverability; + IGenerator m_ProjectGeneration; + + static readonly string[] k_SupportedFileNames = { "code.exe", "visualstudiocode.app", "visualstudiocode-insiders.app", "vscode.app", "code.app", "code.cmd", "code-insiders.cmd", "code", "com.visualstudio.code" }; + + static bool IsOSX => Application.platform == RuntimePlatform.OSXEditor; + + static string DefaultApp => EditorPrefs.GetString("kScriptsDefaultApp"); + + static string DefaultArgument { get; } = "\"$(ProjectPath)\" -g \"$(File)\":$(Line):$(Column)"; + + string Arguments + { + get => m_Arguments ?? (m_Arguments = EditorPrefs.GetString(vscode_argument, DefaultArgument)); + set + { + m_Arguments = value; + EditorPrefs.SetString(vscode_argument, value); + } + } + + static string[] defaultExtensions + { + get + { + var customExtensions = new[] { "json", "asmdef", "log" }; + return EditorSettings.projectGenerationBuiltinExtensions + .Concat(EditorSettings.projectGenerationUserExtensions) + .Concat(customExtensions) + .Distinct().ToArray(); + } + } + + static string[] HandledExtensions + { + get + { + return HandledExtensionsString + .Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries) + .Select(s => s.TrimStart('.', '*')) + .ToArray(); + } + } + + static string HandledExtensionsString + { + get => EditorPrefs.GetString(vscode_extension, string.Join(";", defaultExtensions)); + set => EditorPrefs.SetString(vscode_extension, value); + } + + public bool TryGetInstallationForPath(string editorPath, out CodeEditor.Installation installation) + { + var lowerCasePath = editorPath.ToLower(); + var filename = Path.GetFileName(lowerCasePath).Replace(" ", ""); + var installations = Installations; + if (!k_SupportedFileNames.Contains(filename)) + { + installation = default; + return false; + } + + if (!installations.Any()) + { + installation = new CodeEditor.Installation + { + Name = "Visual Studio Code", + Path = editorPath + }; + } + else + { + try + { + installation = installations.First(inst => inst.Path == editorPath); + } + catch (InvalidOperationException) + { + installation = new CodeEditor.Installation + { + Name = "Visual Studio Code", + Path = editorPath + }; + } + } + + return true; + } + + public void OnGUI() + { + Arguments = EditorGUILayout.TextField("External Script Editor Args", Arguments); + if (GUILayout.Button(k_ResetArguments, GUILayout.Width(120))) + { + Arguments = DefaultArgument; + } + + var prevGenerate = EditorPrefs.GetBool(vscode_generate_all, false); + + var generateAll = EditorGUILayout.Toggle("Generate all .csproj files.", prevGenerate); + if (generateAll != prevGenerate) + { + EditorPrefs.SetBool(vscode_generate_all, generateAll); + } + + m_ProjectGeneration.GenerateAll(generateAll); + + HandledExtensionsString = EditorGUILayout.TextField(new GUIContent("Extensions handled: "), HandledExtensionsString); + } + + public void CreateIfDoesntExist() + { + if (!m_ProjectGeneration.SolutionExists()) + { + m_ProjectGeneration.Sync(); + } + } + + public void SyncIfNeeded(string[] addedFiles, string[] deletedFiles, string[] movedFiles, string[] movedFromFiles, string[] importedFiles) + { + m_ProjectGeneration.SyncIfNeeded(addedFiles.Union(deletedFiles).Union(movedFiles).Union(movedFromFiles).ToList(), importedFiles); + } + + public void SyncAll() + { + AssetDatabase.Refresh(); + m_ProjectGeneration.Sync(); + } + + public bool OpenProject(string path, int line, int column) + { + if (path != "" && !SupportsExtension(path)) // Assets - Open C# Project passes empty path here + { + return false; + } + + if (line == -1) + line = 1; + if (column == -1) + column = 0; + + string arguments; + if (Arguments != DefaultArgument) + { + arguments = m_ProjectGeneration.ProjectDirectory != path + ? CodeEditor.ParseArgument(Arguments, path, line, column) + : m_ProjectGeneration.ProjectDirectory; + } + else + { + arguments = $@"""{m_ProjectGeneration.ProjectDirectory}"""; + if (m_ProjectGeneration.ProjectDirectory != path && path.Length != 0) + { + arguments += $@" -g ""{path}"":{line}:{column}"; + } + } + + if (IsOSX) + { + return OpenOSX(arguments); + } + + var app = DefaultApp; + var process = new Process + { + StartInfo = new ProcessStartInfo + { + FileName = app, + Arguments = arguments, + WindowStyle = app.EndsWith(".cmd", StringComparison.OrdinalIgnoreCase) ? ProcessWindowStyle.Hidden : ProcessWindowStyle.Normal, + CreateNoWindow = true, + UseShellExecute = true, + } + }; + + process.Start(); + return true; + } + + static bool OpenOSX(string arguments) + { + var process = new Process + { + StartInfo = new ProcessStartInfo + { + FileName = "open", + Arguments = $"-n \"{DefaultApp}\" --args {arguments}", + UseShellExecute = true, + } + }; + + process.Start(); + return true; + } + + static bool SupportsExtension(string path) + { + var extension = Path.GetExtension(path); + if (string.IsNullOrEmpty(extension)) + return false; + return HandledExtensions.Contains(extension.TrimStart('.')); + } + + public CodeEditor.Installation[] Installations => m_Discoverability.PathCallback(); + + public VSCodeScriptEditor(IDiscovery discovery, IGenerator projectGeneration) + { + m_Discoverability = discovery; + m_ProjectGeneration = projectGeneration; + } + + static VSCodeScriptEditor() + { + var editor = new VSCodeScriptEditor(new VSCodeDiscovery(), new ProjectGeneration(Directory.GetParent(Application.dataPath).FullName)); + CodeEditor.Register(editor); + + if (IsVSCodeInstallation(CodeEditor.CurrentEditorInstallation)) + { + editor.CreateIfDoesntExist(); + } + } + + static bool IsVSCodeInstallation(string path) + { + if (string.IsNullOrEmpty(path)) + { + return false; + } + + var lowerCasePath = path.ToLower(); + var filename = Path + .GetFileName(lowerCasePath.Replace('\\', Path.DirectorySeparatorChar).Replace('/', Path.DirectorySeparatorChar)) + .Replace(" ", ""); + return k_SupportedFileNames.Contains(filename); + } + + public void Initialize(string editorInstallationPath) { } + } +} diff --git a/Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor/VSCodeScriptEditor.cs.meta b/Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor/VSCodeScriptEditor.cs.meta new file mode 100644 index 0000000..a0aa5a4 --- /dev/null +++ b/Library/PackageCache/com.unity.ide.vscode@1.1.4/Editor/VSCodeScriptEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ac3f13489022aa34d861a0320a6917b9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.ide.vscode@1.1.4/LICENSE.md b/Library/PackageCache/com.unity.ide.vscode@1.1.4/LICENSE.md new file mode 100644 index 0000000..eb18dfb --- /dev/null +++ b/Library/PackageCache/com.unity.ide.vscode@1.1.4/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 Unity Technologies + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Library/PackageCache/com.unity.ide.vscode@1.1.4/LICENSE.md.meta b/Library/PackageCache/com.unity.ide.vscode@1.1.4/LICENSE.md.meta new file mode 100644 index 0000000..1c1e96e --- /dev/null +++ b/Library/PackageCache/com.unity.ide.vscode@1.1.4/LICENSE.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c9aabac5924106d4790d7b3a924ca34d +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.ide.vscode@1.1.4/package.json b/Library/PackageCache/com.unity.ide.vscode@1.1.4/package.json new file mode 100644 index 0000000..f431a90 --- /dev/null +++ b/Library/PackageCache/com.unity.ide.vscode@1.1.4/package.json @@ -0,0 +1,17 @@ +{ + "name": "com.unity.ide.vscode", + "displayName": "Visual Studio Code Editor", + "description": "Code editor integration for supporting Visual Studio Code as code editor for unity. Adds support for generating csproj files for intellisense purposes, auto discovery of installations, etc.", + "version": "1.1.4", + "unity": "2019.2", + "unityRelease": "0a12", + "dependencies": {}, + "relatedPackages": { + "com.unity.ide.vscode.tests": "1.1.4" + }, + "repository": { + "type": "git", + "url": "git@github.cds.internal.unity3d.com:unity/com.unity.ide.vscode.git", + "revision": "5b09e2bc6a13b557ca1ebf1db5f960746631630e" + } +} diff --git a/Library/PackageCache/com.unity.ide.vscode@1.1.4/package.json.meta b/Library/PackageCache/com.unity.ide.vscode@1.1.4/package.json.meta new file mode 100644 index 0000000..8e83539 --- /dev/null +++ b/Library/PackageCache/com.unity.ide.vscode@1.1.4/package.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ffc6271f08270b64ca0aae9c49235d81 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/CHANGELOG.md b/Library/PackageCache/com.unity.test-framework@1.1.11/CHANGELOG.md new file mode 100644 index 0000000..65a980d --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/CHANGELOG.md @@ -0,0 +1,112 @@ +# Changelog +## [1.1.11] - 2020-01-16 +- Fixed test runner dlls got included into player build (case 1211624) +- Passing a non-full-path of XML file for -testResults in Unity Batchmode issue resolved, now passing "result.xml" creates the result file in the project file directory (case 959078) +- Respect Script Debugging build setting when running tests + +## [1.1.10] - 2019-12-19 +- Introduced PostSuccessfulLaunchAction callback +- Fixed an issue where canceling a UnityTest while it was running would incorrectly mark it as passed instead of canceled. +- Added command line argument for running tests synchronously. +- The test search bar now handles null values correctly. +- The test output pane now retains its size on domain reloads. + +## [1.1.9] - 2019-12-12 +- Rolled back refactoring to the test run system, as it caused issues in some corner cases. + +## [1.1.8] - 2019-11-15 +- Ensured that a resumed test run is continued instantly. + +## [1.1.7] - 2019-11-14 +- Fixed an issue with test runs after domain reload. + +## [1.1.6] - 2019-11-12 +- Building a player for test will no longer look in unrelated assemblies for relevant attributes. + +## [1.1.5] - 2019-10-23 +- Fixed a regression to synchronous runs introduced in 1.1.4. + +## [1.1.4] - 2019-10-15 +- Running tests in batch mode now correctly returns error code 3 (RunError) when a timeout or a build error occurs. +- Fixed an issue where a test run in a player would time out, if the player takes longer than 10 minutes to run. +- Added command line argument and api setting for specifying custom heartbeat timeout for running on players. + +## [1.1.3] - 2019-09-23 +- Fixed a regression where tests in a player would report a timeout after a test run is finished. +- Made it possible for the ui to change its test items when the test tree changes without script compilation. +- Added synchronous runs as an option to the TestRunnerApi. + +## [1.1.2] - 2019-09-11 +- Fixed an issue where Run Selected would run all tests in the category, if a category filter was selected, regardless of what tests were selected. +- Unsupported attributes used in UnityTests now give an explicit error. +- Added support for the Repeat and Retry attributes in UnityTests (case 1131940). +- Tests with a explicit timeout higher than 10 minutes, no longer times out after running longer than 10 minutes when running from command line (case 1125991). +- Fixed a performance regression in the test runner api result reporting, introduced in 2018.3 (case 1109865). +- Fixed an issue where parameterized test fixtures would not run if selected in the test tree (case 1092244). +- Pressing Clear Results now also correctly clears the counters on the test list (case 1181763). +- Prebuild setup now handles errors logged with Debug.LogError and stops the run if any is logged (case 1115240). It now also supports LogAssert.Expect. + +## [1.1.1] - 2019-08-07 +- Tests retrieved as a test list with the test runner api incorrectly showed both mode as their TestMode. +- Fixed a compatibility issue with running tests from rider. + +## [1.1.0] - 2019-07-30 +- Introduced the TestRunnerApi for running tests programmatically from elsewhere inside the Editor. +- Introduced yield instructions for recompiling scripts and awaiting a domain reload in Edit Mode tests. +- Added a button to the Test Runner UI for clearing the results. + +## [1.0.18] - 2019-07-15 +- Included new full documentation of the test framework. + +## [1.0.17] - 2019-07-11 +- Fixed an issue where the Test Runner window wouldn’t frame selected items after search filter is cleared. +- Fixed a regression where playmode test application on the IOS platform would not quit after the tests are done. + +## [1.0.16] - 2019-06-20 +- Fixed an issue where the Test Runner window popped out if it was docked, or if something else was docked next to it, when re-opened (case 1158961) +- Fixed a regression where the running standalone playmode tests from the ui would result in an error. + +## [1.0.15] - 2019-06-18 +- Added new `[TestMustExpectAllLogs]` attribute, which automatically does `LogAssert.NoUnexpectedReceived()` at the end of affected tests. See docs for this attribute for more info on usage. +- Fixed a regression where no tests would be run if multiple filters are specified. E.g. selecting both a whole assembly and an individual test in the ui. +- Fixed an issue where performing `Run Selected` on a selected assembly would run all assemblies. +- Introduced the capability to do a split build and run, when running playmode tests on standalone devices. +- Fixed an error in ConditionalIgnore, if the condition were not set. + +## [1.0.14] - 2019-05-27 +- Fixed issue preventing scene creation in IPrebuildSetup.Setup callback when running standalone playmode tests. +- Fixed an issue where test assemblies would sometimes not be ordered alphabetically. +- Added module references to the package for the required modules: imgui and jsonserialize. +- Added a ConditionalIgnore attribute to help ignoring tests only under specific conditions. +- Fixed a typo in the player test window (case 1148671). + +## [1.0.13] - 2019-05-07 +- Fixed a regression where results from the player would no longer update correctly in the UI (case 1151147). + +## [1.0.12] - 2019-04-16 +- Added specific unity release to the package information. + +## [1.0.11] - 2019-04-10 +- Fixed a regression from 1.0.10 where test-started events were triggered multiple times after a domain reload. + +## [1.0.10] - 2019-04-08 +- Fixed an issue where test-started events would not be fired correctly after a test performing a domain reload (case 1141530). +- The UI should correctly run tests inside a nested class, when that class is selected. +- All actions should now correctly display a prefix when reporting test result. E.g. "TearDown :". +- Errors logged with Debug.LogError in TearDowns now append the error, rather than overwriting the existing result (case 1114306). +- Incorrect implementations of IWrapTestMethod and IWrapSetUpTearDown now gives a meaningful error. +- Fixed a regression where the Test Framework would run TearDown in a base class before the inheriting class (case 1142553). +- Fixed a regression introduced in 1.0.9 where tests with the Explicit attribute could no longer be executed. + +## [1.0.9] - 2019-03-27 +- Fixed an issue where a corrupt instance of the test runner window would block for a new being opened. +- Added the required modules to the list of package requirements. +- Fixed an issue where errors would happen if the test filter ui was clicked before the ui is done loading. +- Fix selecting items with duplicate names in test hierarchy of Test Runner window (case 987587). +- Fixed RecompileScripts instruction which we use in tests (case 1128994). +- Fixed an issue where using multiple filters on tests would sometimes give an incorrect result. + +## [1.0.7] - 2019-03-12 +### This is the first release of *Unity Package com.unity.test-framework*. + +- Migrated the test-framework from the current extension in unity. diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/CHANGELOG.md.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/CHANGELOG.md.meta new file mode 100644 index 0000000..097eb7e --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/CHANGELOG.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d691174143fd3774ba63d7c493633b99 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/CONTRIBUTING.md b/Library/PackageCache/com.unity.test-framework@1.1.11/CONTRIBUTING.md new file mode 100644 index 0000000..4a67963 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/CONTRIBUTING.md @@ -0,0 +1,9 @@ +# Contributing + +## If you are interested in contributing, here are some ground rules: +* ... Define guidelines & rules for what contributors need to know to successfully make Pull requests against your repo ... + +## All contributions are subject to the [Unity Contribution Agreement(UCA)](https://unity3d.com/legal/licenses/Unity_Contribution_Agreement) +By making a pull request, you are confirming agreement to the terms and conditions of the UCA, including that your Contributions are your original creation and that you have complete right and authority to make your Contributions. + +## Once you have a change ready following these ground rules. Simply make a pull request diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/CONTRIBUTING.md.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/CONTRIBUTING.md.meta new file mode 100644 index 0000000..9d51b0b --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/CONTRIBUTING.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 57d2ac5c7d5786e499d4794973fe0d4e +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/TableOfContents.md b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/TableOfContents.md new file mode 100644 index 0000000..3eed595 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/TableOfContents.md @@ -0,0 +1,66 @@ +* [Unity Test Framework overview](./index.md) +* [Edit Mode vs. Play Mode tests](./edit-mode-vs-play-mode-tests.md) +* [Getting started with UTF](./getting-started.md) + * [How to create a new test assembly](./workflow-create-test-assembly.md) + * [How to create a test](./workflow-create-test.md) + * [How to run a test](./workflow-run-test.md) + * [How to create a Play Mode test](./workflow-create-playmode-test.md) + * [How to run a Play Mode test as standalone](./workflow-run-playmode-test-standalone.md) +* [Resources](./resources.md) +* [Extending UTF](./extending.md) + * [How to split the build and run process for standalone Play Mode tests](./reference-attribute-testplayerbuildmodifier.md#split-build-and-run-for-player-mode-tests) + * [How to run tests programmatically](./extension-run-tests.md) + * [How to get test results](./extension-get-test-results.md) + * [How to retrieve the list of tests](./extension-retrieve-test-list.md) +* [Reference](./manual.md#reference) + * [Running tests from the command-line](./reference-command-line.md) + * [UnityTest attribute](./reference-attribute-unitytest.md) + * [Setup and cleanup at build time](./reference-setup-and-cleanup.md) + * [IPrebuildSetup](./reference-setup-and-cleanup.md#iprebuildsetup) + * [IPostBuildCleanup](./reference-setup-and-cleanup.md#ipostbuildcleanup) + * [Actions outside of tests](./reference-actions-outside-tests.md) + * [Action execution order](./reference-actions-outside-tests.md#action-execution-order) + * [UnitySetUp and UnityTearDown](./reference-actions-outside-tests.md#unitysetup-and-unityteardown) + * [OuterUnityTestAction](./reference-actions-outside-tests.md#outerunitytestaction) + * [Domain Reloads](./reference-actions-outside-tests.md#domain-reloads) + * [Custom attributes](./reference-custom-attributes.md) + * [ConditionalIgnore attribute](./reference-attribute-conditionalignore.md) + * [PostBuildCleanup attribute](./reference-setup-and-cleanup.md#prebuildsetup-and-postbuildcleanup) + * [PrebuildSetup attribute](./reference-setup-and-cleanup.md#prebuildsetup-and-postbuildcleanup) + * [TestMustExpectAllLogs attribute](./reference-attribute-testmustexpectalllogs.md) + * [TestPlayerBuildModifier attribute](./reference-attribute-testplayerbuildmodifier.md) + * [TestRunCallback attribute](./reference-attribute-testruncallback.md) + * [UnityPlatform attribute](./reference-attribute-unityplatform.md) + * [UnitySetUp attribute](./reference-actions-outside-tests.md#unitysetup-and-unityteardown) + * [UnityTearDown attribute](./reference-actions-outside-tests.md#unitysetup-and-unityteardown) + * [UnityTest attribute](./reference-attribute-unitytest.md) + * [Custom equality comparers](./reference-custom-equality-comparers.md) + * [ColorEqualityComparer](./reference-comparer-color.md) + * [FloatEqualityComparer](./reference-comparer-float.md) + * [QuaternionEqualityComparer](./reference-comparer-quaternion.md) + * [Vector2EqualityComparer](./reference-comparer-vector2.md) + * [Vector3EqualityComparer](./reference-comparer-vector3.md) + * [Vector4EqualityComparer](./reference-comparer-vector4.md) + * [Custom equality comparers with equals operator](./reference-comparer-equals.md) + * [Test Utils](./reference-test-utils.md) + * [Custom yield instructions](./reference-custom-yield-instructions.md) + * [IEditModeTestYieldInstruction](./reference-custom-yield-instructions.md#IEditModeTestYieldInstruction) + * [EnterPlayMode](./reference-custom-yield-instructions.md#enterplaymode) + * [ExitPlayMode](./reference-custom-yield-instructions.md#exitplaymode) + * [RecompileScripts](./reference-recompile-scripts.md) + * [WaitForDomainReload](./reference-wait-for-domain-reload.md) + * [Custom assertion](./reference-custom-assertion.md) + * [LogAssert](./reference-custom-assertion.md#logassert) + * [Custom constraints](./reference-custom-constraints.md) + * [Is](./reference-custom-constraints.md#is) + * [Parameterized tests](./reference-tests-parameterized.md) + * [MonoBehaviour tests](./reference-tests-monobehaviour.md) + * [MonoBehaviourTest<T>](./reference-tests-monobehaviour.md#monobehaviourtestt) + * [IMonoBehaviourTest](./reference-tests-monobehaviour.md#imonobehaviourtest) + * [TestRunnerApi](./reference-test-runner-api.md) + * [ExecutionSettings](./reference-execution-settings.md) + * [Filter](./reference-filter.md) + * [ITestRunSettings](./reference-itest-run-settings.md) + * [ICallbacks](./reference-icallbacks.md) + * [IErrorCallbacks](./reference-ierror-callbacks.md) + diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/edit-mode-vs-play-mode-tests.md b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/edit-mode-vs-play-mode-tests.md new file mode 100644 index 0000000..7a10424 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/edit-mode-vs-play-mode-tests.md @@ -0,0 +1,53 @@ +# Edit Mode vs. Play Mode tests + +Let’s clarify a bit what Play Mode and Edit Mode test means from the Unity Test Framework perspective: + +## Edit Mode tests + +**Edit Mode** tests (also known as Editor tests) are only run in the Unity Editor and have access to the Editor code in addition to the game code. + +With Edit Mode tests it is possible to test any of your [Editor extensions](https://docs.unity3d.com/Manual/ExtendingTheEditor.html) using the [UnityTest](./reference-attribute-unitytest.md) attribute. For Edit Mode tests, your test code runs in the [EditorApplication.update](https://docs.unity3d.com/ScriptReference/EditorApplication-update.html) callback loop. + +> **Note**: You can also control entering and exiting Play Mode from your Edit Mode test. This allow your test to make changes before entering Play Mode. + +Edit Mode tests should meet one of the following conditions: + +* They should have an [assembly definition](./workflow-create-test-assembly.md) with reference to *nunit.framework.dll* and has only the Editor as a target platform: + +```assembly + "includePlatforms": [ + "Editor" + ], +``` + +* Legacy condition: put tests in the project’s [Editor](https://docs.unity3d.com/Manual/SpecialFolders.html) folder. + +## Play Mode tests + +You can run **Play Mode** tests as a [standalone in a Player](./workflow-run-playmode-test-standalone.md) or inside the Editor. Play Mode tests allow you to exercise your game code, as the tests run as [coroutines](https://docs.unity3d.com/ScriptReference/Coroutine.html) if marked with the `UnityTest` attribute. + +Play Mode tests should correspond to the following conditions: + +* Have an [assembly definition](./workflow-create-test-assembly.md) with reference to *nunit.framework.dll*. +* Have the test scripts located in a folder with the .asmdef file. +* The test assembly should reference an assembly within the code that you need to test. + +```assembly + "references": [ + "NewAssembly" + ], + "optionalUnityReferences": [ + "TestAssemblies" + ], + "includePlatforms": [], +``` + +## Recommendations + +### Attributes + +Use the [NUnit](http://www.nunit.org/) `Test` attribute instead of the `UnityTest` attribute, unless you need to [yield special instructions](./reference-custom-yield-instructions.md), in Edit Mode, or if you need to skip a frame or wait for a certain amount of time in Play Mode. + +### References + +It is possible for your Test Assemblies to reference the test tools in `UnityEngine.TestRunner` and `UnityEditor.TestRunner`. The latter is only available in Edit Mode. You can specify these references in the `Assembly Definition References` on the Assembly Definition. \ No newline at end of file diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/extending.md b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/extending.md new file mode 100644 index 0000000..c28a2fd --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/extending.md @@ -0,0 +1,10 @@ +# Extending Unity Test Framework +It is possible to extend the Unity Test Framework (UTF) in many ways, for custom workflows for your projects and for other packages to build on top of UTF. + +These extensions are a supplement to the ones already offered by [NUnit](https://github.com/nunit/docs/wiki/Framework-Extensibility). + +Some workflows for extending UTF include: +* [How to split the build and run process for standalone Play Mode tests](./reference-attribute-testplayerbuildmodifier.md#split-build-and-run-for-player-mode-tests) +* [How to run tests programmatically](./extension-run-tests.md) +* [How to get test results](./extension-get-test-results.md) +* [How to retrieve the list of tests](./extension-retrieve-test-list.md)  \ No newline at end of file diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/extension-get-test-results.md b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/extension-get-test-results.md new file mode 100644 index 0000000..e337ef9 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/extension-get-test-results.md @@ -0,0 +1,45 @@ +# How to get test results +You can receive callbacks when the active test run, or individual tests, starts and finishes. You can register callbacks by invoking `RegisterCallbacks` on the [TestRunnerApi](./reference-test-runner-api.md) with an instance of a class that implements [ICallbacks](./reference-icallbacks.md). There are four `ICallbacks` methods for the start and finish of both the whole run and each level of the test tree. + +## Example +An example of how listeners can be set up: + +> **Note**: Listeners receive callbacks from all test runs, regardless of the registered `TestRunnerApi` for that instance. + +``` C# +public void SetupListeners() +{ + var api = ScriptableObject.CreateInstance(); + api.RegisterCallbacks(new MyCallbacks()); +} + +private class MyCallbacks : ICallbacks +{ + public void RunStarted(ITestAdaptor testsToRun) + { + + } + + public void RunFinished(ITestResultAdaptor result) + { + + } + + public void TestStarted(ITestAdaptor test) + { + + } + + public void TestFinished(ITestResultAdaptor result) + { + if (!result.HasChildren && result.ResultState != "Success") + { + Debug.Log(string.Format("Test {0} {1}", result.Test.Name, result.ResultState)); + } + } +} +``` + +> **Note**: The registered callbacks are not persisted on domain reloads. So it is necessary to re-register the callback after a domain reloads, usually with [InitializeOnLoad](https://docs.unity3d.com/Manual/RunningEditorCodeOnLaunch.html). + +It is possible to provide a `priority` as an integer as the second argument when registering a callback. This influences the invocation order of different callbacks. The default value is zero. It is also possible to provide `RegisterCallbacks` with a class instance that implements [IErrorCallbacks](./reference-ierror-callbacks.md) that is an extended version of `ICallbacks`. `IErrorCallbacks` also has a callback method for `OnError` that invokes if the run fails to start, for example, due to compilation errors or if an [IPrebuildSetup](./reference-setup-and-cleanup.md) throws an exception. \ No newline at end of file diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/extension-retrieve-test-list.md b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/extension-retrieve-test-list.md new file mode 100644 index 0000000..a2b9313 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/extension-retrieve-test-list.md @@ -0,0 +1,13 @@ +# How to retrieve the list of tests +It is possible to use the [TestRunnerApi](./reference-test-runner-api.md) to retrieve the test tree for a given test mode (**Edit Mode** or **Play Mode**). You can retrieve the test tree by invoking `RetrieveTestList` with the desired `TestMode` and a callback action, with an [ITestAdaptor](./reference-itest-adaptor.md) representing the test tree. + +## Example +The following example retrieves the test tree for Edit Mode tests and prints the number of total test cases: +``` C# +var api = ScriptableObject.CreateInstance(); +api.RetrieveTestList(TestMode.EditMode, (testRoot) => +{ + Debug.Log(string.Format("Tree contains {0} tests.", testRoot.TestCaseCount)); +}); +``` + diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/extension-run-tests.md b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/extension-run-tests.md new file mode 100644 index 0000000..79f92d2 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/extension-run-tests.md @@ -0,0 +1,72 @@ +# How to run tests programmatically +## Filters + +Run tests by calling `Execute` on the [TestRunnerApi](./reference-test-runner-api.md), and provide some execution settings that consists of a [Filter](./reference-filter.md). The `Filter` specifies what tests to run. + +### Example + +The following is an example of how to run all **Play Mode** tests in a project: + +``` C# +var testRunnerApi = ScriptableObject.CreateInstance(); +var filter = new Filter() +{ + testMode = TestMode.PlayMode +}; +testRunnerApi.Execute(new ExecutionSettings(filter)); +``` +## Multiple filter values + +It is possible to specify a more specific filter by filling out the fields on the `Filter` class in more detail. + +Many of the fields allow for multiple values. The runner tries to match tests against at least one of the values provided and then runs any tests that match. + +### Example + +In this example, the API runs tests with full names that fit either of the two names provided: + +``` C# +var api = ScriptableObject.CreateInstance(); +api.Execute(new ExecutionSettings(new Filter() +{ + testNames = new[] {"MyTestClass.NameOfMyTest", "SpecificTestFixture.NameOfAnotherTest"} +})); +``` +## Multiple filter fields + +If using multiple different fields on the filter, then it matches against tests that fulfill all the different fields. + +### Example + +In this example, it runs any test that fits either of the two test names, and that also belongs to a test assembly that fits the given name. + +``` C# +var api = ScriptableObject.CreateInstance(); +api.Execute(new ExecutionSettings(new Filter() +{ + assemblyNames = new [] {"MyTestAssembly"}, + testNames = new [] {"MyTestClass.NameOfMyTest", "MyTestClass.AnotherNameOfATest"} +})); +``` +## Multiple constructor filters + +The execution settings take one or more filters in its constructor. If there is no filter provided, then it runs all **Edit Mode** tests by default. If there are multiple filters provided, then a test runs if it matches any of the filters. + +### Example + +In this example, it runs any tests that are either in the assembly named `MyTestAssembly` or if the full name of the test matches either of the two provided test names: + +``` C# +var api = ScriptableObject.CreateInstance(); +api.Execute(new ExecutionSettings( + new Filter() + { + assemblyNames = new[] {"MyTestAssembly"}, + }, + new Filter() + { + testNames = new[] {"MyTestClass.NameOfMyTest", "MyTestClass.AnotherNameOfATest"} + } +)); +``` +> **Note**: Specifying different test modes or platforms in each `Filter` is not currently supported. The test mode and platform is from the first `Filter` only and defaults to Edit Mode, if not supplied. \ No newline at end of file diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/getting-started.md b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/getting-started.md new file mode 100644 index 0000000..b894e16 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/getting-started.md @@ -0,0 +1,18 @@ +# Getting started with Unity Test Framework + +To access the Unity Test Framework (UTF) in the Unity Editor, open the **Test Runner** window; go to **Window** > **General** > **Test Runner**. + +![Unity Test Runner window](./images/test-runner-window.png) + +To get started with UTF, follow the workflows below: + +* [How to create a new test assembly](./workflow-create-test-assembly.md) +* [How to create a test](./workflow-create-test.md) +* [How to run a test](./workflow-run-test.md) +* [How to create a Play Mode test](./workflow-create-playmode-test.md) +* [How to run a Play Mode test as standalone](./workflow-run-playmode-test-standalone.md) + + + +For further information, see the [resources](./resources.md) and [reference](./manual.md#reference) sections. + diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/images/editmode-create-test-script.png b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/images/editmode-create-test-script.png new file mode 100644 index 0000000..fc9af55 Binary files /dev/null and b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/images/editmode-create-test-script.png differ diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/images/editmode-run-test.png b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/images/editmode-run-test.png new file mode 100644 index 0000000..df1b53c Binary files /dev/null and b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/images/editmode-run-test.png differ diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/images/editmode-run-tests.png b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/images/editmode-run-tests.png new file mode 100644 index 0000000..c890d81 Binary files /dev/null and b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/images/editmode-run-tests.png differ diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/images/editmode-tab.png b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/images/editmode-tab.png new file mode 100644 index 0000000..e1b00d7 Binary files /dev/null and b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/images/editmode-tab.png differ diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/images/import-settings.png b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/images/import-settings.png new file mode 100644 index 0000000..6a34e92 Binary files /dev/null and b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/images/import-settings.png differ diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/images/new-test-script.png b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/images/new-test-script.png new file mode 100644 index 0000000..21de081 Binary files /dev/null and b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/images/new-test-script.png differ diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/images/playmode-enable-all.png b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/images/playmode-enable-all.png new file mode 100644 index 0000000..961991a Binary files /dev/null and b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/images/playmode-enable-all.png differ diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/images/playmode-results-standalone.png b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/images/playmode-results-standalone.png new file mode 100644 index 0000000..de40c03 Binary files /dev/null and b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/images/playmode-results-standalone.png differ diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/images/playmode-run-standalone.png b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/images/playmode-run-standalone.png new file mode 100644 index 0000000..ded5792 Binary files /dev/null and b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/images/playmode-run-standalone.png differ diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/images/playmode-tab.png b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/images/playmode-tab.png new file mode 100644 index 0000000..9d315cb Binary files /dev/null and b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/images/playmode-tab.png differ diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/images/test-runner-window.png b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/images/test-runner-window.png new file mode 100644 index 0000000..f3023fb Binary files /dev/null and b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/images/test-runner-window.png differ diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/images/test-templates.png b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/images/test-templates.png new file mode 100644 index 0000000..753a155 Binary files /dev/null and b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/images/test-templates.png differ diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/images/tests-folder-assembly.png b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/images/tests-folder-assembly.png new file mode 100644 index 0000000..4e63751 Binary files /dev/null and b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/images/tests-folder-assembly.png differ diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/index.md b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/index.md new file mode 100644 index 0000000..79d623e --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/index.md @@ -0,0 +1,54 @@ +# About Unity Test Framework + +The Unity Test Framework (UTF) enables Unity users to test their code in both **Edit Mode** and **Play Mode**, and also on target platforms such as [Standalone](https://docs.unity3d.com/Manual/Standalone.html), Android, iOS, etc. + +This package provides a standard test framework for users of Unity and developers at Unity so that both benefit from the same features and can write tests the same way. + +UTF uses a Unity integration of NUnit library, which is an open-source unit testing library for .Net languages. For more information about NUnit, see the [official NUnit website](http://www.nunit.org/) and the [NUnit documentation on GitHub](https://github.com/nunit/docs/wiki/NUnit-Documentation). + +> **Note**: UTF is not a new concept or toolset; it is an adjusted and more descriptive naming for the toolset otherwise known as Unity Test Runner, which is now available as this package. + +# Installing Unity Test Framework + +To install this package, follow the instructions in the [Package Manager documentation](https://docs.unity3d.com/Packages/com.unity.package-manager-ui@latest/index.html). + +> **Note**: Search for the Test Framework package. In Unity 2019.2 and higher, you may need to enable the package before use. + +# Using Unity Test Framework + +To learn how to use the Unity Test Framework package in your project, read the [manual](./manual.md). + +# Technical details + +## Requirements + +This version of the Unity Test Framework is compatible with the following versions of the Unity Editor: + +* 2019.2 and later. + +## Known limitations + +Unity Test Framework version 1.0.18 includes the following known limitations: + +* The `UnityTest` attribute does not support WebGL and WSA platforms. +* The `UnityTest` attribute does not support [Parameterized tests](https://github.com/nunit/docs/wiki/Parameterized-Tests) (except for `ValueSource`). +* The `UnityTest` attribute does not support the `NUnit` [Repeat](https://github.com/nunit/docs/wiki/Repeat-Attribute) attribute. +* Nested test fixture cannot run from the Editor UI. +* When using the `NUnit` [Retry](https://github.com/nunit/docs/wiki/Retry-Attribute) attribute in PlayMode tests, it throws `InvalidCastException`. + +## Package contents + +The following table indicates the root folders in the package where you can find useful resources: + +| Location | Description | +| :----------------------------------------- | :------------------------------------------ | +| _/com.unity.test-framework/Documentation~_ | Contains the documentation for the package. | + +## Document revision history + +| Date | Reason | +| :----------- | :---------------------------------------------------- | +| August 23, 2019 | Applied feedback to the documentation | +| July 25, 2019 | Documentation updated to include features in version 1.1.0 | +| July 11, 2019 | Documentation updated. Matches package version 1.0.18 | +| May 27, 2019 | Documentation created. Matches package version 1.0.14 | diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/manual.md b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/manual.md new file mode 100644 index 0000000..d634d4b --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/manual.md @@ -0,0 +1,80 @@ +# Unity Test Framework manual + +This is the manual for the Unity Test Framework (UTF): + +## **Introduction** + +* [Unity Test Framework overview](./index.md) +* [Edit Mode vs. Play Mode tests](edit-mode-vs-play-mode-tests.md) + +## **Getting started** + +* [Getting started with UTF](./getting-started.md) + * Workflows: + * [How to create a new test assembly](./workflow-create-test-assembly.md) + * [How to create a test](./workflow-create-test.md) + * [How to run a test](workflow-run-test.md) + * [How to create a Play Mode test](./workflow-create-playmode-test.md) + * [How to run a Play Mode test in player](./workflow-run-playmode-test-standalone.md) +* [Resources](./resources.md) + +## Extending UTF + +* [Extending UTF](./extending.md) + * Workflows: + * [How to split the build and run process for standalone Play Mode tests](./reference-attribute-testplayerbuildmodifier.md#split-build-and-run) + * [How to run tests programmatically](./extension-run-tests.md) + * [How to get test results](./extension-get-test-results.md) + * [How to retrieve the list of tests](./extension-retrieve-test-list.md) + +## Reference + +* [Running tests from the command-line](./reference-command-line.md) +* [UnityTest attribute](./reference-attribute-unitytest.md) +* [Setup and cleanup at build time](./reference-setup-and-cleanup.md) + * [IPrebuildSetup](./reference-setup-and-cleanup.md#iprebuildsetup) + * [IPostBuildCleanup](./reference-setup-and-cleanup.md#ipostbuildcleanup) +* [Actions outside of tests](./reference-actions-outside-tests.md) + * [Action execution order](./reference-actions-outside-tests.md#action-execution-order) + * [UnitySetUp and UnityTearDown](./reference-actions-outside-tests.md#unitysetup-and-unityteardown) + * [OuterUnityTestAction](./reference-actions-outside-tests.md#outerunitytestaction) + * [Domain Reloads](./reference-actions-outside-tests.md#domain-reloads) +* [Custom attributes](./reference-custom-attributes.md) + * [ConditionalIgnore attribute](./reference-attribute-conditionalignore.md) + * [PostBuildCleanup attribute](./reference-setup-and-cleanup.md#prebuildsetup-and-postbuildcleanup) + * [PrebuildSetup attribute](./reference-setup-and-cleanup.md#prebuildsetup-and-postbuildcleanup) + * [TestMustExpectAllLogs attribute](./reference-attribute-testmustexpectalllogs.md) + * [TestPlayerBuildModifier attribute](./reference-attribute-testplayerbuildmodifier.md) + * [TestRunCallback attribute](./reference-attribute-testruncallback.md) + * [UnityPlatform attribute](./reference-attribute-unityplatform.md) + * [UnitySetUp attribute](./reference-actions-outside-tests.md#unitysetup-and-unityteardown) + * [UnityTearDown attribute](./reference-actions-outside-tests.md#unitysetup-and-unityteardown) + * [UnityTest attribute](./reference-attribute-unitytest.md) +* [Custom equality comparers](./reference-custom-equality-comparers.md) + * [ColorEqualityComparer](./reference-comparer-color.md) + * [FloatEqualityComparer](./reference-comparer-float.md) + * [QuaternionEqualityComparer](./reference-comparer-quaternion.md) + * [Vector2EqualityComparer](./reference-comparer-vector2.md) + * [Vector3EqualityComparer](./reference-comparer-vector3.md) + * [Vector4EqualityComparer](./reference-comparer-vector4.md) + * [Custom equality comparers with equals operator](./reference-comparer-equals.md) + * [Test Utils](./reference-test-utils.md) +* [Custom yield instructions](./reference-custom-yield-instructions.md) + * [IEditModeTestYieldInstruction](./reference-custom-yield-instructions.md#IEditModeTestYieldInstruction) + * [EnterPlayMode](./reference-custom-yield-instructions.md#enterplaymode) + * [ExitPlayMode](./reference-custom-yield-instructions.md#exitplaymode) +* [Custom assertion](./reference-custom-assertion.md) + * [LogAssert](./reference-custom-assertion.md#logassert) +* [Custom constraints](./reference-custom-constraints.md) + * [Is](./reference-custom-constraints.md#is) +* [Parameterized tests](./reference-tests-parameterized.md) +* [MonoBehaviour tests](./reference-tests-monobehaviour.md) + * [MonoBehaviourTest](./reference-tests-monobehaviour.md#monobehaviourtestt) + * [IMonoBehaviourTest](./reference-tests-monobehaviour.md#imonobehaviourtest) + +* [TestRunnerApi](./reference-test-runner-api.md) + * [ExecutionSettings](./reference-execution-settings.md) + * [Filter](./reference-filter.md) + * [ITestRunSettings](./reference-itest-run-settings.md) + * [ICallbacks](./reference-icallbacks.md) + * [IErrorCallbacks](./reference-ierror-callbacks.md) \ No newline at end of file diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-actions-outside-tests.md b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-actions-outside-tests.md new file mode 100644 index 0000000..a999cfb --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-actions-outside-tests.md @@ -0,0 +1,98 @@ +# Actions outside of tests + +When writing tests, it is possible to avoid duplication of code by using the [SetUp and TearDown](https://github.com/nunit/docs/wiki/SetUp-and-TearDown) methods built into [NUnit](http://www.nunit.org/). The Unity Test Framework has extended these methods with extra functionality, which can yield commands and skip frames, in the same way as [UnityTest](./reference-attribute-unitytest.md). + +## Action execution order + +The actions related to a test run in the following order: + +* Attributes implementing [IApplyToContext](https://github.com/nunit/docs/wiki/IApplyToContext-Interface) +* Any attribute implementing [OuterUnityTestAction](#outerunitytestaction) has its `BeforeTest` invoked +* Tests with [UnitySetUp](#unitysetup-and-unityteardown) methods in their test class. +* Attributes implementing [IWrapSetUpTearDown](https://github.com/nunit/docs/wiki/ICommandWrapper-Interface) +* Any [SetUp](https://github.com/nunit/docs/wiki/SetUp-and-TearDown) attributes +* [Action attributes](https://nunit.org/docs/2.6/actionAttributes.html) have their `BeforeTest` method invoked +* Attributes implementing of [IWrapTestMethod](https://github.com/nunit/docs/wiki/ICommandWrapper-Interface) +* **The test itself runs** +* [Action attributes](https://nunit.org/docs/2.6/actionAttributes.html) have their `AfterTest` method invoked +* Any method with the [TearDown](https://github.com/nunit/docs/wiki/SetUp-and-TearDown) attribute +* Tests with [UnityTearDown](#unitysetup-and-unityteardown) methods in their test class +* Any [OuterUnityTestAction](#outerunitytestaction) has its `AfterTest` invoked + +The list of actions is the same for both `Test` and `UnityTest`. + +## UnitySetUp and UnityTearDown + +The `UnitySetUp` and `UnityTearDown` attributes are identical to the standard `SetUp` and `TearDown` attributes, with the exception that they allow for [yielding instructions](reference-custom-yield-instructions.md). The `UnitySetUp` and `UnityTearDown` attributes expect a return type of [IEnumerator](https://docs.microsoft.com/en-us/dotnet/api/system.collections.ienumerator?view=netframework-4.8). + +### Example + +```c# +public class SetUpTearDownExample +{ + [UnitySetUp] + public IEnumerator SetUp() + { + yield return new EnterPlayMode(); + } + + [Test] + public void MyTest() + { + Debug.Log("This runs inside playmode"); + } + + [UnitySetUp] + public IEnumerator TearDown() + { + + yield return new ExitPlayMode(); + } +} +``` + + + +## OuterUnityTestAction + +`OuterUnityTestAction` is a wrapper outside of the tests, which allows for any tests with this attribute to run code before and after the tests. This method allows for yielding commands in the same way as `UnityTest`. The attribute must inherit the `NUnit` attribute and implement `IOuterUnityTestAction`. + +### Example + +```c# +using System.Collections; +using NUnit.Framework; +using NUnit.Framework.Interfaces; +using UnityEngine; +using UnityEngine.TestTools; + +public class MyTestClass +{ + [UnityTest, MyOuterActionAttribute] + public IEnumerator MyTestInsidePlaymode() + { + Assert.IsTrue(Application.isPlaying); + yield return null; + } +} + +public class MyOuterActionAttribute : NUnitAttribute, IOuterUnityTestAction +{ + public IEnumerator BeforeTest(ITest test) + { + yield return new EnterPlayMode(); + } + + public IEnumerator AfterTest(ITest test) + { + yield return new ExitPlayMode(); + } +} + +``` + + + +## Domain Reloads + +In **Edit Mode** tests it is possible to yield instructions that can result in a domain reload, such as entering or exiting **Play Mode** (see [Custom yield instructions](./reference-custom-yield-instructions.md)). When a domain reload happens, all non-Unity actions (such as `OneTimeSetup` and `Setup`) are rerun before the code, which initiated the domain reload, continues. Unity actions (such as `UnitySetup`) are not rerun. If the Unity action is the code that initiated the domain reload, then the rest of the code in the `UnitySetup` method runs after the domain reload. \ No newline at end of file diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-attribute-conditionalignore.md b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-attribute-conditionalignore.md new file mode 100644 index 0000000..1d0d4ba --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-attribute-conditionalignore.md @@ -0,0 +1,39 @@ +# ConditionalIgnore attribute + +This attribute is an alternative to the standard `Ignore` attribute in [NUnit](http://www.nunit.org/). It allows for ignoring tests only under a specified condition. The condition evaluates during `OnLoad`, referenced by ID. + +## Example + +The following example shows a method to use the `ConditionalIgnore` attribute to ignore a test if the Unity Editor is running macOS: + +```C# +using UnityEditor; +using NUnit.Framework; +using UnityEngine.TestTools; + +[InitializeOnLoad] +public class OnLoad +{ + static OnLoad() + { + var editorIsOSX = false; + #if UNITY_EDITOR_OSX + editorIsOSX = true; + #endif + + ConditionalIgnoreAttribute.AddConditionalIgnoreMapping("IgnoreInMacEditor", editorIsOSX); + } +} + +public class MyTestClass +{ + [Test, ConditionalIgnore("IgnoreInMacEditor", "Ignored on Mac editor.")] + public void TestNeverRunningInMacEditor() + { + Assert.Pass(); + } +} + +``` + +> **Note**: You can only use `InitializeOnLoad` in **Edit Mode** tests. \ No newline at end of file diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-attribute-testmustexpectalllogs.md b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-attribute-testmustexpectalllogs.md new file mode 100644 index 0000000..210cc10 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-attribute-testmustexpectalllogs.md @@ -0,0 +1,11 @@ +# TestMustExpectAllLogs attribute + +The presence of this attribute causes the **Test Runner** to expect every single log. By default, the Test Runner only fails on error logs, but `TestMustExpectAllLogs` fails on warnings and info level messages as well. It is the same as calling the method [LogAssert.NoUnexpectedReceived](./reference-custom-assertion.md#static-methods) at the bottom of every affected test. + +## Assembly-wide usage + +You can apply this attribute to test assemblies (that affects every test in the assembly), fixtures (affects every test in the fixture), or on individual test methods. It is also inherited from base fixtures. + +The `MustExpect` property (`true` by default) lets you enable or disable the higher level value. + +For example when migrating an assembly to this more strict checking method, you might attach `[assembly:TestMustExpectAllLogs]` to the assembly itself, but then whitelist failing fixtures and test methods with `[TestMustExpectAllLogs(MustExpect=false)]` until you have migrated them. This also means new tests in that assembly would have the more strict checking. \ No newline at end of file diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-attribute-testplayerbuildmodifier.md b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-attribute-testplayerbuildmodifier.md new file mode 100644 index 0000000..e27b6c0 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-attribute-testplayerbuildmodifier.md @@ -0,0 +1,105 @@ +# TestPlayerBuildModifier attribute + +You can use the `TestPlayerBuildModifier` attribute to accomplish a couple of different scenarios: + +## Modify the Player build options for Play Mode tests + +It is possible to change the [BuildPlayerOptions](https://docs.unity3d.com/ScriptReference/BuildPlayerOptions.html) for the test **Player**, to achieve custom behavior when running **Play Mode** tests. Modifying the build options allows for changing the target location of the build as well as changing [BuildOptions](https://docs.unity3d.com/ScriptReference/BuildOptions.html). + +To modify the `BuildPlayerOptions`, do the following: + +* Implement the `ITestPlayerBuildModifier` +* Reference the implementation type in a `TestPlayerBuildModifier` attribute on an assembly level. + +### Example + +```c# +using UnityEditor; +using UnityEditor.TestTools; + +[assembly:TestPlayerBuildModifier(typeof(BuildModifier))] +public class BuildModifier : ITestPlayerBuildModifier +{ + public BuildPlayerOptions ModifyOptions(BuildPlayerOptions playerOptions) + { + if (playerOptions.target == BuildTarget.iOS) + { + playerOptions.options |= BuildOptions.SymlinkLibraries; // Enable symlink libraries when running on iOS + } + + playerOptions.options |= BuildOptions.AllowDebugging; // Enable allow Debugging flag on the test Player. + return playerOptions; + } +} +``` + +> **Note:** When building the Player, it includes all `TestPlayerBuildModifier` attributes across all loaded assemblies, independent of the currently used test filter. As the implementation references the `UnityEditor` namespace, the code is typically implemented in an Editor only assembly, as the `UnityEditor` namespace is not available otherwise. + +## Split build and run + +It is possible to use the Unity Editor for building the Player with tests, without [running the tests](./workflow-run-playmode-test-standalone.md). This allows for running the Player on e.g. another machine. In this case, it is necessary to modify the Player to build and implement a custom handling of the test result. + +By using `TestPlayerBuildModifier`, you can alter the `BuildOptions` to not start the Player after the build as well as build the Player at a specific location. Combined with [PostBuildCleanup](./reference-setup-and-cleanup.md#prebuildsetup-and-postbuildcleanup), you can automatically exit the Editor on completion of the build. + +### Example + +```c# +using System; +using System.IO; +using System.Linq; +using Tests; +using UnityEditor; +using UnityEditor.TestTools; +using UnityEngine; +using UnityEngine.TestTools; + +[assembly:TestPlayerBuildModifier(typeof(HeadlessPlayModeSetup))] +[assembly:PostBuildCleanup(typeof(HeadlessPlayModeSetup))] + +namespace Tests +{ + public class HeadlessPlayModeSetup : ITestPlayerBuildModifier, IPostBuildCleanup + { + private static bool s_RunningPlayerTests; + public BuildPlayerOptions ModifyOptions(BuildPlayerOptions playerOptions) + { + // Do not launch the player after the build completes. + playerOptions.options &= ~BuildOptions.AutoRunPlayer; + + // Set the headlessBuildLocation to the output directory you desire. It does not need to be inside the project. + var headlessBuildLocation = Path.GetFullPath(Path.Combine(Application.dataPath, ".//..//PlayModeTestPlayer")); + var fileName = Path.GetFileName(playerOptions.locationPathName); + if (!string.IsNullOrEmpty(fileName)) + { + headlessBuildLocation = Path.Combine(headlessBuildLocation, fileName); + } + playerOptions.locationPathName = headlessBuildLocation; + + // Instruct the cleanup to exit the Editor if the run came from the command line. + // The variable is static because the cleanup is being invoked in a new instance of the class. + s_RunningPlayerTests = true; + return playerOptions; + } + + public void Cleanup() + { + if (s_RunningPlayerTests && IsRunningTestsFromCommandLine()) + { + // Exit the Editor on the next update, allowing for other PostBuildCleanup steps to run. + EditorApplication.update += () => { EditorApplication.Exit(0); }; + } + } + + private static bool IsRunningTestsFromCommandLine() + { + var commandLineArgs = Environment.GetCommandLineArgs(); + return commandLineArgs.Any(value => value == "-runTests"); + } + } +} +``` + +If the Editor is still running after the Play Mode tests have run, the Player tries to report the results back, using [PlayerConnection](https://docs.unity3d.com/ScriptReference/Networking.PlayerConnection.PlayerConnection.html), which has a reference to the IP address of the Editor machine, when built. + +To implement a custom way of reporting the results of the test run, let one of the assemblies in the Player include a [TestRunCallback](./reference-attribute-testruncallback.md). At `RunFinished`, it is possible to get the full test report as XML from the [NUnit](http://www.nunit.org/) test result by calling `result.ToXml(true)`. You can save the result and then save it on the device or send it to another machine as needed. + diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-attribute-testruncallback.md b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-attribute-testruncallback.md new file mode 100644 index 0000000..16cdfe6 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-attribute-testruncallback.md @@ -0,0 +1,46 @@ +# TestRunCallback attribute + +It is possible for the test framework to invoke callbacks as the current test run progresses. To do this, there is a `TestRunCallback` attribute which takes the type of `ITestRunCallback` implementation. You can invoke the callbacks with [NUnit](http://www.nunit.org/) `ITest` and `ITestResult` classes. + +At the `RunStarted` and `RunFinished` methods, the test and test results are for the whole test tree. These methods invoke at each node in the test tree; first with the whole test assembly, then with the test class, and last with the test method. + +From these callbacks, it is possible to read the partial or the full results, and it is furthermore possible to save the XML version of the result for further processing or continuous integration. + +## Example + +```C# +using NUnit.Framework.Interfaces; +using UnityEngine; +using UnityEngine.TestRunner; + +[assembly:TestRunCallback(typeof(MyTestRunCallback))] + +public class MyTestRunCallback : ITestRunCallback +{ + public void RunStarted(ITest testsToRun) + { + + } + + public void RunFinished(ITestResult testResults) + { + + } + + public void TestStarted(ITest test) + { + + } + + public void TestFinished(ITestResult result) + { + if (!result.Test.IsSuite) + { + Debug.Log($"Result of {result.Name}: {result.ResultState.Status}"); + } + } +} + +``` + +> **Note:** The `TestRunCallback` does not need any references to the `UnityEditor` namespace and is thus able to run in standalone Players, on the **Player** side. \ No newline at end of file diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-attribute-unityplatform.md b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-attribute-unityplatform.md new file mode 100644 index 0000000..4e08d1d --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-attribute-unityplatform.md @@ -0,0 +1,35 @@ +# UnityPlatform attribute + +Use this attribute to define a specific set of platforms you want or do not want your test(s) to run on. + +You can use this attribute on the test method, test class, or test assembly level. Use the supported [RuntimePlatform](https://docs.unity3d.com/ScriptReference/RuntimePlatform.html) enumeration values to specify the platforms. You can also specify which platforms to test by passing one or more `RuntimePlatform` values along with or without the include or exclude properties as parameters to the [Platform](https://github.com/nunit/docs/wiki/Platform-Attribute) attribute constructor. + +The test(s) skips if the current target platform is: + +- Not explicitly specified in the included platforms list +- In the excluded platforms list + +```c# +using UnityEngine; +using UnityEngine.TestTools; +using NUnit.Framework; + +[TestFixture] +public class TestClass +{ + [Test] + [UnityPlatform(RuntimePlatform.WindowsPlayer)] + public void TestMethod() + { + Assert.AreEqual(Application.platform, RuntimePlatform.WindowsPlayer); + } +} +``` + +## Properties + +| Syntax | Description | +| --------------------------- | ------------------------------------------------------------ | +| `RuntimePlatform[] exclude` | List the platforms you do not want to have your tests run on. | +| `RuntimePlatform[] include` | A subset of platforms you need to have your tests run on. | + diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-attribute-unitytest.md b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-attribute-unitytest.md new file mode 100644 index 0000000..3fcfbf1 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-attribute-unitytest.md @@ -0,0 +1,51 @@ +# UnityTest attribute + +`UnityTest` attribute is the main addition to the standard [NUnit](http://www.nunit.org/) library for the Unity Test Framework. This type of unit test allows you to skip a frame from within a test (so background tasks can finish) or give certain commands to the Unity **Editor**, such as performing a domain reload or entering **Play Mode** from an **Edit Mode** test. + +In Play Mode, the `UnityTest` attribute runs as a [coroutine](https://docs.unity3d.com/Manual/Coroutines.html). Whereas Edit Mode tests run in the [EditorApplication.update](https://docs.unity3d.com/ScriptReference/EditorApplication-update.html) callback loop. + +The `UnityTest` attribute is, in fact, an alternative to the `NUnit` [Test attribute](https://github.com/nunit/docs/wiki/Test-Attribute), which allows yielding instructions back to the framework. Once the instruction is complete, the test run continues. If you `yield return null`, you skip a frame. That might be necessary to ensure that some changes do happen on the next iteration of either the `EditorApplication.update` loop or the [game loop](https://docs.unity3d.com/Manual/ExecutionOrder.html). + +## Edit Mode example + +The most simple example of an Edit Mode test could be the one that yields `null` to skip the current frame and then continues to run: + +```C# +[UnityTest] +public IEnumerator EditorUtility_WhenExecuted_ReturnsSuccess() +{ + var utility = RunEditorUtilityInTheBackgroud(); + + while (utility.isRunning) + { + yield return null; + } + + Assert.IsTrue(utility.isSuccess); +} +``` + +## Play Mode example + +In Play Mode, a test runs as a coroutine attached to a [MonoBehaviour](https://docs.unity3d.com/ScriptReference/MonoBehaviour.html). So all the yield instructions available in coroutines, are also available in your test. + +From a Play Mode test you can use one of Unity’s [Yield Instructions](https://docs.unity3d.com/ScriptReference/YieldInstruction.html): + +- [WaitForFixedUpdate](https://docs.unity3d.com/ScriptReference/WaitForFixedUpdate.html): to ensure changes expected within the next cycle of physics calculations. +- [WaitForSeconds](https://docs.unity3d.com/ScriptReference/WaitForSeconds.html): if you want to pause your test coroutine for a fixed amount of time. Be careful about creating long-running tests. + +The simplest example is to yield to `WaitForFixedUpdate`: + +```c# +[UnityTest] +public IEnumerator GameObject_WithRigidBody_WillBeAffectedByPhysics() +{ + var go = new GameObject(); + go.AddComponent(); + var originalPosition = go.transform.position.y; + + yield return new WaitForFixedUpdate(); + + Assert.AreNotEqual(originalPosition, go.transform.position.y); +} +``` diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-command-line.md b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-command-line.md new file mode 100644 index 0000000..90daa5c --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-command-line.md @@ -0,0 +1,116 @@ +# Running tests from the command line + +It’s pretty simple to run a test project from the command line. Here is an example in Windows: + +```bash +Unity.exe -runTests -batchmode -projectPath PATH_TO_YOUR_PROJECT -testResults C:\temp\results.xml -testPlatform PS4 +``` + +For more information, see [Command line arguments](https://docs.unity3d.com/Manual/CommandLineArguments.html). + +## Commands + +### batchmode + +Runs Unity in batch mode and ensures no pop-up windows appear to eliminate the need for any human intervention. + +### forgetProjectPath + +Don't save your current **Project** into the Unity launcher/hub history. + +### runTests + +Runs tests in the Project. + +### testCategory + +A semicolon-separated list of test categories to include in the run. If using both `testFilter` and `testCategory`, then tests only run that matches both. + +### testFilter + +A semicolon-separated list of test names to run, or a regular expression pattern to match tests by their full name. + +### testPlatform + +The platform you want to run tests on. Available platforms are **EditMode** and **PlayMode**. + +> **Note**: If unspecified, tests run in Edit Mode by default. + +Platform/Type convention is from the [BuildTarget](https://docs.unity3d.com/ScriptReference/BuildTarget.html) enum. Supported platforms are: + +* StandaloneWindows +* StandaloneWindows64 +* StandaloneLinux64 +* StandaloneOSX +* iOS +* Android +* PS4 +* XboxOne + +### testResults + +The path where Unity should save the result file. By default, Unity saves it in the Project’s root folder. + +### playerHeartbeatTimeout + +The time, in seconds, the editor should wait for heartbeats after starting a test run on a player. This defaults to 10 minutes. + +### runSynchronously + +If included, the test run will run tests synchronously, guaranteeing that all tests runs in one editor update call. Note that this is only supported for EditMode tests, and that tests which take multiple frames (i.e. `[UnityTest]` tests, or tests with `[UnitySetUp]` or `[UnityTearDown]` scaffolding) will be filtered out. + +### testSettingsFile + +Path to a *TestSettings.json* file that allows you to set up extra options for your test run. An example of the *TestSettings.json* file could look like this: + +```json +{ + "scriptingBackend":2, + "Architecture":null, + "apiProfile":0 +} +``` + +#### apiProfile + +The .Net compatibility level. Set to one of the following values: + +- 1 - .Net 2.0 +- 2 - .Net 2.0 Subset +- 3 - .Net 4.6 +- 5 - .Net micro profile (used by Mono scripting backend if **Stripping Level** is set to **Use micro mscorlib**) +- 6 - .Net Standard 2.0 + +#### appleEnableAutomaticSigning + +Sets option for automatic signing of Apple devices. + +#### appleDeveloperTeamID + +Sets the team ID for the apple developer account. + +#### architecture + +Target architecture for Android. Set to one of the following values: + +* None = 0 +* ARMv7 = 1 +* ARM64 = 2 +* X86 = 4 +* All = 4294967295 + +#### iOSManualProvisioningProfileType + +Set to one of the following values: + +* 0 - Automatic +* 1 - Development +* 2 - Distribution iOSManualProvisioningProfileID + +#### scriptingBackend + + Set to one of the following values: + +- Mono2x = 0 +- IL2CPP = 1 +- WinRT DotNET = 2 \ No newline at end of file diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-comparer-color.md b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-comparer-color.md new file mode 100644 index 0000000..0b2f911 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-comparer-color.md @@ -0,0 +1,47 @@ +# ColorEqualityComparer + +Use this class to compare two `Color` objects. `ColorEqualityComparer.Instance` has default calculation error value set to 0.01f. To set a test specific error value instantiate a comparer instance using the [one argument constructor](#constructors). + +## Static properties + +| Syntax | Description | +| ---------- | ------------------------------------------------------------ | +| `Instance` | A singleton instance of the comparer with a default error value set to 0.01f. | + +## Constructors + +| Syntax | Description | +| ------------------------------------ | ------------------------------------------------------------ | +| `ColorEqualityComparer(float error)` | Creates an instance of the comparer with a custom error value. | + +## Public methods + +| Syntax | Description | +| -------------------------------------------- | ------------------------------------------------------------ | +| `bool Equals(Color expected, Color actual);` | Compares the actual and expected `Color` objects for equality using `Utils.AreFloatsEqualAbsoluteError` to compare the `RGB` and `Alpha` attributes of `Color`. Returns `true` if expected and actual objects are equal otherwise, it returns `false`. | + +## Example + +```c# +[TestFixture] +public class ColorEqualityTest +{ + [Test] + public void GivenColorsAreEqual_WithAllowedCalculationError() + { + // Using default error + var firstColor = new Color(0f, 0f, 0f, 0f); + var secondColor = new Color(0f, 0f, 0f, 0f); + + Assert.That(firstColor, Is.EqualTo(secondColor).Using(ColorEqualityComparer.Instance)); + + // Allowed error 10e-5f + var comparer = new ColorEqualityComparer(10e-5f); + firstColor = new Color(0f, 0f, 0f, 1f); + secondColor = new Color(10e-6f, 0f, 0f, 1f); + + Assert.That(firstColor, Is.EqualTo(secondColor).Using(comparer)); + } +} +``` + diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-comparer-equals.md b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-comparer-equals.md new file mode 100644 index 0000000..8ef8d85 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-comparer-equals.md @@ -0,0 +1,27 @@ +# Custom equality comparers with equals operator + +If you need to compare Vectors using the overloaded operator == (see [Vector2.operator ==](https://docs.unity3d.com/ScriptReference/Vector2-operator_eq.html), [Vector3.operator ==](https://docs.unity3d.com/ScriptReference/Vector3-operator_eq.html), and [Vector4.operator ==](https://docs.unity3d.com/ScriptReference/Vector4-operator_eq.html)) you should use the respective comparer implementations: + +- Vector2ComparerWithEqualsOperator +- Vector3ComparerWithEqualsOperator +- Vector4ComparerWithEqualsOperator + +The interface is the same as for other [equality comparers](./reference-custom-equality-comparers.md) except the public [constructor](./reference-custom-equality-comparers.md#constructors) `error` parameter is inapplicable in this case. + +## Example + +```c# +[TestFixture] +public class Vector3Test +{ + [Test] + public void VerifyThat_TwoVector3ObjectsAreEqual() + { + var actual = new Vector3(10e-7f, 10e-7f, 10e-7f); + var expected = new Vector3(0f, 0f, 0f); + + Assert.That(actual, Is.EqualTo(expected).Using(Vector3ComparerWithEqualsOperator.Instance)); + } +} +``` + diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-comparer-float.md b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-comparer-float.md new file mode 100644 index 0000000..8118fd6 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-comparer-float.md @@ -0,0 +1,46 @@ +# FloatEqualityComparer + +Use this class to compare two float values for equality with [NUnit](http://www.nunit.org/) constraints. Use `FloatEqualityComparer.Instance` comparer to have the default error value set to 0.0001f. For any other error, use the [one argument constructor](#constructors) to create a comparer. + +## Static Properties + +| Syntax | Description | +| ---------- | ------------------------------------------------------------ | +| `Instance` | A singleton instance of the comparer with a default error value set to 0.0001f. | + +## Constructors + +| Syntax | Description | +| ------------------------------------------- | ------------------------------------------------------------ | +| `FloatEqualityComparer(float allowedError)` | Creates an instance of the comparer with a custom error value. | + +## Public methods + +| Syntax | Description | +| -------------------------------------------- | ------------------------------------------------------------ | +| `bool Equals(float expected, float actual);` | Compares the `actual` and `expected` float values for equality using `Utils.AreFloatsEqual`. | + +## Example + +```c# +[TestFixture] +public class FloatsTest +{ + [Test] + public void VerifyThat_TwoFloatsAreEqual() + { + var comparer = new FloatEqualityComparer(10e-6f); + var actual = -0.00009f; + var expected = 0.00009f; + + Assert.That(actual, Is.EqualTo(expected).Using(comparer)); + + // Default relative error 0.0001f + actual = 10e-8f; + expected = 0f; + + Assert.That(actual, Is.EqualTo(expected).Using(FloatEqualityComparer.Instance)); + } +} +``` + diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-comparer-quaternion.md b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-comparer-quaternion.md new file mode 100644 index 0000000..c55bb07 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-comparer-quaternion.md @@ -0,0 +1,46 @@ +# QuaternionEqualityComparer + +Use this utility to compare two [Quaternion](https://docs.unity3d.com/ScriptReference/Quaternion.html) objects for equality with [NUnit](http://www.nunit.org/) assertion constraints. Use the static instance `QuaternionEqualityComparer.Instance` to have the default calculation error value set to 0.00001f. For any other custom error value, use the [one argument constructor](#constructors). + +## Static properties + +| Syntax | Description | +| ---------- | ---------------------------------------------------------- | +| `Instance` | A comparer instance with the default error value 0.00001f. | + +## Constructors + +| Syntax | Description | +| ------------------------------------------------ | ------------------------------------------------------------ | +| `QuaternionEqualityComparer(float allowedError)` | Creates an instance of the comparer with a custom allowed error value. | + +## Public methods + +| Syntax | Description | +| ----------------------------------------------------- | ------------------------------------------------------------ | +| `bool Equals(Quaternion expected, Quaternion actual)` | Compares the `actual` and `expected` `Quaternion` objects for equality using the [Quaternion.Dot](https://docs.unity3d.com/ScriptReference/Quaternion.Dot.html) method. | + +## Example + +```c# +[TestFixture] +public class QuaternionTest +{ + [Test] + public void VerifyThat_TwoQuaternionsAreEqual() + { + var actual = new Quaternion(10f, 0f, 0f, 0f); + var expected = new Quaternion(1f, 10f, 0f, 0f); + var comparer = new QuaternionEqualityComparer(10e-6f); + + Assert.That(actual, Is.EqualTo(expected).Using(comparer)); + + //Using default error 0.00001f + actual = new Quaternion(10f, 0f, 0.1f, 0f); + expected = new Quaternion(1f, 10f, 0.1f, 0f); + + Assert.That(actual, Is.EqualTo(expected).Using(QuaternionEqualityComparer.Instance)); + } +} +``` + diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-comparer-vector2.md b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-comparer-vector2.md new file mode 100644 index 0000000..ae091a6 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-comparer-vector2.md @@ -0,0 +1,47 @@ +# Vector2EqualityComparer + +Use this class to compare two [Vector2](https://docs.unity3d.com/ScriptReference/Vector2.html) objects for equality with [NUnit](http://www.nunit.org/) constraints. Use the static `Vector2EqualityComparer.Instance` to have the calculation error value set to default 0.0001f. For any other error value, instantiate a new comparer object with the [one argument constructor](#constructors). + +## Static properties + +| Syntax | Description | +| ---------- | ------------------------------------------------------------ | +| `Instance` | A comparer instance with the default error value set to 0.0001f. | + +## Constructors + +| Syntax | Description | +| -------------------------------------- | ---------------------------------------------- | +| `Vector2EqualityComparer(float error)` | Creates an instance with a custom error value. | + +## Public methods + +| Syntax | Description | +| ------------------------------------------ | ------------------------------------------------------------ | +| `Equals(Vector2 expected, Vector2 actual)` | Compares the `actual` and `expected` `Vector2` objects for equality using the [Utils.AreFloatsEqual](./reference-test-utils.md) method. | + +## Example + +```c# +[TestFixture] +public class Vector2Test +{ + [Test] + public void VerifyThat_TwoVector2ObjectsAreEqual() + { + // Custom calculation error + var actual = new Vector2(10e-7f, 10e-7f); + var expected = new Vector2(0f, 0f); + var comparer = new Vector2EqualityComparer(10e-6f); + + Assert.That(actual, Is.EqualTo(expected).Using(comparer)); + + //Default error 0.0001f + actual = new Vector2(0.01f, 0.01f); + expected = new Vector2(0.01f, 0.01f); + + Assert.That(actual, Is.EqualTo(expected).Using(Vector2EqualityComparer.Instance)); + } +} +``` + diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-comparer-vector3.md b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-comparer-vector3.md new file mode 100644 index 0000000..6160db6 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-comparer-vector3.md @@ -0,0 +1,47 @@ +# Vector3EqualityComparer + +Use this class to compare two [Vector3](https://docs.unity3d.com/ScriptReference/Vector3.html) objects for equality with `NUnit` constraints. Call `Vector3EqualityComparer.Instance` comparer to perform a comparison with the default calculation error value 0.0001f. To specify a different error value, use the [one argument constructor](#constructors) to instantiate a new comparer. + +## Static properties + +| Syntax | Description | +| ---------- | ------------------------------------------------------------ | +| `Instance` | A comparer instance with the default calculation error value equal to 0.0001f. | + +## Constructors + +| Syntax | Description | +| --------------------------------------------- | ---------------------------------------------- | +| `Vector3EqualityComparer(float allowedError)` | Creates an instance with a custom error value. | + +## Public methods + +| Syntax | Description | +| ----------------------------------------------- | ------------------------------------------------------------ | +| `bool Equals(Vector3 expected, Vector3 actual)` | Compares the `actual` and `expected` `Vector3` objects for equality using [Utils.AreFloatsEqual](http://todo) to compare the `x`, `y`, and `z` attributes of `Vector3`. | + +## Example + +```c# +[TestFixture] +public class Vector3Test +{ + [Test] + public void VerifyThat_TwoVector3ObjectsAreEqual() + { + // Custom error 10e-6f + var actual = new Vector3(10e-8f, 10e-8f, 10e-8f); + var expected = new Vector3(0f, 0f, 0f); + var comparer = new Vector3EqualityComparer(10e-6f); + + Assert.That(actual, Is.EqualTo(expected).Using(comparer)); + + //Default error 0.0001f + actual = new Vector3(0.01f, 0.01f, 0f); + expected = new Vector3(0.01f, 0.01f, 0f); + + Assert.That(actual, Is.EqualTo(expected).Using(Vector3EqualityComparer.Instance)); + } +} +``` + diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-comparer-vector4.md b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-comparer-vector4.md new file mode 100644 index 0000000..371e06b --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-comparer-vector4.md @@ -0,0 +1,47 @@ +# Vector4EqualityComparer + +Use this class to compare two [Vector4](https://docs.unity3d.com/ScriptReference/Vector4.html) objects for equality with [NUnit](http://www.nunit.org/) constraints. Call `Vector4EqualityComparer.Instance` to perform comparisons using default calculation error value 0.0001f. To set a custom test value, instantiate a new comparer using the [one argument constructor](#constructor). + +## Static Properties + +| Syntax | Description | +| ---------------------------------- | ------------------------------------------------------------ | +| `Vector4EqualityComparer Instance` | A comparer instance with the default calculation error value set to 0.0001f. | + +## Constructors + +| Syntax | Description | +| --------------------------------------------- | ---------------------------------------------- | +| `Vector4EqualityComparer(float allowedError)` | Creates an instance with a custom error value. | + +## Public methods + +| Syntax | Description | +| ------------------------------------------------ | ------------------------------------------------------------ | +| `bool Equals(Vector4 expected, Vector4 actual);` | Compares the `actual` and `expected` `Vector4` objects for equality using [Utils.AreFloatsEqual](http://todo) to compare the `x`, `y`, `z`, and `w` attributes of `Vector4`. | + +## Example + +```c# +[TestFixture] +public class Vector4Test +{ + [Test] + public void VerifyThat_TwoVector4ObjectsAreEqual() + { + // Custom error 10e-6f + var actual = new Vector4(0, 0, 1e-6f, 1e-6f); + var expected = new Vector4(1e-6f, 0f, 0f, 0f); + var comparer = new Vector4EqualityComparer(10e-6f); + + Assert.That(actual, Is.EqualTo(expected).Using(comparer)); + + // Default error 0.0001f + actual = new Vector4(0.01f, 0.01f, 0f, 0f); + expected = new Vector4(0.01f, 0.01f, 0f, 0f); + + Assert.That(actual, Is.EqualTo(expected).Using(Vector4EqualityComparer.Instance)); + } +} +``` + diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-custom-assertion.md b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-custom-assertion.md new file mode 100644 index 0000000..3ed9a25 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-custom-assertion.md @@ -0,0 +1,66 @@ +# Custom assertion + +A test fails if Unity logs a message other than a regular log or warning message. Use [LogAssert](#logassert) to check for an expected message in the log so that the test does not fail when Unity logs the message. + +Use `LogAssert.Expect` before running the code under test, as the check for expected logs runs at the end of each frame. + +A test also reports a failure, if an expected message does not appear, or if Unity does not log any regular log or warning messages. + +## Example + +```c# +[Test] +public void LogAssertExample() +{ + // Expect a regular log message + LogAssert.Expect(LogType.Log, "Log message"); + + // The test fails without the following expected log message + Debug.Log("Log message"); + + // An error log + Debug.LogError("Error message"); + + // Without expecting an error log, the test would fail + LogAssert.Expect(LogType.Error, "Error message"); +} +``` + +## LogAssert + +`LogAssert` lets you expect Unity log messages that would otherwise cause the test to fail. + +### Static properties + +| Syntax | Description | +| ---------------------------- | ------------------------------------------------------------ | +| `bool ignoreFailingMessages` | Set this property to `true` to prevent unexpected error log messages from triggering an assertion. By default, it is `false`. | + +### Static Methods + +| Syntax | Description | +| ------------------------------------------------------------ | ------------------------------------------------------------ | +| `void Expect(LogType type, string message);` `void Expect(LogType type, Regex message);` | Verifies that a log message of a specified type appears in the log. A test won’t fail from an expected error, assertion, or exception log message. It does fail if an expected message does not appear in the log. | +| `void NoUnexpectedReceived();` | Triggers an assertion when receiving any log messages and fails the test if some are unexpected messages. If multiple tests need to check for no received unexpected logs, consider using the [TestMustExpectAllLogs](./reference-attribute-testmustexpectalllogs.md) attribute instead. | + +### Expect string message + +`void Expect(LogType type, string message);` + +#### Parameters + +| Syntax | Description | +| ---------------- | ------------------------------------------------------------ | +| `LogType type` | A type of log to expect. It can take one of the [LogType enum](https://docs.unity3d.com/ScriptReference/LogType.html) values. | +| `string message` | A string value that should equate to the expected message. | + +### Expect Regex message + +`void Expect(LogType type, Regex message);` + +#### Parameters + +| Syntax | Description | +| --------------- | ------------------------------------------------------------ | +| `LogType type` | A type of log to expect. It can take one of the [LogType enum](https://docs.unity3d.com/ScriptReference/LogType.html) values. | +| `Regex message` | A regular expression pattern to match the expected message. | \ No newline at end of file diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-custom-attributes.md b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-custom-attributes.md new file mode 100644 index 0000000..051de36 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-custom-attributes.md @@ -0,0 +1,15 @@ +# Custom attributes + +As a part of UTF’s public API we provide the following attributes: + +* [ConditionalIgnore attribute](./reference-attribute-conditionalignore.md) +* [PostBuildCleanup attribute](./reference-setup-and-cleanup.md#prebuildsetup-and-postbuildcleanup) +* [PrebuildSetup attribute](./reference-setup-and-cleanup.md#prebuildsetup-and-postbuildcleanup) +* [TestMustExpectAllLogs attribute](./reference-attribute-testmustexpectalllogs.md) +* [TestPlayerBuildModifier attribute](./reference-attribute-testplayerbuildmodifier.md) +* [TestRunCallback attribute](./reference-attribute-testruncallback.md) +* [UnityPlatform attribute](./reference-attribute-unityplatform.md) +* [UnitySetUp attribute](./reference-actions-outside-tests.md#unitysetup-and-unityteardown) +* [UnityTearDown attribute](./reference-actions-outside-tests.md#unitysetup-and-unityteardown) +* [UnityTest attribute](./reference-attribute-unitytest.md) + diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-custom-constraints.md b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-custom-constraints.md new file mode 100644 index 0000000..bbf4bbb --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-custom-constraints.md @@ -0,0 +1,31 @@ +# Custom constraints + +`NUnit` allows you to write test assertions in a more descriptive and human readable way using the [Assert.That](https://github.com/nunit/docs/wiki/Assertions) mechanism, where the first parameter is an object under test and the second parameter describes conditions that the object has to meet. + +## Is + +We’ve extended `NUnit` API with a custom constraint type and declared an overlay `Is` class. To resolve ambiguity between the original implementation and the custom one you must explicitly declare it with a using statement or via addressing through the full type name `UnityEngine.TestTools.Constraints.Is`. + +### Static Methods + +| Syntax | Description | +| -------------------- | ------------------------------------------------------------ | +| `AllocatingGCMemory` | A constraint type that invokes the delegate you provide as the parameter of `Assert.That` and checks whether it causes any GC memory allocations. It passes if any GC memory is allocated and fails if not. | + +## Example + +```c# +using Is = UnityEngine.TestTools.Constraints.Is; + +class MyTestClass +{ + [Test] + public void MyTest() + { + Assert.That(() => { + var i = new int[500]; + }, Is.AllocatingGCMemory()); + } +} +``` + diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-custom-equality-comparers.md b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-custom-equality-comparers.md new file mode 100644 index 0000000..15224f9 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-custom-equality-comparers.md @@ -0,0 +1,32 @@ +# Custom equality comparers + +To enable easier verification of custom Unity type values in your tests we provide you with some custom equality comparers: + +* [ColorEqualityComparer](./reference-comparer-color.md) +* [FloatEqualityComparer](./reference-comparer-float.md) +* [QuaternionEqualityComparer](./reference-comparer-quaternion.md) +* [Vector2EqualityComparer](./reference-comparer-vector2.md) +* [Vector3EqualityComparer](./reference-comparer-vector3.md) +* [Vector4EqualityComparer](./reference-comparer-vector4.md) + +Use these classes to compare two objects of the same type for equality within the range of a given tolerance using [NUnit ](https://github.com/nunit/docs/wiki/Constraints)or [custom constraints](./reference-custom-constraints.md) . Call Instance to apply the default calculation error value to the comparison. To set a specific error value, instantiate a new comparer object using a one argument constructor `ctor(float error)`. + +## Static properties + +| Syntax | Description | +| ---------- | ------------------------------------------------------------ | +| `Instance` | A singleton instance of the comparer with a predefined default error value. | + +## Constructors + +| Syntax | Description | +| ------------------- | ------------------------------------------------------------ | +| `ctor(float error)` | Creates an instance of comparer with a custom error `value.allowedError`. The relative error to be considered while comparing two values. | + +## Public methods + +| Syntax | Description | +| ------------------------------------ | ------------------------------------------------------------ | +| `bool Equals(T expected, T actual);` | Compares the actual and expected objects for equality using a custom comparison mechanism. Returns `true` if expected and actual objects are equal, otherwise it returns `false`. | + + diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-custom-yield-instructions.md b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-custom-yield-instructions.md new file mode 100644 index 0000000..60f22e4 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-custom-yield-instructions.md @@ -0,0 +1,60 @@ +# Custom yield instructions + +By implementing this interface below, you can define custom yield instructions in **Edit Mode** tests. + +## IEditModeTestYieldInstruction + +In an Edit Mode test, you can use `IEditModeTestYieldInstruction` interface to implement your own instruction. There are also a couple of commonly used implementations available: + +- [EnterPlayMode](#enterplaymode) +- [ExitPlayMode](#exitplaymode) +- [RecompileScripts](./reference-recompile-scripts.md) +- [WaitForDomainReload](./reference-wait-for-domain-reload.md) + +## Example + +```c# +[UnityTest] + +public IEnumerator PlayOnAwakeDisabled_DoesntPlayWhenEnteringPlayMode() + +{ + var videoPlayer = PrefabUtility.InstantiatePrefab(m_VideoPlayerPrefab.GetComponent()) as VideoPlayer; + + videoPlayer.playOnAwake = false; + + yield return new EnterPlayMode(); + + var videoPlayerGO = GameObject.Find(m_VideoPlayerPrefab.name); + + Assert.IsFalse(videoPlayerGO.GetComponent().isPlaying); + + yield return new ExitPlayMode(); + + Object.DestroyImmediate(GameObject.Find(m_VideoPlayerPrefab.name)); +} +``` + +## Properties + +| Syntax | Description | +| ---------------------------- | ------------------------------------------------------------ | +| `bool ExpectDomainReload` | Returns `true` if the instruction expects a domain reload to occur. | +| `bool ExpectedPlaymodeState` | Returns `true` if the instruction expects the Unity Editor to be in **Play Mode**. | + +## Methods + +| Syntax | Description | +| ----------------------- | ------------------------------------------------------------ | +| `IEnumerator Perform()` | Used to define multi-frame operations performed when instantiating a yield instruction. | + +## EnterPlayMode + +* Implements `IEditModeTestYieldInstruction`. Creates a yield instruction to enter Play Mode. +* When creating an Editor test that uses the `UnityTest` attribute, use this to trigger the Editor to enter Play Mode. +* Throws an exception if the Editor is already in Play Mode or if there is a [script compilation error](https://support.unity3d.com/hc/en-us/articles/205930539-How-do-I-interpret-a-compiler-error-). + +## ExitPlayMode + +* Implements `IEditModeTestYieldInstruction`. A new instance of the class is a yield instruction to exit Play Mode. +* Throws an exception if the Editor is not in Play Mode. diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-execution-settings.md b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-execution-settings.md new file mode 100644 index 0000000..752e936 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-execution-settings.md @@ -0,0 +1,17 @@ +# ExecutionSettings +The `ExecutionSettings` is a set of filters and other settings provided when running a set of tests from the [TestRunnerApi](./reference-test-runner-api.md). + +## Constructors + +| Syntax | Description | +| ----------------------------------------------------- | -------------------------------------------------------- | +| `ExecutionSettings(params Filter[] filtersToExecute)` | Creates an instance with a given set of filters, if any. | + +## Fields + +| Syntax | Description | +| ---------------------------- | ------------------------------------------------------------ | +| `Filter[] filters` | A collection of [Filters](./reference-filter.md) to execute tests on. | +| `ITestRunSettings overloadTestRunSettings` | An instance of [ITestRunSettings](./reference-itest-run-settings.md) to set up before running tests on a Player. | +| `bool runSynchronously` | If true, the call to `Execute()` will run tests synchronously, guaranteeing that all tests have finished running by the time the call returns. Note that this is only supported for EditMode tests, and that tests which take multiple frames (i.e. `[UnityTest]` tests, or tests with `[UnitySetUp]` or `[UnityTearDown]` scaffolding) will be filtered out. | +| 'int playerHeartbeatTimeout' | The time, in seconds, the editor should wait for heartbeats after starting a test run on a player. This defaults to 10 minutes. | \ No newline at end of file diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-filter.md b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-filter.md new file mode 100644 index 0000000..5f6b535 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-filter.md @@ -0,0 +1,15 @@ +# Filter +The filter class provides the [TestRunnerApi](./reference-test-runner-api.md) with a specification of what tests to run when [running tests programmatically](./extension-run-tests.md). + +## Fields + +| Syntax | Description | +| ----------------------------- | ------------------------------------------------------------ | +| `TestMode testMode` | An enum flag that specifies if **Edit Mode** or **Play Mode** tests should run. Applying both Edit Mode and Play Mode is currently not supported when running tests from the API. | +| `string[] testNames` | The full name of the tests to match the filter. This is usually in the format `FixtureName.TestName`. If the test has test arguments, then include them in parenthesis. E.g. `MyTestClass2.MyTestWithMultipleValues(1)`. | +| `string[] groupNames` | The same as `testNames`, except that it allows for Regex. This is useful for running specific fixtures or namespaces. E.g. `"^MyNamespace\\."` Runs any tests where the top namespace is `MyNamespace`. | +| `string[] categoryNames` | The name of a [Category](https://nunit.org/docs/2.2.7/category.html) to include in the run. Any test or fixtures runs that have a `Category` matching the string. | +| `string[] assemblyNames` | The name of assemblies included in the run. That is the assembly name, without the .dll file extension. E.g., `MyTestAssembly`. | +| `BuildTarget? targetPlatform` | The [BuildTarget](https://docs.unity3d.com/ScriptReference/BuildTarget.html) platform to run the test on. If set to `null`, then the Editor is the target for the tests. | + + diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-icallbacks.md b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-icallbacks.md new file mode 100644 index 0000000..fb907e7 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-icallbacks.md @@ -0,0 +1,48 @@ +# ICallbacks +An interface for receiving callbacks when running tests. All test runs invoke the callbacks until the next domain reload. + +The `RunStarted` method runs when the whole test run starts. Then the `TestStarted` method runs with information about the tests it is about to run on an assembly level. Afterward, it runs on a test fixture level and then on the individual test. If the test is a [parameterized test](./https://github.com/nunit/docs/wiki/Parameterized-Tests), then it is also invoked for each parameter combination. After each part of the test tree have completed running, the corresponding `TestFinished` method runs with the test result. At the end of the run, the `RunFinished` event runs with the test result. + +An extended version of the callback, [IErrorCallbacks](./reference-ierror-callbacks.md), extends this `ICallbacks` to receive calls when a run fails due to a build error. + +## Public methods + +| Syntax | Description | +| ---------------------------------------------- | ------------------------------------------------------------ | +| `void RunStarted(ITestAdaptor testsToRun)` | Invoked when the test run starts. The [ITestAdaptor](./reference-itest-adaptor.md) represents the tree of tests to run. | +| `void RunFinished(ITestResultAdaptor result)` | Invoked when the test run finishes. The [ITestResultAdaptor](./reference-itest-result-adaptor.md) represents the results of the set of tests that have run. | +| `void TestStarted(ITestAdaptor test)` | Invoked on each node of the test tree, as that part of the tree starts to run. | +| `void TestFinished(ITestResultAdaptor result)` | Invoked on each node of the test tree once that part of the test tree has finished running. The [ITestResultAdaptor](./reference-itest-result-adaptor.md) represents the results of the current node of the test tree. | + +## Example +An example that sets up a listener on the API. The listener prints the number of failed tests after the run has finished: +``` C# +public void SetupListeners() +{ + var api = ScriptableObject.CreateInstance(); + api.RegisterCallbacks(new MyCallbacks()); +} + +private class MyCallbacks : ICallbacks +{ + public void RunStarted(ITestAdaptor testsToRun) + { + + } + + public void RunFinished(ITestResultAdaptor result) + { + Debug.Log(string.Format("Run finished {0} test(s) failed.", result.FailCount)); + } + + public void TestStarted(ITestAdaptor test) + { + + } + + public void TestFinished(ITestResultAdaptor result) + { + + } +} +``` \ No newline at end of file diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-ierror-callbacks.md b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-ierror-callbacks.md new file mode 100644 index 0000000..6924164 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-ierror-callbacks.md @@ -0,0 +1,9 @@ +# IErrorCallbacks +An extended version of the [ICallbacks](./reference-icallbacks.md), which get invoked if the test run fails due to a build error or if any [IPrebuildSetup](./reference-setup-and-cleanup.md) has a failure. + +## Public methods + +| Syntax | Description | +| ---------------------------- | ------------------------------------------------------------------- | +| void OnError(string message) | The error message detailing the reason for the run to fail. | + diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-itest-adaptor.md b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-itest-adaptor.md new file mode 100644 index 0000000..77232be --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-itest-adaptor.md @@ -0,0 +1,31 @@ +# ITestAdaptor +`ITestAdaptor` is a representation of a node in the test tree implemented as a wrapper around the [NUnit](http://www.nunit.org/) [ITest](https://github.com/nunit/nunit/blob/master/src/NUnitFramework/framework/Interfaces/ITest.cs) interface. + +## Properties + +| Syntax | Description | +| ---------- | ------------------------------------------------------------ | +| `string Id` | The ID of the test tree node. The ID can change if you add new tests to the suite. Use `UniqueName`, if you want to have a more permanent point of reference. | +| `string Name` | The name of the test. E.g., `MyTest`. | +| `string FullName` | The full name of the test. E.g., `MyNamespace.MyTestClass.MyTest`. | +| `int TestCaseCount` | The total number of test cases in the node and all sub-nodes. | +| `bool HasChildren` | Whether the node has any children. | +| `bool IsSuite` | Whether the node is a test suite/fixture. | +| `IEnumerable Children` | The child nodes. | +| `ITestAdaptor Parent` | The parent node, if any. | +| `int TestCaseTimeout` | The test case timeout in milliseconds. Note that this value is only available on TestFinished. | +| `ITypeInfo TypeInfo` | The type of test class as an `NUnit` [ITypeInfo](https://github.com/nunit/nunit/blob/master/src/NUnitFramework/framework/Interfaces/ITypeInfo.cs). If the node is not a test class, then the value is `null`. | +| `IMethodInfo Method` | The [Nunit IMethodInfo](https://github.com/nunit/nunit/blob/master/src/NUnitFramework/framework/Interfaces/IMethodInfo.cs) of the test method. If the node is not a test method, then the value is `null`. | +| `string[] Categories` | An array of the categories applied to the test or fixture. | +| `bool IsTestAssembly` | Whether the node represents a test assembly. | +| `RunState RunState` | The run state of the test node. Either `NotRunnable`, `Runnable`, `Explicit`, `Skipped`, or `Ignored`. | +| `string Description` | The description of the test. | +| `string SkipReason` | The skip reason. E.g., if ignoring the test. | +| `string ParentId` | The ID of the parent node. | +| `string ParentFullName` | The full name of the parent node. | +| `string UniqueName` | A unique generated name for the test node. E.g., `Tests.dll/MyNamespace/MyTestClass/[Tests][MyNamespace.MyTestClass.MyTest]`. | +| `string ParentUniqueName` | A unique name of the parent node. E.g., `Tests.dll/MyNamespace/[Tests][MyNamespace.MyTestClass][suite]`. | +| `int ChildIndex` | The child index of the node in its parent. | +| `TestMode TestMode` | The mode of the test. Either **Edit Mode** or **Play Mode**. | + +> **Note**: Some properties are not available when receiving the test tree as a part of a test result coming from a standalone Player, such as `TypeInfo` and `Method`. \ No newline at end of file diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-itest-result-adaptor.md b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-itest-result-adaptor.md new file mode 100644 index 0000000..78ee231 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-itest-result-adaptor.md @@ -0,0 +1,25 @@ +# ITestResultAdaptor +The `ITestResultAdaptor` is the representation of the test results for a node in the test tree implemented as a wrapper around the [NUnit](http://www.nunit.org/) [ITest](https://github.com/nunit/nunit/blob/master/src/NUnitFramework/framework/Interfaces/ITestResults.cs) interface. +## Properties + +| Syntax | Description | +| ---------- | ------------------------------------------------------------ | +| `ITestAdaptor Test` | The test details of the test result tree node as a [TestAdaptor](./reference-itest-adaptor.md). | +| `string Name` | The name of the test node. | +| `string FullName` | Gets the full name of the test result | +| `string ResultState` | The state of the result as a string. E.g., `Success`, `Skipped`, `Failure`, `Explicit`, `Cancelled`. | +| `TestStatus TestStatus` | The status of the test as an enum. Either `Inconclusive`, `Skipped`, `Passed`, or `Failed`. | +| `double Duration` | Gets the elapsed time for running the test in seconds. | +| `DateTime StartTime` | Gets or sets the time the test started running. | +| `DateTime EndTime` | Gets or sets the time the test finished running. | +| `string Message` | Gets the message associated with a test failure or with not running the test | +| `string StackTrace` | Gets any stack trace associated with an error or failure. Not available in the [Compact Framework](https://en.wikipedia.org/wiki/.NET_Compact_Framework) 1.0. | +| `int AssertCount` | Gets the number of asserts that ran during the test and all its children. | +| `int FailCount` | Gets the number of test cases that failed when running the test and all its children. | +| `int PassCount` | Gets the number of test cases that passed when running the test and all its children. | +| `int SkipCount` | Gets the number of test cases skipped when running the test and all its children. | +| `int InconclusiveCount` | Gets the number of test cases that were inconclusive when running the test and all its children. | +| `bool HasChildren` | Indicates whether this result has any child results. Accessing HasChildren should not force the creation of the Children collection in classes implementing this interface. | +| `IEnumerable Children` | Gets the collection of child results. | +| `string Output` | Gets any text output written to this result. | +| `TNode ToXml` | Gets the test results as an `NUnit` XML node. Use this to save the results to an XML file. | diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-itest-run-settings.md b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-itest-run-settings.md new file mode 100644 index 0000000..7f7b06e --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-itest-run-settings.md @@ -0,0 +1,29 @@ +# ITestRunSettings +`ITestRunSettings` lets you set any of the global settings right before building a Player for a test run and then reverts the settings afterward. +`ITestRunSettings` implements [IDisposable](https://docs.microsoft.com/en-us/dotnet/api/system.idisposable), and runs after building the Player with tests. + +## Public methods + +| Syntax | Description | +| ---------------- | ------------------------------------------------------------ | +| `void Apply()` | A method called before building the Player. | +| `void Dispose()` | A method called after building the Player or if the build failed. | + +## Example +The following example sets the iOS SDK version to be the simulator SDK and resets it to the original value after the run. +``` C# +public class MyTestSettings : ITestRunSettings +{ + private iOSSdkVersion originalSdkVersion; + public void Apply() + { + originalSdkVersion = PlayerSettings.iOS.sdkVersion; + PlayerSettings.iOS.sdkVersion = iOSSdkVersion.SimulatorSDK; + } + + public void Dispose() + { + PlayerSettings.iOS.sdkVersion = originalSdkVersion; + } +} +``` \ No newline at end of file diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-recompile-scripts.md b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-recompile-scripts.md new file mode 100644 index 0000000..adead8e --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-recompile-scripts.md @@ -0,0 +1,22 @@ +# RecompileScripts +`RecompileScripts` is an [IEditModeTestYieldInstruction](./reference-custom-yield-instructions.md) that you can yield in Edit Mode tests. It lets you trigger a recompilation of scripts in the Unity Editor. + +## Constructors + +| Syntax | Description | +| ------------------------------------------------------------ | ------------------------------------------------------------ | +| `RecompileScripts(bool expectScriptCompilation = true, bool expectScriptCompilationSuccess = true)` | Creates a new instance of the `RecompileScripts` yield instruction. The parameter `expectScriptCompilation` indicates if you expect a script compilation to start (defaults to true). If a script compilation does not start and `expectScriptCompilation` is `true`, then it throws an exception. | + +## Example +``` C@ +[UnitySetUp] +public IEnumerator SetUp() +{ + using (var file = File.CreateText("Assets/temp/myScript.cs")) + { + file.Write("public class ATempClass { }"); + } + AssetDatabase.Refresh(); + yield return new RecompileScripts(); +} +``` \ No newline at end of file diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-setup-and-cleanup.md b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-setup-and-cleanup.md new file mode 100644 index 0000000..1b8c862 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-setup-and-cleanup.md @@ -0,0 +1,91 @@ +# Setup and cleanup at build time + +In some cases, it is relevant to perform changes to Unity or the file system before building the tests. In the same way, it may be necessary to clean up such changes after the test run. In response to such needs, you can incorporate the pre-build setup and post-build cleanup concepts into your tests in one of the following ways: + +1. Via implementation of `IPrebuildSetup` and `IPostBuildCleanup` interfaces by a test class. +2. Via applying the `PrebuildSetup` attribute and `PostBuildCleanup` attribute on your test class, one of the tests or the test assembly, providing a class name that implements the corresponding interface as an argument (fx `[PrebuildSetup("MyTestSceneSetup")]`). + +## Execution order + +All setups run in a deterministic order one after another. The first to run are the setups defined with attributes. Then any test class implementing the interface runs, in alphabetical order inside their namespace, which is the same order as the tests run. + +> **Note**: Cleanup runs right away for a standalone test run, but only after related tests run in the Unity Editor. + +## PrebuildSetup and PostBuildCleanup + +Both `PrebuildSetup` and `PostBuildCleanup` attributes run if the respective test or test class is in the current test run. The test is included either by running all tests or setting a [filter](./workflow-create-test.md#filters) that includes the test. If multiple tests reference the same pre-built setup or post-build cleanup, then it only runs once. + +## IPrebuildSetup + +Implement this interface if you want to define a set of actions to run as a pre-build step. + +### Public methods + +| Syntax | Description | +| -------------- | ------------------------------------------------------------ | +| `void Setup()` | Implement this method to call actions automatically before the build process. | + +## IPostBuildCleanup + +Implement this interface if you want to define a set of actions to execute as a post-build step. Cleanup runs right away for a standalone test run, but only after all the tests run within the Editor. + +### Public methods + +| Syntax | Description | +| ---------------- | ------------------------------------------------------------ | +| `void Cleanup()` | Implement this method to specify actions that should run as a post-build cleanup step. | + +## Example + +```c# +[TestFixture] +public class CreateSpriteTest : IPrebuildSetup +{ + Texture2D m_Texture; + Sprite m_Sprite; + + public void Setup() + { + +#if UNITY_EDITOR + + var spritePath = "Assets/Resources/Circle.png"; + + var ti = UnityEditor.AssetImporter.GetAtPath(spritePath) as UnityEditor.TextureImporter; + + ti.textureCompression = UnityEditor.TextureImporterCompression.Uncompressed; + + ti.SaveAndReimport(); + +#endif + } + + [SetUp] + public void SetUpTest() + { + m_Texture = Resources.Load("Circle"); + } + + [Test] + public void WhenNullTextureIsPassed_CreateShouldReturnNullSprite() + { + + // Check with Valid Texture. + + LogAssert.Expect(LogType.Log, "Circle Sprite Created"); + + Sprite.Create(m_Texture, new Rect(0, 0, m_Texture.width, m_Texture.height), new Vector2(0.5f, 0.5f)); + + Debug.Log("Circle Sprite Created"); + + // Check with NULL Texture. Should return NULL Sprite. + + m_Sprite = Sprite.Create(null, new Rect(0, 0, m_Texture.width, m_Texture.heig`t), new Vector2(0.5f, 0.5f)); + + Assert.That(m_Sprite, Is.Null, "Sprite created with null texture should be null"); + + } +} +``` + +> **Tip**: Use `#if UNITY_EDITOR` if you want to access Editor only APIs, but the setup/cleanup is inside a **Play Mode** assembly. diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-test-runner-api.md b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-test-runner-api.md new file mode 100644 index 0000000..176530f --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-test-runner-api.md @@ -0,0 +1,23 @@ +# TestRunnerApi +The `TestRunnerApi` retrieves and runs tests programmatically from code inside the project, or inside other packages. `TestRunnerApi` is a [ScriptableObject](https://docs.unity3d.com/ScriptReference/ScriptableObject.html). + +You can initialize the API like this: + +```c# +var testRunnerApi = ScriptableObject.CreateInstance(); +``` +> **Note**: You can subscribe and receive test results in one instance of the API, even if the run starts from another instance. + +The `TestRunnerApi` supports the following workflows: +* [How to run tests programmatically](./extension-run-tests.md) +* [How to get test results](./extension-get-test-results.md) +* [How to retrieve the list of tests](./extension-retrieve-test-list.md) + +## Public methods + +| Syntax | Description | +| ------------------------------------------ | ------------------------------------------------------------ | +| `void Execute(ExecutionSettings executionSettings)` | Starts a test run with a given set of [ExecutionSettings](./reference-execution-settings.md). | +| `void RegisterCallbacks(ICallbacks testCallbacks, int priority = 0)` | Sets up a given instance of [ICallbacks](./reference-icallbacks.md) to be invoked on test runs. | +| `void UnregisterCallbacks(ICallbacks testCallbacks)` | Unregisters an instance of ICallbacks to no longer receive callbacks from test runs. | +| `void RetrieveTestList(TestMode testMode, Action callback)` | Retrieve the full test tree as [ITestAdaptor](./reference-itest-adaptor.md) for a given test mode. | \ No newline at end of file diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-test-utils.md b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-test-utils.md new file mode 100644 index 0000000..b73e02d --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-test-utils.md @@ -0,0 +1,40 @@ +# Test Utils + +This contains test utility functions for float value comparison and creating primitives. + +## Static Methods + +| Syntax | Description | +| ------------------------------------------------------------ | ------------------------------------------------------------ | +| `bool AreFloatsEqual(float expected, float actual, float allowedRelativeError)` | Relative epsilon comparison of two float values for equality. `allowedRelativeError` is the relative error to be used in relative epsilon comparison. The relative error is the absolute error divided by the magnitude of the exact value. Returns `true` if the actual value is equivalent to the expected value. | +| `bool AreFloatsEqualAbsoluteError(float expected, float actual, float allowedAbsoluteError)` | Compares two floating point numbers for equality under the given absolute tolerance. `allowedAbsoluteError` is the permitted error tolerance. Returns `true` if the actual value is equivalent to the expected value under the given tolerance. | +| `GameObject CreatePrimitive( type)` | Creates a [GameObject](https://docs.unity3d.com/ScriptReference/GameObject.html) with a primitive [MeshRenderer](https://docs.unity3d.com/ScriptReference/MeshRenderer.html). This is an analogue to the [GameObject.CreatePrimitive](https://docs.unity3d.com/ScriptReference/GameObject.CreatePrimitive.html), but creates a primitive `MeshRenderer` with a fast [Shader](https://docs.unity3d.com/ScriptReference/Shader.html) instead of the default built-in `Shader`, optimized for testing performance. `type` is the [primitive type](https://docs.unity3d.com/ScriptReference/PrimitiveType.html) of the required `GameObject`. Returns a `GameObject` with primitive `MeshRenderer` and [Collider](https://docs.unity3d.com/ScriptReference/Collider.html). | + +## Example + +```c# +[TestFixture] +class UtilsTests +{ + [Test] + public void ChechThat_FloatsAreEqual() + { + float expected = 10e-8f; + float actual = 0f; + float allowedRelativeError = 10e-6f; + + Assert.That(Utils.AreFloatsEqual(expected, actual, allowedRelativeError), Is.True); + } + + [Test] + public void ChechThat_FloatsAreAbsoluteEqual() + { + float expected = 0f; + float actual = 10e-6f; + float error = 10e-5f; + + Assert.That(Utils.AreFloatsEqualAbsoluteError(expected, actual, error), Is.True); + } +} +``` + diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-tests-monobehaviour.md b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-tests-monobehaviour.md new file mode 100644 index 0000000..13959d5 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-tests-monobehaviour.md @@ -0,0 +1,51 @@ +# MonoBehaviour tests + +`MonoBehaviourTest` is a [coroutine](https://docs.unity3d.com/ScriptReference/Coroutine.html) and a helper for writing [MonoBehaviour](https://docs.unity3d.com/ScriptReference/MonoBehaviour.html) tests. + +Yield a `MonoBehaviourTest` when using the `UnityTest` attribute to instantiate the `MonoBehaviour` you wish to test and wait for it to finish running. Implement the `IMonoBehaviourTest` interface on the `MonoBehaviour` to state when the test completes. + +## Example + +```c# +[UnityTest] +public IEnumerator MonoBehaviourTest_Works() +{ + yield return new MonoBehaviourTest(); +} + +public class MyMonoBehaviourTest : MonoBehaviour, IMonoBehaviourTest +{ + private int frameCount; + public bool IsTestFinished + { + get { return frameCount > 10; } + } + + void Update() + { + frameCount++; + } +} +``` + +## MonoBehaviourTest<T> + +This is a wrapper that allows running tests on `MonoBehaviour` scripts. Inherits from [CustomYieldInstruction](https://docs.unity3d.com/ScriptReference/CustomYieldInstruction.html). + +### Properties + +| Syntax | Description | +| ----------------------- | ------------------------------------------------------------ | +| `T component` | A `MonoBehaviour` component created for the test and attached to the test’s [GameObject](https://docs.unity3d.com/ScriptReference/GameObject.html). | +| `GameObject gameObject` | A `GameObject` created as a container for the test component. | +| `bool keepWaiting` | (Inherited) Returns `true` if the test is not finished yet, which keeps the coroutine suspended. | + +## IMonoBehaviourTest + +An interface implemented by a `MonoBehaviour` test. + +### Properties + +| Syntax | Description | +| --------------------- | ----------------------------------------------- | +| `bool IsTestFinished` | Indicates when the test is considered finished. | \ No newline at end of file diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-tests-parameterized.md b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-tests-parameterized.md new file mode 100644 index 0000000..48173d8 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-tests-parameterized.md @@ -0,0 +1,18 @@ +# Parameterized tests + +For data-driven testing, you may want to have your tests parameterized. You may use both the [NUnit](http://www.nunit.org/) attributes [TestCase](https://github.com/nunit/docs/wiki/TestCase-Attribute) and [ValueSource](https://github.com/nunit/docs/wiki/ValueSource-Attribute) with a unit test. + +> **Note**: With `UnityTest` it is recommended to use `ValueSource` since `TestCase` is not supported. + +## Example + +```c# +static int[] values = new int[] { 1, 5, 6 }; + +[UnityTest] +public IEnumerator MyTestWithMultipleValues([ValueSource("values")] int value) +{ + yield return null; +} +``` + diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-wait-for-domain-reload.md b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-wait-for-domain-reload.md new file mode 100644 index 0000000..002ee82 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/reference-wait-for-domain-reload.md @@ -0,0 +1,19 @@ +# WaitForDomainReload +`WaitForDomainReload` is an [IEditModeTestYieldInstruction](./reference-custom-yield-instructions.md) that you can yield in Edit Mode tests. It delays the execution of scripts until after an incoming domain reload. If the domain reload results in a script compilation failure, then it throws an exception. + +## Constructors + +| Syntax | Description | +| ---------------------------- | ------------------------------------------------------------ | +| `WaitForDomainReload()` | Create a new instance of the `WaitForDomainReload` yield instruction. | + +## Example +``` C@ +[UnitySetUp] +public IEnumerator SetUp() +{ + File.Copy("Resources/MyDll.dll", @"Assets/MyDll.dll", true); // Trigger a domain reload. + AssetDatabase.Refresh(); + yield return new WaitForDomainReload(); +} +``` \ No newline at end of file diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/resources.md b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/resources.md new file mode 100644 index 0000000..6cb3200 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/resources.md @@ -0,0 +1,6 @@ +# Resources + +Here you can find other related resources to the Unity Test Framework: + +* [Performance Benchmarking in Unity: How to Get Started](https://blogs.unity3d.com/2018/09/25/performance-benchmarking-in-unity-how-to-get-started/) [Blog] +* [Testing Test-Driven Development with the Unity Test Runner](https://blogs.unity3d.com/2018/11/02/testing-test-driven-development-with-the-unity-test-runner/) [Blog] \ No newline at end of file diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/workflow-create-playmode-test.md b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/workflow-create-playmode-test.md new file mode 100644 index 0000000..d5fb3eb --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/workflow-create-playmode-test.md @@ -0,0 +1,28 @@ +# Workflow: How to create a Play Mode test + +To create a **Play Mode** test, you can follow a similar process as when you want to create an **Edit Mode** test. + +1. Start with switching to the **PlayMode** tab in the **Test Runner** window. +2. Create a test assembly folder (see [How to create a new test assembly)](./workflow-create-test-assembly.md). The folder name is *Tests* by default (or *Tests 1*, *Tests 2*, etc. if the preceding name is already in use). + +![PlayMode tab](./images/playmode-tab.png) + +> **Note**: If you don’t see the **Create Play Mode Test Assembly Folder** button enabled, make sure that in the Project window you navigate out of a folder with another .asmdef (such as one for Edit Mode tests). + +3. When you have your Play Mode test assembly folder ready, then [create your Play Mode test](./workflow-create-test.md). + +> **Note**: [Pre-defined Unity assemblies](https://docs.unity3d.com/Manual/ScriptCompileOrderFolders.html) (such as _Assembly-CSharp.dll_) do not reference your new assembly. + +## References and builds + +Unity Test Framework adds a reference to `TestAssemblies` in the [Assembly Definition](https://docs.unity3d.com/Manual/ScriptCompilationAssemblyDefinitionFiles.html) file, but it won't include any other references (e.g., to other scripting assemblies within the Unity project). So you need to add other assemblies yourself if you want to test them too. + +Unity does not include `TestAssemblies` in Player builds, but in the Test Runner window, we have such an option. If you need to test code in pre-defined assemblies, you can reference `TestAssemblies` from other assemblies. You must remove these tests after the test run so that Unity does not add them to the final Player build. + +To do this, in the Test Runner window choose **Enable playmode tests for all assemblies** option from the drop-down menu (to expand, click on the small list item in the top right corner). In the dialog box, click **OK** to manually restart the Editor. + +![Enable Play Mode tests for all assemblies](./images/playmode-enable-all.png) + +> **Note**: **Enabling Play Mode tests for all assemblies** includes additional assemblies in your project build, which can increase the project’s size as well as the build time. + +For more information, see [Edit Mode vs. Play Mode tests](./edit-mode-vs-play-mode-tests.md). \ No newline at end of file diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/workflow-create-test-assembly.md b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/workflow-create-test-assembly.md new file mode 100644 index 0000000..778a4d6 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/workflow-create-test-assembly.md @@ -0,0 +1,17 @@ +# Workflow: **How to create a new test assembly** + +Unity Test Framework looks for a test inside any assembly that references [NUnit](http://www.nunit.org/). We refer to such assemblies as `TestAssemblies`. The [Test Runner](./getting-started.md) UI can help you set up `TestAssemblies`. **Play Mode** and **Edit Mode** tests need to be in separate assemblies. + +In the **Test Runner** window, you will see an **EditMode** tab enabled by default, as well as a **Create EditMode Test Assembly Folder** button. + +![Test Runner window EditMode tab](./images/editmode-tab.png) + +Click the button to create a *Tests* folder with a respective .asmdef file by default. Change the name of the new [Assembly Definition](https://docs.unity3d.com/Manual/ScriptCompilationAssemblyDefinitionFiles.html), if necessary, and press Enter to accept it. + +![New Test folder and assembly file](./images/tests-folder-assembly.png) + +In the Inspector window, it should have references to **nunit.framework.dll***,* **UnityEngine.TestRunner,** and **UnityEditor.TestRunner** assemblies, as well as **Editor** preselected as a target platform. + +> **Note**: The **UnityEditor.TestRunner** reference is only available for [Edit Mode tests](./edit-mode-vs-play-mode-tests.md#edit-mode-tests). + +![Assembly definition import settings](./images/import-settings.png) diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/workflow-create-test.md b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/workflow-create-test.md new file mode 100644 index 0000000..94f992a --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/workflow-create-test.md @@ -0,0 +1,36 @@ +# Workflow: How to create a test + +To create a test, do the following: + +1. Create your *Test* [assembly folder](./workflow-create-test-assembly.md) and select it in the **Project** window. +2. Click the button **Create Test Script in current folder** option in the **Test Runner** window. + +![EditMode create test script](./images/editmode-create-test-script.png) + +3. It creates a *NewTestScript.cs* file in the *Tests* folder. Change the name of the script, if necessary, and press Enter to accept it. + +![NewTestScript.cs](./images/new-test-script.png) + +Now you’ll see two sample tests in the Test Runner window: + +![Test templates](./images/test-templates.png) + +Now you can open the tests in your favorite script editor. + +You can also create test scripts by navigating to **Assets** > **Create > Testing** > **C# Test Script**, unless adding a test script would result in a compilation error. + +> **Note**: Unity does not include `TestAssemblies` ([NUnit](http://www.nunit.org/), Unity Test Framework, and user script assemblies) when using the normal build pipeline, but does include them when using **Run on <Platform>** in the Test Runner window. + +## Filters + +If you have a lot of tests, and you only want to view/run a sub-set of them, you can filter them in three ways (see image above): + +* Type in the search box in the top left + +* Click a test class or fixture (such as **NewTestScript** in the image above) + +* Click one of the test result icon buttons in the top right + + + +For more information, see [Edit Mode vs. Play Mode tests](./edit-mode-vs-play-mode-tests.md). diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/workflow-run-playmode-test-standalone.md b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/workflow-run-playmode-test-standalone.md new file mode 100644 index 0000000..13f620c --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/workflow-run-playmode-test-standalone.md @@ -0,0 +1,21 @@ +# Workflow: How to run a Play Mode test in player + +If you run a **Play Mode** test in the same way as an [Editor test](./workflow-run-test.md), it runs inside the Unity Editor. You can also run Play Mode tests on specific platforms. Click **Run all in the player** to build and run your tests on the currently active target platform. + +![Run PlayMode test in player](./images/playmode-run-standalone.png) + +> **Note**: Your current platform displays in brackets on the button. For example, in the image above, the button reads **Run all in player (StandaloneWindows)**, because the current platform is Windows. The target platform is always the current Platform selected in [Build Settings](https://docs.unity3d.com/Manual/BuildSettings.html) (menu: **File** > **Build Settings**). + +The test result displays in the build once the test completes: + +![Results of PlayMode in player test run](./images/playmode-results-standalone.png) + +The application running on the platform reports back the test results to the Editor UI then displays the executed tests and shuts down. To make sure you receive the test results from the Player on your target platform back into the Editor that’s running the test, both should be on the same network. + +> **Note:** Some platforms do not support shutting down the application with `Application.Quit`, so it will continue running after reporting the test results. + +If Unity cannot instantiate the connection, you can see the tests succeed in the running application. Running tests on platforms with arguments, in this state, does not provide XML test results. + + + +For more information, see [Edit Mode vs Play Mode tests](./edit-mode-vs-play-mode-tests.md). \ No newline at end of file diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/workflow-run-test.md b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/workflow-run-test.md new file mode 100644 index 0000000..87b7650 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/Documentation~/workflow-run-test.md @@ -0,0 +1,19 @@ +# Workflow: How to run a test + +To run a test, you need to double-click on the test or test fixture name in the **Test Runner** window. + +You can also use one of the buttons on the top bar, **Run All** or **Run Selected**. As a result, you’ll see the test status icon changed and a counter in the top right corner updated: + +![EditMode Run Test](./images/editmode-run-test.png) + +You may also use a context menu option **Run**, right-click on any item in the test tree to have it (with all its children if any) run. + +![EditMode Run Tests](./images/editmode-run-tests.png) + + + +## Run tests within Rider + +It is possible to run unit tests in the Unity Test Framework directly from [JetBrains Rider](https://www.jetbrains.com/rider/). + +For more information, see the [JetBrains official documentation](https://www.jetbrains.com/help/rider/Running_and_Debugging_Unity_Tests.html) and their blog post [Run Unity tests in Rider 2018.1](https://blog.jetbrains.com/dotnet/2018/04/18/run-unity-tests-rider-2018-1/). \ No newline at end of file diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/LICENSE.md b/Library/PackageCache/com.unity.test-framework@1.1.11/LICENSE.md new file mode 100644 index 0000000..1819021 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/LICENSE.md @@ -0,0 +1,5 @@ +Test Framework copyright © 2020 Unity Technologies ApS + +Licensed under the Unity Companion License for Unity-dependent projects--see [Unity Companion License](http://www.unity3d.com/legal/licenses/Unity_Companion_License). + +Unless expressly provided otherwise, the Software under this license is made available strictly on an “AS IS” BASIS WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. Please review the license for details on these and other terms and conditions. diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/LICENSE.md.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/LICENSE.md.meta new file mode 100644 index 0000000..5ab3061 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/LICENSE.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 3ec7596410385054a9e0bc90377fbe63 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner.meta new file mode 100644 index 0000000..9cfa638 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 95cdf27b47eb82747ba9e51f41e72a35 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api.meta new file mode 100644 index 0000000..ea66e70 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fa423365b1ce06a4dbdc6fb4a8597bfa +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/CallbacksDelegator.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/CallbacksDelegator.cs new file mode 100644 index 0000000..9418464 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/CallbacksDelegator.cs @@ -0,0 +1,136 @@ +using System; +using System.Linq; +using System.Text; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; +using UnityEngine; +using UnityEngine.TestRunner.TestLaunchers; + +namespace UnityEditor.TestTools.TestRunner.Api +{ + internal class CallbacksDelegator : ICallbacksDelegator + { + private static CallbacksDelegator s_instance; + public static CallbacksDelegator instance + { + get + { + if (s_instance == null) + { + s_instance = new CallbacksDelegator(CallbacksHolder.instance.GetAll, new TestAdaptorFactory()); + } + return s_instance; + } + } + + private readonly Func m_CallbacksProvider; + private readonly ITestAdaptorFactory m_AdaptorFactory; + + public CallbacksDelegator(Func callbacksProvider, ITestAdaptorFactory adaptorFactory) + { + m_CallbacksProvider = callbacksProvider; + m_AdaptorFactory = adaptorFactory; + } + + public void RunStarted(ITest testsToRun) + { + m_AdaptorFactory.ClearResultsCache(); + var testRunnerTestsToRun = m_AdaptorFactory.Create(testsToRun); + TryInvokeAllCallbacks(callbacks => callbacks.RunStarted(testRunnerTestsToRun)); + } + + public void RunStartedRemotely(byte[] testsToRunData) + { + var testData = Deserialize(testsToRunData); + var testsToRun = m_AdaptorFactory.BuildTree(testData); + TryInvokeAllCallbacks(callbacks => callbacks.RunStarted(testsToRun)); + } + + public void RunFinished(ITestResult testResults) + { + var testResult = m_AdaptorFactory.Create(testResults); + TryInvokeAllCallbacks(callbacks => callbacks.RunFinished(testResult)); + } + + public void RunFinishedRemotely(byte[] testResultsData) + { + var remoteTestResult = Deserialize(testResultsData); + var testResult = m_AdaptorFactory.Create(remoteTestResult.results.First(), remoteTestResult); + TryInvokeAllCallbacks(callbacks => callbacks.RunFinished(testResult)); + } + + public void RunFailed(string failureMessage) + { + Debug.LogError(failureMessage); + TryInvokeAllCallbacks(callbacks => + { + var errorCallback = callbacks as IErrorCallbacks; + if (errorCallback != null) + { + errorCallback.OnError(failureMessage); + } + }); + } + + public void TestStarted(ITest test) + { + var testRunnerTest = m_AdaptorFactory.Create(test); + TryInvokeAllCallbacks(callbacks => callbacks.TestStarted(testRunnerTest)); + } + + public void TestStartedRemotely(byte[] testStartedData) + { + var testData = Deserialize(testStartedData); + var testsToRun = m_AdaptorFactory.BuildTree(testData); + + TryInvokeAllCallbacks(callbacks => callbacks.TestStarted(testsToRun)); + } + + public void TestFinished(ITestResult result) + { + var testResult = m_AdaptorFactory.Create(result); + TryInvokeAllCallbacks(callbacks => callbacks.TestFinished(testResult)); + } + + public void TestFinishedRemotely(byte[] testResultsData) + { + var remoteTestResult = Deserialize(testResultsData); + var testResult = m_AdaptorFactory.Create(remoteTestResult.results.First(), remoteTestResult); + TryInvokeAllCallbacks(callbacks => callbacks.TestFinished(testResult)); + } + + public void TestTreeRebuild(ITest test) + { + m_AdaptorFactory.ClearTestsCache(); + var testAdaptor = m_AdaptorFactory.Create(test); + TryInvokeAllCallbacks(callbacks => + { + var rebuildCallbacks = callbacks as ITestTreeRebuildCallbacks; + if (rebuildCallbacks != null) + { + rebuildCallbacks.TestTreeRebuild(testAdaptor); + } + }); + } + + private void TryInvokeAllCallbacks(Action callbackAction) + { + foreach (var testRunnerApiCallback in m_CallbacksProvider()) + { + try + { + callbackAction(testRunnerApiCallback); + } + catch (Exception ex) + { + Debug.LogException(ex); + } + } + } + + private static T Deserialize(byte[] data) + { + return JsonUtility.FromJson(Encoding.UTF8.GetString(data)); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/CallbacksDelegator.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/CallbacksDelegator.cs.meta new file mode 100644 index 0000000..5225c54 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/CallbacksDelegator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0de03ebd74e2b474fa23d05ab42d0cd8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/CallbacksDelegatorListener.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/CallbacksDelegatorListener.cs new file mode 100644 index 0000000..b3cb5b8 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/CallbacksDelegatorListener.cs @@ -0,0 +1,28 @@ +using UnityEngine; +using UnityEngine.TestTools.TestRunner; + +namespace UnityEditor.TestTools.TestRunner.Api +{ + internal class CallbacksDelegatorListener : ScriptableObject, ITestRunnerListener + { + public void RunStarted(NUnit.Framework.Interfaces.ITest testsToRun) + { + CallbacksDelegator.instance.RunStarted(testsToRun); + } + + public void RunFinished(NUnit.Framework.Interfaces.ITestResult testResults) + { + CallbacksDelegator.instance.RunFinished(testResults); + } + + public void TestStarted(NUnit.Framework.Interfaces.ITest test) + { + CallbacksDelegator.instance.TestStarted(test); + } + + public void TestFinished(NUnit.Framework.Interfaces.ITestResult result) + { + CallbacksDelegator.instance.TestFinished(result); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/CallbacksDelegatorListener.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/CallbacksDelegatorListener.cs.meta new file mode 100644 index 0000000..7bed372 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/CallbacksDelegatorListener.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f3e1b3cbf3fac6a459b1a602167ad311 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/CallbacksHolder.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/CallbacksHolder.cs new file mode 100644 index 0000000..91acb8c --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/CallbacksHolder.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +namespace UnityEditor.TestTools.TestRunner.Api +{ + internal class CallbacksHolder : ScriptableSingleton, ICallbacksHolder + { + private List m_Callbacks = new List(); + public void Add(ICallbacks callback, int priority) + { + m_Callbacks.Add(new CallbackWithPriority(callback, priority)); + } + + public void Remove(ICallbacks callback) + { + m_Callbacks.RemoveAll(callbackWithPriority => callbackWithPriority.Callback == callback); + } + + public ICallbacks[] GetAll() + { + return m_Callbacks.OrderByDescending(callback => callback.Priority).Select(callback => callback.Callback).ToArray(); + } + + public void Clear() + { + m_Callbacks.Clear(); + } + + private struct CallbackWithPriority + { + public ICallbacks Callback; + public int Priority; + public CallbackWithPriority(ICallbacks callback, int priority) + { + Callback = callback; + Priority = priority; + } + } + + // Sometimes - such as when we want to test the test framework itself - it's necessary to launch a test run from + // inside a test. Because callbacks are registered globally, this can cause a lot of confusion (e.g. the in-test + // run will emit UTP messages, utterly confusing UTR). In such circumstances the safest thing to do is to + // temporarily suppress all registered callbacks for the duration of the in-test run. This method can be called + // to set up a using() block which will suppress the callbacks for the scope. + public IDisposable TemporarilySuppressCallbacks() + { + return new Suppressor(this); + } + + private sealed class Suppressor : IDisposable + { + private readonly CallbacksHolder _instance; + private readonly List _suppressed; + + public Suppressor(CallbacksHolder instance) + { + _instance = instance; + _suppressed = new List(instance.m_Callbacks); + instance.m_Callbacks.Clear(); + } + + public void Dispose() + { + _instance.m_Callbacks.AddRange(_suppressed); + } + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/CallbacksHolder.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/CallbacksHolder.cs.meta new file mode 100644 index 0000000..1896ba8 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/CallbacksHolder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4884ccc3528cb2e40a0e6f0a19a2b35b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ExecutionSettings.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ExecutionSettings.cs new file mode 100644 index 0000000..2dd115a --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ExecutionSettings.cs @@ -0,0 +1,57 @@ +using System; +using System.Linq; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal.Filters; +using UnityEngine; + +namespace UnityEditor.TestTools.TestRunner.Api +{ + [Serializable] + public class ExecutionSettings + { + public ExecutionSettings(params Filter[] filtersToExecute) + { + filters = filtersToExecute; + } + + [SerializeField] + internal BuildTarget? targetPlatform; + + // Note: Is not available after serialization + public ITestRunSettings overloadTestRunSettings; + + [SerializeField] + internal Filter filter; + [SerializeField] + public Filter[] filters; + [SerializeField] + public bool runSynchronously; + [SerializeField] + public int playerHeartbeatTimeout = 60*10; + + internal bool EditModeIncluded() + { + return filters.Any(f => IncludesTestMode(f.testMode, TestMode.EditMode)); + } + + internal bool PlayModeInEditorIncluded() + { + return filters.Any(f => IncludesTestMode(f.testMode, TestMode.PlayMode) && targetPlatform == null); + } + + internal bool PlayerIncluded() + { + return filters.Any(f => IncludesTestMode(f.testMode, TestMode.PlayMode) && targetPlatform != null); + } + + private static bool IncludesTestMode(TestMode testMode, TestMode modeToCheckFor) + { + return (testMode & modeToCheckFor) == modeToCheckFor; + } + + internal ITestFilter BuildNUnitFilter() + { + return new OrFilter(filters.Select(f => f.BuildNUnitFilter(runSynchronously)).ToArray()); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ExecutionSettings.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ExecutionSettings.cs.meta new file mode 100644 index 0000000..7036257 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ExecutionSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: eea34a28297f9bc4c9f4c573bc8d5d1c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/Filter.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/Filter.cs new file mode 100644 index 0000000..bc10b01 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/Filter.cs @@ -0,0 +1,81 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; +using NUnit.Framework.Internal.Filters; +using UnityEngine; +using UnityEngine.TestRunner.NUnitExtensions.Filters; +using UnityEngine.TestTools.TestRunner.GUI; + +namespace UnityEditor.TestTools.TestRunner.Api +{ + [Serializable] + public class Filter + { + [SerializeField] + public TestMode testMode; + [SerializeField] + public string[] testNames; + [SerializeField] + public string[] groupNames; + [SerializeField] + public string[] categoryNames; + [SerializeField] + public string[] assemblyNames; + [SerializeField] + public BuildTarget? targetPlatform; + + internal TestRunnerFilter ToTestRunnerFilter() + { + return new TestRunnerFilter() + { + testNames = testNames, + categoryNames = categoryNames, + groupNames = groupNames, + assemblyNames = assemblyNames + }; + } + + internal ITestFilter BuildNUnitFilter(bool synchronousOnly) + { + var filters = new List(); + + if (testNames != null && testNames.Length != 0) + { + var nameFilter = new OrFilter(testNames.Select(n => new FullNameFilter(n)).ToArray()); + filters.Add(nameFilter); + } + + if (groupNames != null && groupNames.Length != 0) + { + var exactNamesFilter = new OrFilter(groupNames.Select(n => + { + var f = new FullNameFilter(n); + f.IsRegex = true; + return f; + }).ToArray()); + filters.Add(exactNamesFilter); + } + + if (assemblyNames != null && assemblyNames.Length != 0) + { + var assemblyFilter = new OrFilter(assemblyNames.Select(c => new AssemblyNameFilter(c)).ToArray()); + filters.Add(assemblyFilter); + } + + if (categoryNames != null && categoryNames.Length != 0) + { + var categoryFilter = new OrFilter(categoryNames.Select(c => new CategoryFilterExtended(c) {IsRegex = true}).ToArray()); + filters.Add(categoryFilter); + } + + if (synchronousOnly) + { + filters.Add(new SynchronousFilter()); + } + + return filters.Count == 0 ? TestFilter.Empty : new AndFilter(filters.ToArray()); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/Filter.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/Filter.cs.meta new file mode 100644 index 0000000..cec8610 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/Filter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 05f92e4a2414cb144a92157752dfa324 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ICallbacks.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ICallbacks.cs new file mode 100644 index 0000000..269dbbf --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ICallbacks.cs @@ -0,0 +1,10 @@ +namespace UnityEditor.TestTools.TestRunner.Api +{ + public interface ICallbacks + { + void RunStarted(ITestAdaptor testsToRun); + void RunFinished(ITestResultAdaptor result); + void TestStarted(ITestAdaptor test); + void TestFinished(ITestResultAdaptor result); + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ICallbacks.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ICallbacks.cs.meta new file mode 100644 index 0000000..ab0ac56 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ICallbacks.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 93eea84e53d0226479c9a584f19427b5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ICallbacksDelegator.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ICallbacksDelegator.cs new file mode 100644 index 0000000..5622c82 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ICallbacksDelegator.cs @@ -0,0 +1,18 @@ +using NUnit.Framework.Interfaces; + +namespace UnityEditor.TestTools.TestRunner.Api +{ + internal interface ICallbacksDelegator + { + void RunStarted(ITest testsToRun); + void RunStartedRemotely(byte[] testsToRunData); + void RunFinished(ITestResult testResults); + void RunFinishedRemotely(byte[] testResultsData); + void RunFailed(string failureMessage); + void TestStarted(ITest test); + void TestStartedRemotely(byte[] testStartedData); + void TestFinished(ITestResult result); + void TestFinishedRemotely(byte[] testResultsData); + void TestTreeRebuild(ITest test); + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ICallbacksDelegator.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ICallbacksDelegator.cs.meta new file mode 100644 index 0000000..fd5aae8 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ICallbacksDelegator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8f8f74fe8e363da42875d9cab025d3b2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ICallbacksHolder.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ICallbacksHolder.cs new file mode 100644 index 0000000..5d3a652 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ICallbacksHolder.cs @@ -0,0 +1,10 @@ +namespace UnityEditor.TestTools.TestRunner.Api +{ + internal interface ICallbacksHolder + { + void Add(ICallbacks callback, int priority); + void Remove(ICallbacks callback); + ICallbacks[] GetAll(); + void Clear(); + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ICallbacksHolder.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ICallbacksHolder.cs.meta new file mode 100644 index 0000000..dd53319 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ICallbacksHolder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d742f2caefd9f934d9f19dad07a08e6f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/IErrorCallbacks.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/IErrorCallbacks.cs new file mode 100644 index 0000000..4599e16 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/IErrorCallbacks.cs @@ -0,0 +1,7 @@ +namespace UnityEditor.TestTools.TestRunner.Api +{ + public interface IErrorCallbacks : ICallbacks + { + void OnError(string message); + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/IErrorCallbacks.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/IErrorCallbacks.cs.meta new file mode 100644 index 0000000..082ebbd --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/IErrorCallbacks.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1a06c562b0c5eb046bcb876a29f93c98 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ITestAdaptor.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ITestAdaptor.cs new file mode 100644 index 0000000..4fa05fd --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ITestAdaptor.cs @@ -0,0 +1,31 @@ +using System.Collections.Generic; +using NUnit.Framework.Interfaces; + +namespace UnityEditor.TestTools.TestRunner.Api +{ + public interface ITestAdaptor + { + string Id { get; } + string Name { get; } + string FullName { get; } + int TestCaseCount { get; } + bool HasChildren { get; } + bool IsSuite { get; } + IEnumerable Children { get; } + ITestAdaptor Parent { get; } + int TestCaseTimeout { get; } + ITypeInfo TypeInfo { get; } + IMethodInfo Method { get; } + string[] Categories { get; } + bool IsTestAssembly { get; } + RunState RunState { get; } + string Description { get; } + string SkipReason { get; } + string ParentId { get; } + string ParentFullName { get; } + string UniqueName { get; } + string ParentUniqueName { get; } + int ChildIndex { get; } + TestMode TestMode { get; } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ITestAdaptor.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ITestAdaptor.cs.meta new file mode 100644 index 0000000..a372e43 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ITestAdaptor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 85dd7af03f02aea4aae13a3945e3b313 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ITestAdaptorFactory.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ITestAdaptorFactory.cs new file mode 100644 index 0000000..578c053 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ITestAdaptorFactory.cs @@ -0,0 +1,18 @@ +using System.Collections.Generic; +using NUnit.Framework.Interfaces; +using UnityEngine.TestRunner.TestLaunchers; + +namespace UnityEditor.TestTools.TestRunner.Api +{ + internal interface ITestAdaptorFactory + { + ITestAdaptor Create(ITest test); + ITestAdaptor Create(RemoteTestData testData); + ITestResultAdaptor Create(ITestResult testResult); + ITestResultAdaptor Create(RemoteTestResultData testResult, RemoteTestResultDataWithTestData allData); + ITestAdaptor BuildTree(RemoteTestResultDataWithTestData data); + IEnumerator BuildTreeAsync(RemoteTestResultDataWithTestData data); + void ClearResultsCache(); + void ClearTestsCache(); + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ITestAdaptorFactory.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ITestAdaptorFactory.cs.meta new file mode 100644 index 0000000..b75d48c --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ITestAdaptorFactory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 803abab0f7e17044db56f8760186dbd1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ITestResultAdaptor.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ITestResultAdaptor.cs new file mode 100644 index 0000000..f2249f2 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ITestResultAdaptor.cs @@ -0,0 +1,86 @@ +using System; +using System.Collections.Generic; +using NUnit.Framework.Interfaces; + +namespace UnityEditor.TestTools.TestRunner.Api +{ + public interface ITestResultAdaptor + { + ITestAdaptor Test { get; } + string Name { get; } + + /// Gets the full name of the test result + string FullName { get; } + + string ResultState { get; } + + TestStatus TestStatus { get; } + + /// Gets the elapsed time for running the test in seconds + double Duration { get; } + + /// Gets or sets the time the test started running. + DateTime StartTime { get; } + + /// Gets or sets the time the test finished running. + DateTime EndTime { get; } + + /// + /// Gets the message associated with a test + /// failure or with not running the test + /// + string Message { get; } + + /// + /// Gets any stacktrace associated with an + /// error or failure. Not available in + /// the Compact Framework 1.0. + /// + string StackTrace { get; } + + /// + /// Gets the number of asserts executed + /// when running the test and all its children. + /// + int AssertCount { get; } + + /// + /// Gets the number of test cases that failed + /// when running the test and all its children. + /// + int FailCount { get; } + + /// + /// Gets the number of test cases that passed + /// when running the test and all its children. + /// + int PassCount { get; } + + /// + /// Gets the number of test cases that were skipped + /// when running the test and all its children. + /// + int SkipCount { get; } + + /// + /// Gets the number of test cases that were inconclusive + /// when running the test and all its children. + /// + int InconclusiveCount { get; } + + /// + /// Indicates whether this result has any child results. + /// Accessing HasChildren should not force creation of the + /// Children collection in classes implementing this interface. + /// + bool HasChildren { get; } + + /// Gets the the collection of child results. + IEnumerable Children { get; } + + /// Gets any text output written to this result. + string Output { get; } + + TNode ToXml(); + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ITestResultAdaptor.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ITestResultAdaptor.cs.meta new file mode 100644 index 0000000..991d6f6 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ITestResultAdaptor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4f90cfe4bf5cfb44f84a5b11387f2a42 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ITestRunSettings.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ITestRunSettings.cs new file mode 100644 index 0000000..ea30021 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ITestRunSettings.cs @@ -0,0 +1,9 @@ +using System; + +namespace UnityEditor.TestTools.TestRunner.Api +{ + public interface ITestRunSettings : IDisposable + { + void Apply(); + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ITestRunSettings.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ITestRunSettings.cs.meta new file mode 100644 index 0000000..0151bee --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ITestRunSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2ae2ce6274819484fa8747a28cebdf3a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ITestRunnerApi.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ITestRunnerApi.cs new file mode 100644 index 0000000..3a2388d --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ITestRunnerApi.cs @@ -0,0 +1,12 @@ +using System; + +namespace UnityEditor.TestTools.TestRunner.Api +{ + internal interface ITestRunnerApi + { + string Execute(ExecutionSettings executionSettings); + void RegisterCallbacks(T testCallbacks, int priority = 0) where T : ICallbacks; + void UnregisterCallbacks(T testCallbacks) where T : ICallbacks; + void RetrieveTestList(TestMode testMode, Action callback); + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ITestRunnerApi.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ITestRunnerApi.cs.meta new file mode 100644 index 0000000..7679b0a --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ITestRunnerApi.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a7842a837a4b13e41ae16193db753418 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ITestTreeRebuildCallbacks.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ITestTreeRebuildCallbacks.cs new file mode 100644 index 0000000..e71d026 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ITestTreeRebuildCallbacks.cs @@ -0,0 +1,7 @@ +namespace UnityEditor.TestTools.TestRunner.Api +{ + internal interface ITestTreeRebuildCallbacks : ICallbacks + { + void TestTreeRebuild(ITestAdaptor test); + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ITestTreeRebuildCallbacks.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ITestTreeRebuildCallbacks.cs.meta new file mode 100644 index 0000000..1e6ead2 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/ITestTreeRebuildCallbacks.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4230e406313f1db43a4b548e7a3ad2e2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/RunState.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/RunState.cs new file mode 100644 index 0000000..937e39e --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/RunState.cs @@ -0,0 +1,11 @@ +namespace UnityEditor.TestTools.TestRunner.Api +{ + public enum RunState + { + NotRunnable, + Runnable, + Explicit, + Skipped, + Ignored, + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/RunState.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/RunState.cs.meta new file mode 100644 index 0000000..031239f --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/RunState.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8bb59cb2f66d156418ca1bd1e2703233 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/TestAdaptor.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/TestAdaptor.cs new file mode 100644 index 0000000..89274dc --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/TestAdaptor.cs @@ -0,0 +1,142 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using NUnit.Framework; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; +using UnityEngine.TestRunner.NUnitExtensions; +using UnityEngine.TestRunner.NUnitExtensions.Runner; +using UnityEngine.TestRunner.TestLaunchers; +using UnityEngine.TestTools.Utils; + +namespace UnityEditor.TestTools.TestRunner.Api +{ + internal class TestAdaptor : ITestAdaptor + { + internal TestAdaptor(ITest test, ITestAdaptor[] children = null) + { + Id = test.Id; + Name = test.Name; + var childIndex = -1; + if (test.Properties["childIndex"].Count > 0) + { + childIndex = (int)test.Properties["childIndex"][0]; + } + FullName = childIndex != -1 ? GetIndexedTestCaseName(test.FullName, childIndex) : test.FullName; + TestCaseCount = test.TestCaseCount; + HasChildren = test.HasChildren; + IsSuite = test.IsSuite; + if (UnityTestExecutionContext.CurrentContext != null) + { + TestCaseTimeout = UnityTestExecutionContext.CurrentContext.TestCaseTimeout; + } + else + { + TestCaseTimeout = CoroutineRunner.k_DefaultTimeout; + } + + TypeInfo = test.TypeInfo; + Method = test.Method; + Categories = test.GetAllCategoriesFromTest().Distinct().ToArray(); + IsTestAssembly = test is TestAssembly; + RunState = (RunState)Enum.Parse(typeof(RunState), test.RunState.ToString()); + Description = (string)test.Properties.Get(PropertyNames.Description); + SkipReason = test.GetSkipReason(); + ParentId = test.GetParentId(); + ParentFullName = test.GetParentFullName(); + UniqueName = test.GetUniqueName(); + ParentUniqueName = test.GetParentUniqueName(); + ChildIndex = childIndex; + + if (test.Parent != null) + { + if (test.Parent.Parent == null) // Assembly level + { + TestMode = (TestMode)Enum.Parse(typeof(TestMode),test.Properties.Get("platform").ToString()); + } + } + + Children = children; + } + + public void SetParent(ITestAdaptor parent) + { + Parent = parent; + if (parent != null) + { + TestMode = parent.TestMode; + } + } + + internal TestAdaptor(RemoteTestData test) + { + Id = test.id; + Name = test.name; + FullName = test.ChildIndex != -1 ? GetIndexedTestCaseName(test.fullName, test.ChildIndex) : test.fullName; + TestCaseCount = test.testCaseCount; + HasChildren = test.hasChildren; + IsSuite = test.isSuite; + m_ChildrenIds = test.childrenIds; + TestCaseTimeout = test.testCaseTimeout; + Categories = test.Categories; + IsTestAssembly = test.IsTestAssembly; + RunState = (RunState)Enum.Parse(typeof(RunState), test.RunState.ToString()); + Description = test.Description; + SkipReason = test.SkipReason; + ParentId = test.ParentId; + UniqueName = test.UniqueName; + ParentUniqueName = test.ParentUniqueName; + ParentFullName = test.ParentFullName; + ChildIndex = test.ChildIndex; + TestMode = TestMode.PlayMode; + } + + internal void ApplyChildren(IEnumerable allTests) + { + Children = m_ChildrenIds.Select(id => allTests.First(t => t.Id == id)).ToArray(); + if (!string.IsNullOrEmpty(ParentId)) + { + Parent = allTests.FirstOrDefault(t => t.Id == ParentId); + } + } + + public string Id { get; private set; } + public string Name { get; private set; } + public string FullName { get; private set; } + public int TestCaseCount { get; private set; } + public bool HasChildren { get; private set; } + public bool IsSuite { get; private set; } + public IEnumerable Children { get; private set; } + public ITestAdaptor Parent { get; private set; } + public int TestCaseTimeout { get; private set; } + public ITypeInfo TypeInfo { get; private set; } + public IMethodInfo Method { get; private set; } + private string[] m_ChildrenIds; + public string[] Categories { get; private set; } + public bool IsTestAssembly { get; private set; } + public RunState RunState { get; } + public string Description { get; } + public string SkipReason { get; } + public string ParentId { get; } + public string ParentFullName { get; } + public string UniqueName { get; } + public string ParentUniqueName { get; } + public int ChildIndex { get; } + public TestMode TestMode { get; private set; } + + private static string GetIndexedTestCaseName(string fullName, int index) + { + var generatedTestSuffix = " GeneratedTestCase" + index; + if (fullName.EndsWith(")")) + { + // Test names from generated TestCaseSource look like Test(TestCaseSourceType) + // This inserts a unique test case index in the name, so that it becomes Test(TestCaseSourceType GeneratedTestCase0) + return fullName.Substring(0, fullName.Length - 1) + generatedTestSuffix + fullName[fullName.Length - 1]; + } + + // In some cases there can be tests with duplicate names generated in other ways and they won't have () in their name + // We just append a suffix at the end of the name in that case + return fullName + generatedTestSuffix; + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/TestAdaptor.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/TestAdaptor.cs.meta new file mode 100644 index 0000000..273c463 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/TestAdaptor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6e0e62db88935c74288c97c907243bd0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/TestAdaptorFactory.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/TestAdaptorFactory.cs new file mode 100644 index 0000000..9c747f9 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/TestAdaptorFactory.cs @@ -0,0 +1,91 @@ +using System.Collections.Generic; +using System.Linq; +using NUnit.Framework.Interfaces; +using UnityEngine.TestRunner.NUnitExtensions; +using UnityEngine.TestRunner.TestLaunchers; + +namespace UnityEditor.TestTools.TestRunner.Api +{ + internal class TestAdaptorFactory : ITestAdaptorFactory + { + private Dictionary m_TestAdaptorCache = new Dictionary(); + private Dictionary m_TestResultAdaptorCache = new Dictionary(); + public ITestAdaptor Create(ITest test) + { + var uniqueName = test.GetUniqueName(); + if (m_TestAdaptorCache.ContainsKey(uniqueName)) + { + return m_TestAdaptorCache[uniqueName]; + } + + var adaptor = new TestAdaptor(test, test.Tests.Select(Create).ToArray()); + foreach (var child in adaptor.Children) + { + (child as TestAdaptor).SetParent(adaptor); + } + m_TestAdaptorCache[uniqueName] = adaptor; + return adaptor; + } + + public ITestAdaptor Create(RemoteTestData testData) + { + return new TestAdaptor(testData); + } + + public ITestResultAdaptor Create(ITestResult testResult) + { + var uniqueName = testResult.Test.GetUniqueName(); + if (m_TestResultAdaptorCache.ContainsKey(uniqueName)) + { + return m_TestResultAdaptorCache[uniqueName]; + } + var adaptor = new TestResultAdaptor(testResult, Create(testResult.Test), testResult.Children.Select(Create).ToArray()); + m_TestResultAdaptorCache[uniqueName] = adaptor; + return adaptor; + } + + public ITestResultAdaptor Create(RemoteTestResultData testResult, RemoteTestResultDataWithTestData allData) + { + return new TestResultAdaptor(testResult, allData); + } + + public ITestAdaptor BuildTree(RemoteTestResultDataWithTestData data) + { + var tests = data.tests.Select(remoteTestData => new TestAdaptor(remoteTestData)).ToList(); + + foreach (var test in tests) + { + test.ApplyChildren(tests); + } + + return tests.First(); + } + + public IEnumerator BuildTreeAsync(RemoteTestResultDataWithTestData data) + { + var tests = data.tests.Select(remoteTestData => new TestAdaptor(remoteTestData)).ToList(); + + for (var index = 0; index < tests.Count; index++) + { + var test = tests[index]; + test.ApplyChildren(tests); + if (index % 100 == 0) + { + yield return null; + } + } + + yield return tests.First(); + } + + public void ClearResultsCache() + { + m_TestResultAdaptorCache.Clear(); + } + + public void ClearTestsCache() + { + m_TestAdaptorCache.Clear(); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/TestAdaptorFactory.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/TestAdaptorFactory.cs.meta new file mode 100644 index 0000000..65e4da7 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/TestAdaptorFactory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d0663d520c26b7c48a4135599e66acf8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/TestMode.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/TestMode.cs new file mode 100644 index 0000000..d22b732 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/TestMode.cs @@ -0,0 +1,11 @@ +using System; + +namespace UnityEditor.TestTools.TestRunner.Api +{ + [Flags] + public enum TestMode + { + EditMode = 1 << 0, + PlayMode = 1 << 1 + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/TestMode.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/TestMode.cs.meta new file mode 100644 index 0000000..5812ce3 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/TestMode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cad095eccea17b741bc4cd264e7441cd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/TestResultAdaptor.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/TestResultAdaptor.cs new file mode 100644 index 0000000..61501ac --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/TestResultAdaptor.cs @@ -0,0 +1,87 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using NUnit.Framework.Interfaces; +using UnityEngine.TestRunner.TestLaunchers; + +namespace UnityEditor.TestTools.TestRunner.Api +{ + internal class TestResultAdaptor : ITestResultAdaptor + { + private TNode m_Node; + + internal TestResultAdaptor(ITestResult result, ITestAdaptor test, ITestResultAdaptor[] children = null) + { + Test = test; + Name = result.Name; + FullName = result.FullName; + ResultState = result.ResultState.ToString(); + TestStatus = ParseTestStatus(result.ResultState.Status); + Duration = result.Duration; + StartTime = result.StartTime; + EndTime = result.EndTime; + Message = result.Message; + StackTrace = result.StackTrace; + AssertCount = result.AssertCount; + FailCount = result.FailCount; + PassCount = result.PassCount; + SkipCount = result.SkipCount; + InconclusiveCount = result.InconclusiveCount; + HasChildren = result.HasChildren; + Output = result.Output; + Children = children; + m_Node = result.ToXml(true); + } + + internal TestResultAdaptor(RemoteTestResultData result, RemoteTestResultDataWithTestData allData) + { + Test = new TestAdaptor(allData.tests.First(t => t.id == result.testId)); + Name = result.name; + FullName = result.fullName; + ResultState = result.resultState; + TestStatus = ParseTestStatus(result.testStatus); + Duration = result.duration; + StartTime = result.startTime; + EndTime = result.endTime; + Message = result.message; + StackTrace = result.stackTrace; + AssertCount = result.assertCount; + FailCount = result.failCount; + PassCount = result.passCount; + SkipCount = result.skipCount; + InconclusiveCount = result.inconclusiveCount; + HasChildren = result.hasChildren; + Output = result.output; + Children = result.childrenIds.Select(childId => new TestResultAdaptor(allData.results.First(r => r.testId == childId), allData)).ToArray(); + m_Node = TNode.FromXml(result.xml); + } + + public ITestAdaptor Test { get; private set; } + public string Name { get; private set; } + public string FullName { get; private set; } + public string ResultState { get; private set; } + public TestStatus TestStatus { get; private set; } + public double Duration { get; private set; } + public DateTime StartTime { get; private set; } + public DateTime EndTime { get; private set; } + public string Message { get; private set; } + public string StackTrace { get; private set; } + public int AssertCount { get; private set; } + public int FailCount { get; private set; } + public int PassCount { get; private set; } + public int SkipCount { get; private set; } + public int InconclusiveCount { get; private set; } + public bool HasChildren { get; private set; } + public IEnumerable Children { get; private set; } + public string Output { get; private set; } + public TNode ToXml() + { + return m_Node; + } + + private static TestStatus ParseTestStatus(NUnit.Framework.Interfaces.TestStatus testStatus) + { + return (TestStatus)Enum.Parse(typeof(TestStatus), testStatus.ToString()); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/TestResultAdaptor.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/TestResultAdaptor.cs.meta new file mode 100644 index 0000000..aafad45 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/TestResultAdaptor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d061ada5d3169454daf54243390b5fdb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/TestRunnerApi.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/TestRunnerApi.cs new file mode 100644 index 0000000..6b14d38 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/TestRunnerApi.cs @@ -0,0 +1,120 @@ +using System; +using System.Linq; +using System.Threading; +using UnityEditor.TestTools.TestRunner.CommandLineTest; +using UnityEditor.TestTools.TestRunner.TestRun; +using UnityEngine; +using UnityEngine.TestRunner.TestLaunchers; +using UnityEngine.TestTools; +using UnityEngine.TestTools.NUnitExtensions; + +namespace UnityEditor.TestTools.TestRunner.Api +{ + public class TestRunnerApi : ScriptableObject, ITestRunnerApi + { + internal ICallbacksHolder callbacksHolder; + + private ICallbacksHolder m_CallbacksHolder + { + get + { + if (callbacksHolder == null) + { + return CallbacksHolder.instance; + } + + return callbacksHolder; + } + } + + internal Func ScheduleJob = (executionSettings) => + { + var runner = new TestJobRunner(); + return runner.RunJob(new TestJobData(executionSettings)); + }; + + public string Execute(ExecutionSettings executionSettings) + { + if (executionSettings == null) + { + throw new ArgumentNullException(nameof(executionSettings)); + } + + if ((executionSettings.filters == null || executionSettings.filters.Length == 0) && executionSettings.filter != null) + { + // Map filter (singular) to filters (plural), for backwards compatibility. + executionSettings.filters = new [] {executionSettings.filter}; + } + + if (executionSettings.targetPlatform == null && executionSettings.filters != null && + executionSettings.filters.Length > 0) + { + executionSettings.targetPlatform = executionSettings.filters[0].targetPlatform; + } + + return ScheduleJob(executionSettings); + } + + public void RegisterCallbacks(T testCallbacks, int priority = 0) where T : ICallbacks + { + if (testCallbacks == null) + { + throw new ArgumentNullException(nameof(testCallbacks)); + } + + m_CallbacksHolder.Add(testCallbacks, priority); + } + + public void UnregisterCallbacks(T testCallbacks) where T : ICallbacks + { + if (testCallbacks == null) + { + throw new ArgumentNullException(nameof(testCallbacks)); + } + + m_CallbacksHolder.Remove(testCallbacks); + } + + internal void RetrieveTestList(ExecutionSettings executionSettings, Action callback) + { + if (executionSettings == null) + { + throw new ArgumentNullException(nameof(executionSettings)); + } + + var firstFilter = executionSettings.filters?.FirstOrDefault() ?? executionSettings.filter; + RetrieveTestList(firstFilter.testMode, callback); + } + + public void RetrieveTestList(TestMode testMode, Action callback) + { + if (callback == null) + { + throw new ArgumentNullException(nameof(callback)); + } + + var platform = ParseTestMode(testMode); + var testAssemblyProvider = new EditorLoadedTestAssemblyProvider(new EditorCompilationInterfaceProxy(), new EditorAssembliesProxy()); + var testAdaptorFactory = new TestAdaptorFactory(); + var testListCache = new TestListCache(testAdaptorFactory, new RemoteTestResultDataFactory(), TestListCacheData.instance); + var testListProvider = new TestListProvider(testAssemblyProvider, new UnityTestAssemblyBuilder()); + var cachedTestListProvider = new CachingTestListProvider(testListProvider, testListCache, testAdaptorFactory); + + var job = new TestListJob(cachedTestListProvider, platform, (testRoot) => + { + callback(testRoot); + }); + job.Start(); + } + + internal static bool IsRunActive() + { + return RunData.instance.isRunning; + } + + private static TestPlatform ParseTestMode(TestMode testMode) + { + return (((testMode & TestMode.EditMode) == TestMode.EditMode) ? TestPlatform.EditMode : 0) | (((testMode & TestMode.PlayMode) == TestMode.PlayMode) ? TestPlatform.PlayMode : 0); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/TestRunnerApi.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/TestRunnerApi.cs.meta new file mode 100644 index 0000000..5bac273 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/TestRunnerApi.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 68993ba529ae04440916cb7c23bf3279 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/TestStatus.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/TestStatus.cs new file mode 100644 index 0000000..53eb81b --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/TestStatus.cs @@ -0,0 +1,10 @@ +namespace UnityEditor.TestTools.TestRunner.Api +{ + public enum TestStatus + { + Inconclusive, + Skipped, + Passed, + Failed + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/TestStatus.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/TestStatus.cs.meta new file mode 100644 index 0000000..6828582 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/Api/TestStatus.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9ec94545c5b00344c9bd8e691f15d799 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/AssemblyInfo.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/AssemblyInfo.cs new file mode 100644 index 0000000..657c29d --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/AssemblyInfo.cs @@ -0,0 +1,15 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +[assembly: AssemblyTitle("UnityEditor.TestRunner")] +[assembly: InternalsVisibleTo("Assembly-CSharp-Editor-testable")] +[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")] +[assembly: InternalsVisibleTo("Unity.PerformanceTesting.Editor")] +[assembly: InternalsVisibleTo("Unity.IntegrationTests")] +[assembly: InternalsVisibleTo("UnityEditor.TestRunner.Tests")] +[assembly: InternalsVisibleTo("Unity.TestTools.CodeCoverage.Editor")] +[assembly: InternalsVisibleTo("Unity.PackageManagerUI.Develop.Editor")] +[assembly: InternalsVisibleTo("Unity.PackageManagerUI.Develop.EditorTests")] +[assembly: InternalsVisibleTo("Unity.PackageValidationSuite.Editor")] + +[assembly: AssemblyVersion("1.0.0")] diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/AssemblyInfo.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/AssemblyInfo.cs.meta new file mode 100644 index 0000000..f2847f7 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/AssemblyInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9db19a04003fca7439552acd4de9baa1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineParser.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineParser.meta new file mode 100644 index 0000000..71f43ac --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineParser.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7602252bdb82b8d45ae3483c3a00d3e1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineParser/CommandLineOption.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineParser/CommandLineOption.cs new file mode 100644 index 0000000..e6d0cff --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineParser/CommandLineOption.cs @@ -0,0 +1,45 @@ +using System; +using System.Linq; + +namespace UnityEditor.TestRunner.CommandLineParser +{ + internal class CommandLineOption : ICommandLineOption + { + Action m_ArgAction; + + public CommandLineOption(string argName, Action action) + { + ArgName = argName; + m_ArgAction = s => action(); + } + + public CommandLineOption(string argName, Action action) + { + ArgName = argName; + m_ArgAction = action; + } + + public CommandLineOption(string argName, Action action) + { + ArgName = argName; + m_ArgAction = s => action(SplitStringToArray(s)); + } + + public string ArgName { get; private set; } + + public void ApplyValue(string value) + { + m_ArgAction(value); + } + + static string[] SplitStringToArray(string value) + { + if (string.IsNullOrEmpty(value)) + { + return null; + } + + return value.Split(';').ToArray(); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineParser/CommandLineOption.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineParser/CommandLineOption.cs.meta new file mode 100644 index 0000000..ebeabb6 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineParser/CommandLineOption.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a3529368f4cd0424a89aa51080a16b06 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineParser/CommandLineOptionSet.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineParser/CommandLineOptionSet.cs new file mode 100644 index 0000000..f67ab2f --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineParser/CommandLineOptionSet.cs @@ -0,0 +1,49 @@ +using System; + +namespace UnityEditor.TestRunner.CommandLineParser +{ + internal class CommandLineOptionSet + { + ICommandLineOption[] m_Options; + + public CommandLineOptionSet(params ICommandLineOption[] options) + { + m_Options = options; + } + + public void Parse(string[] args) + { + var i = 0; + while (i < args.Length) + { + var arg = args[i]; + if (!arg.StartsWith("-")) + { + i++; + continue; + } + + string value = null; + if (i + 1 < args.Length && !args[i + 1].StartsWith("-")) + { + value = args[i + 1]; + i++; + } + + ApplyValueToMatchingOptions(arg, value); + i++; + } + } + + private void ApplyValueToMatchingOptions(string argName, string value) + { + foreach (var option in m_Options) + { + if ("-" + option.ArgName == argName) + { + option.ApplyValue(value); + } + } + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineParser/CommandLineOptionSet.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineParser/CommandLineOptionSet.cs.meta new file mode 100644 index 0000000..ce92320 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineParser/CommandLineOptionSet.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 139c5eac101a4dc4fb3098e30c29f15e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineParser/ICommandLineOption.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineParser/ICommandLineOption.cs new file mode 100644 index 0000000..792113e --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineParser/ICommandLineOption.cs @@ -0,0 +1,8 @@ +namespace UnityEditor.TestRunner.CommandLineParser +{ + interface ICommandLineOption + { + string ArgName { get; } + void ApplyValue(string value); + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineParser/ICommandLineOption.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineParser/ICommandLineOption.cs.meta new file mode 100644 index 0000000..10bed96 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineParser/ICommandLineOption.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f445ca0c614a846449fcd8ae648c24e2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest.meta new file mode 100644 index 0000000..74153e5 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b477d1f29b65a674e9d5cdab4eb72b01 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/Executer.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/Executer.cs new file mode 100644 index 0000000..7204617 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/Executer.cs @@ -0,0 +1,134 @@ +using System; +using System.Linq; +using UnityEditor.TestRunner.TestLaunchers; +using UnityEditor.TestTools.TestRunner.Api; +using UnityEngine; + +namespace UnityEditor.TestTools.TestRunner.CommandLineTest +{ + internal class Executer + { + private ITestRunnerApi m_TestRunnerApi; + private ISettingsBuilder m_SettingsBuilder; + private Action m_LogErrorFormat; + private Action m_LogException; + private Action m_ExitEditorApplication; + private Func m_ScriptCompilationFailedCheck; + + public Executer(ITestRunnerApi testRunnerApi, ISettingsBuilder settingsBuilder, Action logErrorFormat, Action logException, Action exitEditorApplication, Func scriptCompilationFailedCheck) + { + m_TestRunnerApi = testRunnerApi; + m_SettingsBuilder = settingsBuilder; + m_LogErrorFormat = logErrorFormat; + m_LogException = logException; + m_ExitEditorApplication = exitEditorApplication; + m_ScriptCompilationFailedCheck = scriptCompilationFailedCheck; + } + + internal void InitializeAndExecuteRun(string[] commandLineArgs) + { + Api.ExecutionSettings executionSettings; + try + { + executionSettings = m_SettingsBuilder.BuildApiExecutionSettings(commandLineArgs); + if (executionSettings.targetPlatform.HasValue) + RemotePlayerLogController.instance.SetBuildTarget(executionSettings.targetPlatform.Value); + } + catch (SetupException exception) + { + HandleSetupException(exception); + return; + } + + try + { + Debug.Log("Executing tests with settings: " + ExecutionSettingsToString(executionSettings)); + m_TestRunnerApi.Execute(executionSettings); + } + catch (Exception exception) + { + m_LogException(exception); + m_ExitEditorApplication((int)ReturnCodes.RunError); + } + } + + internal ExecutionSettings BuildExecutionSettings(string[] commandLineArgs) + { + return m_SettingsBuilder.BuildExecutionSettings(commandLineArgs); + } + + internal enum ReturnCodes + { + Ok = 0, + Failed = 2, + RunError = 3, + PlatformNotFoundReturnCode = 4 + } + + internal void SetUpCallbacks(ExecutionSettings executionSettings) + { + RemotePlayerLogController.instance.SetLogsDirectory(executionSettings.DeviceLogsDirectory); + + var resultSavingCallback = ScriptableObject.CreateInstance(); + resultSavingCallback.m_ResultFilePath = executionSettings.TestResultsFile; + + var logSavingCallback = ScriptableObject.CreateInstance(); + + m_TestRunnerApi.RegisterCallbacks(resultSavingCallback); + m_TestRunnerApi.RegisterCallbacks(logSavingCallback); + m_TestRunnerApi.RegisterCallbacks(ScriptableObject.CreateInstance(), -10); + } + + internal void ExitOnCompileErrors() + { + if (m_ScriptCompilationFailedCheck()) + { + var handling = s_ExceptionHandlingMapping.First(h => h.m_ExceptionType == SetupException.ExceptionType.ScriptCompilationFailed); + m_LogErrorFormat(handling.m_Message, new object[0]); + m_ExitEditorApplication(handling.m_ReturnCode); + } + } + + void HandleSetupException(SetupException exception) + { + ExceptionHandling handling = s_ExceptionHandlingMapping.FirstOrDefault(h => h.m_ExceptionType == exception.Type) ?? new ExceptionHandling(exception.Type, "Unknown command line test run error. " + exception.Type, ReturnCodes.RunError); + m_LogErrorFormat(handling.m_Message, exception.Details); + m_ExitEditorApplication(handling.m_ReturnCode); + } + + private class ExceptionHandling + { + internal SetupException.ExceptionType m_ExceptionType; + internal string m_Message; + internal int m_ReturnCode; + public ExceptionHandling(SetupException.ExceptionType exceptionType, string message, ReturnCodes returnCode) + { + m_ExceptionType = exceptionType; + m_Message = message; + m_ReturnCode = (int)returnCode; + } + } + + static ExceptionHandling[] s_ExceptionHandlingMapping = new[] + { + new ExceptionHandling(SetupException.ExceptionType.ScriptCompilationFailed, "Scripts had compilation errors.", ReturnCodes.RunError), + new ExceptionHandling(SetupException.ExceptionType.PlatformNotFound, "Test platform not found ({0}).", ReturnCodes.PlatformNotFoundReturnCode), + new ExceptionHandling(SetupException.ExceptionType.TestSettingsFileNotFound, "Test settings file not found at {0}.", ReturnCodes.RunError) + }; + + private static string ExecutionSettingsToString(Api.ExecutionSettings executionSettings) + { + if (executionSettings == null) + { + return "none"; + } + + if (executionSettings.filters == null || executionSettings.filters.Length == 0) + { + return "no filter"; + } + + return "test mode = " + executionSettings.filters[0].testMode; + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/Executer.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/Executer.cs.meta new file mode 100644 index 0000000..c85fbe2 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/Executer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 083c6a3a5426382449369ddc12b691d8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/ExecutionSettings.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/ExecutionSettings.cs new file mode 100644 index 0000000..031e28f --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/ExecutionSettings.cs @@ -0,0 +1,11 @@ +using System; + +namespace UnityEditor.TestTools.TestRunner.CommandLineTest +{ + [Serializable] + internal class ExecutionSettings + { + public string TestResultsFile; + public string DeviceLogsDirectory; + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/ExecutionSettings.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/ExecutionSettings.cs.meta new file mode 100644 index 0000000..f846a28 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/ExecutionSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c3a75354f6ceac94ca15ca9d96593290 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/ExitCallbacks.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/ExitCallbacks.cs new file mode 100644 index 0000000..ffa636d --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/ExitCallbacks.cs @@ -0,0 +1,53 @@ +using System; +using UnityEditor.TestTools.TestRunner.Api; +using UnityEngine; + +namespace UnityEditor.TestTools.TestRunner.CommandLineTest +{ + [Serializable] + internal class ExitCallbacks : ScriptableObject, IErrorCallbacks + { + private bool m_AnyTestsExecuted; + private bool m_RunFailed; + internal static bool preventExit; + + public void RunFinished(ITestResultAdaptor testResults) + { + if (preventExit) + { + return; + } + + if (!m_AnyTestsExecuted) + { + Debug.LogFormat(LogType.Warning, LogOption.NoStacktrace, null, "No tests were executed"); + } + EditorApplication.Exit(m_RunFailed ? (int)Executer.ReturnCodes.Failed : (int)Executer.ReturnCodes.Ok); + } + + public void TestStarted(ITestAdaptor test) + { + if (!test.IsSuite) + { + m_AnyTestsExecuted = true; + } + } + + public void TestFinished(ITestResultAdaptor result) + { + if (!result.Test.IsSuite && (result.TestStatus == TestStatus.Failed)) + { + m_RunFailed = true; + } + } + + public void RunStarted(ITestAdaptor testsToRun) + { + } + + public void OnError(string message) + { + EditorApplication.Exit((int)Executer.ReturnCodes.RunError); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/ExitCallbacks.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/ExitCallbacks.cs.meta new file mode 100644 index 0000000..911c45c --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/ExitCallbacks.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1adaa8dcc4fda3d4cb4d3c8e0cb65d12 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/ISettingsBuilder.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/ISettingsBuilder.cs new file mode 100644 index 0000000..dd55e8f --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/ISettingsBuilder.cs @@ -0,0 +1,10 @@ +using UnityEditor.TestTools.TestRunner.Api; + +namespace UnityEditor.TestTools.TestRunner.CommandLineTest +{ + interface ISettingsBuilder + { + Api.ExecutionSettings BuildApiExecutionSettings(string[] commandLineArgs); + ExecutionSettings BuildExecutionSettings(string[] commandLineArgs); + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/ISettingsBuilder.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/ISettingsBuilder.cs.meta new file mode 100644 index 0000000..c8af610 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/ISettingsBuilder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8a13cbeb2099aca47bb456f49845f86c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/LogSavingCallbacks.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/LogSavingCallbacks.cs new file mode 100644 index 0000000..69e5499 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/LogSavingCallbacks.cs @@ -0,0 +1,29 @@ +using System; +using UnityEditor.TestRunner.TestLaunchers; +using UnityEditor.TestTools.TestRunner.Api; +using UnityEngine; + +namespace UnityEditor.TestTools.TestRunner.CommandLineTest +{ + [Serializable] + internal class LogSavingCallbacks : ScriptableObject, ICallbacks + { + public void RunStarted(ITestAdaptor testsToRun) + { + RemotePlayerLogController.instance.StartLogWriters(); + } + + public virtual void RunFinished(ITestResultAdaptor testResults) + { + RemotePlayerLogController.instance.StopLogWriters(); + } + + public void TestStarted(ITestAdaptor test) + { + } + + public void TestFinished(ITestResultAdaptor result) + { + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/LogSavingCallbacks.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/LogSavingCallbacks.cs.meta new file mode 100644 index 0000000..d83e631 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/LogSavingCallbacks.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8d20eedbe40f0ce41a4c4f633f225de8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/LogWriter.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/LogWriter.cs new file mode 100644 index 0000000..ba5532e --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/LogWriter.cs @@ -0,0 +1,92 @@ +using System; +using System.Collections.Generic; +using System.IO; +using UnityEditor.DeploymentTargets; +using UnityEditor.Utils; +using UnityEngine; + +namespace UnityEditor.TestTools.TestRunner.CommandLineTest +{ + internal class LogWriter : IDisposable + { + private string m_LogsDirectory; + private string m_DeviceID; + private Dictionary m_LogStreams; + private DeploymentTargetLogger m_Logger; + + internal LogWriter(string logsDirectory, string deviceID, DeploymentTargetLogger logger) + { + m_LogStreams = new Dictionary(); + m_Logger = logger; + m_LogsDirectory = logsDirectory; + m_DeviceID = deviceID; + + logger.logMessage += WriteLogToFile; + } + + private void WriteLogToFile(string id, string logLine) + { + StreamWriter logStream; + var streamExists = m_LogStreams.TryGetValue(id, out logStream); + if (!streamExists) + { + var filePath = GetLogFilePath(m_LogsDirectory, m_DeviceID, id); + logStream = CreateLogFile(filePath); + + m_LogStreams.Add(id, logStream); + } + + try + { + if (logLine != null) + logStream.WriteLine(logLine); + } + catch (Exception ex) + { + Debug.LogError($"Writing {id} log failed."); + Debug.LogException(ex); + } + } + + public void Stop() + { + m_Logger.Stop(); + foreach (var logStream in m_LogStreams) + { + logStream.Value.Close(); + } + } + + public void Dispose() + { + Stop(); + } + + private StreamWriter CreateLogFile(string path) + { + Debug.LogFormat(LogType.Log, LogOption.NoStacktrace, null, "Creating {0} device log: {1}", m_DeviceID, path); + StreamWriter streamWriter = null; + try + { + if (!Directory.Exists(path)) + Directory.CreateDirectory(Path.GetDirectoryName(path)); + + streamWriter = File.CreateText(path); + } + catch (Exception ex) + { + Debug.LogError($"Creating device log {path} file failed."); + Debug.LogException(ex); + } + + return streamWriter; + } + + private string GetLogFilePath(string lgosDirectory, string deviceID, string logID) + { + var fileName = "Device-" + deviceID + "-" + logID + ".txt"; + fileName = string.Join("_", fileName.Split(Path.GetInvalidFileNameChars())); + return Paths.Combine(lgosDirectory, fileName); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/LogWriter.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/LogWriter.cs.meta new file mode 100644 index 0000000..1828ca9 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/LogWriter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 05778dd1de4433d418793b6f3d3c18cf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/ResultsSavingCallbacks.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/ResultsSavingCallbacks.cs new file mode 100644 index 0000000..a3f184f --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/ResultsSavingCallbacks.cs @@ -0,0 +1,50 @@ +using System; +using System.IO; +using UnityEditor.TestTools.TestRunner.Api; +using UnityEditor.Utils; +using UnityEngine; + +namespace UnityEditor.TestTools.TestRunner.CommandLineTest +{ + [Serializable] + internal class ResultsSavingCallbacks : ScriptableObject, ICallbacks + { + [SerializeField] + public string m_ResultFilePath; + + public ResultsSavingCallbacks() + { + this.m_ResultFilePath = GetDefaultResultFilePath(); + } + + public void RunStarted(ITestAdaptor testsToRun) + { + } + + public virtual void RunFinished(ITestResultAdaptor testResults) + { + if (string.IsNullOrEmpty(m_ResultFilePath)) + { + m_ResultFilePath = GetDefaultResultFilePath(); + } + + var resultWriter = new ResultsWriter(); + resultWriter.WriteResultToFile(testResults, m_ResultFilePath); + } + + public void TestStarted(ITestAdaptor test) + { + } + + public void TestFinished(ITestResultAdaptor result) + { + } + + private static string GetDefaultResultFilePath() + { + var fileName = "TestResults-" + DateTime.Now.Ticks + ".xml"; + var projectPath = Directory.GetCurrentDirectory(); + return Paths.Combine(projectPath, fileName); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/ResultsSavingCallbacks.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/ResultsSavingCallbacks.cs.meta new file mode 100644 index 0000000..0c6854f --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/ResultsSavingCallbacks.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ef563c5a6ecf64d4193dc144cb7d472a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/ResultsWriter.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/ResultsWriter.cs new file mode 100644 index 0000000..ffb8af3 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/ResultsWriter.cs @@ -0,0 +1,103 @@ +using System; +using System.IO; +using System.Xml; +using NUnit.Framework.Interfaces; +using UnityEditor.TestTools.TestRunner.Api; +using UnityEngine; + +namespace UnityEditor.TestTools.TestRunner.CommandLineTest +{ + internal class ResultsWriter + { + private const string k_nUnitVersion = "3.5.0.0"; + + private const string k_TestRunNode = "test-run"; + private const string k_Id = "id"; + private const string k_Testcasecount = "testcasecount"; + private const string k_Result = "result"; + private const string k_Total = "total"; + private const string k_Passed = "passed"; + private const string k_Failed = "failed"; + private const string k_Inconclusive = "inconclusive"; + private const string k_Skipped = "skipped"; + private const string k_Asserts = "asserts"; + private const string k_EngineVersion = "engine-version"; + private const string k_ClrVersion = "clr-version"; + private const string k_StartTime = "start-time"; + private const string k_EndTime = "end-time"; + private const string k_Duration = "duration"; + + private const string k_TimeFormat = "u"; + + public void WriteResultToFile(ITestResultAdaptor result, string filePath) + { + Debug.LogFormat(LogType.Log, LogOption.NoStacktrace, null, "Saving results to: {0}", filePath); + + try + { + if (!Directory.Exists(filePath)) + { + CreateDirectory(filePath); + } + + using (var fileStream = File.CreateText(filePath)) + { + WriteResultToStream(result, fileStream); + } + } + catch (Exception ex) + { + Debug.LogError("Saving result file failed."); + Debug.LogException(ex); + } + } + + void CreateDirectory(string filePath) + { + var driectoryPath = Path.GetDirectoryName(filePath); + if (!String.IsNullOrEmpty(driectoryPath)) + { + Directory.CreateDirectory(driectoryPath); + } + } + + public void WriteResultToStream(ITestResultAdaptor result, StreamWriter streamWriter, XmlWriterSettings settings = null) + { + settings = settings ?? new XmlWriterSettings(); + settings.Indent = true; + settings.NewLineOnAttributes = false; + + using (var xmlWriter = XmlWriter.Create(streamWriter, settings)) + { + WriteResultsToXml(result, xmlWriter); + } + } + + void WriteResultsToXml(ITestResultAdaptor result, XmlWriter xmlWriter) + { + // XML format as specified at https://github.com/nunit/docs/wiki/Test-Result-XML-Format + + var testRunNode = new TNode(k_TestRunNode); + + testRunNode.AddAttribute(k_Id, "2"); + testRunNode.AddAttribute(k_Testcasecount, (result.PassCount + result.FailCount + result.SkipCount + result.InconclusiveCount).ToString()); + testRunNode.AddAttribute(k_Result, result.ResultState.ToString()); + testRunNode.AddAttribute(k_Total, (result.PassCount + result.FailCount + result.SkipCount + result.InconclusiveCount).ToString()); + testRunNode.AddAttribute(k_Passed, result.PassCount.ToString()); + testRunNode.AddAttribute(k_Failed, result.FailCount.ToString()); + testRunNode.AddAttribute(k_Inconclusive, result.InconclusiveCount.ToString()); + testRunNode.AddAttribute(k_Skipped, result.SkipCount.ToString()); + testRunNode.AddAttribute(k_Asserts, result.AssertCount.ToString()); + testRunNode.AddAttribute(k_EngineVersion, k_nUnitVersion); + testRunNode.AddAttribute(k_ClrVersion, Environment.Version.ToString()); + testRunNode.AddAttribute(k_StartTime, result.StartTime.ToString(k_TimeFormat)); + testRunNode.AddAttribute(k_EndTime, result.EndTime.ToString(k_TimeFormat)); + testRunNode.AddAttribute(k_Duration, result.Duration.ToString()); + + var resultNode = result.ToXml(); + testRunNode.ChildNodes.Add(resultNode); + + testRunNode.WriteTo(xmlWriter); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/ResultsWriter.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/ResultsWriter.cs.meta new file mode 100644 index 0000000..6ab194a --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/ResultsWriter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 29d603e0a726a9043b3503112271844a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/RunData.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/RunData.cs new file mode 100644 index 0000000..8f92198 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/RunData.cs @@ -0,0 +1,8 @@ +namespace UnityEditor.TestTools.TestRunner.CommandLineTest +{ + internal class RunData : ScriptableSingleton + { + public bool isRunning; + public ExecutionSettings executionSettings; + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/RunData.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/RunData.cs.meta new file mode 100644 index 0000000..69abd7d --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/RunData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3f8c1075884df0249b80e23a0598f9c1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/RunSettings.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/RunSettings.cs new file mode 100644 index 0000000..df00772 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/RunSettings.cs @@ -0,0 +1,29 @@ +using UnityEditor.TestTools.TestRunner.Api; + +namespace UnityEditor.TestTools.TestRunner.CommandLineTest +{ + internal class RunSettings : ITestRunSettings + { + private ITestSettings m_TestSettings; + public RunSettings(ITestSettings testSettings) + { + this.m_TestSettings = testSettings; + } + + public void Apply() + { + if (m_TestSettings != null) + { + m_TestSettings.SetupProjectParameters(); + } + } + + public void Dispose() + { + if (m_TestSettings != null) + { + m_TestSettings.Dispose(); + } + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/RunSettings.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/RunSettings.cs.meta new file mode 100644 index 0000000..6ea9afa --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/RunSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 59d3f5586b341a74c84c8f72144a4568 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/SettingsBuilder.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/SettingsBuilder.cs new file mode 100644 index 0000000..f8cee70 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/SettingsBuilder.cs @@ -0,0 +1,185 @@ +using System; +using System.IO; +using UnityEditor.TestRunner.CommandLineParser; +using UnityEditor.TestTools.TestRunner.Api; +using UnityEngine.TestTools.TestRunner.GUI; + +namespace UnityEditor.TestTools.TestRunner.CommandLineTest +{ + internal class SettingsBuilder : ISettingsBuilder + { + private ITestSettingsDeserializer m_TestSettingsDeserializer; + private Action m_LogAction; + private Action m_LogWarningAction; + private Func m_FileExistsCheck; + private Func m_ScriptCompilationFailedCheck; + public SettingsBuilder(ITestSettingsDeserializer testSettingsDeserializer, Action logAction, Action logWarningAction, Func fileExistsCheck, Func scriptCompilationFailedCheck) + { + m_LogAction = logAction; + m_LogWarningAction = logWarningAction; + m_FileExistsCheck = fileExistsCheck; + m_ScriptCompilationFailedCheck = scriptCompilationFailedCheck; + m_TestSettingsDeserializer = testSettingsDeserializer; + } + + public Api.ExecutionSettings BuildApiExecutionSettings(string[] commandLineArgs) + { + var quit = false; + string testPlatform = TestMode.EditMode.ToString(); + string[] testFilters = null; + string[] testCategories = null; + string testSettingsFilePath = null; + int testRepetitions = 1; + int? playerHeartbeatTimeout = null; + bool runSynchronously = false; + + var optionSet = new CommandLineOptionSet( + new CommandLineOption("quit", () => { quit = true; }), + new CommandLineOption("testPlatform", platform => { testPlatform = platform; }), + new CommandLineOption("editorTestsFilter", filters => { testFilters = filters; }), + new CommandLineOption("testFilter", filters => { testFilters = filters; }), + new CommandLineOption("editorTestsCategories", catagories => { testCategories = catagories; }), + new CommandLineOption("testCategory", catagories => { testCategories = catagories; }), + new CommandLineOption("testSettingsFile", settingsFilePath => { testSettingsFilePath = settingsFilePath; }), + new CommandLineOption("testRepetitions", reps => { testRepetitions = int.Parse(reps); }), + new CommandLineOption("playerHeartbeatTimeout", timeout => { playerHeartbeatTimeout = int.Parse(timeout); }), + new CommandLineOption("runSynchronously", () => { runSynchronously = true; }) + ); + optionSet.Parse(commandLineArgs); + + DisplayQuitWarningIfQuitIsGiven(quit); + + CheckForScriptCompilationErrors(); + + LogParametersForRun(testPlatform, testFilters, testCategories, testSettingsFilePath); + + var testSettings = GetTestSettings(testSettingsFilePath); + + var filter = new Filter() + { + groupNames = testFilters, + categoryNames = testCategories + }; + + var buildTarget = SetFilterAndGetBuildTarget(testPlatform, filter); + + RerunCallbackData.instance.runFilters = new []{new TestRunnerFilter() + { + categoryNames = filter.categoryNames, + groupNames = filter.groupNames, + testRepetitions = testRepetitions + }}; + + RerunCallbackData.instance.testMode = filter.testMode; + + var settings = new Api.ExecutionSettings() + { + filters = new []{filter}, + overloadTestRunSettings = new RunSettings(testSettings), + targetPlatform = buildTarget, + runSynchronously = runSynchronously + }; + + if (playerHeartbeatTimeout != null) + { + settings.playerHeartbeatTimeout = playerHeartbeatTimeout.Value; + } + + return settings; + } + + public ExecutionSettings BuildExecutionSettings(string[] commandLineArgs) + { + string resultFilePath = null; + string deviceLogsDirectory = null; + + var optionSet = new CommandLineOptionSet( + new CommandLineOption("editorTestsResultFile", filePath => { resultFilePath = filePath; }), + new CommandLineOption("testResults", filePath => { resultFilePath = filePath; }), + new CommandLineOption("deviceLogs", dirPath => { deviceLogsDirectory = dirPath; }) + ); + optionSet.Parse(commandLineArgs); + + return new ExecutionSettings() + { + TestResultsFile = resultFilePath, + DeviceLogsDirectory = deviceLogsDirectory + }; + } + + void DisplayQuitWarningIfQuitIsGiven(bool quitIsGiven) + { + if (quitIsGiven) + { + m_LogWarningAction("Running tests from command line arguments will not work when \"quit\" is specified."); + } + } + + void CheckForScriptCompilationErrors() + { + if (m_ScriptCompilationFailedCheck()) + { + throw new SetupException(SetupException.ExceptionType.ScriptCompilationFailed); + } + } + + void LogParametersForRun(string testPlatform, string[] testFilters, string[] testCategories, string testSettingsFilePath) + { + m_LogAction("Running tests for " + testPlatform); + if (testFilters != null && testFilters.Length > 0) + { + m_LogAction("With test filter: " + string.Join(", ", testFilters)); + } + if (testCategories != null && testCategories.Length > 0) + { + m_LogAction("With test categories: " + string.Join(", ", testCategories)); + } + if (!string.IsNullOrEmpty(testSettingsFilePath)) + { + m_LogAction("With test settings file: " + testSettingsFilePath); + } + } + + ITestSettings GetTestSettings(string testSettingsFilePath) + { + ITestSettings testSettings = null; + if (!string.IsNullOrEmpty(testSettingsFilePath)) + { + if (!m_FileExistsCheck(testSettingsFilePath)) + { + throw new SetupException(SetupException.ExceptionType.TestSettingsFileNotFound, testSettingsFilePath); + } + + testSettings = m_TestSettingsDeserializer.GetSettingsFromJsonFile(testSettingsFilePath); + } + return testSettings; + } + + static BuildTarget? SetFilterAndGetBuildTarget(string testPlatform, Filter filter) + { + BuildTarget? buildTarget = null; + if (testPlatform.ToLower() == "editmode") + { + filter.testMode = TestMode.EditMode; + } + else if (testPlatform.ToLower() == "playmode") + { + filter.testMode = TestMode.PlayMode; + } + else + { + try + { + buildTarget = (BuildTarget)Enum.Parse(typeof(BuildTarget), testPlatform, true); + + filter.testMode = TestMode.PlayMode; + } + catch (ArgumentException) + { + throw new SetupException(SetupException.ExceptionType.PlatformNotFound, testPlatform); + } + } + return buildTarget; + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/SettingsBuilder.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/SettingsBuilder.cs.meta new file mode 100644 index 0000000..1e322b5 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/SettingsBuilder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b7468a027a77337478e133b40b42b4f9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/SetupException.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/SetupException.cs new file mode 100644 index 0000000..2f4051b --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/SetupException.cs @@ -0,0 +1,23 @@ +using System; + +namespace UnityEditor.TestTools.TestRunner.CommandLineTest +{ + internal class SetupException : Exception + { + public ExceptionType Type { get; } + public object[] Details { get; } + + public SetupException(ExceptionType type, params object[] details) + { + Type = type; + Details = details; + } + + public enum ExceptionType + { + ScriptCompilationFailed, + PlatformNotFound, + TestSettingsFileNotFound, + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/SetupException.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/SetupException.cs.meta new file mode 100644 index 0000000..9fccc1d --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/SetupException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 63572993f2104574099a48392460b211 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/TestStarter.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/TestStarter.cs new file mode 100644 index 0000000..3ade433 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/TestStarter.cs @@ -0,0 +1,80 @@ +using System; +using System.IO; +using UnityEditor.TestRunner.CommandLineParser; +using UnityEditor.TestTools.TestRunner.Api; +using UnityEngine; + +namespace UnityEditor.TestTools.TestRunner.CommandLineTest +{ + [InitializeOnLoad] + static class TestStarter + { + static TestStarter() + { + if (!ShouldRunTests()) + { + return; + } + + if (EditorApplication.isCompiling) + { + return; + } + + executer.ExitOnCompileErrors(); + + if (RunData.instance.isRunning) + { + executer.SetUpCallbacks(RunData.instance.executionSettings); + return; + } + + EditorApplication.update += UpdateWatch; + } + + static void UpdateWatch() + { + EditorApplication.update -= UpdateWatch; + + if (RunData.instance.isRunning) + { + return; + } + + RunData.instance.isRunning = true; + var commandLineArgs = Environment.GetCommandLineArgs(); + RunData.instance.executionSettings = executer.BuildExecutionSettings(commandLineArgs); + executer.SetUpCallbacks(RunData.instance.executionSettings); + executer.InitializeAndExecuteRun(commandLineArgs); + } + + static bool ShouldRunTests() + { + var shouldRunTests = false; + var optionSet = new CommandLineOptionSet( + new CommandLineOption("runTests", () => { shouldRunTests = true; }), + new CommandLineOption("runEditorTests", () => { shouldRunTests = true; }) + ); + optionSet.Parse(Environment.GetCommandLineArgs()); + return shouldRunTests; + } + + static Executer s_Executer; + + static Executer executer + { + get + { + if (s_Executer == null) + { + Func compilationCheck = () => EditorUtility.scriptCompilationFailed; + Action actionLogger = (string msg) => { Debug.LogFormat(LogType.Log, LogOption.NoStacktrace, null, msg); }; + var apiSettingsBuilder = new SettingsBuilder(new TestSettingsDeserializer(() => new TestSettings()), actionLogger, Debug.LogWarning, File.Exists, compilationCheck); + s_Executer = new Executer(ScriptableObject.CreateInstance(), apiSettingsBuilder, Debug.LogErrorFormat, Debug.LogException, EditorApplication.Exit, compilationCheck); + } + + return s_Executer; + } + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/TestStarter.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/TestStarter.cs.meta new file mode 100644 index 0000000..45d63f5 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/CommandLineTest/TestStarter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4d616d1a494edd144b262cf6cd5e5fda +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI.meta new file mode 100644 index 0000000..6c63332 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7e609b27ad2caa14c83dd9951b6c13c6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/AssetsDatabaseHelper.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/AssetsDatabaseHelper.cs new file mode 100644 index 0000000..d4fd891 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/AssetsDatabaseHelper.cs @@ -0,0 +1,11 @@ +namespace UnityEditor.TestTools.TestRunner.GUI +{ + internal class AssetsDatabaseHelper : IAssetsDatabaseHelper + { + public void OpenAssetInItsDefaultExternalEditor(string assetPath, int line) + { + var asset = AssetDatabase.LoadMainAssetAtPath(assetPath); + AssetDatabase.OpenAsset(asset, line); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/AssetsDatabaseHelper.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/AssetsDatabaseHelper.cs.meta new file mode 100644 index 0000000..601d916 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/AssetsDatabaseHelper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 740b3785866edda4b8d1e1a05570a5f8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/GuiHelper.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/GuiHelper.cs new file mode 100644 index 0000000..3db6d32 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/GuiHelper.cs @@ -0,0 +1,101 @@ +using System; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Text.RegularExpressions; +using UnityEditor.Utils; +using UnityEngine; + +namespace UnityEditor.TestTools.TestRunner.GUI +{ + internal class GuiHelper : IGuiHelper + { + public GuiHelper(IMonoCecilHelper monoCecilHelper, IAssetsDatabaseHelper assetsDatabaseHelper) + { + MonoCecilHelper = monoCecilHelper; + AssetsDatabaseHelper = assetsDatabaseHelper; + } + + protected IMonoCecilHelper MonoCecilHelper { get; private set; } + public IAssetsDatabaseHelper AssetsDatabaseHelper { get; private set; } + + public void OpenScriptInExternalEditor(Type type, MethodInfo method) + { + var fileOpenInfo = GetFileOpenInfo(type, method); + + if (string.IsNullOrEmpty(fileOpenInfo.FilePath)) + { + Debug.LogWarning("Failed to open test method source code in external editor. Inconsistent filename and yield return operator in target method."); + + return; + } + + if (fileOpenInfo.LineNumber == 1) + { + Debug.LogWarning("Failed to get a line number for unity test method. So please find it in opened file in external editor."); + } + + AssetsDatabaseHelper.OpenAssetInItsDefaultExternalEditor(fileOpenInfo.FilePath, fileOpenInfo.LineNumber); + } + + public IFileOpenInfo GetFileOpenInfo(Type type, MethodInfo method) + { + const string fileExtension = ".cs"; + + var fileOpenInfo = MonoCecilHelper.TryGetCecilFileOpenInfo(type, method); + if (string.IsNullOrEmpty(fileOpenInfo.FilePath)) + { + var dirPath = Paths.UnifyDirectorySeparator(Application.dataPath); + var allCsFiles = Directory.GetFiles(dirPath, string.Format("*{0}", fileExtension), SearchOption.AllDirectories) + .Select(Paths.UnifyDirectorySeparator); + + var fileName = allCsFiles.FirstOrDefault(x => + x.Split(Path.DirectorySeparatorChar).Last().Equals(string.Concat(type.Name, fileExtension))); + + fileOpenInfo.FilePath = fileName ?? string.Empty; + } + + fileOpenInfo.FilePath = FilePathToAssetsRelativeAndUnified(fileOpenInfo.FilePath); + + return fileOpenInfo; + } + + public string FilePathToAssetsRelativeAndUnified(string filePath) + { + if (string.IsNullOrEmpty(filePath)) + return string.Empty; + + filePath = Paths.UnifyDirectorySeparator(filePath); + var length = Paths.UnifyDirectorySeparator(Application.dataPath).Length - "Assets".Length; + + return filePath.Substring(length); + } + + public bool OpenScriptInExternalEditor(string stacktrace) + { + if (string.IsNullOrEmpty(stacktrace)) + return false; + + var regex = new Regex("in (?.*):{1}(?[0-9]+)"); + + var matchingLines = stacktrace.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries).Where(x => regex.IsMatch(x)).ToList(); + if (!matchingLines.Any()) + return false; + + var fileOpenInfo = matchingLines + .Select(x => regex.Match(x)) + .Select(x => + new FileOpenInfo + { + FilePath = x.Groups["path"].Value, + LineNumber = int.Parse(x.Groups["line"].Value) + }) + .First(openInfo => !string.IsNullOrEmpty(openInfo.FilePath) && File.Exists(openInfo.FilePath)); + + var filePath = FilePathToAssetsRelativeAndUnified(fileOpenInfo.FilePath); + AssetsDatabaseHelper.OpenAssetInItsDefaultExternalEditor(filePath, fileOpenInfo.LineNumber); + + return true; + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/GuiHelper.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/GuiHelper.cs.meta new file mode 100644 index 0000000..7d3deeb --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/GuiHelper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d0138170d24533e47b8e6c250c6d7fbc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/IAssetsDatabaseHelper.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/IAssetsDatabaseHelper.cs new file mode 100644 index 0000000..975996b --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/IAssetsDatabaseHelper.cs @@ -0,0 +1,7 @@ +namespace UnityEditor.TestTools.TestRunner.GUI +{ + internal interface IAssetsDatabaseHelper + { + void OpenAssetInItsDefaultExternalEditor(string assetPath, int line); + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/IAssetsDatabaseHelper.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/IAssetsDatabaseHelper.cs.meta new file mode 100644 index 0000000..66259d1 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/IAssetsDatabaseHelper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 208e46d59ff6e304db0318377d20f5a1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/IGuiHelper.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/IGuiHelper.cs new file mode 100644 index 0000000..9d43397 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/IGuiHelper.cs @@ -0,0 +1,13 @@ +using System; +using System.Reflection; + +namespace UnityEditor.TestTools.TestRunner.GUI +{ + internal interface IGuiHelper + { + bool OpenScriptInExternalEditor(string stacktrace); + void OpenScriptInExternalEditor(Type type, MethodInfo method); + IFileOpenInfo GetFileOpenInfo(Type type, MethodInfo method); + string FilePathToAssetsRelativeAndUnified(string filePath); + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/IGuiHelper.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/IGuiHelper.cs.meta new file mode 100644 index 0000000..90a5490 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/IGuiHelper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fd57cf917f61bbb42b8f030436426ddd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListBuilder.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListBuilder.meta new file mode 100644 index 0000000..93d48bc --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListBuilder.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 07ea0326ed848fb4489187cb58f96113 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListBuilder/RenderingOptions.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListBuilder/RenderingOptions.cs new file mode 100644 index 0000000..495537f --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListBuilder/RenderingOptions.cs @@ -0,0 +1,12 @@ +namespace UnityEditor.TestTools.TestRunner.GUI +{ + internal class RenderingOptions + { + public string nameFilter; + public bool showSucceeded; + public bool showFailed; + public bool showIgnored; + public bool showNotRunned; + public string[] categories; + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListBuilder/RenderingOptions.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListBuilder/RenderingOptions.cs.meta new file mode 100644 index 0000000..a566ec8 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListBuilder/RenderingOptions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 87357ff0dec4ef348a295235835c6ee4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListBuilder/ResultSummarizer.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListBuilder/ResultSummarizer.cs new file mode 100644 index 0000000..c4d9ce4 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListBuilder/ResultSummarizer.cs @@ -0,0 +1,175 @@ +// **************************************************************** +// Based on nUnit 2.6.2 (http://www.nunit.org/) +// **************************************************************** + +using System; +using System.Collections.Generic; +using UnityEngine.TestTools.TestRunner.GUI; + +namespace UnityEditor.TestTools.TestRunner.GUI +{ + /// + /// Summary description for ResultSummarizer. + /// + internal class ResultSummarizer + { + private int m_ErrorCount = -1; + private int m_FailureCount; + private int m_IgnoreCount = -1; + private int m_InconclusiveCount = -1; + private int m_NotRunnable = -1; + private int m_ResultCount; + private int m_SkipCount; + private int m_SuccessCount; + private int m_TestsRun; + + private TimeSpan m_Duration = TimeSpan.FromSeconds(0); + + public ResultSummarizer(IEnumerable results) + { + foreach (var result in results) + Summarize(result); + } + + public bool success + { + get { return m_FailureCount == 0; } + } + + /// + /// Returns the number of test cases for which results + /// have been summarized. Any tests excluded by use of + /// Category or Explicit attributes are not counted. + /// + public int ResultCount + { + get { return m_ResultCount; } + } + + /// + /// Returns the number of test cases actually run, which + /// is the same as ResultCount, less any Skipped, Ignored + /// or NonRunnable tests. + /// + public int TestsRun + { + get { return m_TestsRun; } + } + + /// + /// Returns the number of tests that passed + /// + public int Passed + { + get { return m_SuccessCount; } + } + + /// + /// Returns the number of test cases that had an error. + /// + public int errors + { + get { return m_ErrorCount; } + } + + /// + /// Returns the number of test cases that failed. + /// + public int failures + { + get { return m_FailureCount; } + } + + /// + /// Returns the number of test cases that failed. + /// + public int inconclusive + { + get { return m_InconclusiveCount; } + } + + /// + /// Returns the number of test cases that were not runnable + /// due to errors in the signature of the class or method. + /// Such tests are also counted as Errors. + /// + public int notRunnable + { + get { return m_NotRunnable; } + } + + /// + /// Returns the number of test cases that were skipped. + /// + public int Skipped + { + get { return m_SkipCount; } + } + + public int ignored + { + get { return m_IgnoreCount; } + } + + public double duration + { + get { return m_Duration.TotalSeconds; } + } + + public int testsNotRun + { + get { return m_SkipCount + m_IgnoreCount + m_NotRunnable; } + } + + public void Summarize(TestRunnerResult result) + { + m_Duration += TimeSpan.FromSeconds(result.duration); + m_ResultCount++; + + if (result.resultStatus != TestRunnerResult.ResultStatus.NotRun) + { + //TODO implement missing features + // if(result.IsIgnored) + // { + // m_IgnoreCount++; + // return; + // } + + m_SkipCount++; + return; + } + + switch (result.resultStatus) + { + case TestRunnerResult.ResultStatus.Passed: + m_SuccessCount++; + m_TestsRun++; + break; + case TestRunnerResult.ResultStatus.Failed: + m_FailureCount++; + m_TestsRun++; + break; + //TODO implement missing features + // case TestResultState.Error: + // case TestResultState.Cancelled: + // m_ErrorCount++; + // m_TestsRun++; + // break; + // case TestResultState.Inconclusive: + // m_InconclusiveCount++; + // m_TestsRun++; + // break; + // case TestResultState.NotRunnable: + // m_NotRunnable++; + // // errorCount++; + // break; + // case TestResultState.Ignored: + // m_IgnoreCount++; + // break; + default: + m_SkipCount++; + break; + } + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListBuilder/ResultSummarizer.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListBuilder/ResultSummarizer.cs.meta new file mode 100644 index 0000000..197b321 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListBuilder/ResultSummarizer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 95a2914724952ef40bb590d0607fc878 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListBuilder/TestFilterSettings.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListBuilder/TestFilterSettings.cs new file mode 100644 index 0000000..faa828b --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListBuilder/TestFilterSettings.cs @@ -0,0 +1,105 @@ +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using UnityEngine.TestTools.TestRunner.GUI; + +namespace UnityEditor.TestTools.TestRunner.GUI +{ + internal class TestFilterSettings + { + public bool showSucceeded; + public bool showFailed; + public bool showIgnored; + public bool showNotRun; + + public string filterByName; + public int filterByCategory; + + private GUIContent m_SucceededBtn; + private GUIContent m_FailedBtn; + private GUIContent m_IgnoredBtn; + private GUIContent m_NotRunBtn; + + public string[] availableCategories; + + private readonly string m_PrefsKey; + + public TestFilterSettings(string prefsKey) + { + availableCategories = null; + m_PrefsKey = prefsKey; + Load(); + UpdateCounters(Enumerable.Empty()); + } + + public void Load() + { + showSucceeded = EditorPrefs.GetBool(m_PrefsKey + ".ShowSucceeded", true); + showFailed = EditorPrefs.GetBool(m_PrefsKey + ".ShowFailed", true); + showIgnored = EditorPrefs.GetBool(m_PrefsKey + ".ShowIgnored", true); + showNotRun = EditorPrefs.GetBool(m_PrefsKey + ".ShowNotRun", true); + filterByName = EditorPrefs.GetString(m_PrefsKey + ".FilterByName", string.Empty); + filterByCategory = EditorPrefs.GetInt(m_PrefsKey + ".FilterByCategory", 0); + } + + public void Save() + { + EditorPrefs.SetBool(m_PrefsKey + ".ShowSucceeded", showSucceeded); + EditorPrefs.SetBool(m_PrefsKey + ".ShowFailed", showFailed); + EditorPrefs.SetBool(m_PrefsKey + ".ShowIgnored", showIgnored); + EditorPrefs.SetBool(m_PrefsKey + ".ShowNotRun", showNotRun); + EditorPrefs.SetString(m_PrefsKey + ".FilterByName", filterByName); + EditorPrefs.SetInt(m_PrefsKey + ".FilterByCategory", filterByCategory); + } + + public void UpdateCounters(IEnumerable results) + { + var summary = new ResultSummarizer(results); + + m_SucceededBtn = new GUIContent(summary.Passed.ToString(), Icons.s_SuccessImg, "Show tests that succeeded"); + m_FailedBtn = new GUIContent((summary.errors + summary.failures + summary.inconclusive).ToString(), Icons.s_FailImg, "Show tests that failed"); + m_IgnoredBtn = new GUIContent((summary.ignored + summary.notRunnable).ToString(), Icons.s_IgnoreImg, "Show tests that are ignored"); + m_NotRunBtn = new GUIContent((summary.testsNotRun - summary.ignored - summary.notRunnable).ToString(), Icons.s_UnknownImg, "Show tests that didn't run"); + } + + public string[] GetSelectedCategories() + { + if (availableCategories == null) + return new string[0]; + + return availableCategories.Where((c, i) => (filterByCategory & (1 << i)) != 0).ToArray(); + } + + public void OnGUI() + { + EditorGUI.BeginChangeCheck(); + + filterByName = GUILayout.TextField(filterByName, "ToolbarSeachTextField", GUILayout.MinWidth(100), GUILayout.MaxWidth(250), GUILayout.ExpandWidth(true)); + if (GUILayout.Button(GUIContent.none, string.IsNullOrEmpty(filterByName) ? "ToolbarSeachCancelButtonEmpty" : "ToolbarSeachCancelButton")) + filterByName = string.Empty; + + if (availableCategories != null && availableCategories.Length > 0) + filterByCategory = EditorGUILayout.MaskField(filterByCategory, availableCategories, EditorStyles.toolbarDropDown, GUILayout.MaxWidth(90)); + + showSucceeded = GUILayout.Toggle(showSucceeded, m_SucceededBtn, EditorStyles.toolbarButton); + showFailed = GUILayout.Toggle(showFailed, m_FailedBtn, EditorStyles.toolbarButton); + showIgnored = GUILayout.Toggle(showIgnored, m_IgnoredBtn, EditorStyles.toolbarButton); + showNotRun = GUILayout.Toggle(showNotRun, m_NotRunBtn, EditorStyles.toolbarButton); + + if (EditorGUI.EndChangeCheck()) + Save(); + } + + public RenderingOptions BuildRenderingOptions() + { + var options = new RenderingOptions(); + options.showSucceeded = showSucceeded; + options.showFailed = showFailed; + options.showIgnored = showIgnored; + options.showNotRunned = showNotRun; + options.nameFilter = filterByName; + options.categories = GetSelectedCategories(); + return options; + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListBuilder/TestFilterSettings.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListBuilder/TestFilterSettings.cs.meta new file mode 100644 index 0000000..8d26c30 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListBuilder/TestFilterSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 046c3854296c5ec48bac50da6ca248ec +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListBuilder/TestTreeViewBuilder.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListBuilder/TestTreeViewBuilder.cs new file mode 100644 index 0000000..a6f53c9 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListBuilder/TestTreeViewBuilder.cs @@ -0,0 +1,111 @@ +using System.Collections.Generic; +using System.Linq; +using UnityEditor.IMGUI.Controls; +using UnityEditor.TestTools.TestRunner.Api; +using UnityEngine.TestRunner.NUnitExtensions; +using UnityEngine.TestTools.TestRunner.GUI; +using UnityEngine.TestRunner.NUnitExtensions.Filters; + +namespace UnityEditor.TestTools.TestRunner.GUI +{ + internal class TestTreeViewBuilder + { + public List results = new List(); + private readonly List m_OldTestResultList; + private readonly TestRunnerUIFilter m_UIFilter; + private readonly ITestAdaptor m_TestListRoot; + + private readonly List m_AvailableCategories = new List(); + + public string[] AvailableCategories + { + get { return m_AvailableCategories.Distinct().OrderBy(a => a).ToArray(); } + } + + public TestTreeViewBuilder(ITestAdaptor tests, List oldTestResultResults, TestRunnerUIFilter uiFilter) + { + m_AvailableCategories.Add(CategoryFilterExtended.k_DefaultCategory); + m_OldTestResultList = oldTestResultResults; + m_TestListRoot = tests; + m_UIFilter = uiFilter; + } + + public TreeViewItem BuildTreeView(TestFilterSettings settings, bool sceneBased, string sceneName) + { + var rootItem = new TreeViewItem(int.MaxValue, 0, null, "Invisible Root Item"); + ParseTestTree(0, rootItem, m_TestListRoot); + return rootItem; + } + + private bool IsFilteredOutByUIFilter(ITestAdaptor test, TestRunnerResult result) + { + if (m_UIFilter.PassedHidden && result.resultStatus == TestRunnerResult.ResultStatus.Passed) + return true; + if (m_UIFilter.FailedHidden && (result.resultStatus == TestRunnerResult.ResultStatus.Failed || result.resultStatus == TestRunnerResult.ResultStatus.Inconclusive)) + return true; + if (m_UIFilter.NotRunHidden && (result.resultStatus == TestRunnerResult.ResultStatus.NotRun || result.resultStatus == TestRunnerResult.ResultStatus.Skipped)) + return true; + if (m_UIFilter.CategoryFilter.Length > 0) + return !test.Categories.Any(category => m_UIFilter.CategoryFilter.Contains(category)); + return false; + } + + private void ParseTestTree(int depth, TreeViewItem rootItem, ITestAdaptor testElement) + { + m_AvailableCategories.AddRange(testElement.Categories); + + var testElementId = testElement.UniqueName; + if (!testElement.HasChildren) + { + var result = m_OldTestResultList.FirstOrDefault(a => a.uniqueId == testElementId); + + if (result != null && + (result.ignoredOrSkipped + || result.notRunnable + || testElement.RunState == RunState.NotRunnable + || testElement.RunState == RunState.Ignored + || testElement.RunState == RunState.Skipped + ) + ) + { + //if the test was or becomes ignored or not runnable, we recreate the result in case it has changed + result = null; + } + if (result == null) + { + result = new TestRunnerResult(testElement); + } + results.Add(result); + + var test = new TestTreeViewItem(testElement, depth, rootItem); + if (!IsFilteredOutByUIFilter(testElement, result)) + rootItem.AddChild(test); + test.SetResult(result); + return; + } + + var groupResult = m_OldTestResultList.FirstOrDefault(a => a.uniqueId == testElementId); + if (groupResult == null) + { + groupResult = new TestRunnerResult(testElement); + } + + results.Add(groupResult); + var group = new TestTreeViewItem(testElement, depth, rootItem); + group.SetResult(groupResult); + + depth++; + foreach (var child in testElement.Children) + { + ParseTestTree(depth, group, child); + } + + + if (testElement.IsTestAssembly && !testElement.HasChildren) + return; + + if (group.hasChildren) + rootItem.AddChild(group); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListBuilder/TestTreeViewBuilder.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListBuilder/TestTreeViewBuilder.cs.meta new file mode 100644 index 0000000..dbed4be --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListBuilder/TestTreeViewBuilder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e17c88b021c2a4c409b3f15b0d80ac62 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListGuiHelper.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListGuiHelper.cs new file mode 100644 index 0000000..992f161 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListGuiHelper.cs @@ -0,0 +1,135 @@ +using System; +using System.IO; +using System.Linq; +using UnityEditor.ProjectWindowCallback; +using UnityEditor.Scripting.ScriptCompilation; +using UnityEngine; + +namespace UnityEditor.TestTools.TestRunner.GUI +{ + internal class TestListGUIHelper + { + private const string kResourcesTemplatePath = "Resources/ScriptTemplates"; + private const string kAssemblyDefinitionTestTemplate = "92-Assembly Definition-NewTestAssembly.asmdef.txt"; + + private const string kAssemblyDefinitionEditModeTestTemplate = + "92-Assembly Definition-NewEditModeTestAssembly.asmdef.txt"; + + private const string kTestScriptTemplate = "83-C# Script-NewTestScript.cs.txt"; + private const string kNewTestScriptName = "NewTestScript.cs"; + private const string kNunit = "nunit.framework.dll"; + + [MenuItem("Assets/Create/Testing/Tests Assembly Folder", false, 83)] + public static void MenuItemAddFolderAndAsmDefForTesting() + { + AddFolderAndAsmDefForTesting(); + } + + [MenuItem("Assets/Create/Testing/Tests Assembly Folder", true, 83)] + public static bool MenuItemAddFolderAndAsmDefForTestingWithValidation() + { + return !SelectedFolderContainsTestAssembly(); + } + + public static void AddFolderAndAsmDefForTesting(bool isEditorOnly = false) + { + ProjectWindowUtil.CreateFolderWithTemplates("Tests", + isEditorOnly ? kAssemblyDefinitionEditModeTestTemplate : kAssemblyDefinitionTestTemplate); + } + + public static bool SelectedFolderContainsTestAssembly() + { + var theNearestCustomScriptAssembly = GetTheNearestCustomScriptAssembly(); + if (theNearestCustomScriptAssembly != null) + { + return theNearestCustomScriptAssembly.PrecompiledReferences != null && theNearestCustomScriptAssembly.PrecompiledReferences.Any(x => Path.GetFileName(x) == kNunit); + } + + return false; + } + + [MenuItem("Assets/Create/Testing/C# Test Script", false, 83)] + public static void AddTest() + { + var basePath = Path.Combine(EditorApplication.applicationContentsPath, kResourcesTemplatePath); + var destPath = Path.Combine(GetActiveFolderPath(), kNewTestScriptName); + var templatePath = Path.Combine(basePath, kTestScriptTemplate); + var icon = EditorGUIUtility.IconContent("cs Script Icon").image as Texture2D; + ProjectWindowUtil.StartNameEditingIfProjectWindowExists(0, + ScriptableObject.CreateInstance(), destPath, icon, templatePath); + + AssetDatabase.Refresh(); + } + + [MenuItem("Assets/Create/Testing/C# Test Script", true, 83)] + public static bool CanAddScriptAndItWillCompile() + { + return CanAddEditModeTestScriptAndItWillCompile() || CanAddPlayModeTestScriptAndItWillCompile(); + } + + public static bool CanAddEditModeTestScriptAndItWillCompile() + { + var theNearestCustomScriptAssembly = GetTheNearestCustomScriptAssembly(); + if (theNearestCustomScriptAssembly != null) + { + return (theNearestCustomScriptAssembly.AssemblyFlags & AssemblyFlags.EditorOnly) == + AssemblyFlags.EditorOnly; + } + + var activeFolderPath = GetActiveFolderPath(); + return activeFolderPath.ToLower().Contains("/editor"); + } + + public static bool CanAddPlayModeTestScriptAndItWillCompile() + { + if (PlayerSettings.playModeTestRunnerEnabled) + { + return true; + } + + var theNearestCustomScriptAssembly = GetTheNearestCustomScriptAssembly(); + + if (theNearestCustomScriptAssembly == null) + { + return false; + } + + var hasTestAssemblyFlag = theNearestCustomScriptAssembly.PrecompiledReferences != null && theNearestCustomScriptAssembly.PrecompiledReferences.Any(x => Path.GetFileName(x) == kNunit);; + var editorOnlyAssembly = (theNearestCustomScriptAssembly.AssemblyFlags & AssemblyFlags.EditorOnly) != 0; + + return hasTestAssemblyFlag && !editorOnlyAssembly; + } + + public static string GetActiveFolderPath() + { + var path = "Assets"; + + foreach (var obj in Selection.GetFiltered(typeof(UnityEngine.Object), SelectionMode.Assets)) + { + path = AssetDatabase.GetAssetPath(obj); + if (!string.IsNullOrEmpty(path) && File.Exists(path)) + { + path = Path.GetDirectoryName(path); + break; + } + } + return path; + } + + private static CustomScriptAssembly GetTheNearestCustomScriptAssembly() + { + CustomScriptAssembly findCustomScriptAssemblyFromScriptPath; + try + { + findCustomScriptAssemblyFromScriptPath = + EditorCompilationInterface.Instance.FindCustomScriptAssemblyFromScriptPath( + Path.Combine(GetActiveFolderPath(), "Foo.cs")); + } + catch (Exception) + { + return null; + } + return findCustomScriptAssemblyFromScriptPath; + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListGuiHelper.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListGuiHelper.cs.meta new file mode 100644 index 0000000..b60d7fe --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListGuiHelper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 97a05971510726f438153cd4987526fb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListTreeView.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListTreeView.meta new file mode 100644 index 0000000..5f5c3a1 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListTreeView.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 68cb547af0187634aad591a09c01cd5b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListTreeView/Icons.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListTreeView/Icons.cs new file mode 100644 index 0000000..706130a --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListTreeView/Icons.cs @@ -0,0 +1,24 @@ +using UnityEngine; + +namespace UnityEditor.TestTools.TestRunner.GUI +{ + internal static class Icons + { + public static readonly Texture2D s_FailImg; + public static readonly Texture2D s_IgnoreImg; + public static readonly Texture2D s_SuccessImg; + public static readonly Texture2D s_UnknownImg; + public static readonly Texture2D s_InconclusiveImg; + public static readonly Texture2D s_StopwatchImg; + + static Icons() + { + s_FailImg = EditorGUIUtility.IconContent("TestFailed").image as Texture2D; + s_IgnoreImg = EditorGUIUtility.IconContent("TestIgnored").image as Texture2D; + s_SuccessImg = EditorGUIUtility.IconContent("TestPassed").image as Texture2D; + s_UnknownImg = EditorGUIUtility.IconContent("TestNormal").image as Texture2D; + s_InconclusiveImg = EditorGUIUtility.IconContent("TestInconclusive").image as Texture2D; + s_StopwatchImg = EditorGUIUtility.IconContent("TestStopwatch").image as Texture2D; + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListTreeView/Icons.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListTreeView/Icons.cs.meta new file mode 100644 index 0000000..00f10ba --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListTreeView/Icons.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 27769e9b00b038d47aefe306a4d20bec +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListTreeView/TestListTreeViewDataSource.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListTreeView/TestListTreeViewDataSource.cs new file mode 100644 index 0000000..9e6f1b7 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListTreeView/TestListTreeViewDataSource.cs @@ -0,0 +1,99 @@ +using System.Collections.Generic; +using NUnit.Framework.Interfaces; +using UnityEditor.IMGUI.Controls; +using UnityEditor.TestTools.TestRunner.Api; +using UnityEngine.SceneManagement; +using UnityEngine.TestTools.TestRunner; +using UnityEngine.TestTools.TestRunner.GUI; + +namespace UnityEditor.TestTools.TestRunner.GUI +{ + internal class TestListTreeViewDataSource : TreeViewDataSource + { + private bool m_ExpandTreeOnCreation; + private readonly TestListGUI m_TestListGUI; + private ITestAdaptor m_RootTest; + + public TestListTreeViewDataSource(TreeViewController testListTree, TestListGUI testListGUI, ITestAdaptor rootTest) : base(testListTree) + { + showRootItem = false; + rootIsCollapsable = false; + m_TestListGUI = testListGUI; + m_RootTest = rootTest; + } + + public void UpdateRootTest(ITestAdaptor rootTest) + { + m_RootTest = rootTest; + } + + public override void FetchData() + { + var sceneName = SceneManager.GetActiveScene().name; + if (sceneName.StartsWith("InitTestScene")) + sceneName = PlaymodeTestsController.GetController().settings.originalScene; + + var testListBuilder = new TestTreeViewBuilder(m_RootTest, m_TestListGUI.newResultList, m_TestListGUI.m_TestRunnerUIFilter); + + m_RootItem = testListBuilder.BuildTreeView(null, false, sceneName); + SetExpanded(m_RootItem, true); + if (m_RootItem.hasChildren && m_RootItem.children.Count == 1) + SetExpanded(m_RootItem.children[0], true); + + if (m_ExpandTreeOnCreation) + SetExpandedWithChildren(m_RootItem, true); + + m_TestListGUI.newResultList = new List(testListBuilder.results); + m_TestListGUI.m_TestRunnerUIFilter.availableCategories = testListBuilder.AvailableCategories; + m_NeedRefreshRows = true; + } + + public override bool IsRenamingItemAllowed(TreeViewItem item) + { + return false; + } + + public void ExpandTreeOnCreation() + { + m_ExpandTreeOnCreation = true; + } + + public override bool IsExpandable(TreeViewItem item) + { + if (item is TestTreeViewItem) + return ((TestTreeViewItem)item).IsGroupNode; + return base.IsExpandable(item); + } + + protected override List Search(TreeViewItem rootItem, string search) + { + var result = new List(); + + if (rootItem.hasChildren) + { + foreach (var child in rootItem.children) + { + SearchTestTree(child, search, result); + } + } + return result; + } + + protected void SearchTestTree(TreeViewItem item, string search, IList searchResult) + { + var testItem = item as TestTreeViewItem; + if (!testItem.IsGroupNode) + { + if (testItem.FullName.ToLower().Contains(search)) + { + searchResult.Add(item); + } + } + else if (item.children != null) + { + foreach (var child in item.children) + SearchTestTree(child, search, searchResult); + } + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListTreeView/TestListTreeViewDataSource.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListTreeView/TestListTreeViewDataSource.cs.meta new file mode 100644 index 0000000..c70d7e5 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListTreeView/TestListTreeViewDataSource.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ce87c287371edde43a4b5fcfdee7b9ef +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListTreeView/TestListTreeViewGUI.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListTreeView/TestListTreeViewGUI.cs new file mode 100644 index 0000000..a45d2bb --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListTreeView/TestListTreeViewGUI.cs @@ -0,0 +1,11 @@ +using UnityEditor.IMGUI.Controls; + +namespace UnityEditor.TestTools.TestRunner.GUI +{ + internal class TestListTreeViewGUI : TreeViewGUI + { + public TestListTreeViewGUI(TreeViewController testListTree) : base(testListTree) + { + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListTreeView/TestListTreeViewGUI.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListTreeView/TestListTreeViewGUI.cs.meta new file mode 100644 index 0000000..26d2c9c --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListTreeView/TestListTreeViewGUI.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 52c907c81459f324497af504b84fd557 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListTreeView/TestTreeViewItem.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListTreeView/TestTreeViewItem.cs new file mode 100644 index 0000000..327b1fa --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListTreeView/TestTreeViewItem.cs @@ -0,0 +1,118 @@ +using System; +using System.Reflection; +using System.Text; +using UnityEditor.IMGUI.Controls; +using UnityEditor.TestTools.TestRunner.Api; +using UnityEngine.TestTools.TestRunner.GUI; + +namespace UnityEditor.TestTools.TestRunner.GUI +{ + internal sealed class TestTreeViewItem : TreeViewItem + { + public TestRunnerResult result; + internal ITestAdaptor m_Test; + + public Type type; + public MethodInfo method; + + private const int k_ResultTestMaxLength = 15000; + + public bool IsGroupNode { get { return m_Test.IsSuite; } } + + public string FullName { get { return m_Test.FullName; } } + + public TestTreeViewItem(ITestAdaptor test, int depth, TreeViewItem parent) + : base(GetId(test), depth, parent, test.Name) + { + m_Test = test; + + if (test.TypeInfo != null) + { + type = test.TypeInfo.Type; + } + if (test.Method != null) + { + method = test.Method.MethodInfo; + } + + displayName = test.Name.Replace("\n", ""); + icon = Icons.s_UnknownImg; + } + + private static int GetId(ITestAdaptor test) + { + return test.UniqueName.GetHashCode(); + } + + public void SetResult(TestRunnerResult testResult) + { + result = testResult; + result.SetResultChangedCallback(ResultUpdated); + ResultUpdated(result); + } + + public string GetResultText() + { + var durationString = String.Format("{0:0.000}", result.duration); + var sb = new StringBuilder(string.Format("{0} ({1}s)", displayName.Trim(), durationString)); + if (!string.IsNullOrEmpty(result.description)) + { + sb.AppendFormat("\n{0}", result.description); + } + if (!string.IsNullOrEmpty(result.messages)) + { + sb.Append("\n---\n"); + sb.Append(result.messages.Trim()); + } + if (!string.IsNullOrEmpty(result.stacktrace)) + { + sb.Append("\n---\n"); + sb.Append(result.stacktrace.Trim()); + } + if (!string.IsNullOrEmpty(result.output)) + { + sb.Append("\n---\n"); + sb.Append(result.output.Trim()); + } + if (sb.Length > k_ResultTestMaxLength) + { + sb.Length = k_ResultTestMaxLength; + sb.AppendFormat("...\n\n---MESSAGE TRUNCATED AT {0} CHARACTERS---", k_ResultTestMaxLength); + } + return sb.ToString().Trim(); + } + + private void ResultUpdated(TestRunnerResult testResult) + { + switch (testResult.resultStatus) + { + case TestRunnerResult.ResultStatus.Passed: + icon = Icons.s_SuccessImg; + break; + case TestRunnerResult.ResultStatus.Failed: + icon = Icons.s_FailImg; + break; + case TestRunnerResult.ResultStatus.Inconclusive: + icon = Icons.s_InconclusiveImg; + break; + case TestRunnerResult.ResultStatus.Skipped: + icon = Icons.s_IgnoreImg; + break; + default: + if (testResult.ignoredOrSkipped) + { + icon = Icons.s_IgnoreImg; + } + else if (testResult.notRunnable) + { + icon = Icons.s_FailImg; + } + else + { + icon = Icons.s_UnknownImg; + } + break; + } + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListTreeView/TestTreeViewItem.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListTreeView/TestTreeViewItem.cs.meta new file mode 100644 index 0000000..3d38673 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestListTreeView/TestTreeViewItem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ce567ddbf30368344bc7b80e20cac36e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestRunnerResult.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestRunnerResult.cs new file mode 100644 index 0000000..d6072a1 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestRunnerResult.cs @@ -0,0 +1,149 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using UnityEditor.TestTools.TestRunner.Api; +using UnityEngine.TestTools.TestRunner.GUI; + +namespace UnityEditor.TestTools.TestRunner.GUI +{ + [Serializable] + internal class TestRunnerResult : TestRunnerFilter.IClearableResult + { + public string id; + public string uniqueId; + public string name; + public string fullName; + public ResultStatus resultStatus = ResultStatus.NotRun; + public float duration; + public string messages; + public string output; + public string stacktrace; + public bool notRunnable; + public bool ignoredOrSkipped; + public string description; + public bool isSuite; + public List categories; + public string parentId; + public string parentUniqueId; + + //This field is suppose to mark results from before domain reload + //Such result is outdated because the code might haev changed + //This field will get reset every time a domain reload happens + [NonSerialized] + public bool notOutdated; + + protected Action m_OnResultUpdate; + + internal TestRunnerResult(ITestAdaptor test) + { + id = test.Id; + uniqueId = test.UniqueName; + + fullName = test.FullName; + name = test.Name; + description = test.Description; + isSuite = test.IsSuite; + + ignoredOrSkipped = test.RunState == RunState.Ignored || test.RunState == RunState.Skipped; + notRunnable = test.RunState == RunState.NotRunnable; + + if (ignoredOrSkipped) + { + messages = test.SkipReason; + } + if (notRunnable) + { + resultStatus = ResultStatus.Failed; + messages = test.SkipReason; + } + categories = test.Categories.ToList(); + parentId = test.ParentId; + parentUniqueId = test.ParentUniqueName; + } + + internal TestRunnerResult(ITestResultAdaptor testResult) : this(testResult.Test) + { + notOutdated = true; + + messages = testResult.Message; + output = testResult.Output; + stacktrace = testResult.StackTrace; + duration = (float)testResult.Duration; + if (testResult.Test.IsSuite && testResult.ResultState == "Ignored") + { + resultStatus = ResultStatus.Passed; + } + else + { + resultStatus = ParseNUnitResultStatus(testResult.TestStatus); + } + } + + public void Update(TestRunnerResult result) + { + if (ReferenceEquals(result, null)) + return; + resultStatus = result.resultStatus; + duration = result.duration; + messages = result.messages; + output = result.output; + stacktrace = result.stacktrace; + ignoredOrSkipped = result.ignoredOrSkipped; + notRunnable = result.notRunnable; + description = result.description; + notOutdated = result.notOutdated; + if (m_OnResultUpdate != null) + m_OnResultUpdate(this); + } + + public void SetResultChangedCallback(Action resultUpdated) + { + m_OnResultUpdate = resultUpdated; + } + + [Serializable] + internal enum ResultStatus + { + NotRun, + Passed, + Failed, + Inconclusive, + Skipped + } + + private static ResultStatus ParseNUnitResultStatus(TestStatus status) + { + switch (status) + { + case TestStatus.Passed: + return ResultStatus.Passed; + case TestStatus.Failed: + return ResultStatus.Failed; + case TestStatus.Inconclusive: + return ResultStatus.Inconclusive; + case TestStatus.Skipped: + return ResultStatus.Skipped; + default: + return ResultStatus.NotRun; + } + } + + public override string ToString() + { + return string.Format("{0} ({1})", name, fullName); + } + + public string Id { get { return uniqueId; } } + public string FullName { get { return fullName; } } + public string ParentId { get { return parentUniqueId; } } + public bool IsSuite { get { return isSuite; } } + public List Categories { get { return categories; } } + + public void Clear() + { + resultStatus = ResultStatus.NotRun; + if (m_OnResultUpdate != null) + m_OnResultUpdate(this); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestRunnerResult.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestRunnerResult.cs.meta new file mode 100644 index 0000000..034a196 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestRunnerResult.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a04a45bbed9e1714f9902fc9443669b9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestRunnerUIFilter.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestRunnerUIFilter.cs new file mode 100644 index 0000000..2694c7f --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestRunnerUIFilter.cs @@ -0,0 +1,178 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using UnityEngine.TestTools.TestRunner.GUI; + +namespace UnityEditor.TestTools.TestRunner.GUI +{ + [Serializable] + internal class TestRunnerUIFilter + { + private int m_PassedCount; + private int m_FailedCount; + private int m_NotRunCount; + private int m_InconclusiveCount; + private int m_SkippedCount; + + public int PassedCount { get { return m_PassedCount; } } + public int FailedCount { get { return m_FailedCount + m_InconclusiveCount; } } + public int NotRunCount { get { return m_NotRunCount + m_SkippedCount; } } + + [SerializeField] + public bool PassedHidden; + [SerializeField] + public bool FailedHidden; + [SerializeField] + public bool NotRunHidden; + + [SerializeField] + private string m_SearchString; + [SerializeField] + private int selectedCategoryMask; + + public string[] availableCategories = new string[0]; + + + private GUIContent m_SucceededBtn; + private GUIContent m_FailedBtn; + private GUIContent m_NotRunBtn; + + public Action RebuildTestList; + public Action SearchStringChanged; + public Action SearchStringCleared; + public bool IsFiltering + { + get + { + return !string.IsNullOrEmpty(m_SearchString) || PassedHidden || FailedHidden || NotRunHidden || + selectedCategoryMask != 0; + } + } + + public string[] CategoryFilter + { + get + { + var list = new List(); + for (int i = 0; i < availableCategories.Length; i++) + { + if ((selectedCategoryMask & (1 << i)) != 0) + { + list.Add(availableCategories[i]); + } + } + return list.ToArray(); + } + } + + public void UpdateCounters(List resultList) + { + m_PassedCount = m_FailedCount = m_NotRunCount = m_InconclusiveCount = m_SkippedCount = 0; + foreach (var result in resultList) + { + if (result.isSuite) + continue; + switch (result.resultStatus) + { + case TestRunnerResult.ResultStatus.Passed: + m_PassedCount++; + break; + case TestRunnerResult.ResultStatus.Failed: + m_FailedCount++; + break; + case TestRunnerResult.ResultStatus.Inconclusive: + m_InconclusiveCount++; + break; + case TestRunnerResult.ResultStatus.Skipped: + m_SkippedCount++; + break; + case TestRunnerResult.ResultStatus.NotRun: + default: + m_NotRunCount++; + break; + } + } + + var succeededTooltip = string.Format("Show tests that succeeded\n{0} succeeded", m_PassedCount); + m_SucceededBtn = new GUIContent(PassedCount.ToString(), Icons.s_SuccessImg, succeededTooltip); + var failedTooltip = string.Format("Show tests that failed\n{0} failed\n{1} inconclusive", m_FailedCount, m_InconclusiveCount); + m_FailedBtn = new GUIContent(FailedCount.ToString(), Icons.s_FailImg, failedTooltip); + var notRunTooltip = string.Format("Show tests that didn't run\n{0} didn't run\n{1} skipped or ignored", m_NotRunCount, m_SkippedCount); + m_NotRunBtn = new GUIContent(NotRunCount.ToString(), Icons.s_UnknownImg, notRunTooltip); + } + + public void Draw() + { + EditorGUI.BeginChangeCheck(); + if (m_SearchString == null) + { + m_SearchString = ""; + } + m_SearchString = EditorGUILayout.ToolbarSearchField(m_SearchString); + if (EditorGUI.EndChangeCheck() && SearchStringChanged != null) + { + SearchStringChanged(m_SearchString); + if (String.IsNullOrEmpty(m_SearchString)) + SearchStringCleared(); + } + + if (availableCategories != null && availableCategories.Any()) + { + EditorGUI.BeginChangeCheck(); + selectedCategoryMask = EditorGUILayout.MaskField(selectedCategoryMask, availableCategories, EditorStyles.toolbarDropDown, GUILayout.MaxWidth(150)); + if (EditorGUI.EndChangeCheck() && RebuildTestList != null) + { + RebuildTestList(); + } + } + else + { + EditorGUILayout.Popup(0, new[] { "" }, EditorStyles.toolbarDropDown, GUILayout.MaxWidth(150)); + } + + EditorGUI.BeginChangeCheck(); + if (m_SucceededBtn != null) + { + PassedHidden = !GUILayout.Toggle(!PassedHidden, m_SucceededBtn, EditorStyles.toolbarButton, GUILayout.MaxWidth(GetMaxWidth(PassedCount))); + } + if (m_FailedBtn != null) + { + FailedHidden = !GUILayout.Toggle(!FailedHidden, m_FailedBtn, EditorStyles.toolbarButton, GUILayout.MaxWidth(GetMaxWidth(FailedCount))); + } + if (m_NotRunBtn != null) + { + NotRunHidden = !GUILayout.Toggle(!NotRunHidden, m_NotRunBtn, EditorStyles.toolbarButton, GUILayout.MaxWidth(GetMaxWidth(NotRunCount))); + } + + if (EditorGUI.EndChangeCheck() && RebuildTestList != null) + { + RebuildTestList(); + } + } + + private static int GetMaxWidth(int count) + { + if (count < 10) + return 33; + return count < 100 ? 40 : 47; + } + + public void Clear() + { + PassedHidden = false; + FailedHidden = false; + NotRunHidden = false; + selectedCategoryMask = 0; + m_SearchString = ""; + if (SearchStringChanged != null) + { + SearchStringChanged(m_SearchString); + } + if (SearchStringCleared != null) + { + SearchStringCleared(); + } + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestRunnerUIFilter.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestRunnerUIFilter.cs.meta new file mode 100644 index 0000000..5842615 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/TestRunnerUIFilter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 15f870c6975ad6449b5b52514b90dc2b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/Views.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/Views.meta new file mode 100644 index 0000000..83fac52 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/Views.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c5535d742ea2e4941850b421f9c70a1f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/Views/EditModeTestListGUI.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/Views/EditModeTestListGUI.cs new file mode 100644 index 0000000..f630569 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/Views/EditModeTestListGUI.cs @@ -0,0 +1,93 @@ +using System; +using System.Linq; +using UnityEditor.TestTools.TestRunner.Api; +using UnityEngine; +using UnityEngine.TestTools; +using UnityEngine.TestTools.TestRunner.GUI; + +namespace UnityEditor.TestTools.TestRunner.GUI +{ + [Serializable] + internal class EditModeTestListGUI : TestListGUI + { + public override TestMode TestMode + { + get { return TestMode.EditMode; } + } + + public override void RenderNoTestsInfo() + { + if (!TestListGUIHelper.SelectedFolderContainsTestAssembly()) + { + var noTestText = "No tests to show"; + + if (!PlayerSettings.playModeTestRunnerEnabled) + { + const string testsArePulledFromCustomAssemblies = + "EditMode tests can be in Editor only Assemblies, either in the editor special folder or Editor only Assembly Definitions that references the \"nunit.framework.dll\" Assembly Reference or any of the Assembly Definition References \"UnityEngine.TestRunner\" or \"UnityEditor.TestRunner\".."; + noTestText += Environment.NewLine + testsArePulledFromCustomAssemblies; + } + + EditorGUILayout.HelpBox(noTestText, MessageType.Info); + if (GUILayout.Button("Create EditMode Test Assembly Folder")) + { + TestListGUIHelper.AddFolderAndAsmDefForTesting(isEditorOnly: true); + } + } + + if (!TestListGUIHelper.CanAddEditModeTestScriptAndItWillCompile()) + { + UnityEngine.GUI.enabled = false; + EditorGUILayout.HelpBox("EditMode test scripts can only be created in editor test assemblies.", MessageType.Warning); + } + if (GUILayout.Button("Create Test Script in current folder")) + { + TestListGUIHelper.AddTest(); + } + UnityEngine.GUI.enabled = true; + } + + public override void PrintHeadPanel() + { + base.PrintHeadPanel(); + DrawFilters(); + } + + protected override void RunTests(params TestRunnerFilter[] filters) + { + if (EditorUtility.scriptCompilationFailed) + { + Debug.LogError("Fix compilation issues before running tests"); + return; + } + + foreach (var filter in filters) + { + filter.ClearResults(newResultList.OfType().ToList()); + } + + RerunCallbackData.instance.runFilters = filters; + RerunCallbackData.instance.testMode = TestMode.EditMode; + + var testRunnerApi = ScriptableObject.CreateInstance(); + testRunnerApi.Execute(new ExecutionSettings() + { + filters = filters.Select(filter => new Filter() + { + assemblyNames = filter.assemblyNames, + categoryNames = filter.categoryNames, + groupNames = filter.groupNames, + testMode = TestMode, + testNames = filter.testNames + }).ToArray() + }); + } + + public override TestPlatform TestPlatform { get { return TestPlatform.EditMode; } } + + protected override bool IsBusy() + { + return TestRunnerApi.IsRunActive() || EditorApplication.isCompiling || EditorApplication.isPlaying; + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/Views/EditModeTestListGUI.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/Views/EditModeTestListGUI.cs.meta new file mode 100644 index 0000000..93ff4f1 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/Views/EditModeTestListGUI.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0336a32a79bfaed43a3fd2d88b91e974 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/Views/PlayModeTestListGUI.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/Views/PlayModeTestListGUI.cs new file mode 100644 index 0000000..43ae464 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/Views/PlayModeTestListGUI.cs @@ -0,0 +1,111 @@ +using System; +using System.Linq; +using UnityEditor.SceneManagement; +using UnityEditor.TestTools.TestRunner.Api; +using UnityEngine; +using UnityEngine.TestTools; +using UnityEngine.TestTools.TestRunner.GUI; + +namespace UnityEditor.TestTools.TestRunner.GUI +{ + [Serializable] + internal class PlayModeTestListGUI : TestListGUI + { + public override TestMode TestMode + { + get { return TestMode.PlayMode; } + } + public override void PrintHeadPanel() + { + EditorGUILayout.BeginHorizontal(GUILayout.ExpandHeight(false)); + base.PrintHeadPanel(); + var runButtonText = EditorUserBuildSettings.installInBuildFolder ? "Export project" : "Run all in player"; + if (GUILayout.Button($"{runButtonText} ({EditorUserBuildSettings.activeBuildTarget})", EditorStyles.toolbarButton)) + { + RunTestsInPlayer(); + } + EditorGUILayout.EndHorizontal(); + DrawFilters(); + EditorGUILayout.BeginHorizontal(GUILayout.ExpandHeight(false)); + EditorGUILayout.EndHorizontal(); + } + + public override void RenderNoTestsInfo() + { + if (!TestListGUIHelper.SelectedFolderContainsTestAssembly()) + { + var noTestText = "No tests to show"; + if (!PlayerSettings.playModeTestRunnerEnabled) + { + const string testsArePulledFromCustomAssemblues = "Test Assemblies are defined by Assembly Definitions that references the \"nunit.framework.dll\" Assembly Reference or the Assembly Definition Reference \"UnityEngine.TestRunner\"."; + const string infoTextAboutTestsInAllAssemblies = + "To have tests in all assemblies enable it in the Test Runner window context menu"; + noTestText += Environment.NewLine + testsArePulledFromCustomAssemblues + Environment.NewLine + + infoTextAboutTestsInAllAssemblies; + } + + EditorGUILayout.HelpBox(noTestText, MessageType.Info); + if (GUILayout.Button("Create PlayMode Test Assembly Folder")) + { + TestListGUIHelper.AddFolderAndAsmDefForTesting(); + } + } + + if (!TestListGUIHelper.CanAddPlayModeTestScriptAndItWillCompile()) + { + UnityEngine.GUI.enabled = false; + EditorGUILayout.HelpBox("PlayMode test scripts can only be created in non editor test assemblies.", MessageType.Warning); + } + if (GUILayout.Button("Create Test Script in current folder")) + { + TestListGUIHelper.AddTest(); + } + UnityEngine.GUI.enabled = true; + } + + protected override void RunTests(TestRunnerFilter[] filters) + { + foreach (var filter in filters) + { + filter.ClearResults(newResultList.OfType().ToList()); + } + + RerunCallbackData.instance.runFilters = filters; + RerunCallbackData.instance.testMode = TestMode.PlayMode; + + var testRunnerApi = ScriptableObject.CreateInstance(); + testRunnerApi.Execute(new ExecutionSettings() + { + filters = filters.Select(filter => new Filter() + { + assemblyNames = filter.assemblyNames, + categoryNames = filter.categoryNames, + groupNames = filter.groupNames, + testMode = TestMode, + testNames = filter.testNames + }).ToArray() + }); + } + + protected void RunTestsInPlayer() + { + var testRunnerApi = ScriptableObject.CreateInstance(); + testRunnerApi.Execute(new ExecutionSettings() + { + filters = new [] { new Filter() + { + testMode = TestMode, + }}, + targetPlatform = EditorUserBuildSettings.activeBuildTarget + }); + GUIUtility.ExitGUI(); + } + + public override TestPlatform TestPlatform { get { return TestPlatform.PlayMode; } } + + protected override bool IsBusy() + { + return TestRunnerApi.IsRunActive() || PlaymodeLauncher.IsRunning || EditorApplication.isCompiling || EditorApplication.isPlaying; + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/Views/PlayModeTestListGUI.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/Views/PlayModeTestListGUI.cs.meta new file mode 100644 index 0000000..191caab --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/Views/PlayModeTestListGUI.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c3efd39f2cfb43a4c830d4fd5689900f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/Views/TestListGUIBase.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/Views/TestListGUIBase.cs new file mode 100644 index 0000000..0855a01 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/Views/TestListGUIBase.cs @@ -0,0 +1,525 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text.RegularExpressions; +using UnityEditor.IMGUI.Controls; +using UnityEditor.TestTools.TestRunner.Api; +using UnityEngine; +using UnityEngine.TestTools.TestRunner.GUI; +using UnityEngine.TestTools; + +namespace UnityEditor.TestTools.TestRunner.GUI +{ + internal abstract class TestListGUI + { + private static readonly GUIContent s_GUIRunSelectedTests = EditorGUIUtility.TrTextContent("Run Selected", "Run selected test(s)"); + private static readonly GUIContent s_GUIRunAllTests = EditorGUIUtility.TrTextContent("Run All", "Run all tests"); + private static readonly GUIContent s_GUIRerunFailedTests = EditorGUIUtility.TrTextContent("Rerun Failed", "Rerun all failed tests"); + private static readonly GUIContent s_GUIRun = EditorGUIUtility.TrTextContent("Run"); + private static readonly GUIContent s_GUIRunUntilFailed = EditorGUIUtility.TrTextContent("Run Until Failed"); + private static readonly GUIContent s_GUIRun100Times = EditorGUIUtility.TrTextContent("Run 100 times"); + private static readonly GUIContent s_GUIOpenTest = EditorGUIUtility.TrTextContent("Open source code"); + private static readonly GUIContent s_GUIOpenErrorLine = EditorGUIUtility.TrTextContent("Open error line"); + private static readonly GUIContent s_GUIClearResults = EditorGUIUtility.TrTextContent("Clear Results", "Clear all test results"); + + [SerializeField] + protected TestRunnerWindow m_Window; + [SerializeField] + public List newResultList = new List(); + [SerializeField] + private string m_ResultText; + [SerializeField] + private string m_ResultStacktrace; + + private TreeViewController m_TestListTree; + [SerializeField] + internal TreeViewState m_TestListState; + [SerializeField] + internal TestRunnerUIFilter m_TestRunnerUIFilter = new TestRunnerUIFilter(); + + private Vector2 m_TestInfoScroll, m_TestListScroll; + private string m_PreviousProjectPath; + private List m_QueuedResults = new List(); + + protected TestListGUI() + { + MonoCecilHelper = new MonoCecilHelper(); + AssetsDatabaseHelper = new AssetsDatabaseHelper(); + + GuiHelper = new GuiHelper(MonoCecilHelper, AssetsDatabaseHelper); + } + + protected IMonoCecilHelper MonoCecilHelper { get; private set; } + protected IAssetsDatabaseHelper AssetsDatabaseHelper { get; private set; } + protected IGuiHelper GuiHelper { get; private set; } + + public abstract TestMode TestMode { get; } + + public virtual void PrintHeadPanel() + { + EditorGUILayout.BeginHorizontal(EditorStyles.toolbar); + using (new EditorGUI.DisabledScope(IsBusy())) + { + if (GUILayout.Button(s_GUIRunAllTests, EditorStyles.toolbarButton)) + { + var filter = new TestRunnerFilter {categoryNames = m_TestRunnerUIFilter.CategoryFilter}; + RunTests(filter); + GUIUtility.ExitGUI(); + } + } + using (new EditorGUI.DisabledScope(m_TestListTree == null || !m_TestListTree.HasSelection() || IsBusy())) + { + if (GUILayout.Button(s_GUIRunSelectedTests, EditorStyles.toolbarButton)) + { + RunTests(GetSelectedTestsAsFilter(m_TestListTree.GetSelection())); + GUIUtility.ExitGUI(); + } + } + using (new EditorGUI.DisabledScope(m_TestRunnerUIFilter.FailedCount == 0 || IsBusy())) + { + if (GUILayout.Button(s_GUIRerunFailedTests, EditorStyles.toolbarButton)) + { + var failedTestnames = new List(); + foreach (var result in newResultList) + { + if (result.isSuite) + continue; + if (result.resultStatus == TestRunnerResult.ResultStatus.Failed || + result.resultStatus == TestRunnerResult.ResultStatus.Inconclusive) + failedTestnames.Add(result.fullName); + } + RunTests(new TestRunnerFilter() {testNames = failedTestnames.ToArray(), categoryNames = m_TestRunnerUIFilter.CategoryFilter}); + GUIUtility.ExitGUI(); + } + } + using (new EditorGUI.DisabledScope(IsBusy())) + { + if (GUILayout.Button(s_GUIClearResults, EditorStyles.toolbarButton)) + { + foreach (var result in newResultList) + { + result.Clear(); + } + m_TestRunnerUIFilter.UpdateCounters(newResultList); + GUIUtility.ExitGUI(); + } + } + GUILayout.FlexibleSpace(); + EditorGUILayout.EndHorizontal(); + } + + protected void DrawFilters() + { + EditorGUILayout.BeginHorizontal(EditorStyles.toolbar); + m_TestRunnerUIFilter.Draw(); + EditorGUILayout.EndHorizontal(); + } + + public bool HasTreeData() + { + return m_TestListTree != null; + } + + public virtual void RenderTestList() + { + if (m_TestListTree == null) + { + GUILayout.Label("Loading..."); + return; + } + + m_TestListScroll = EditorGUILayout.BeginScrollView(m_TestListScroll, + GUILayout.ExpandWidth(true), + GUILayout.MaxWidth(2000)); + + if (m_TestListTree.data.root == null || m_TestListTree.data.rowCount == 0 || (!m_TestListTree.isSearching && !m_TestListTree.data.GetItem(0).hasChildren)) + { + if (m_TestRunnerUIFilter.IsFiltering) + { + if (GUILayout.Button("Clear filters")) + { + m_TestRunnerUIFilter.Clear(); + m_TestListTree.ReloadData(); + m_Window.Repaint(); + } + } + RenderNoTestsInfo(); + } + else + { + var treeRect = EditorGUILayout.GetControlRect(GUILayout.ExpandHeight(true), GUILayout.ExpandWidth(true)); + var treeViewKeyboardControlId = GUIUtility.GetControlID(FocusType.Keyboard); + + m_TestListTree.OnGUI(treeRect, treeViewKeyboardControlId); + } + + EditorGUILayout.EndScrollView(); + } + + public virtual void RenderNoTestsInfo() + { + EditorGUILayout.HelpBox("No tests to show", MessageType.Info); + } + + public void RenderDetails() + { + m_TestInfoScroll = EditorGUILayout.BeginScrollView(m_TestInfoScroll); + var resultTextSize = TestRunnerWindow.Styles.info.CalcSize(new GUIContent(m_ResultText)); + EditorGUILayout.SelectableLabel(m_ResultText, TestRunnerWindow.Styles.info, + GUILayout.ExpandHeight(true), + GUILayout.ExpandWidth(true), + GUILayout.MinWidth(resultTextSize.x), + GUILayout.MinHeight(resultTextSize.y)); + EditorGUILayout.EndScrollView(); + } + + public void Reload() + { + if (m_TestListTree != null) + { + m_TestListTree.ReloadData(); + UpdateQueuedResults(); + } + } + + public void Repaint() + { + if (m_TestListTree == null || m_TestListTree.data.root == null) + { + return; + } + + m_TestListTree.Repaint(); + if (m_TestListTree.data.rowCount == 0) + m_TestListTree.SetSelection(new int[0], false); + TestSelectionCallback(m_TestListState.selectedIDs.ToArray()); + } + + public void Init(TestRunnerWindow window, ITestAdaptor rootTest) + { + if (m_Window == null) + { + m_Window = window; + } + + if (m_TestListTree == null) + { + if (m_TestListState == null) + { + m_TestListState = new TreeViewState(); + } + if (m_TestListTree == null) + m_TestListTree = new TreeViewController(m_Window, m_TestListState); + + m_TestListTree.deselectOnUnhandledMouseDown = false; + + m_TestListTree.selectionChangedCallback += TestSelectionCallback; + m_TestListTree.itemDoubleClickedCallback += TestDoubleClickCallback; + m_TestListTree.contextClickItemCallback += TestContextClickCallback; + + var testListTreeViewDataSource = new TestListTreeViewDataSource(m_TestListTree, this, rootTest); + + if (!newResultList.Any()) + testListTreeViewDataSource.ExpandTreeOnCreation(); + + m_TestListTree.Init(new Rect(), + testListTreeViewDataSource, + new TestListTreeViewGUI(m_TestListTree), + null); + } + + EditorApplication.update += RepaintIfProjectPathChanged; + + m_TestRunnerUIFilter.UpdateCounters(newResultList); + m_TestRunnerUIFilter.RebuildTestList = () => m_TestListTree.ReloadData(); + m_TestRunnerUIFilter.SearchStringChanged = s => m_TestListTree.searchString = s; + m_TestRunnerUIFilter.SearchStringCleared = () => FrameSelection(); + } + + public void UpdateResult(TestRunnerResult result) + { + if (!HasTreeData()) + { + m_QueuedResults.Add(result); + return; + } + + if (newResultList.All(x => x.uniqueId != result.uniqueId)) + { + return; + } + + var testRunnerResult = newResultList.FirstOrDefault(x => x.uniqueId == result.uniqueId); + if (testRunnerResult != null) + { + testRunnerResult.Update(result); + } + + Repaint(); + m_Window.Repaint(); + } + + public void UpdateTestTree(ITestAdaptor test) + { + if (!HasTreeData()) + { + return; + } + + (m_TestListTree.data as TestListTreeViewDataSource).UpdateRootTest(test); + + m_TestListTree.ReloadData(); + Repaint(); + m_Window.Repaint(); + } + + private void UpdateQueuedResults() + { + foreach (var testRunnerResult in m_QueuedResults) + { + var existingResult = newResultList.FirstOrDefault(x => x.uniqueId == testRunnerResult.uniqueId); + if (existingResult != null) + { + existingResult.Update(testRunnerResult); + } + } + m_QueuedResults.Clear(); + TestSelectionCallback(m_TestListState.selectedIDs.ToArray()); + Repaint(); + m_Window.Repaint(); + } + + internal void TestSelectionCallback(int[] selected) + { + if (m_TestListTree != null && selected.Length == 1) + { + if (m_TestListTree != null) + { + var node = m_TestListTree.FindItem(selected[0]); + if (node is TestTreeViewItem) + { + var test = node as TestTreeViewItem; + m_ResultText = test.GetResultText(); + m_ResultStacktrace = test.result.stacktrace; + } + } + } + else if (selected.Length == 0) + { + m_ResultText = ""; + } + } + + protected virtual void TestDoubleClickCallback(int id) + { + if (IsBusy()) + return; + + RunTests(GetSelectedTestsAsFilter(new List { id })); + GUIUtility.ExitGUI(); + } + + protected virtual void RunTests(params TestRunnerFilter[] filters) + { + throw new NotImplementedException(); + } + + protected virtual void TestContextClickCallback(int id) + { + if (id == 0) + return; + + var m = new GenericMenu(); + var testFilters = GetSelectedTestsAsFilter(m_TestListState.selectedIDs); + var multilineSelection = m_TestListState.selectedIDs.Count > 1; + + if (!multilineSelection) + { + var testNode = GetSelectedTest(); + var isNotSuite = !testNode.IsGroupNode; + if (isNotSuite) + { + if (!string.IsNullOrEmpty(m_ResultStacktrace)) + { + m.AddItem(s_GUIOpenErrorLine, + false, + data => + { + if (!GuiHelper.OpenScriptInExternalEditor(m_ResultStacktrace)) + { + GuiHelper.OpenScriptInExternalEditor(testNode.type, testNode.method); + } + }, + ""); + } + + m.AddItem(s_GUIOpenTest, + false, + data => GuiHelper.OpenScriptInExternalEditor(testNode.type, testNode.method), + ""); + m.AddSeparator(""); + } + } + + if (!IsBusy()) + { + m.AddItem(multilineSelection ? s_GUIRunSelectedTests : s_GUIRun, + false, + data => RunTests(testFilters), + ""); + + if (EditorPrefs.GetBool("DeveloperMode", false)) + { + m.AddItem(multilineSelection ? s_GUIRunSelectedTests : s_GUIRunUntilFailed, + false, + data => + { + foreach (var filter in testFilters) + { + filter.testRepetitions = int.MaxValue; + } + + RunTests(testFilters); + }, + ""); + + m.AddItem(multilineSelection ? s_GUIRunSelectedTests : s_GUIRun100Times, + false, + data => + { + foreach (var filter in testFilters) + { + filter.testRepetitions = 100; + } + + RunTests(testFilters); + }, + ""); + } + } + else + m.AddDisabledItem(multilineSelection ? s_GUIRunSelectedTests : s_GUIRun, false); + + m.ShowAsContext(); + } + + private TestRunnerFilter[] GetSelectedTestsAsFilter(IEnumerable selectedIDs) + { + var namesToRun = new List(); + var exactNamesToRun = new List(); + var assembliesToRun = new List(); + foreach (var lineId in selectedIDs) + { + var line = m_TestListTree.FindItem(lineId); + if (line is TestTreeViewItem) + { + var testLine = line as TestTreeViewItem; + if (testLine.IsGroupNode && !testLine.FullName.Contains("+")) + { + if (testLine.parent != null && testLine.parent.displayName == "Invisible Root Item") + { + //Root node selected. Use an empty TestRunnerFilter to run every test + return new[] {new TestRunnerFilter()}; + } + + if (testLine.FullName.EndsWith(".dll", StringComparison.OrdinalIgnoreCase)) + assembliesToRun.Add(TestRunnerFilter.AssemblyNameFromPath(testLine.FullName)); + else + namesToRun.Add(string.Format("^{0}$", Regex.Escape(testLine.FullName))); + } + else + exactNamesToRun.Add(testLine.FullName); + } + } + + var filters = new List(); + + if (assembliesToRun.Count > 0) + { + filters.Add(new TestRunnerFilter() + { + assemblyNames = assembliesToRun.ToArray() + }); + } + + if (namesToRun.Count > 0) + { + filters.Add(new TestRunnerFilter() + { + groupNames = namesToRun.ToArray() + }); + } + + if (exactNamesToRun.Count > 0) + { + filters.Add(new TestRunnerFilter() + { + testNames = exactNamesToRun.ToArray() + }); + } + + if (filters.Count == 0) + { + filters.Add(new TestRunnerFilter()); + } + + var categories = m_TestRunnerUIFilter.CategoryFilter.ToArray(); + if (categories.Length > 0) + { + foreach (var filter in filters) + { + filter.categoryNames = categories; + } + } + + return filters.ToArray(); + } + + private TestTreeViewItem GetSelectedTest() + { + foreach (var lineId in m_TestListState.selectedIDs) + { + var line = m_TestListTree.FindItem(lineId); + if (line is TestTreeViewItem) + { + return line as TestTreeViewItem; + } + } + return null; + } + + private void FrameSelection() + { + if (m_TestListTree.HasSelection()) + { + var firstClickedID = m_TestListState.selectedIDs.First() == m_TestListState.lastClickedID ? m_TestListState.selectedIDs.Last() : m_TestListState.selectedIDs.First(); + m_TestListTree.Frame(firstClickedID, true, false); + } + } + + public abstract TestPlatform TestPlatform { get; } + + public void RebuildUIFilter() + { + m_TestRunnerUIFilter.UpdateCounters(newResultList); + if (m_TestRunnerUIFilter.IsFiltering) + { + m_TestListTree.ReloadData(); + } + } + + public void RepaintIfProjectPathChanged() + { + var path = TestListGUIHelper.GetActiveFolderPath(); + if (path != m_PreviousProjectPath) + { + m_PreviousProjectPath = path; + TestRunnerWindow.s_Instance.Repaint(); + } + + EditorApplication.update -= RepaintIfProjectPathChanged; + } + + protected abstract bool IsBusy(); + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/Views/TestListGUIBase.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/Views/TestListGUIBase.cs.meta new file mode 100644 index 0000000..f45c6ec --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/GUI/Views/TestListGUIBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b8abb41ceb6f62c45a00197ae59224c1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension.meta new file mode 100644 index 0000000..0b2f3ee --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3f9202a39620f51418046c7754f215f0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/Attributes.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/Attributes.meta new file mode 100644 index 0000000..585e7ee --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/Attributes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 96c503bf059df984c86eecf572370347 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/Attributes/AssetPipelineIgnore.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/Attributes/AssetPipelineIgnore.cs new file mode 100644 index 0000000..d1d579f --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/Attributes/AssetPipelineIgnore.cs @@ -0,0 +1,63 @@ +using System; +using NUnit.Framework; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; + +namespace UnityEditor.TestTools +{ + /// + /// Ignore attributes dedicated to Asset Import Pipeline backend version handling. + /// + internal static class AssetPipelineIgnore + { + internal enum AssetPipelineBackend + { + V1, + V2 + } + + /// + /// Ignore the test when running with the legacy Asset Import Pipeline V1 backend. + /// + internal class IgnoreInV1 : AssetPipelineIgnoreAttribute + { + public IgnoreInV1(string ignoreReason) : base(AssetPipelineBackend.V1, ignoreReason) {} + } + + /// + /// Ignore the test when running with the latest Asset Import Pipeline V2 backend. + /// + internal class IgnoreInV2 : AssetPipelineIgnoreAttribute + { + public IgnoreInV2(string ignoreReason) : base(AssetPipelineBackend.V2, ignoreReason) {} + } + + [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Class | AttributeTargets.Method)] + internal class AssetPipelineIgnoreAttribute : NUnitAttribute, IApplyToTest + { + readonly string m_IgnoreReason; + readonly AssetPipelineBackend m_IgnoredBackend; + static readonly AssetPipelineBackend k_ActiveBackend = AssetDatabase.IsV2Enabled() + ? AssetPipelineBackend.V2 + : AssetPipelineBackend.V1; + + static string ActiveBackendName = Enum.GetName(typeof(AssetPipelineBackend), k_ActiveBackend); + + public AssetPipelineIgnoreAttribute(AssetPipelineBackend backend, string ignoreReason) + { + m_IgnoredBackend = backend; + m_IgnoreReason = ignoreReason; + } + + public void ApplyToTest(Test test) + { + if (k_ActiveBackend == m_IgnoredBackend) + { + test.RunState = RunState.Ignored; + var skipReason = string.Format("Not supported by asset pipeline {0} backend {1}", ActiveBackendName, m_IgnoreReason); + test.Properties.Add(PropertyNames.SkipReason, skipReason); + } + } + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/Attributes/AssetPipelineIgnore.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/Attributes/AssetPipelineIgnore.cs.meta new file mode 100644 index 0000000..3d9d352 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/Attributes/AssetPipelineIgnore.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b88caca58e05ee74486d86fb404c48e2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/Attributes/ITestPlayerBuildModifier.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/Attributes/ITestPlayerBuildModifier.cs new file mode 100644 index 0000000..99d7515 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/Attributes/ITestPlayerBuildModifier.cs @@ -0,0 +1,7 @@ +namespace UnityEditor.TestTools +{ + public interface ITestPlayerBuildModifier + { + BuildPlayerOptions ModifyOptions(BuildPlayerOptions playerOptions); + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/Attributes/ITestPlayerBuildModifier.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/Attributes/ITestPlayerBuildModifier.cs.meta new file mode 100644 index 0000000..b491f6b --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/Attributes/ITestPlayerBuildModifier.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6d2f47eae5f447748892c46848956d5f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/Attributes/TestPlayerBuildModifierAttribute.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/Attributes/TestPlayerBuildModifierAttribute.cs new file mode 100644 index 0000000..bcf7c24 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/Attributes/TestPlayerBuildModifierAttribute.cs @@ -0,0 +1,25 @@ +using System; + +namespace UnityEditor.TestTools +{ + [AttributeUsage(AttributeTargets.Assembly)] + public class TestPlayerBuildModifierAttribute : Attribute + { + private Type m_Type; + public TestPlayerBuildModifierAttribute(Type type) + { + var interfaceType = typeof(ITestPlayerBuildModifier); + if (!interfaceType.IsAssignableFrom(type)) + { + throw new ArgumentException(string.Format("Type provided to {0} does not implement {1}", this.GetType().Name, interfaceType.Name)); + } + m_Type = type; + } + + internal ITestPlayerBuildModifier ConstructModifier() + { + return Activator.CreateInstance(m_Type) as ITestPlayerBuildModifier; + } + } +} + diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/Attributes/TestPlayerBuildModifierAttribute.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/Attributes/TestPlayerBuildModifierAttribute.cs.meta new file mode 100644 index 0000000..6020add --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/Attributes/TestPlayerBuildModifierAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dd57b1176859fc84e93586103d3b5f73 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/TestRunnerStateSerializer.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/TestRunnerStateSerializer.cs new file mode 100644 index 0000000..351e622 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/TestRunnerStateSerializer.cs @@ -0,0 +1,162 @@ +using System; +using System.Reflection; +using System.Text; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.TestRunner.NUnitExtensions.Runner; +using UnityEngine.TestTools.NUnitExtensions; +using UnityEngine.TestTools.Logging; + +namespace UnityEditor.TestTools.TestRunner +{ + [Serializable] + internal class TestRunnerStateSerializer : IStateSerializer + { + private const BindingFlags Flags = BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.FlattenHierarchy; + + [SerializeField] + private HideFlags m_OriginalHideFlags; + + [SerializeField] + private bool m_ShouldRestore; + + [SerializeField] + private string m_TestObjectTypeName; + + [SerializeField] + private ScriptableObject m_TestObject; + + [SerializeField] + private string m_TestObjectTxt; + + [SerializeField] + private long StartTicks; + + [SerializeField] + private double StartTimeOA; + + [SerializeField] + private string output; + + [SerializeField] + private LogMatch[] m_ExpectedLogs; + + public bool ShouldRestore() + { + return m_ShouldRestore; + } + + public void SaveContext() + { + var currentContext = UnityTestExecutionContext.CurrentContext; + + if (currentContext.TestObject != null) + { + m_TestObjectTypeName = currentContext.TestObject.GetType().AssemblyQualifiedName; + m_TestObject = null; + m_TestObjectTxt = null; + if (currentContext.TestObject is ScriptableObject) + { + m_TestObject = currentContext.TestObject as ScriptableObject; + m_OriginalHideFlags = m_TestObject.hideFlags; + m_TestObject.hideFlags |= HideFlags.DontSave; + } + else + { + m_TestObjectTxt = JsonUtility.ToJson(currentContext.TestObject); + } + } + + output = currentContext.CurrentResult.Output; + StartTicks = currentContext.StartTicks; + StartTimeOA = currentContext.StartTime.ToOADate(); + if (LogScope.HasCurrentLogScope()) + { + m_ExpectedLogs = LogScope.Current.ExpectedLogs.ToArray(); + } + + m_ShouldRestore = true; + } + + public void RestoreContext() + { + var currentContext = UnityTestExecutionContext.CurrentContext; + + var outputProp = currentContext.CurrentResult.GetType().BaseType.GetField("_output", Flags); + (outputProp.GetValue(currentContext.CurrentResult) as StringBuilder).Append(output); + + currentContext.StartTicks = StartTicks; + currentContext.StartTime = DateTime.FromOADate(StartTimeOA); + if (LogScope.HasCurrentLogScope()) + { + LogScope.Current.ExpectedLogs = new Queue(m_ExpectedLogs); + } + + m_ShouldRestore = false; + } + + public bool CanRestoreFromScriptableObject(Type requestedType) + { + if (m_TestObject == null) + { + return false; + } + return m_TestObjectTypeName == requestedType.AssemblyQualifiedName; + } + + public ScriptableObject RestoreScriptableObjectInstance() + { + if (m_TestObject == null) + { + Debug.LogError("No object to restore"); + return null; + } + EditorApplication.playModeStateChanged += OnPlayModeStateChanged; + var temp = m_TestObject; + m_TestObject = null; + m_TestObjectTypeName = null; + return temp; + } + + public bool CanRestoreFromJson(Type requestedType) + { + if (string.IsNullOrEmpty(m_TestObjectTxt)) + { + return false; + } + return m_TestObjectTypeName == requestedType.AssemblyQualifiedName; + } + + public void RestoreClassFromJson(ref object instance) + { + if (string.IsNullOrEmpty(m_TestObjectTxt)) + { + Debug.LogWarning("No JSON representation to restore"); + return; + } + JsonUtility.FromJsonOverwrite(m_TestObjectTxt, instance); + m_TestObjectTxt = null; + m_TestObjectTypeName = null; + } + + private void OnPlayModeStateChanged(PlayModeStateChange state) + { + if (m_TestObject == null) + { + EditorApplication.playModeStateChanged -= OnPlayModeStateChanged; + return; + } + + //We set the DontSave flag here because the ScriptableObject would be nulled right before entering EditMode + if (state == PlayModeStateChange.ExitingPlayMode) + { + m_TestObject.hideFlags |= HideFlags.DontSave; + } + else if (state == PlayModeStateChange.EnteredEditMode) + { + m_TestObject.hideFlags = m_OriginalHideFlags; + EditorApplication.playModeStateChanged -= OnPlayModeStateChanged; + } + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/TestRunnerStateSerializer.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/TestRunnerStateSerializer.cs.meta new file mode 100644 index 0000000..94495c1 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/NUnitExtension/TestRunnerStateSerializer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 124533853216377448d786fd7c725701 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/RequireApiProfileAttribute.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/RequireApiProfileAttribute.cs new file mode 100644 index 0000000..090f218 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/RequireApiProfileAttribute.cs @@ -0,0 +1,32 @@ +using System; +using System.Linq; +using NUnit.Framework; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; + +namespace UnityEditor.TestTools +{ + [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Class | AttributeTargets.Method)] + internal class RequireApiProfileAttribute : NUnitAttribute, IApplyToTest + { + public ApiCompatibilityLevel[] apiProfiles { get; private set; } + + public RequireApiProfileAttribute(params ApiCompatibilityLevel[] apiProfiles) + { + this.apiProfiles = apiProfiles; + } + + void IApplyToTest.ApplyToTest(Test test) + { + test.Properties.Add(PropertyNames.Category, string.Format("ApiProfile({0})", string.Join(", ", apiProfiles.Select(p => p.ToString()).OrderBy(p => p).ToArray()))); + ApiCompatibilityLevel testProfile = PlayerSettings.GetApiCompatibilityLevel(EditorUserBuildSettings.activeBuildTargetGroup); + + if (!apiProfiles.Contains(testProfile)) + { + string skipReason = "Skipping test as it requires a compatible api profile set: " + string.Join(", ", apiProfiles.Select(p => p.ToString()).ToArray()); + test.RunState = RunState.Skipped; + test.Properties.Add(PropertyNames.SkipReason, skipReason); + } + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/RequireApiProfileAttribute.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/RequireApiProfileAttribute.cs.meta new file mode 100644 index 0000000..736c1f5 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/RequireApiProfileAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a667f6654ad7a9548b8c8e68b51c8895 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/RequirePlatformSupportAttribute.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/RequirePlatformSupportAttribute.cs new file mode 100644 index 0000000..972b19f --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/RequirePlatformSupportAttribute.cs @@ -0,0 +1,33 @@ +using System; +using System.Linq; +using NUnit.Framework; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; + +namespace UnityEditor.TestTools +{ + [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Class | AttributeTargets.Method)] + public class RequirePlatformSupportAttribute : NUnitAttribute, IApplyToTest + { + public RequirePlatformSupportAttribute(params BuildTarget[] platforms) + { + this.platforms = platforms; + } + + public BuildTarget[] platforms { get; private set; } + + void IApplyToTest.ApplyToTest(Test test) + { + test.Properties.Add(PropertyNames.Category, string.Format("RequirePlatformSupport({0})", string.Join(", ", platforms.Select(p => p.ToString()).OrderBy(p => p).ToArray()))); + + if (!platforms.All(p => BuildPipeline.IsBuildTargetSupported(BuildTargetGroup.Unknown, p))) + { + var missingPlatforms = platforms.Where(p => !BuildPipeline.IsBuildTargetSupported(BuildTargetGroup.Unknown, p)).Select(p => p.ToString()).ToArray(); + string skipReason = "Test cannot be run as it requires support for the following platforms to be installed: " + string.Join(", ", missingPlatforms); + + test.RunState = RunState.Skipped; + test.Properties.Add(PropertyNames.SkipReason, skipReason); + } + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/RequirePlatformSupportAttribute.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/RequirePlatformSupportAttribute.cs.meta new file mode 100644 index 0000000..2780461 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/RequirePlatformSupportAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d2146428d3f1ad54eb7326c9a44b3284 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestBuildAssemblyFilter.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestBuildAssemblyFilter.cs new file mode 100644 index 0000000..a8dd54a --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestBuildAssemblyFilter.cs @@ -0,0 +1,22 @@ +using System.Linq; +using UnityEditor.Build; + +namespace UnityEditor.TestRunner +{ + // This class is invoked from native, during build + internal class TestBuildAssemblyFilter : IFilterBuildAssemblies + { + private const string nunitAssemblyName = "nunit.framework"; + private const string unityTestRunnerAssemblyName = "UnityEngine.TestRunner"; + + public int callbackOrder { get; } + public string[] OnFilterAssemblies(BuildOptions buildOptions, string[] assemblies) + { + if ((buildOptions & BuildOptions.IncludeTestAssemblies) == BuildOptions.IncludeTestAssemblies || PlayerSettings.playModeTestRunnerEnabled) + { + return assemblies; + } + return assemblies.Where(x => !x.Contains(nunitAssemblyName) && !x.Contains(unityTestRunnerAssemblyName)).ToArray(); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestBuildAssemblyFilter.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestBuildAssemblyFilter.cs.meta new file mode 100644 index 0000000..e4df710 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestBuildAssemblyFilter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3411e19edd44cfd46b548b058c3bc36c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers.meta new file mode 100644 index 0000000..fbf047b --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d64d92e4f04a13e4b99ea8d48e9e8ae9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/AttributeFinderBase.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/AttributeFinderBase.cs new file mode 100644 index 0000000..c1690a2 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/AttributeFinderBase.cs @@ -0,0 +1,104 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using NUnit.Framework.Interfaces; +using UnityEngine; +using UnityEngine.TestTools; + +namespace UnityEditor.TestTools.TestRunner +{ + internal abstract class AttributeFinderBase : IAttributeFinder + { + public abstract IEnumerable Search(ITest tests, ITestFilter filter, RuntimePlatform testTargetPlatform); + } + + internal interface IAttributeFinder + { + IEnumerable Search(ITest tests, ITestFilter filter, RuntimePlatform testTargetPlatform); + } + + internal abstract class AttributeFinderBase : AttributeFinderBase where T2 : Attribute + { + private readonly Func m_TypeSelector; + protected AttributeFinderBase(Func typeSelector) + { + m_TypeSelector = typeSelector; + } + + public override IEnumerable Search(ITest tests, ITestFilter filter, RuntimePlatform testTargetPlatform) + { + var selectedTests = new List(); + GetMatchingTests(tests, filter, ref selectedTests, testTargetPlatform); + + var result = new List(); + result.AddRange(GetTypesFromPrebuildAttributes(selectedTests)); + result.AddRange(GetTypesFromInterface(selectedTests, testTargetPlatform)); + + return result.Distinct(); + } + + private static void GetMatchingTests(ITest tests, ITestFilter filter, ref List resultList, RuntimePlatform testTargetPlatform) + { + foreach (var test in tests.Tests) + { + if (IsTestEnabledOnPlatform(test, testTargetPlatform)) + { + if (test.IsSuite) + { + GetMatchingTests(test, filter, ref resultList, testTargetPlatform); + } + else + { + if (filter.Pass(test)) + resultList.Add(test); + } + } + } + } + + private static bool IsTestEnabledOnPlatform(ITest test, RuntimePlatform testTargetPlatform) + { + if (test.Method == null) + { + return true; + } + + var attributesFromMethods = test.Method.GetCustomAttributes(true).Select(attribute => attribute); + var attributesFromTypes = test.Method.TypeInfo.GetCustomAttributes(true).Select(attribute => attribute); + + if (!attributesFromMethods.All(a => a.IsPlatformSupported(testTargetPlatform))) + { + return false; + } + + if (!attributesFromTypes.All(a => a.IsPlatformSupported(testTargetPlatform))) + { + return false; + } + + return true; + } + + private IEnumerable GetTypesFromPrebuildAttributes(IEnumerable tests) + { + var allAssemblies = AppDomain.CurrentDomain.GetAssemblies(); + allAssemblies = allAssemblies.Where(x => x.GetReferencedAssemblies().Any(z => z.Name == "UnityEditor.TestRunner")).ToArray(); + var attributesFromAssemblies = allAssemblies.SelectMany(assembly => assembly.GetCustomAttributes(typeof(T2), true).OfType()); + var attributesFromMethods = tests.SelectMany(t => t.Method.GetCustomAttributes(true).Select(attribute => attribute)); + var attributesFromTypes = tests.SelectMany(t => t.Method.TypeInfo.GetCustomAttributes(true).Select(attribute => attribute)); + + var result = new List(); + result.AddRange(attributesFromAssemblies); + result.AddRange(attributesFromMethods); + result.AddRange(attributesFromTypes); + + return result.Select(m_TypeSelector).Where(type => type != null); + } + + private static IEnumerable GetTypesFromInterface(IEnumerable selectedTests, RuntimePlatform testTargetPlatform) + { + var typesWithInterfaces = selectedTests.Where(t => typeof(T1).IsAssignableFrom(t.Method.TypeInfo.Type) && IsTestEnabledOnPlatform(t, testTargetPlatform)); + return typesWithInterfaces.Select(t => t.Method.TypeInfo.Type); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/AttributeFinderBase.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/AttributeFinderBase.cs.meta new file mode 100644 index 0000000..7348ffb --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/AttributeFinderBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5d4de3d4682a8d641907cc75e4fb950e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/EditModeLauncher.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/EditModeLauncher.cs new file mode 100644 index 0000000..f630de6 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/EditModeLauncher.cs @@ -0,0 +1,160 @@ +using System; +using System.Collections.Generic; +using NUnit.Framework.Interfaces; +using UnityEditor.SceneManagement; +using UnityEditor.TestTools.TestRunner.Api; +using UnityEngine; +using UnityEngine.SceneManagement; +using UnityEngine.TestRunner.Utils; +using UnityEngine.TestTools; +using UnityEngine.TestTools.TestRunner; +using UnityEngine.TestTools.TestRunner.GUI; + +namespace UnityEditor.TestTools.TestRunner +{ + internal class EditModeLauncher : TestLauncherBase + { + public static bool IsRunning; + internal readonly EditModeRunner m_EditModeRunner; + public bool launchedOutsideApi; + + // provided for backward compatibility with Rider UnitTesting prior to Rider package v.1.1.1 + public EditModeLauncher(TestRunnerFilter filter, TestPlatform platform) + { + launchedOutsideApi = true; + var apiFilter = new[] + { + new Filter() + { + testMode = TestMode.EditMode, + testNames = filter.testNames, + categoryNames = filter.categoryNames, + groupNames = filter.groupNames, + assemblyNames = filter.assemblyNames + } + }; + + ScriptableObject.CreateInstance().Execute(new ExecutionSettings(apiFilter)); + } + + public EditModeLauncher(Filter[] filters, TestPlatform platform, bool runSynchronously) + { + m_EditModeRunner = ScriptableObject.CreateInstance(); + m_EditModeRunner.UnityTestAssemblyRunnerFactory = new UnityTestAssemblyRunnerFactory(); + m_EditModeRunner.Init(filters, platform, runSynchronously); + } + + public override void Run() + { + if (launchedOutsideApi) + { + // Do not use the launcher, as it will be relaunched trough the api. See ctor. + return; + } + + IsRunning = true; + + SceneSetup[] previousSceneSetup; + if (!OpenNewScene(out previousSceneSetup)) + return; + + var callback = AddEventHandler(); + callback.previousSceneSetup = previousSceneSetup; + callback.runner = m_EditModeRunner; + AddEventHandler(); + + m_EditModeRunner.Run(); + AddEventHandler(); + AddEventHandler(); + + if (m_EditModeRunner.RunningSynchronously) + m_EditModeRunner.CompleteSynchronously(); + } + + private static bool OpenNewScene(out SceneSetup[] previousSceneSetup) + { + previousSceneSetup = null; + + var sceneCount = SceneManager.sceneCount; + + var scene = SceneManager.GetSceneAt(0); + var isSceneNotPersisted = string.IsNullOrEmpty(scene.path); + + if (sceneCount == 1 && isSceneNotPersisted) + { + EditorSceneManager.NewScene(NewSceneSetup.DefaultGameObjects, NewSceneMode.Single); + return true; + } + RemoveUntitledScenes(); + + // In case the user chose not to save the dirty scenes we reload them + ReloadUnsavedDirtyScene(); + + previousSceneSetup = EditorSceneManager.GetSceneManagerSetup(); + + scene = EditorSceneManager.NewScene(NewSceneSetup.EmptyScene, NewSceneMode.Additive); + SceneManager.SetActiveScene(scene); + + return true; + } + + private static void ReloadUnsavedDirtyScene() + { + for (var i = 0; i < SceneManager.sceneCount; i++) + { + var scene = SceneManager.GetSceneAt(i); + var isSceneNotPersisted = string.IsNullOrEmpty(scene.path); + var isSceneDirty = scene.isDirty; + if (isSceneNotPersisted && isSceneDirty) + { + EditorSceneManager.ReloadScene(scene); + } + } + } + + private static void RemoveUntitledScenes() + { + int sceneCount = SceneManager.sceneCount; + + var scenesToClose = new List(); + for (var i = 0; i < sceneCount; i++) + { + var scene = SceneManager.GetSceneAt(i); + var isSceneNotPersisted = string.IsNullOrEmpty(scene.path); + if (isSceneNotPersisted) + { + scenesToClose.Add(scene); + } + } + foreach (Scene scene in scenesToClose) + { + EditorSceneManager.CloseScene(scene, true); + } + } + + public class BackgroundListener : ScriptableObject, ITestRunnerListener + { + public void RunStarted(ITest testsToRun) + { + } + + public void RunFinished(ITestResult testResults) + { + IsRunning = false; + } + + public void TestStarted(ITest test) + { + } + + public void TestFinished(ITestResult result) + { + } + } + + public T AddEventHandler() where T : ScriptableObject, ITestRunnerListener + { + return m_EditModeRunner.AddEventHandler(); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/EditModeLauncher.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/EditModeLauncher.cs.meta new file mode 100644 index 0000000..b319430 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/EditModeLauncher.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ac68f5ae37c8957468562b8da42f9984 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/EditModeLauncherContextSettings.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/EditModeLauncherContextSettings.cs new file mode 100644 index 0000000..fd94982 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/EditModeLauncherContextSettings.cs @@ -0,0 +1,31 @@ +using System; +using UnityEngine; + +namespace UnityEditor.TestTools.TestRunner +{ + internal class EditModeLauncherContextSettings : IDisposable + { + private bool m_RunInBackground; + + public EditModeLauncherContextSettings() + { + SetupProjectParameters(); + } + + public void Dispose() + { + CleanupProjectParameters(); + } + + private void SetupProjectParameters() + { + m_RunInBackground = Application.runInBackground; + Application.runInBackground = true; + } + + private void CleanupProjectParameters() + { + Application.runInBackground = m_RunInBackground; + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/EditModeLauncherContextSettings.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/EditModeLauncherContextSettings.cs.meta new file mode 100644 index 0000000..280623c --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/EditModeLauncherContextSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a582090813554df479fb9ca03e9857d3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup.meta new file mode 100644 index 0000000..9daf884 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ebc4d20cc106cea49b1df1153f0b3b5e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/AndroidPlatformSetup.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/AndroidPlatformSetup.cs new file mode 100644 index 0000000..39fcc60 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/AndroidPlatformSetup.cs @@ -0,0 +1,66 @@ +using System; +using UnityEngine; +using System.Net; + +namespace UnityEditor.TestTools.TestRunner +{ + internal class AndroidPlatformSetup : IPlatformSetup + { + private string m_oldApplicationIdentifier; + private string m_oldDeviceSocketAddress; + [SerializeField] + private bool m_Stripping; + + public void Setup() + { + m_oldApplicationIdentifier = PlayerSettings.GetApplicationIdentifier(BuildTargetGroup.Android); + PlayerSettings.SetApplicationIdentifier(BuildTargetGroup.Android, "com.UnityTestRunner.UnityTestRunner"); + + m_oldDeviceSocketAddress = EditorUserBuildSettings.androidDeviceSocketAddress; + var androidDeviceConnection = Environment.GetEnvironmentVariable("ANDROID_DEVICE_CONNECTION"); + EditorUserBuildSettings.waitForPlayerConnection = true; + if (androidDeviceConnection != null) + { + EditorUserBuildSettings.androidDeviceSocketAddress = androidDeviceConnection; + } + m_Stripping = PlayerSettings.stripEngineCode; + PlayerSettings.stripEngineCode = false; + } + + public void PostBuildAction() + { + PlayerSettings.stripEngineCode = m_Stripping; + } + + public void PostSuccessfulBuildAction() + { + } + + public void PostSuccessfulLaunchAction() + { + var connectionResult = -1; + var maxTryCount = 10; + var tryCount = maxTryCount; + while (tryCount-- > 0 && connectionResult == -1) + { + connectionResult = EditorConnectionInternal.ConnectPlayerProxy(IPAddress.Loopback.ToString(), 34999); + if (EditorUtility.DisplayCancelableProgressBar("Editor Connection", "Connecting to the player", + 1 - ((float)tryCount / maxTryCount))) + { + EditorUtility.ClearProgressBar(); + throw new TestLaunchFailedException(); + } + } + EditorUtility.ClearProgressBar(); + if (connectionResult == -1) + throw new TestLaunchFailedException( + "Timed out trying to connect to the player. Player failed to launch or crashed soon after launching"); + } + + public void CleanUp() + { + EditorUserBuildSettings.androidDeviceSocketAddress = m_oldDeviceSocketAddress; + PlayerSettings.SetApplicationIdentifier(BuildTargetGroup.Android, m_oldApplicationIdentifier); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/AndroidPlatformSetup.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/AndroidPlatformSetup.cs.meta new file mode 100644 index 0000000..6c897f2 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/AndroidPlatformSetup.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 961642509dec50b44a293d26240140ec +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/ApplePlatformSetup.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/ApplePlatformSetup.cs new file mode 100644 index 0000000..1d1b074 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/ApplePlatformSetup.cs @@ -0,0 +1,42 @@ +using System; +using System.Diagnostics; +using UnityEngine; + +namespace UnityEditor.TestTools.TestRunner +{ + [Serializable] + internal class ApplePlatformSetup : IPlatformSetup + { + [SerializeField] + private bool m_Stripping; + + public ApplePlatformSetup(BuildTarget buildTarget) + { + } + + public void Setup() + { + // Camera and fonts are stripped out and app crashes on iOS when test runner is trying to add a scene with... camera and text + m_Stripping = PlayerSettings.stripEngineCode; + PlayerSettings.stripEngineCode = false; + } + + public void PostBuildAction() + { + // Restoring player setting as early as possible + PlayerSettings.stripEngineCode = m_Stripping; + } + + public void PostSuccessfulBuildAction() + { + } + + public void PostSuccessfulLaunchAction() + { + } + + public void CleanUp() + { + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/ApplePlatformSetup.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/ApplePlatformSetup.cs.meta new file mode 100644 index 0000000..1b3a7e0 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/ApplePlatformSetup.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f6c189a159d3bde4c964cee562e508ea +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/IPlatformSetup.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/IPlatformSetup.cs new file mode 100644 index 0000000..59df2f2 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/IPlatformSetup.cs @@ -0,0 +1,11 @@ +namespace UnityEditor.TestTools.TestRunner +{ + internal interface IPlatformSetup + { + void Setup(); + void PostBuildAction(); + void PostSuccessfulBuildAction(); + void PostSuccessfulLaunchAction(); + void CleanUp(); + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/IPlatformSetup.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/IPlatformSetup.cs.meta new file mode 100644 index 0000000..536968c --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/IPlatformSetup.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9d614808f9add8a4f8e4860db2c7af0d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/LuminPlatformSetup.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/LuminPlatformSetup.cs new file mode 100644 index 0000000..cb965c8 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/LuminPlatformSetup.cs @@ -0,0 +1,50 @@ +using System; +using System.Threading; +using UnityEngine; + +namespace UnityEditor.TestTools.TestRunner +{ + internal class LuminPlatformSetup : IPlatformSetup + { + private const string kDeviceAddress = "127.0.0.1"; + private const int kDevicePort = 55000; + + public void Setup() + { + } + + public void PostBuildAction() + { + } + + public void PostSuccessfulBuildAction() + { + } + + public void PostSuccessfulLaunchAction() + { + var connectionResult = -1; + var maxTryCount = 100; + var tryCount = maxTryCount; + while (tryCount-- > 0 && connectionResult == -1) + { + Thread.Sleep(1000); + connectionResult = EditorConnectionInternal.ConnectPlayerProxy(kDeviceAddress, kDevicePort); + if (EditorUtility.DisplayCancelableProgressBar("Editor Connection", "Connecting to the player", + 1 - ((float)tryCount / maxTryCount))) + { + EditorUtility.ClearProgressBar(); + throw new TestLaunchFailedException(); + } + } + EditorUtility.ClearProgressBar(); + if (connectionResult == -1) + throw new TestLaunchFailedException( + "Timed out trying to connect to the player. Player failed to launch or crashed soon after launching"); + } + + public void CleanUp() + { + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/LuminPlatformSetup.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/LuminPlatformSetup.cs.meta new file mode 100644 index 0000000..0ac0d99 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/LuminPlatformSetup.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c38ae0585d6a55042a2d678330689685 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/PlatformSpecificSetup.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/PlatformSpecificSetup.cs new file mode 100644 index 0000000..30379eb --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/PlatformSpecificSetup.cs @@ -0,0 +1,117 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace UnityEditor.TestTools.TestRunner +{ + [Serializable] + internal class PlatformSpecificSetup + { + [SerializeField] + private ApplePlatformSetup m_AppleiOSPlatformSetup = new ApplePlatformSetup(BuildTarget.iOS); + [SerializeField] + private ApplePlatformSetup m_AppleTvOSPlatformSetup = new ApplePlatformSetup(BuildTarget.tvOS); + [SerializeField] + private XboxOnePlatformSetup m_XboxOnePlatformSetup = new XboxOnePlatformSetup(); + [SerializeField] + private AndroidPlatformSetup m_AndroidPlatformSetup = new AndroidPlatformSetup(); + [SerializeField] + private SwitchPlatformSetup m_SwitchPlatformSetup = new SwitchPlatformSetup(); + + [SerializeField] + private UwpPlatformSetup m_UwpPlatformSetup = new UwpPlatformSetup(); + + [SerializeField] + private LuminPlatformSetup m_LuminPlatformSetup = new LuminPlatformSetup(); + + + private IDictionary m_SetupTypes; + + [SerializeField] + private BuildTarget m_Target; + + public PlatformSpecificSetup() + { + } + + public PlatformSpecificSetup(BuildTarget target) + { + m_Target = target; + } + + public void Setup() + { + var dictionary = GetSetup(); + + if (!dictionary.ContainsKey(m_Target)) + { + return; + } + + dictionary[m_Target].Setup(); + } + + public void PostBuildAction() + { + var dictionary = GetSetup(); + + if (!dictionary.ContainsKey(m_Target)) + { + return; + } + + dictionary[m_Target].PostBuildAction(); + } + + public void PostSuccessfulBuildAction() + { + var dictionary = GetSetup(); + + if (!dictionary.ContainsKey(m_Target)) + { + return; + } + + dictionary[m_Target].PostSuccessfulBuildAction(); + } + + public void PostSuccessfulLaunchAction() + { + var dictionary = GetSetup(); + + if (!dictionary.ContainsKey(m_Target)) + { + return; + } + + dictionary[m_Target].PostSuccessfulLaunchAction(); + } + + public void CleanUp() + { + var dictionary = GetSetup(); + + if (!dictionary.ContainsKey(m_Target)) + { + return; + } + + dictionary[m_Target].CleanUp(); + } + + private IDictionary GetSetup() + { + m_SetupTypes = new Dictionary() + { + {BuildTarget.iOS, m_AppleiOSPlatformSetup}, + {BuildTarget.tvOS, m_AppleTvOSPlatformSetup}, + {BuildTarget.XboxOne, m_XboxOnePlatformSetup}, + {BuildTarget.Android, m_AndroidPlatformSetup}, + {BuildTarget.WSAPlayer, m_UwpPlatformSetup}, + {BuildTarget.Lumin, m_LuminPlatformSetup}, + {BuildTarget.Switch, m_SwitchPlatformSetup} + }; + return m_SetupTypes; + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/PlatformSpecificSetup.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/PlatformSpecificSetup.cs.meta new file mode 100644 index 0000000..a84f775 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/PlatformSpecificSetup.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6cccd50ebf7384242bda4d7bcb282ebf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/SwitchPlatformSetup.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/SwitchPlatformSetup.cs new file mode 100644 index 0000000..e63c850 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/SwitchPlatformSetup.cs @@ -0,0 +1,41 @@ +namespace UnityEditor.TestTools.TestRunner +{ + internal class SwitchPlatformSetup : IPlatformSetup + { + public void Setup() + { + EditorUserBuildSettings.switchCreateRomFile = true; + EditorUserBuildSettings.switchNVNGraphicsDebugger = false; +#if UNITY_2020_1_OR_NEWER + EditorUserBuildSettings.switchNVNDrawValidation_Heavy = true; // catches more graphics errors +#else + EditorUserBuildSettings.switchNVNDrawValidation = true; // catches more graphics errors +#endif + EditorUserBuildSettings.development = true; + EditorUserBuildSettings.switchRedirectWritesToHostMount = true; + + // We can use these when more debugging is required: + //EditorUserBuildSettings.switchNVNDrawValidation = false; // cannot be used with shader debug + //EditorUserBuildSettings.switchNVNGraphicsDebugger = true; + //EditorUserBuildSettings.switchNVNShaderDebugging = true; + //EditorUserBuildSettings.switchCreateSolutionFile = true; // for shorter iteration time + //EditorUserBuildSettings.allowDebugging = true; // managed debugger can be attached + } + + public void PostBuildAction() + { + } + + public void PostSuccessfulBuildAction() + { + } + + public void PostSuccessfulLaunchAction() + { + } + + public void CleanUp() + { + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/SwitchPlatformSetup.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/SwitchPlatformSetup.cs.meta new file mode 100644 index 0000000..0ecf426 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/SwitchPlatformSetup.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: adf7bea9401c1834380d55601add6cfb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/UwpPlatformSetup.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/UwpPlatformSetup.cs new file mode 100644 index 0000000..87ea5e0 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/UwpPlatformSetup.cs @@ -0,0 +1,52 @@ +using System; + +namespace UnityEditor.TestTools.TestRunner +{ + internal class UwpPlatformSetup : IPlatformSetup + { + private const string k_SettingsBuildConfiguration = "BuildConfiguration"; + private bool m_InternetClientServer; + private bool m_PrivateNetworkClientServer; + + public void Setup() + { + m_InternetClientServer = PlayerSettings.WSA.GetCapability(PlayerSettings.WSACapability.InternetClientServer); + m_PrivateNetworkClientServer = PlayerSettings.WSA.GetCapability(PlayerSettings.WSACapability.PrivateNetworkClientServer); + PlayerSettings.WSA.SetCapability(PlayerSettings.WSACapability.InternetClientServer, true); + PlayerSettings.WSA.SetCapability(PlayerSettings.WSACapability.PrivateNetworkClientServer, true); + + // This setting is initialized only when Window Store App is selected from the Build Settings window, and + // is typically an empty strings when running tests via UTR on the command-line. + bool wsaSettingNotInitialized = string.IsNullOrEmpty(EditorUserBuildSettings.wsaArchitecture); + + // If WSA build settings aren't fully initialized or running from a build machine, specify a default build configuration. + // Otherwise we can use the existing configuration specified by the user in Build Settings. + if (!string.IsNullOrEmpty(Environment.GetEnvironmentVariable("UNITY_THISISABUILDMACHINE")) || wsaSettingNotInitialized) + { + EditorUserBuildSettings.wsaSubtarget = WSASubtarget.PC; + EditorUserBuildSettings.wsaArchitecture = "x64"; + EditorUserBuildSettings.SetPlatformSettings(BuildPipeline.GetBuildTargetName(BuildTarget.WSAPlayer), k_SettingsBuildConfiguration, WSABuildType.Debug.ToString()); + EditorUserBuildSettings.wsaUWPBuildType = WSAUWPBuildType.ExecutableOnly; + PlayerSettings.SetIl2CppCompilerConfiguration(BuildTargetGroup.WSA, Il2CppCompilerConfiguration.Debug); + } + } + + public void PostBuildAction() + { + } + + public void PostSuccessfulBuildAction() + { + } + + public void PostSuccessfulLaunchAction() + { + } + + public void CleanUp() + { + PlayerSettings.WSA.SetCapability(PlayerSettings.WSACapability.InternetClientServer, m_InternetClientServer); + PlayerSettings.WSA.SetCapability(PlayerSettings.WSACapability.PrivateNetworkClientServer, m_PrivateNetworkClientServer); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/UwpPlatformSetup.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/UwpPlatformSetup.cs.meta new file mode 100644 index 0000000..34f040d --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/UwpPlatformSetup.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 667c6ad86a0b7a548aaa5c287f2c2861 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/XboxOnePlatformSetup.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/XboxOnePlatformSetup.cs new file mode 100644 index 0000000..0eb1e19 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/XboxOnePlatformSetup.cs @@ -0,0 +1,47 @@ +namespace UnityEditor.TestTools.TestRunner +{ + internal class XboxOnePlatformSetup : IPlatformSetup + { + private XboxOneDeployMethod oldXboxOneDeployMethod; + private XboxOneDeployDrive oldXboxOneDeployDrive; + private string oldXboxOneAdditionalDebugPorts; + + public void Setup() + { + oldXboxOneDeployMethod = EditorUserBuildSettings.xboxOneDeployMethod; + oldXboxOneDeployDrive = EditorUserBuildSettings.xboxOneDeployDrive; + oldXboxOneAdditionalDebugPorts = EditorUserBuildSettings.xboxOneAdditionalDebugPorts; + + EditorUserBuildSettings.xboxOneDeployMethod = XboxOneDeployMethod.Package; + EditorUserBuildSettings.xboxOneDeployDrive = XboxOneDeployDrive.Default; + + // This causes the XboxOne post processing systems to open this port in your package manifest. + // In addition it will open the ephemeral range for debug connections as well. + // Failure to do this will cause connection problems. + EditorUserBuildSettings.xboxOneAdditionalDebugPorts = "34999"; + } + + public void PostBuildAction() + { + } + + public void PostSuccessfulBuildAction() + { + } + + public void PostSuccessfulLaunchAction() + { + } + + public void CleanUp() + { + EditorUserBuildSettings.xboxOneDeployMethod = oldXboxOneDeployMethod; + EditorUserBuildSettings.xboxOneDeployDrive = oldXboxOneDeployDrive; + + // This causes the XboxOne post processing systems to open this port in your package manifest. + // In addition it will open the ephemeral range for debug connections as well. + // Failure to do this will cause connection problems. + EditorUserBuildSettings.xboxOneAdditionalDebugPorts = oldXboxOneAdditionalDebugPorts; + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/XboxOnePlatformSetup.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/XboxOnePlatformSetup.cs.meta new file mode 100644 index 0000000..22b811c --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/XboxOnePlatformSetup.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: aed7ab02155e43341a2dbcb7bc17c160 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlayerLauncher.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlayerLauncher.cs new file mode 100644 index 0000000..337414b --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlayerLauncher.cs @@ -0,0 +1,216 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading; +using NUnit.Framework.Internal.Filters; +using UnityEditor; +using UnityEditor.TestRunner.TestLaunchers; +using UnityEditor.TestTools.TestRunner.Api; +using UnityEngine; +using UnityEngine.SceneManagement; +using UnityEngine.TestRunner.Utils; +using UnityEngine.TestTools.TestRunner; +using UnityEngine.TestTools.TestRunner.Callbacks; + +namespace UnityEditor.TestTools.TestRunner +{ + internal class TestLaunchFailedException : Exception + { + public TestLaunchFailedException() {} + public TestLaunchFailedException(string message) : base(message) {} + } + + [Serializable] + internal class PlayerLauncher : RuntimeTestLauncherBase + { + private readonly PlaymodeTestsControllerSettings m_Settings; + private readonly BuildTarget m_TargetPlatform; + private ITestRunSettings m_OverloadTestRunSettings; + private string m_SceneName; + private int m_HeartbeatTimeout; + + public PlayerLauncher(PlaymodeTestsControllerSettings settings, BuildTarget? targetPlatform, ITestRunSettings overloadTestRunSettings, int heartbeatTimeout) + { + m_Settings = settings; + m_TargetPlatform = targetPlatform ?? EditorUserBuildSettings.activeBuildTarget; + m_OverloadTestRunSettings = overloadTestRunSettings; + m_HeartbeatTimeout = heartbeatTimeout; + } + + protected override RuntimePlatform? TestTargetPlatform + { + get { return BuildTargetConverter.TryConvertToRuntimePlatform(m_TargetPlatform); } + } + + public override void Run() + { + var editorConnectionTestCollector = RemoteTestRunController.instance; + editorConnectionTestCollector.hideFlags = HideFlags.HideAndDontSave; + editorConnectionTestCollector.Init(m_TargetPlatform, m_HeartbeatTimeout); + + var remotePlayerLogController = RemotePlayerLogController.instance; + remotePlayerLogController.hideFlags = HideFlags.HideAndDontSave; + + using (var settings = new PlayerLauncherContextSettings(m_OverloadTestRunSettings)) + { + m_SceneName = CreateSceneName(); + var scene = PrepareScene(m_SceneName); + string scenePath = scene.path; + + var filter = m_Settings.BuildNUnitFilter(); + var runner = LoadTests(filter); + var exceptionThrown = ExecutePreBuildSetupMethods(runner.LoadedTest, filter); + if (exceptionThrown) + { + ReopenOriginalScene(m_Settings.originalScene); + AssetDatabase.DeleteAsset(m_SceneName); + CallbacksDelegator.instance.RunFailed("Run Failed: One or more errors in a prebuild setup. See the editor log for details."); + return; + } + + var playerBuildOptions = GetBuildOptions(scenePath); + + var success = BuildAndRunPlayer(playerBuildOptions); + editorConnectionTestCollector.PostBuildAction(); + ExecutePostBuildCleanupMethods(runner.LoadedTest, filter); + + ReopenOriginalScene(m_Settings.originalScene); + AssetDatabase.DeleteAsset(m_SceneName); + + if (!success) + { + ScriptableObject.DestroyImmediate(editorConnectionTestCollector); + Debug.LogError("Player build failed"); + throw new TestLaunchFailedException("Player build failed"); + } + + editorConnectionTestCollector.PostSuccessfulBuildAction(); + if((playerBuildOptions.BuildPlayerOptions.options & BuildOptions.AutoRunPlayer) != 0) + editorConnectionTestCollector.PostSuccessfulLaunchAction(); + } + } + + public Scene PrepareScene(string sceneName) + { + var scene = CreateBootstrapScene(sceneName, runner => + { + runner.AddEventHandlerMonoBehaviour(); + runner.settings = m_Settings; + runner.AddEventHandlerMonoBehaviour(); + runner.AddEventHandlerScriptableObject(); + }); + return scene; + } + + private static bool BuildAndRunPlayer(PlayerLauncherBuildOptions buildOptions) + { + Debug.LogFormat(LogType.Log, LogOption.NoStacktrace, null, "Building player with following options:\n{0}", buildOptions); + + + // Android has to be in listen mode to establish player connection + if (buildOptions.BuildPlayerOptions.target == BuildTarget.Android) + { + buildOptions.BuildPlayerOptions.options &= ~BuildOptions.ConnectToHost; + } + + // For now, so does Lumin + if (buildOptions.BuildPlayerOptions.target == BuildTarget.Lumin) + { + buildOptions.BuildPlayerOptions.options &= ~BuildOptions.ConnectToHost; + } + + var result = BuildPipeline.BuildPlayer(buildOptions.BuildPlayerOptions); + if (result.summary.result != Build.Reporting.BuildResult.Succeeded) + Debug.LogError(result.SummarizeErrors()); + + return result.summary.result == Build.Reporting.BuildResult.Succeeded; + } + + private PlayerLauncherBuildOptions GetBuildOptions(string scenePath) + { + var buildOptions = new BuildPlayerOptions(); + var reduceBuildLocationPathLength = false; + + //Some platforms hit MAX_PATH limits during the build process, in these cases minimize the path length + if ((m_TargetPlatform == BuildTarget.WSAPlayer) || (m_TargetPlatform == BuildTarget.XboxOne)) + { + reduceBuildLocationPathLength = true; + } + + var scenes = new List() { scenePath }; + scenes.AddRange(EditorBuildSettings.scenes.Select(x => x.path)); + buildOptions.scenes = scenes.ToArray(); + + buildOptions.options |= BuildOptions.Development | BuildOptions.ConnectToHost | BuildOptions.IncludeTestAssemblies | BuildOptions.StrictMode; + buildOptions.target = m_TargetPlatform; + + if (EditorUserBuildSettings.waitForPlayerConnection) + buildOptions.options |= BuildOptions.WaitForPlayerConnection; + + if (EditorUserBuildSettings.allowDebugging) + buildOptions.options |= BuildOptions.AllowDebugging; + + if (EditorUserBuildSettings.installInBuildFolder) + buildOptions.options |= BuildOptions.InstallInBuildFolder; + else + buildOptions.options |= BuildOptions.AutoRunPlayer; + + var buildTargetGroup = EditorUserBuildSettings.activeBuildTargetGroup; + + //Check if Lz4 is supported for the current buildtargetgroup and enable it if need be + if (PostprocessBuildPlayer.SupportsLz4Compression(buildTargetGroup, m_TargetPlatform)) + { + if (EditorUserBuildSettings.GetCompressionType(buildTargetGroup) == Compression.Lz4) + buildOptions.options |= BuildOptions.CompressWithLz4; + else if (EditorUserBuildSettings.GetCompressionType(buildTargetGroup) == Compression.Lz4HC) + buildOptions.options |= BuildOptions.CompressWithLz4HC; + } + + var uniqueTempPathInProject = FileUtil.GetUniqueTempPathInProject(); + var playerDirectoryName = reduceBuildLocationPathLength ? "PwT" : "PlayerWithTests"; + + if (reduceBuildLocationPathLength) + { + uniqueTempPathInProject = Path.GetTempFileName(); + File.Delete(uniqueTempPathInProject); + Directory.CreateDirectory(uniqueTempPathInProject); + } + var tempPath = Path.GetFullPath(uniqueTempPathInProject); + var buildLocation = Path.Combine(tempPath, playerDirectoryName); + + // iOS builds create a folder with Xcode project instead of an executable, therefore no executable name is added + if (m_TargetPlatform == BuildTarget.iOS) + { + buildOptions.locationPathName = buildLocation; + } + else + { + string extensionForBuildTarget = PostprocessBuildPlayer.GetExtensionForBuildTarget(buildTargetGroup, buildOptions.target, buildOptions.options); + var playerExecutableName = "PlayerWithTests"; + playerExecutableName += string.Format(".{0}", extensionForBuildTarget); + buildOptions.locationPathName = Path.Combine(buildLocation, playerExecutableName); + } + + return new PlayerLauncherBuildOptions + { + BuildPlayerOptions = ModifyBuildOptions(buildOptions), + PlayerDirectory = buildLocation, + }; + } + + private BuildPlayerOptions ModifyBuildOptions(BuildPlayerOptions buildOptions) + { + var allAssemblies = AppDomain.CurrentDomain.GetAssemblies().Where(x => x.GetReferencedAssemblies().Any(z => z.Name == "UnityEngine.TestRunner")).ToArray(); + var attributes = allAssemblies.SelectMany(assembly => assembly.GetCustomAttributes(typeof(TestPlayerBuildModifierAttribute), true).OfType()).ToArray(); + var modifiers = attributes.Select(attribute => attribute.ConstructModifier()).ToArray(); + + foreach (var modifier in modifiers) + { + buildOptions = modifier.ModifyOptions(buildOptions); + } + + return buildOptions; + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlayerLauncher.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlayerLauncher.cs.meta new file mode 100644 index 0000000..17eece2 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlayerLauncher.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d973fc1524e4d724081553934c55958c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlayerLauncherBuildOptions.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlayerLauncherBuildOptions.cs new file mode 100644 index 0000000..589796c --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlayerLauncherBuildOptions.cs @@ -0,0 +1,23 @@ +using System.Text; + +namespace UnityEditor.TestTools.TestRunner +{ + internal class PlayerLauncherBuildOptions + { + public BuildPlayerOptions BuildPlayerOptions; + public string PlayerDirectory; + + public override string ToString() + { + var str = new StringBuilder(); + str.AppendLine("locationPathName = " + BuildPlayerOptions.locationPathName); + str.AppendLine("target = " + BuildPlayerOptions.target); + str.AppendLine("scenes = " + string.Join(", ", BuildPlayerOptions.scenes)); + str.AppendLine("assetBundleManifestPath = " + BuildPlayerOptions.assetBundleManifestPath); + str.AppendLine("options.Development = " + ((BuildPlayerOptions.options & BuildOptions.Development) != 0)); + str.AppendLine("options.AutoRunPlayer = " + ((BuildPlayerOptions.options & BuildOptions.AutoRunPlayer) != 0)); + str.AppendLine("options.ForceEnableAssertions = " + ((BuildPlayerOptions.options & BuildOptions.ForceEnableAssertions) != 0)); + return str.ToString(); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlayerLauncherBuildOptions.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlayerLauncherBuildOptions.cs.meta new file mode 100644 index 0000000..5d6f277 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlayerLauncherBuildOptions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2a0bd678385f98e4d8eabdfc07d62b4f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlayerLauncherContextSettings.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlayerLauncherContextSettings.cs new file mode 100644 index 0000000..329bcd6 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlayerLauncherContextSettings.cs @@ -0,0 +1,112 @@ +using System; +using UnityEditor.TestTools.TestRunner.Api; +using UnityEngine; + +namespace UnityEditor.TestTools.TestRunner +{ + internal class PlayerLauncherContextSettings : IDisposable + { + private ITestRunSettings m_OverloadSettings; + + private EditorBuildSettingsScene[] m_EditorBuildSettings; +#pragma warning disable 618 + private ResolutionDialogSetting m_DisplayResolutionDialog; +#pragma warning restore 618 + private bool m_RunInBackground; + private FullScreenMode m_FullScreenMode; + private bool m_ResizableWindow; + private bool m_ShowUnitySplashScreen; + private string m_OldproductName; + private string m_OldAotOptions; +#pragma warning disable 618 + private Lightmapping.GIWorkflowMode m_OldLightmapping; +#pragma warning restore 618 + private bool m_explicitNullChecks; + + private bool m_Disposed; + + public PlayerLauncherContextSettings(ITestRunSettings overloadSettings) + { + m_OverloadSettings = overloadSettings; + SetupProjectParameters(); + + if (overloadSettings != null) + { + overloadSettings.Apply(); + } + } + + public void Dispose() + { + if (!m_Disposed) + { + CleanupProjectParameters(); + if (m_OverloadSettings != null) + { + m_OverloadSettings.Dispose(); + } + + m_Disposed = true; + } + } + + private void SetupProjectParameters() + { + EditorApplication.LockReloadAssemblies(); + + m_EditorBuildSettings = EditorBuildSettings.scenes; + +#pragma warning disable 618 + m_DisplayResolutionDialog = PlayerSettings.displayResolutionDialog; + PlayerSettings.displayResolutionDialog = ResolutionDialogSetting.Disabled; +#pragma warning restore 618 + + m_RunInBackground = PlayerSettings.runInBackground; + PlayerSettings.runInBackground = true; + + m_FullScreenMode = PlayerSettings.fullScreenMode; + PlayerSettings.fullScreenMode = FullScreenMode.Windowed; + + m_OldAotOptions = PlayerSettings.aotOptions; + PlayerSettings.aotOptions = "nimt-trampolines=1024"; + + m_ResizableWindow = PlayerSettings.resizableWindow; + PlayerSettings.resizableWindow = true; + + m_ShowUnitySplashScreen = PlayerSettings.SplashScreen.show; + PlayerSettings.SplashScreen.show = false; + + m_OldproductName = PlayerSettings.productName; + PlayerSettings.productName = "UnityTestFramework"; + +#pragma warning disable 618 + m_OldLightmapping = Lightmapping.giWorkflowMode; + Lightmapping.giWorkflowMode = Lightmapping.GIWorkflowMode.OnDemand; +#pragma warning restore 618 + + m_explicitNullChecks = EditorUserBuildSettings.explicitNullChecks; + EditorUserBuildSettings.explicitNullChecks = true; + } + + private void CleanupProjectParameters() + { + EditorBuildSettings.scenes = m_EditorBuildSettings; + + PlayerSettings.fullScreenMode = m_FullScreenMode; + PlayerSettings.runInBackground = m_RunInBackground; +#pragma warning disable 618 + PlayerSettings.displayResolutionDialog = m_DisplayResolutionDialog; +#pragma warning restore 618 + PlayerSettings.resizableWindow = m_ResizableWindow; + PlayerSettings.SplashScreen.show = m_ShowUnitySplashScreen; + PlayerSettings.productName = m_OldproductName; + PlayerSettings.aotOptions = m_OldAotOptions; +#pragma warning disable 618 + Lightmapping.giWorkflowMode = m_OldLightmapping; +#pragma warning restore 618 + EditorUserBuildSettings.explicitNullChecks = m_explicitNullChecks; + + EditorApplication.UnlockReloadAssemblies(); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlayerLauncherContextSettings.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlayerLauncherContextSettings.cs.meta new file mode 100644 index 0000000..81671ce --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlayerLauncherContextSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6965880f76f40194593cb53a88f74005 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlaymodeLauncher.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlaymodeLauncher.cs new file mode 100644 index 0000000..a5838d1 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlaymodeLauncher.cs @@ -0,0 +1,133 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal.Filters; +using UnityEditor.TestTools.TestRunner.Api; +using UnityEngine; +using UnityEngine.SceneManagement; +using UnityEngine.TestRunner.Utils; +using UnityEngine.TestTools.TestRunner; +using UnityEngine.TestTools.TestRunner.Callbacks; + +namespace UnityEditor.TestTools.TestRunner +{ + internal class PlaymodeLauncher : RuntimeTestLauncherBase + { + public static bool IsRunning; + private Scene m_Scene; + private bool m_IsTestSetupPerformed; + private readonly PlaymodeTestsControllerSettings m_Settings; + private ITestFilter testFilter; + + [SerializeField] + private List m_EventHandlers = new List(); + + public PlaymodeLauncher(PlaymodeTestsControllerSettings settings) + { + m_Settings = settings; + } + + public override void Run() + { + IsRunning = true; + ConsoleWindow.SetConsoleErrorPause(false); + Application.runInBackground = true; + + var sceneName = CreateSceneName(); + m_Scene = CreateBootstrapScene(sceneName, runner => + { + runner.AddEventHandlerMonoBehaviour(); + runner.AddEventHandlerScriptableObject(); + runner.AddEventHandlerScriptableObject(); + runner.AddEventHandlerScriptableObject(); + + foreach (var eventHandler in m_EventHandlers) + { + var obj = ScriptableObject.CreateInstance(eventHandler); + runner.AddEventHandlerScriptableObject(obj as ITestRunnerListener); + } + + runner.settings = m_Settings; + }); + + if (m_Settings.sceneBased) + { + var newListOfScenes = + new List {new EditorBuildSettingsScene(sceneName, true)}; + newListOfScenes.AddRange(EditorBuildSettings.scenes); + EditorBuildSettings.scenes = newListOfScenes.ToArray(); + } + + EditorApplication.update += UpdateCallback; + } + + public void UpdateCallback() + { + if (m_IsTestSetupPerformed) + { + if (m_Scene.IsValid()) + SceneManager.SetActiveScene(m_Scene); + EditorApplication.update -= UpdateCallback; + EditorApplication.isPlaying = true; + } + else + { + testFilter = m_Settings.BuildNUnitFilter(); + var runner = LoadTests(testFilter); + + var exceptionThrown = ExecutePreBuildSetupMethods(runner.LoadedTest, testFilter); + if (exceptionThrown) + { + EditorApplication.update -= UpdateCallback; + IsRunning = false; + var controller = PlaymodeTestsController.GetController(); + ReopenOriginalScene(controller); + AssetDatabase.DeleteAsset(controller.settings.bootstrapScene); + CallbacksDelegator.instance.RunFailed("Run Failed: One or more errors in a prebuild setup. See the editor log for details."); + return; + } + m_IsTestSetupPerformed = true; + } + } + + [InitializeOnLoad] + public class BackgroundWatcher + { + static BackgroundWatcher() + { + EditorApplication.playModeStateChanged += OnPlayModeStateChanged; + } + + private static void OnPlayModeStateChanged(PlayModeStateChange state) + { + if (!PlaymodeTestsController.IsControllerOnScene()) + return; + var runner = PlaymodeTestsController.GetController(); + if (runner == null) + return; + if (state == PlayModeStateChange.ExitingPlayMode) + { + AssetDatabase.DeleteAsset(runner.settings.bootstrapScene); + ExecutePostBuildCleanupMethods(runner.m_Runner.LoadedTest, runner.settings.BuildNUnitFilter(), Application.platform); + IsRunning = false; + } + else if (state == PlayModeStateChange.EnteredEditMode) + { + //reopen the original scene once we exit playmode + ReopenOriginalScene(runner); + } + } + } + + protected static void ReopenOriginalScene(PlaymodeTestsController runner) + { + ReopenOriginalScene(runner.settings.originalScene); + } + + public void AddEventHandler() where T : ScriptableObject, ITestRunnerListener + { + m_EventHandlers.Add(typeof(T)); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlaymodeLauncher.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlaymodeLauncher.cs.meta new file mode 100644 index 0000000..de1999d --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PlaymodeLauncher.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d3217d58bbd1d2b4aaee933e2e8b9195 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PostbuildCleanupAttributeFinder.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PostbuildCleanupAttributeFinder.cs new file mode 100644 index 0000000..bad0e4a --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PostbuildCleanupAttributeFinder.cs @@ -0,0 +1,9 @@ +using UnityEngine.TestTools; + +namespace UnityEditor.TestTools.TestRunner +{ + internal class PostbuildCleanupAttributeFinder : AttributeFinderBase + { + public PostbuildCleanupAttributeFinder() : base(attribute => attribute.TargetClass) {} + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PostbuildCleanupAttributeFinder.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PostbuildCleanupAttributeFinder.cs.meta new file mode 100644 index 0000000..8d68b8c --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PostbuildCleanupAttributeFinder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2c2dfcbbb77359547bcaa7cdabd47ebb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PrebuildSetupAttributeFinder.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PrebuildSetupAttributeFinder.cs new file mode 100644 index 0000000..cd4ada8 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PrebuildSetupAttributeFinder.cs @@ -0,0 +1,9 @@ +using UnityEngine.TestTools; + +namespace UnityEditor.TestTools.TestRunner +{ + internal class PrebuildSetupAttributeFinder : AttributeFinderBase + { + public PrebuildSetupAttributeFinder() : base((attribute) => attribute.TargetClass) {} + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PrebuildSetupAttributeFinder.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PrebuildSetupAttributeFinder.cs.meta new file mode 100644 index 0000000..45adbb9 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/PrebuildSetupAttributeFinder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3c4ccfb0896bcf44da13e152b267aa49 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/RemotePlayerLogController.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/RemotePlayerLogController.cs new file mode 100644 index 0000000..ebdf71e --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/RemotePlayerLogController.cs @@ -0,0 +1,83 @@ +using System; +using System.Collections.Generic; +using UnityEditor.DeploymentTargets; +using UnityEditor.TestTools.TestRunner.CommandLineTest; +using UnityEngine; + +namespace UnityEditor.TestRunner.TestLaunchers +{ + [Serializable] + internal class RemotePlayerLogController : ScriptableSingleton + { + private List m_LogWriters; + + private Dictionary m_Loggers; + + private string m_DeviceLogsDirectory; + + public void SetBuildTarget(BuildTarget buildTarget) + { + m_Loggers = GetDeploymentTargetLoggers(buildTarget); + } + + public void SetLogsDirectory(string dir) + { + m_DeviceLogsDirectory = dir; + } + + public void StartLogWriters() + { + if (m_DeviceLogsDirectory == null || m_Loggers == null) + return; + + m_LogWriters = new List(); + + foreach (var logger in m_Loggers) + { + m_LogWriters.Add(new LogWriter(m_DeviceLogsDirectory, logger.Key, logger.Value)); + logger.Value.Start(); + } + } + + public void StopLogWriters() + { + if (m_LogWriters == null) + return; + + foreach (var logWriter in m_LogWriters) + { + logWriter.Stop(); + } + } + + private Dictionary GetDeploymentTargetLoggers(BuildTarget buildTarget) + { + DeploymentTargetManager deploymentTargetManager; + + try + { + deploymentTargetManager = DeploymentTargetManager.CreateInstance(EditorUserBuildSettings.activeBuildTargetGroup, buildTarget); + } + catch (NotSupportedException ex) + { + Debug.Log(ex.Message); + Debug.Log("Deployment target logger not initialised"); + return null; + } + + var targets = deploymentTargetManager.GetKnownTargets(); + var loggers = new Dictionary(); + + foreach (var target in targets) + { + if (target.status != DeploymentTargetStatus.Ready) continue; + + var logger = deploymentTargetManager.GetTargetLogger(target.id); + logger.Clear(); + loggers.Add(target.id, logger); + } + + return loggers; + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/RemotePlayerLogController.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/RemotePlayerLogController.cs.meta new file mode 100644 index 0000000..09b5310 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/RemotePlayerLogController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: edd2a1fe1acbbde43aad39862bb3f4a8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/RemotePlayerTestController.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/RemotePlayerTestController.cs new file mode 100644 index 0000000..87871ee --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/RemotePlayerTestController.cs @@ -0,0 +1,110 @@ +using System; +using UnityEditor.Networking.PlayerConnection; +using UnityEditor.TestTools.TestRunner; +using UnityEditor.TestTools.TestRunner.Api; +using UnityEditor.TestTools.TestRunner.UnityTestProtocol; +using UnityEngine; +using UnityEngine.Networking.PlayerConnection; +using UnityEngine.TestRunner.TestLaunchers; + +namespace UnityEditor.TestRunner.TestLaunchers +{ + [Serializable] + internal class RemoteTestRunController : ScriptableSingleton + { + internal const int k_HeartbeatTimeout = 60 * 10; + + [SerializeField] + private RemoteTestResultReciever m_RemoteTestResultReciever; + + [SerializeField] + private PlatformSpecificSetup m_PlatformSpecificSetup; + + [SerializeField] + private bool m_RegisteredConnectionCallbacks; + + [SerializeField] + private int m_HearbeatTimeOut; + + private IDelayedCallback m_TimeoutCallback; + + public void Init(BuildTarget buildTarget, int heartbeatTimeout) + { + m_HearbeatTimeOut = heartbeatTimeout; + m_PlatformSpecificSetup = new PlatformSpecificSetup(buildTarget); + m_PlatformSpecificSetup.Setup(); + m_RemoteTestResultReciever = new RemoteTestResultReciever(); + EditorConnection.instance.Initialize(); + if (!m_RegisteredConnectionCallbacks) + { + EditorConnection.instance.Initialize(); + DelegateEditorConnectionEvents(); + } + } + + private void DelegateEditorConnectionEvents() + { + m_RegisteredConnectionCallbacks = true; + //This is needed because RemoteTestResultReciever is not a ScriptableObject + EditorConnection.instance.Register(PlayerConnectionMessageIds.runStartedMessageId, RunStarted); + EditorConnection.instance.Register(PlayerConnectionMessageIds.runFinishedMessageId, RunFinished); + EditorConnection.instance.Register(PlayerConnectionMessageIds.testStartedMessageId, TestStarted); + EditorConnection.instance.Register(PlayerConnectionMessageIds.testFinishedMessageId, TestFinished); + EditorConnection.instance.Register(PlayerConnectionMessageIds.playerAliveHeartbeat, PlayerAliveHearbeat); + } + + private void RunStarted(MessageEventArgs messageEventArgs) + { + m_TimeoutCallback?.Reset(); + m_RemoteTestResultReciever.RunStarted(messageEventArgs); + CallbacksDelegator.instance.RunStartedRemotely(messageEventArgs.data); + } + + private void RunFinished(MessageEventArgs messageEventArgs) + { + m_TimeoutCallback?.Clear(); + m_RemoteTestResultReciever.RunFinished(messageEventArgs); + m_PlatformSpecificSetup.CleanUp(); + + CallbacksDelegator.instance.RunFinishedRemotely(messageEventArgs.data); + } + + private void TestStarted(MessageEventArgs messageEventArgs) + { + m_TimeoutCallback?.Reset(); + CallbacksDelegator.instance.TestStartedRemotely(messageEventArgs.data); + } + + private void TestFinished(MessageEventArgs messageEventArgs) + { + m_TimeoutCallback?.Reset(); + CallbacksDelegator.instance.TestFinishedRemotely(messageEventArgs.data); + } + + private void PlayerAliveHearbeat(MessageEventArgs messageEventArgs) + { + m_TimeoutCallback?.Reset(); + } + + private void TimeoutCallback() + { + CallbacksDelegator.instance.RunFailed($"Test execution timed out. No activity received from the player in {m_HearbeatTimeOut} seconds."); + } + + public void PostBuildAction() + { + m_PlatformSpecificSetup.PostBuildAction(); + } + + public void PostSuccessfulBuildAction() + { + m_PlatformSpecificSetup.PostSuccessfulBuildAction(); + m_TimeoutCallback = new DelayedCallback(TimeoutCallback, m_HearbeatTimeOut); + } + + public void PostSuccessfulLaunchAction() + { + m_PlatformSpecificSetup.PostSuccessfulLaunchAction(); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/RemotePlayerTestController.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/RemotePlayerTestController.cs.meta new file mode 100644 index 0000000..cdae8a1 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/RemotePlayerTestController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7d36034e63ad8254b9b2f55280fcc040 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/RemoteTestResultReciever.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/RemoteTestResultReciever.cs new file mode 100644 index 0000000..fe0a624 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/RemoteTestResultReciever.cs @@ -0,0 +1,22 @@ +using System; +using UnityEditor.Networking.PlayerConnection; +using UnityEngine; +using UnityEngine.Networking.PlayerConnection; +using UnityEngine.TestRunner.TestLaunchers; + +namespace UnityEditor.TestTools.TestRunner +{ + [Serializable] + internal class RemoteTestResultReciever + { + public void RunStarted(MessageEventArgs messageEventArgs) + { + } + + public void RunFinished(MessageEventArgs messageEventArgs) + { + EditorConnection.instance.Send(PlayerConnectionMessageIds.quitPlayerMessageId, null, messageEventArgs.playerId); + EditorConnection.instance.DisconnectAll(); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/RemoteTestResultReciever.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/RemoteTestResultReciever.cs.meta new file mode 100644 index 0000000..cd0da50 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/RemoteTestResultReciever.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fdb35ef8fc437e14fa4b6c74a0609e86 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/RuntimeTestLauncherBase.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/RuntimeTestLauncherBase.cs new file mode 100644 index 0000000..9c104db --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/RuntimeTestLauncherBase.cs @@ -0,0 +1,92 @@ +using System; +using System.Linq; +using NUnit.Framework.Interfaces; +using UnityEditor.Events; +using UnityEditor.SceneManagement; +using UnityEngine; +using UnityEngine.SceneManagement; +using UnityEngine.TestRunner.NUnitExtensions.Runner; +using UnityEngine.TestTools; +using UnityEngine.TestTools.NUnitExtensions; +using UnityEngine.TestTools.TestRunner; +using UnityEngine.TestTools.Utils; + +namespace UnityEditor.TestTools.TestRunner +{ + internal abstract class RuntimeTestLauncherBase : TestLauncherBase + { + protected Scene CreateBootstrapScene(string sceneName, Action runnerSetup) + { + var scene = EditorSceneManager.NewScene(NewSceneSetup.EmptyScene, NewSceneMode.Single); + var go = new GameObject(PlaymodeTestsController.kPlaymodeTestControllerName); + + var editorLoadedTestAssemblyProvider = new EditorLoadedTestAssemblyProvider(new EditorCompilationInterfaceProxy(), new EditorAssembliesProxy()); + + var runner = go.AddComponent(); + runnerSetup(runner); + runner.settings.bootstrapScene = sceneName; + runner.AssembliesWithTests = editorLoadedTestAssemblyProvider.GetAssembliesGroupedByType(TestPlatform.PlayMode).Select(x => x.Assembly.GetName().Name).ToList(); + + EditorSceneManager.MarkSceneDirty(scene); + AssetDatabase.SaveAssets(); + EditorSceneManager.SaveScene(scene, sceneName, false); + + return scene; + } + + public string CreateSceneName() + { + return "Assets/InitTestScene" + DateTime.Now.Ticks + ".unity"; + } + + protected UnityTestAssemblyRunner LoadTests(ITestFilter filter) + { + var editorLoadedTestAssemblyProvider = new EditorLoadedTestAssemblyProvider(new EditorCompilationInterfaceProxy(), new EditorAssembliesProxy()); + var assembliesWithTests = editorLoadedTestAssemblyProvider.GetAssembliesGroupedByType(TestPlatform.PlayMode).Select(x => x.Assembly.GetName().Name).ToList(); + + var nUnitTestAssemblyRunner = new UnityTestAssemblyRunner(new UnityTestAssemblyBuilder(), null); + var assemblyProvider = new PlayerTestAssemblyProvider(new AssemblyLoadProxy(), assembliesWithTests); + nUnitTestAssemblyRunner.Load(assemblyProvider.GetUserAssemblies().Select(a => a.Assembly).ToArray(), TestPlatform.PlayMode, UnityTestAssemblyBuilder.GetNUnitTestBuilderSettings(TestPlatform.PlayMode)); + return nUnitTestAssemblyRunner; + } + + protected static void ReopenOriginalScene(string originalSceneName) + { + EditorSceneManager.NewScene(NewSceneSetup.DefaultGameObjects); + if (!string.IsNullOrEmpty(originalSceneName)) + { + EditorSceneManager.OpenScene(originalSceneName); + } + } + } + + internal static class PlaymodeTestsControllerExtensions + { + internal static T AddEventHandlerMonoBehaviour(this PlaymodeTestsController controller) where T : MonoBehaviour, ITestRunnerListener + { + var eventHandler = controller.gameObject.AddComponent(); + SetListeners(controller, eventHandler); + return eventHandler; + } + + internal static T AddEventHandlerScriptableObject(this PlaymodeTestsController controller) where T : ScriptableObject, ITestRunnerListener + { + var eventListener = ScriptableObject.CreateInstance(); + AddEventHandlerScriptableObject(controller, eventListener); + return eventListener; + } + + internal static void AddEventHandlerScriptableObject(this PlaymodeTestsController controller, ITestRunnerListener obj) + { + SetListeners(controller, obj); + } + + private static void SetListeners(PlaymodeTestsController controller, ITestRunnerListener eventHandler) + { + UnityEventTools.AddPersistentListener(controller.testStartedEvent, eventHandler.TestStarted); + UnityEventTools.AddPersistentListener(controller.testFinishedEvent, eventHandler.TestFinished); + UnityEventTools.AddPersistentListener(controller.runStartedEvent, eventHandler.RunStarted); + UnityEventTools.AddPersistentListener(controller.runFinishedEvent, eventHandler.RunFinished); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/RuntimeTestLauncherBase.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/RuntimeTestLauncherBase.cs.meta new file mode 100644 index 0000000..2c6ca4e --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/RuntimeTestLauncherBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0efb23ecb373b6d4bbe5217485785138 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/TestLauncherBase.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/TestLauncherBase.cs new file mode 100644 index 0000000..beeba27 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/TestLauncherBase.cs @@ -0,0 +1,85 @@ +using System; +using System.Linq; +using NUnit.Framework.Interfaces; +using UnityEngine; +using UnityEngine.TestTools; +using UnityEngine.TestTools.Logging; +using UnityEngine.TestTools.TestRunner; + +namespace UnityEditor.TestTools.TestRunner +{ + internal abstract class TestLauncherBase + { + public abstract void Run(); + + protected virtual RuntimePlatform? TestTargetPlatform + { + get { return Application.platform; } + } + + protected bool ExecutePreBuildSetupMethods(ITest tests, ITestFilter testRunnerFilter) + { + var attributeFinder = new PrebuildSetupAttributeFinder(); + var logString = "Executing setup for: {0}"; + return ExecuteMethods(tests, testRunnerFilter, attributeFinder, logString, targetClass => targetClass.Setup(), TestTargetPlatform); + } + + public void ExecutePostBuildCleanupMethods(ITest tests, ITestFilter testRunnerFilter) + { + ExecutePostBuildCleanupMethods(tests, testRunnerFilter, TestTargetPlatform); + } + + public static void ExecutePostBuildCleanupMethods(ITest tests, ITestFilter testRunnerFilter, RuntimePlatform? testTargetPlatform) + { + var attributeFinder = new PostbuildCleanupAttributeFinder(); + var logString = "Executing cleanup for: {0}"; + ExecuteMethods(tests, testRunnerFilter, attributeFinder, logString, targetClass => targetClass.Cleanup(), testTargetPlatform); + } + + private static bool ExecuteMethods(ITest tests, ITestFilter testRunnerFilter, AttributeFinderBase attributeFinder, string logString, Action action, RuntimePlatform? testTargetPlatform) + { + var exceptionsThrown = false; + + if (testTargetPlatform == null) + { + Debug.LogError("Could not determine test target platform from build target " + EditorUserBuildSettings.activeBuildTarget); + return true; + } + + foreach (var targetClassType in attributeFinder.Search(tests, testRunnerFilter, testTargetPlatform.Value)) + { + try + { + var targetClass = (T)Activator.CreateInstance(targetClassType); + + Debug.LogFormat(logString, targetClassType.FullName); + + using (var logScope = new LogScope()) + { + action(targetClass); + + if (logScope.AnyFailingLogs()) + { + var failingLog = logScope.FailingLogs.First(); + throw new UnhandledLogMessageException(failingLog); + } + + if (logScope.ExpectedLogs.Any()) + { + var expectedLogs = logScope.ExpectedLogs.First(); + throw new UnexpectedLogMessageException(expectedLogs); + } + } + } + catch (InvalidCastException) {} + catch (Exception e) + { + Debug.LogException(e); + exceptionsThrown = true; + } + } + + return exceptionsThrown; + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/TestLauncherBase.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/TestLauncherBase.cs.meta new file mode 100644 index 0000000..1297804 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestLaunchers/TestLauncherBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1cddf785b0d07434d8e0607c97b09135 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestResultSerializer.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestResultSerializer.cs new file mode 100644 index 0000000..7617553 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestResultSerializer.cs @@ -0,0 +1,71 @@ +using System; +using System.Reflection; +using System.Text; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; +using UnityEngine; + +namespace UnityEditor.TestTools.TestRunner +{ + [Serializable] + internal class TestResultSerializer + { + private static readonly BindingFlags flags = BindingFlags.NonPublic | BindingFlags.Public | + BindingFlags.Instance | BindingFlags.FlattenHierarchy; + + [SerializeField] public string id; + + [SerializeField] public string fullName; + + [SerializeField] private double duration; + + [SerializeField] private string label; + + [SerializeField] private string message; + + [SerializeField] private string output; + + [SerializeField] private string site; + + [SerializeField] private string stacktrace; + + [SerializeField] private double startTimeAO; + + [SerializeField] private string status; + + public static TestResultSerializer MakeFromTestResult(ITestResult result) + { + var wrapper = new TestResultSerializer(); + wrapper.id = result.Test.Id; + wrapper.fullName = result.FullName; + wrapper.status = result.ResultState.Status.ToString(); + wrapper.label = result.ResultState.Label; + wrapper.site = result.ResultState.Site.ToString(); + wrapper.output = result.Output; + wrapper.duration = result.Duration; + wrapper.stacktrace = result.StackTrace; + wrapper.message = result.Message; + wrapper.startTimeAO = result.StartTime.ToOADate(); + return wrapper; + } + + public void RestoreTestResult(TestResult result) + { + var resultState = new ResultState((TestStatus)Enum.Parse(typeof(TestStatus), status), label, + (FailureSite)Enum.Parse(typeof(FailureSite), site)); + result.GetType().BaseType.GetField("_resultState", flags).SetValue(result, resultState); + result.GetType().BaseType.GetField("_output", flags).SetValue(result, new StringBuilder(output)); + result.GetType().BaseType.GetField("_duration", flags).SetValue(result, duration); + result.GetType().BaseType.GetField("_message", flags).SetValue(result, message); + result.GetType().BaseType.GetField("_stackTrace", flags).SetValue(result, stacktrace); + result.GetType() + .BaseType.GetProperty("StartTime", flags) + .SetValue(result, DateTime.FromOADate(startTimeAO), null); + } + + public bool IsPassed() + { + return status == TestStatus.Passed.ToString(); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestResultSerializer.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestResultSerializer.cs.meta new file mode 100644 index 0000000..0e4eed4 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestResultSerializer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 559482fe33c79e44882d3a6cedc55fb5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun.meta new file mode 100644 index 0000000..9be01d6 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8721cb2237d4a564a94a51f56243bdac +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks.meta new file mode 100644 index 0000000..d1a1aeb --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6dba53789da15814387fa5b1445e81e0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/BuildActionTaskBase.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/BuildActionTaskBase.cs new file mode 100644 index 0000000..016ea54 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/BuildActionTaskBase.cs @@ -0,0 +1,86 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using NUnit.Framework.Interfaces; +using UnityEngine; +using UnityEngine.TestTools.Logging; +using UnityEngine.TestTools.TestRunner; + +namespace UnityEditor.TestTools.TestRunner.TestRun.Tasks +{ + internal abstract class BuildActionTaskBase : TestTaskBase + { + private string typeName; + internal IAttributeFinder attributeFinder; + internal RuntimePlatform targetPlatform = Application.platform; + internal Action logAction = Debug.Log; + internal Func logScopeProvider = () => new LogScope(); + internal Func createInstance = Activator.CreateInstance; + + protected BuildActionTaskBase(IAttributeFinder attributeFinder) + { + this.attributeFinder = attributeFinder; + typeName = typeof(T).Name; + } + + protected abstract void Action(T target); + + public override IEnumerator Execute(TestJobData testJobData) + { + if (testJobData.testTree == null) + { + throw new Exception($"Test tree is not available for {GetType().Name}."); + } + + var enumerator = ExecuteMethods(testJobData.testTree, testJobData.executionSettings.BuildNUnitFilter()); + while (enumerator.MoveNext()) + { + yield return null; + } + } + + protected IEnumerator ExecuteMethods(ITest testTree, ITestFilter testRunnerFilter) + { + var exceptions = new List(); + + foreach (var targetClassType in attributeFinder.Search(testTree, testRunnerFilter, targetPlatform)) + { + try + { + var targetClass = (T) createInstance(targetClassType); + + logAction($"Executing {typeName} for: {targetClassType.FullName}."); + + using (var logScope = logScopeProvider()) + { + Action(targetClass); + + if (logScope.AnyFailingLogs()) + { + var failingLog = logScope.FailingLogs.First(); + throw new UnhandledLogMessageException(failingLog); + } + + if (logScope.ExpectedLogs.Any()) + { + var expectedLogs = logScope.ExpectedLogs.First(); + throw new UnexpectedLogMessageException(expectedLogs); + } + } + } + catch (Exception ex) + { + exceptions.Add(ex); + } + + yield return null; + } + + if (exceptions.Count > 0) + { + throw new AggregateException($"One or more exceptions when executing {typeName}.", exceptions); + } + } + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/BuildActionTaskBase.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/BuildActionTaskBase.cs.meta new file mode 100644 index 0000000..e4fd79f --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/BuildActionTaskBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c2441d353f9c42a44af6e224e4901b52 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/BuildTestTreeTask.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/BuildTestTreeTask.cs new file mode 100644 index 0000000..fa45752 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/BuildTestTreeTask.cs @@ -0,0 +1,61 @@ +using System; +using System.Collections; +using System.Linq; +using UnityEditor.TestTools.TestRunner.Api; +using UnityEngine.TestRunner.NUnitExtensions; +using UnityEngine.TestTools; +using UnityEngine.TestTools.NUnitExtensions; + +namespace UnityEditor.TestTools.TestRunner.TestRun.Tasks +{ + internal class BuildTestTreeTask : TestTaskBase + { + private TestPlatform m_TestPlatform; + + public BuildTestTreeTask(TestPlatform testPlatform) + { + m_TestPlatform = testPlatform; + } + + internal IEditorLoadedTestAssemblyProvider m_testAssemblyProvider = new EditorLoadedTestAssemblyProvider(new EditorCompilationInterfaceProxy(), new EditorAssembliesProxy()); + internal IAsyncTestAssemblyBuilder m_testAssemblyBuilder = new UnityTestAssemblyBuilder(); + internal ICallbacksDelegator m_CallbacksDelegator = CallbacksDelegator.instance; + + public override IEnumerator Execute(TestJobData testJobData) + { + if (testJobData.testTree != null) + { + yield break; + } + + var assembliesEnumerator = m_testAssemblyProvider.GetAssembliesGroupedByTypeAsync(m_TestPlatform); + while (assembliesEnumerator.MoveNext()) + { + yield return null; + } + + if (assembliesEnumerator.Current == null) + { + throw new Exception("Assemblies not retrieved."); + } + + var assemblies = assembliesEnumerator.Current.Where(pair => m_TestPlatform.IsFlagIncluded(pair.Key)).SelectMany(pair => pair.Value).Select(x => x.Assembly).ToArray(); + var buildSettings = UnityTestAssemblyBuilder.GetNUnitTestBuilderSettings(m_TestPlatform); + var enumerator = m_testAssemblyBuilder.BuildAsync(assemblies, Enumerable.Repeat(m_TestPlatform, assemblies.Length).ToArray(), buildSettings); + while (enumerator.MoveNext()) + { + yield return null; + } + + var testList = enumerator.Current; + if (testList== null) + { + throw new Exception("Test list not retrieved."); + } + + testList.ParseForNameDuplicates(); + testJobData.testTree = testList; + m_CallbacksDelegator.TestTreeRebuild(testList); + } + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/BuildTestTreeTask.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/BuildTestTreeTask.cs.meta new file mode 100644 index 0000000..ff4c0f7 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/BuildTestTreeTask.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a0288e1c9324e824bab7e2044a72a434 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/CleanupVerificationTask.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/CleanupVerificationTask.cs new file mode 100644 index 0000000..3da9a30 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/CleanupVerificationTask.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections; +using System.IO; +using System.Linq; +using UnityEngine; + +namespace UnityEditor.TestTools.TestRunner.TestRun.Tasks +{ + internal class CleanupVerificationTask : FileCleanupVerifierTaskBase + { + private const string k_Indent = " "; + + internal Action logAction = Debug.LogWarning; + + public override IEnumerator Execute(TestJobData testJobData) + { + var currentFiles = GetAllFilesInAssetsDirectory(); + var existingFiles = testJobData.existingFiles; + + if (currentFiles.Length != existingFiles.Length) + { + LogWarningForFilesIfAny(currentFiles.Where(file => !testJobData.existingFiles.Contains(file)).ToArray()); + } + + yield return null; + } + + private void LogWarningForFilesIfAny(string[] filePaths) + { + if (!filePaths.Any()) + { + return; + } + + var stringWriter = new StringWriter(); + stringWriter.WriteLine("Files generated by test without cleanup."); + stringWriter.WriteLine(k_Indent + "Found {0} new files.", filePaths.Length); + + foreach (var filePath in filePaths) + { + stringWriter.WriteLine(k_Indent + filePath); + } + + logAction(stringWriter.ToString()); + } + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/CleanupVerificationTask.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/CleanupVerificationTask.cs.meta new file mode 100644 index 0000000..749b832 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/CleanupVerificationTask.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 93eb6389f4fb6924987867ce0bc339ee +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/FileCleanupVerifierTaskBase.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/FileCleanupVerifierTaskBase.cs new file mode 100644 index 0000000..18dc47b --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/FileCleanupVerifierTaskBase.cs @@ -0,0 +1,14 @@ +using System; + +namespace UnityEditor.TestTools.TestRunner.TestRun.Tasks +{ + internal abstract class FileCleanupVerifierTaskBase : TestTaskBase + { + internal Func GetAllAssetPathsAction = AssetDatabase.GetAllAssetPaths; + + protected string[] GetAllFilesInAssetsDirectory() + { + return GetAllAssetPathsAction(); + } + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/FileCleanupVerifierTaskBase.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/FileCleanupVerifierTaskBase.cs.meta new file mode 100644 index 0000000..64b8002 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/FileCleanupVerifierTaskBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ad7bb166069f8414e9ad26606b305e66 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/LegacyEditModeRunTask.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/LegacyEditModeRunTask.cs new file mode 100644 index 0000000..2186048 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/LegacyEditModeRunTask.cs @@ -0,0 +1,26 @@ +using System.Collections; +using UnityEngine; +using UnityEngine.TestTools; + +namespace UnityEditor.TestTools.TestRunner.TestRun.Tasks +{ + internal class LegacyEditModeRunTask : TestTaskBase + { + public LegacyEditModeRunTask() : base(true) + { + + } + + public override IEnumerator Execute(TestJobData testJobData) + { + var testLauncher = new EditModeLauncher(testJobData.executionSettings.filters, TestPlatform.EditMode, testJobData.executionSettings.runSynchronously); + testJobData.editModeRunner = testLauncher.m_EditModeRunner; + testLauncher.Run(); + + while (testJobData.editModeRunner != null && !testJobData.editModeRunner.RunFinished) + { + yield return null; + } + } + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/LegacyEditModeRunTask.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/LegacyEditModeRunTask.cs.meta new file mode 100644 index 0000000..a4f66d6 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/LegacyEditModeRunTask.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b4246555189b5ee43b4857220f9fd29b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/LegacyPlayModeRunTask.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/LegacyPlayModeRunTask.cs new file mode 100644 index 0000000..1be2a80 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/LegacyPlayModeRunTask.cs @@ -0,0 +1,26 @@ +using System.Collections; +using System.Linq; +using UnityEngine.TestTools.TestRunner; + +namespace UnityEditor.TestTools.TestRunner.TestRun.Tasks +{ + internal class LegacyPlayModeRunTask : TestTaskBase + { + public LegacyPlayModeRunTask() : base(true) + { + + } + public override IEnumerator Execute(TestJobData testJobData) + { + var settings = PlaymodeTestsControllerSettings.CreateRunnerSettings(testJobData.executionSettings.filters.Select(filter => filter.ToTestRunnerFilter()).ToArray()); + var launcher = new PlaymodeLauncher(settings); + + launcher.Run(); + + while (PlaymodeLauncher.IsRunning) + { + yield return null; + } + } + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/LegacyPlayModeRunTask.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/LegacyPlayModeRunTask.cs.meta new file mode 100644 index 0000000..f37f78d --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/LegacyPlayModeRunTask.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4769fe1e7475c8843b092338acbcad25 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/LegacyPlayerRunTask.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/LegacyPlayerRunTask.cs new file mode 100644 index 0000000..7ee1913 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/LegacyPlayerRunTask.cs @@ -0,0 +1,18 @@ +using System.Collections; +using System.Linq; +using UnityEngine.TestTools.TestRunner; + +namespace UnityEditor.TestTools.TestRunner.TestRun.Tasks +{ + internal class LegacyPlayerRunTask : TestTaskBase + { + public override IEnumerator Execute(TestJobData testJobData) + { + var executionSettings = testJobData.executionSettings; + var settings = PlaymodeTestsControllerSettings.CreateRunnerSettings(executionSettings.filters.Select(filter => filter.ToTestRunnerFilter()).ToArray()); + var launcher = new PlayerLauncher(settings, executionSettings.targetPlatform, executionSettings.overloadTestRunSettings, executionSettings.playerHeartbeatTimeout); + launcher.Run(); + yield return null; + } + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/LegacyPlayerRunTask.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/LegacyPlayerRunTask.cs.meta new file mode 100644 index 0000000..e2046bb --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/LegacyPlayerRunTask.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b93fe5bbea454ae438fcec241c5fa85b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/PerformUndoTask.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/PerformUndoTask.cs new file mode 100644 index 0000000..df64442 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/PerformUndoTask.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections; +using UnityEngine; + +namespace UnityEditor.TestTools.TestRunner.TestRun.Tasks +{ + internal class PerformUndoTask : TestTaskBase + { + private const double warningThreshold = 1000; + + internal Action RevertAllDownToGroup = Undo.RevertAllDownToGroup; + internal Action LogWarning = Debug.LogWarning; + internal Action DisplayProgressBar = EditorUtility.DisplayProgressBar; + internal Action ClearProgressBar = EditorUtility.ClearProgressBar; + internal Func TimeNow = () => DateTime.Now; + + public override IEnumerator Execute(TestJobData testJobData) + { + if (testJobData.undoGroup < 0) + { + yield break; + } + + DisplayProgressBar("Undo", "Reverting changes to the scene", 0); + + var undoStartTime = TimeNow(); + + RevertAllDownToGroup(testJobData.undoGroup); + + var timeDelta = TimeNow() - undoStartTime; + if (timeDelta.TotalMilliseconds >= warningThreshold) + { + LogWarning($"Undo after editor test run took {timeDelta.Seconds} second{(timeDelta.Seconds == 1 ? "" : "s")}."); + } + + ClearProgressBar(); + } + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/PerformUndoTask.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/PerformUndoTask.cs.meta new file mode 100644 index 0000000..be55331 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/PerformUndoTask.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fb1abebffd37bd4458c84e15a5d7ab04 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/PrebuildSetupTask.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/PrebuildSetupTask.cs new file mode 100644 index 0000000..34e03e3 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/PrebuildSetupTask.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections; +using NUnit.Framework.Interfaces; +using UnityEngine; +using UnityEngine.TestTools; + +namespace UnityEditor.TestTools.TestRunner.TestRun.Tasks +{ + internal class PrebuildSetupTask : BuildActionTaskBase + { + public PrebuildSetupTask() : base(new PrebuildSetupAttributeFinder()) + { + } + + protected override void Action(IPrebuildSetup target) + { + target.Setup(); + } + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/PrebuildSetupTask.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/PrebuildSetupTask.cs.meta new file mode 100644 index 0000000..009894d --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/PrebuildSetupTask.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fc039194235714f48a39bd364885e744 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/RegisterFilesForCleanupVerificationTask.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/RegisterFilesForCleanupVerificationTask.cs new file mode 100644 index 0000000..7a4cf64 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/RegisterFilesForCleanupVerificationTask.cs @@ -0,0 +1,13 @@ +using System.Collections; + +namespace UnityEditor.TestTools.TestRunner.TestRun.Tasks +{ + internal class RegisterFilesForCleanupVerificationTask : FileCleanupVerifierTaskBase + { + public override IEnumerator Execute(TestJobData testJobData) + { + testJobData.existingFiles = GetAllFilesInAssetsDirectory(); + yield return null; + } + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/RegisterFilesForCleanupVerificationTask.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/RegisterFilesForCleanupVerificationTask.cs.meta new file mode 100644 index 0000000..a2ef8c8 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/RegisterFilesForCleanupVerificationTask.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a398fde47a0349a40a9bdf8988c392c9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/SaveModiedSceneTask.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/SaveModiedSceneTask.cs new file mode 100644 index 0000000..a2ec975 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/SaveModiedSceneTask.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections; +using UnityEditor.SceneManagement; + +namespace UnityEditor.TestTools.TestRunner.TestRun.Tasks +{ + internal class SaveModiedSceneTask : TestTaskBase + { + internal Func SaveCurrentModifiedScenesIfUserWantsTo = + EditorSceneManager.SaveCurrentModifiedScenesIfUserWantsTo; + public override IEnumerator Execute(TestJobData testJobData) + { + var cancelled = !SaveCurrentModifiedScenesIfUserWantsTo(); + if (cancelled) + { + throw new TestRunCanceledException(); + } + + yield break; + } + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/SaveModiedSceneTask.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/SaveModiedSceneTask.cs.meta new file mode 100644 index 0000000..b710751 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/SaveModiedSceneTask.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c321246872d389b469bd0cb86d3701ed +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/SaveUndoIndexTask.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/SaveUndoIndexTask.cs new file mode 100644 index 0000000..45b1227 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/SaveUndoIndexTask.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections; + +namespace UnityEditor.TestTools.TestRunner.TestRun.Tasks +{ + internal class SaveUndoIndexTask : TestTaskBase + { + internal Func GetUndoGroup = Undo.GetCurrentGroup; + public override IEnumerator Execute(TestJobData testJobData) + { + testJobData.undoGroup = GetUndoGroup(); + yield break; + } + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/SaveUndoIndexTask.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/SaveUndoIndexTask.cs.meta new file mode 100644 index 0000000..d79dc22 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/SaveUndoIndexTask.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cc0ce06a7515c044bb8db4c75db84114 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/TestTaskBase.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/TestTaskBase.cs new file mode 100644 index 0000000..d83490b --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/TestTaskBase.cs @@ -0,0 +1,16 @@ +using System.Collections; + +namespace UnityEditor.TestTools.TestRunner.TestRun.Tasks +{ + internal abstract class TestTaskBase + { + public bool SupportsResumingEnumerator; + + protected TestTaskBase(bool supportsResumingEnumerator = false) + { + SupportsResumingEnumerator = supportsResumingEnumerator; + } + + public abstract IEnumerator Execute(TestJobData testJobData); + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/TestTaskBase.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/TestTaskBase.cs.meta new file mode 100644 index 0000000..89edb19 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/Tasks/TestTaskBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 342d9ef4da0a19b49877f576c2deec14 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/TestJobData.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/TestJobData.cs new file mode 100644 index 0000000..06358df --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/TestJobData.cs @@ -0,0 +1,49 @@ +using System; +using NUnit.Framework.Interfaces; +using UnityEditor.TestTools.TestRunner.Api; +using UnityEngine; + +namespace UnityEditor.TestTools.TestRunner.TestRun +{ + [Serializable] + internal class TestJobData + { + [SerializeField] + public string guid; + + [SerializeField] + public int taskIndex; + + [SerializeField] + public int taskPC; + + [SerializeField] + public bool isRunning; + + [SerializeField] + public ExecutionSettings executionSettings; + + [SerializeField] + public string[] existingFiles; + + [SerializeField] + public int undoGroup = -1; + + [SerializeField] + public EditModeRunner editModeRunner; + + [NonSerialized] + public bool isHandledByRunner; + + public ITest testTree; + + public TestJobData(ExecutionSettings settings) + { + guid = Guid.NewGuid().ToString(); + executionSettings = settings; + isRunning = false; + taskIndex = 0; + taskPC = 0; + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/TestJobData.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/TestJobData.cs.meta new file mode 100644 index 0000000..34a3c41 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/TestJobData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 80ac8f5b2a7fa904dbc80111be88c8be +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/TestJobDataHolder.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/TestJobDataHolder.cs new file mode 100644 index 0000000..8f1309e --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/TestJobDataHolder.cs @@ -0,0 +1,28 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace UnityEditor.TestTools.TestRunner.TestRun +{ + internal class TestJobDataHolder : ScriptableSingleton + { + [SerializeField] + public List TestRuns = new List(); + + [InitializeOnLoadMethod] + private static void ResumeRunningJobs() + { + foreach (var testRun in instance.TestRuns.ToArray()) + { + if (testRun.isRunning) + { + var runner = new TestJobRunner(); + runner.RunJob(testRun); + } + else + { + instance.TestRuns.Remove(testRun); + } + } + } + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/TestJobDataHolder.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/TestJobDataHolder.cs.meta new file mode 100644 index 0000000..fdc9a90 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/TestJobDataHolder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 612b00d793cac3c49808ab3ee5428f16 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/TestJobRunner.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/TestJobRunner.cs new file mode 100644 index 0000000..5485688 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/TestJobRunner.cs @@ -0,0 +1,166 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using UnityEditor.TestTools.TestRunner.Api; +using UnityEditor.TestTools.TestRunner.TestRun.Tasks; +using UnityEngine; +using UnityEngine.TestTools; + +namespace UnityEditor.TestTools.TestRunner.TestRun +{ + internal class TestJobRunner + { + private static IEnumerable GetTaskList(ExecutionSettings settings) + { + if (settings == null) + { + yield break; + } + + if (settings.EditModeIncluded() || (PlayerSettings.runPlayModeTestAsEditModeTest && settings.PlayModeInEditorIncluded())) + { + yield return new SaveModiedSceneTask(); + yield return new RegisterFilesForCleanupVerificationTask(); + yield return new SaveUndoIndexTask(); + yield return new BuildTestTreeTask(TestPlatform.EditMode); + yield return new PrebuildSetupTask(); + yield return new LegacyEditModeRunTask(); + yield return new PerformUndoTask(); + yield return new CleanupVerificationTask(); + yield break; + } + + if (settings.PlayModeInEditorIncluded() && !PlayerSettings.runPlayModeTestAsEditModeTest) + { + yield return new SaveModiedSceneTask(); + yield return new LegacyPlayModeRunTask(); + yield break; + } + + if (settings.PlayerIncluded()) + { + yield return new LegacyPlayerRunTask(); + yield break; + } + } + + internal List SavedTestJobData = TestJobDataHolder.instance.TestRuns; + internal Action SubscribeCallback = (callback) => EditorApplication.update += callback; + // ReSharper disable once DelegateSubtraction + internal Action UnsubscribeCallback = (callback) => EditorApplication.update -= callback; + internal TestCommandPcHelper PcHelper = new EditModePcHelper(); + internal Func> GetTasks = GetTaskList; + internal Action LogException = Debug.LogException; + internal Action LogError = Debug.LogError; + internal Action ReportRunFailed = CallbacksDelegator.instance.RunFailed; + + private TestJobData m_JobData; + private TestTaskBase[] Tasks; + private IEnumerator m_Enumerator = null; + + public string RunJob(TestJobData data) + { + if (data == null) + { + throw new ArgumentException(null, nameof(data)); + } + + if (m_JobData != null && m_JobData.isRunning) + { + throw new Exception("TestJobRunner is already running a job."); + } + + if (data.isHandledByRunner) + { + throw new Exception("Test job is already being handled."); + } + + m_JobData = data; + m_JobData.isHandledByRunner = true; + + if (!m_JobData.isRunning) + { + m_JobData.isRunning = true; + SavedTestJobData.Add(m_JobData); + } + + Tasks = GetTasks(data.executionSettings).ToArray(); + if (!data.executionSettings.runSynchronously) + { + SubscribeCallback(ExecuteStep); + } + else + { + while (data.isRunning) + { + ExecuteStep(); + } + } + + return data.guid; + } + + private void ExecuteStep() + { + try + { + if (m_JobData.taskIndex >= Tasks.Length) + { + StopRun(); + return; + } + + if (m_Enumerator == null) + { + var task = Tasks[m_JobData.taskIndex]; + m_Enumerator = task.Execute(m_JobData); + if (task.SupportsResumingEnumerator) + { + PcHelper.SetEnumeratorPC(m_Enumerator, m_JobData.taskPC); + } + } + + if (!m_Enumerator.MoveNext()) + { + m_JobData.taskIndex++; + m_JobData.taskPC = 0; + m_Enumerator = null; + return; + } + + if (Tasks[m_JobData.taskIndex].SupportsResumingEnumerator) + { + m_JobData.taskPC = PcHelper.GetEnumeratorPC(m_Enumerator); + } + } + catch (TestRunCanceledException) + { + StopRun(); + } + catch (AggregateException ex) + { + StopRun(); + LogError(ex.Message); + foreach (var innerException in ex.InnerExceptions) + { + LogException(innerException); + } + ReportRunFailed("Multiple unexpected errors happened while running tests."); + } + catch (Exception ex) + { + StopRun(); + LogException(ex); + ReportRunFailed("An unexpected error happened while running tests."); + } + } + + private void StopRun() + { + m_JobData.isRunning = false; + UnsubscribeCallback(ExecuteStep); + SavedTestJobData.Remove(m_JobData); + } + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/TestJobRunner.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/TestJobRunner.cs.meta new file mode 100644 index 0000000..bb3f48d --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/TestJobRunner.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0b677ddfd54046c498a20446baa4f932 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/TestRunCanceledException.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/TestRunCanceledException.cs new file mode 100644 index 0000000..faf67f6 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/TestRunCanceledException.cs @@ -0,0 +1,9 @@ +using System; + +namespace UnityEditor.TestTools.TestRunner.TestRun +{ + internal class TestRunCanceledException : Exception + { + + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/TestRunCanceledException.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/TestRunCanceledException.cs.meta new file mode 100644 index 0000000..bf2f3f0 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRun/TestRunCanceledException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1d45b9d3cf85bee4f99c1492fca8438a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner.meta new file mode 100644 index 0000000..0b4efe9 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 49d4c2ab7ff0f4442af256bad7c9d57c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Callbacks.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Callbacks.meta new file mode 100644 index 0000000..d7be998 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Callbacks.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5d7f0d6acfced954682a89e7002c04d9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Callbacks/EditModeRunnerCallback.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Callbacks/EditModeRunnerCallback.cs new file mode 100644 index 0000000..7d026fa --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Callbacks/EditModeRunnerCallback.cs @@ -0,0 +1,178 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using NUnit.Framework; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; +using UnityEditor.SceneManagement; +using UnityEngine; +using UnityEngine.TestTools.TestRunner; + +namespace UnityEditor.TestTools.TestRunner +{ + internal class EditModeRunnerCallback : ScriptableObject, ITestRunnerListener + { + private EditModeLauncherContextSettings m_Settings; + public SceneSetup[] previousSceneSetup; + public EditModeRunner runner; + + private bool m_Canceled; + private ITest m_CurrentTest; + private int m_TotalTests; + + [SerializeField] + private List m_PendingTests; + [SerializeField] + private string m_LastCountedTestName; + [SerializeField] + private bool m_RunRestarted; + + public void OnDestroy() + { + CleanUp(); + } + + public void RunStarted(ITest testsToRun) + { + Setup(); + if (m_PendingTests == null) + { + m_PendingTests = GetTestsExpectedToRun(testsToRun, runner.GetFilter()); + m_TotalTests = m_PendingTests.Count; + } + } + + public void OnEnable() + { + if (m_RunRestarted) + { + Setup(); + } + } + + private void Setup() + { + m_Settings = new EditModeLauncherContextSettings(); + Application.logMessageReceivedThreaded += LogReceived; + EditorApplication.playModeStateChanged += WaitForExitPlaymode; + EditorApplication.update += DisplayProgressBar; + AssemblyReloadEvents.beforeAssemblyReload += BeforeAssemblyReload; + } + + private void BeforeAssemblyReload() + { + if (m_CurrentTest != null) + { + m_LastCountedTestName = m_CurrentTest.FullName; + m_RunRestarted = true; + } + } + + private void DisplayProgressBar() + { + if (m_CurrentTest == null) + return; + if (!m_Canceled && EditorUtility.DisplayCancelableProgressBar("Test Runner", "Running test " + m_CurrentTest.Name, Math.Min(1.0f, (float)(m_TotalTests - m_PendingTests.Count) / m_TotalTests))) + { + EditorApplication.update -= DisplayProgressBar; + m_Canceled = true; + EditorUtility.ClearProgressBar(); + runner.OnRunCancel(); + } + } + + private static void LogReceived(string message, string stacktrace, LogType type) + { + if (TestContext.Out != null) + TestContext.Out.WriteLine(message); + } + + private static void WaitForExitPlaymode(PlayModeStateChange state) + { + if (state == PlayModeStateChange.EnteredEditMode) + { + EditorApplication.playModeStateChanged -= WaitForExitPlaymode; + //because logMessage is reset on Enter EditMode + //we remove and add the callback + //because Unity + Application.logMessageReceivedThreaded -= LogReceived; + Application.logMessageReceivedThreaded += LogReceived; + } + } + + public void RunFinished(ITestResult result) + { + if (previousSceneSetup != null && previousSceneSetup.Length > 0) + { + try + { + EditorSceneManager.RestoreSceneManagerSetup(previousSceneSetup); + } + catch (ArgumentException e) + { + Debug.LogWarning(e.Message); + } + } + else + { + EditorSceneManager.NewScene(NewSceneSetup.DefaultGameObjects, NewSceneMode.Single); + } + CleanUp(); + } + + private void CleanUp() + { + m_CurrentTest = null; + EditorUtility.ClearProgressBar(); + if (m_Settings != null) + { + m_Settings.Dispose(); + } + Application.logMessageReceivedThreaded -= LogReceived; + EditorApplication.update -= DisplayProgressBar; + } + + public void TestStarted(ITest test) + { + if (test.IsSuite || !(test is TestMethod)) + { + return; + } + + m_CurrentTest = test; + + if (m_RunRestarted) + { + if (test.FullName == m_LastCountedTestName) + m_RunRestarted = false; + } + } + + public void TestFinished(ITestResult result) + { + if (result.Test is TestMethod) + { + m_PendingTests.Remove(result.Test.FullName); + } + } + + private static List GetTestsExpectedToRun(ITest test, ITestFilter filter) + { + var expectedTests = new List(); + + if (filter.Pass(test)) + { + if (test.IsSuite) + { + expectedTests.AddRange(test.Tests.SelectMany(subTest => GetTestsExpectedToRun(subTest, filter))); + } + else + { + expectedTests.Add(test.FullName); + } + } + + return expectedTests; + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Callbacks/EditModeRunnerCallback.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Callbacks/EditModeRunnerCallback.cs.meta new file mode 100644 index 0000000..5c5501b --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Callbacks/EditModeRunnerCallback.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cc456ba93311a3a43ad896449fee9868 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Callbacks/RerunCallback.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Callbacks/RerunCallback.cs new file mode 100644 index 0000000..2515ea7 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Callbacks/RerunCallback.cs @@ -0,0 +1,86 @@ +using UnityEditor.TestTools.TestRunner.Api; +using UnityEditor.TestTools.TestRunner.CommandLineTest; +using UnityEngine.TestTools.TestRunner.GUI; +using UnityEngine; + +namespace UnityEditor.TestTools.TestRunner +{ + internal class RerunCallback : ScriptableObject, ICallbacks + { + public static bool useMockRunFilter = false; + public static TestRunnerFilter mockRunFilter = null; + + public void RunFinished(ITestResultAdaptor result) + { + if (RerunCallbackData.instance.runFilters == null || RerunCallbackData.instance.runFilters.Length == 0) + RerunCallbackData.instance.runFilters = new[] {new TestRunnerFilter()}; + + var runFilter = RerunCallbackData.instance.runFilters[0]; + + if (useMockRunFilter) + { + runFilter = mockRunFilter; + } + + runFilter.testRepetitions--; + if (runFilter.testRepetitions <= 0 || result.TestStatus != TestStatus.Passed) + { + ExitCallbacks.preventExit = false; + return; + } + + ExitCallbacks.preventExit = true; + if (EditorApplication.isPlaying) + { + EditorApplication.playModeStateChanged += WaitForExitPlaymode; + return; + } + + if (!useMockRunFilter) + { + ExecuteTestRunnerAPI(); + } + } + + private static void WaitForExitPlaymode(PlayModeStateChange state) + { + if (state == PlayModeStateChange.EnteredEditMode) + { + ExecuteTestRunnerAPI(); + } + } + + private static void ExecuteTestRunnerAPI() + { + var runFilter = RerunCallbackData.instance.runFilters[0]; + var testMode = RerunCallbackData.instance.testMode; + + var testRunnerApi = ScriptableObject.CreateInstance(); + testRunnerApi.Execute(new Api.ExecutionSettings() + { + filters = new[] + { + new Filter() + { + categoryNames = runFilter.categoryNames, + groupNames = runFilter.groupNames, + testMode = testMode, + testNames = runFilter.testNames + } + } + }); + } + + public void TestStarted(ITestAdaptor test) + { + } + + public void TestFinished(ITestResultAdaptor result) + { + } + + public void RunStarted(ITestAdaptor testsToRun) + { + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Callbacks/RerunCallback.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Callbacks/RerunCallback.cs.meta new file mode 100644 index 0000000..b4fc0e2 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Callbacks/RerunCallback.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b7ff2b2e91321ff4381d4ab45870a32e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Callbacks/RerunCallbackData.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Callbacks/RerunCallbackData.cs new file mode 100644 index 0000000..8aeeeec --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Callbacks/RerunCallbackData.cs @@ -0,0 +1,15 @@ +using UnityEditor.TestTools.TestRunner.Api; +using UnityEngine; +using UnityEngine.TestTools.TestRunner.GUI; + +namespace UnityEditor.TestTools.TestRunner +{ + internal class RerunCallbackData : ScriptableSingleton + { + [SerializeField] + internal TestRunnerFilter[] runFilters; + + [SerializeField] + internal TestMode testMode; + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Callbacks/RerunCallbackData.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Callbacks/RerunCallbackData.cs.meta new file mode 100644 index 0000000..bc911fe --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Callbacks/RerunCallbackData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 087cba9fa6ac867479a0b0fdc0a5864b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Callbacks/RerunCallbackInitializer.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Callbacks/RerunCallbackInitializer.cs new file mode 100644 index 0000000..86be497 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Callbacks/RerunCallbackInitializer.cs @@ -0,0 +1,17 @@ +using UnityEngine; +using UnityEditor.TestTools.TestRunner.Api; + +namespace UnityEditor.TestTools.TestRunner +{ + [InitializeOnLoad] + static class RerunCallbackInitializer + { + static RerunCallbackInitializer() + { + var testRunnerApi = ScriptableObject.CreateInstance(); + + var rerunCallback = ScriptableObject.CreateInstance(); + testRunnerApi.RegisterCallbacks(rerunCallback); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Callbacks/RerunCallbackInitializer.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Callbacks/RerunCallbackInitializer.cs.meta new file mode 100644 index 0000000..1f50bcc --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Callbacks/RerunCallbackInitializer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f73fc901e4b0f2d4daf11f46506054ba +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Callbacks/TestRunnerCallback.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Callbacks/TestRunnerCallback.cs new file mode 100644 index 0000000..6e89c21 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Callbacks/TestRunnerCallback.cs @@ -0,0 +1,37 @@ +using NUnit.Framework.Interfaces; +using UnityEngine; +using UnityEngine.TestTools.TestRunner; + +namespace UnityEditor.TestTools.TestRunner +{ + internal class TestRunnerCallback : ScriptableObject, ITestRunnerListener + { + public void RunStarted(ITest testsToRun) + { + EditorApplication.playModeStateChanged += OnPlayModeStateChanged; + } + + private void OnPlayModeStateChanged(PlayModeStateChange state) + { + if (state == PlayModeStateChange.ExitingPlayMode) + { + EditorApplication.playModeStateChanged -= OnPlayModeStateChanged; + //We need to make sure we don't block NUnit thread in case we exit PlayMode earlier + PlaymodeTestsController.TryCleanup(); + } + } + + public void RunFinished(ITestResult testResults) + { + EditorApplication.isPlaying = false; + } + + public void TestStarted(ITest testName) + { + } + + public void TestFinished(ITestResult test) + { + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Callbacks/TestRunnerCallback.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Callbacks/TestRunnerCallback.cs.meta new file mode 100644 index 0000000..a592975 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Callbacks/TestRunnerCallback.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d44e6804bc58be84ea71a619b468f150 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Callbacks/WindowResultUpdater.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Callbacks/WindowResultUpdater.cs new file mode 100644 index 0000000..831d769 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Callbacks/WindowResultUpdater.cs @@ -0,0 +1,44 @@ +using UnityEditor.TestTools.TestRunner.Api; + +namespace UnityEditor.TestTools.TestRunner.GUI +{ + internal class WindowResultUpdater : ICallbacks, ITestTreeRebuildCallbacks + { + public void RunStarted(ITestAdaptor testsToRun) + { + } + + public void RunFinished(ITestResultAdaptor testResults) + { + if (TestRunnerWindow.s_Instance != null) + { + TestRunnerWindow.s_Instance.RebuildUIFilter(); + } + } + + public void TestStarted(ITestAdaptor testName) + { + } + + public void TestFinished(ITestResultAdaptor test) + { + if (TestRunnerWindow.s_Instance == null) + { + return; + } + + var result = new TestRunnerResult(test); + TestRunnerWindow.s_Instance.m_SelectedTestTypes.UpdateResult(result); + } + + public void TestTreeRebuild(ITestAdaptor test) + { + if (TestRunnerWindow.s_Instance == null) + { + return; + } + + TestRunnerWindow.s_Instance.m_SelectedTestTypes.UpdateTestTree(test); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Callbacks/WindowResultUpdater.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Callbacks/WindowResultUpdater.cs.meta new file mode 100644 index 0000000..5273cf4 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Callbacks/WindowResultUpdater.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6d468ee3657be7a43a2ef2178ec14239 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/EditModePCHelper.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/EditModePCHelper.cs new file mode 100644 index 0000000..7968041 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/EditModePCHelper.cs @@ -0,0 +1,32 @@ +using System.Collections; +using System.Reflection; +using UnityEngine.TestTools; + +namespace UnityEditor.TestTools.TestRunner +{ + internal class EditModePcHelper : TestCommandPcHelper + { + public override void SetEnumeratorPC(IEnumerator enumerator, int pc) + { + GetPCFieldInfo(enumerator).SetValue(enumerator, pc); + } + + public override int GetEnumeratorPC(IEnumerator enumerator) + { + if (enumerator == null) + { + return 0; + } + return (int)GetPCFieldInfo(enumerator).GetValue(enumerator); + } + + private FieldInfo GetPCFieldInfo(IEnumerator enumerator) + { + var field = enumerator.GetType().GetField("$PC", BindingFlags.NonPublic | BindingFlags.Instance); + if (field == null) // Roslyn + field = enumerator.GetType().GetField("<>1__state", BindingFlags.NonPublic | BindingFlags.Instance); + + return field; + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/EditModePCHelper.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/EditModePCHelper.cs.meta new file mode 100644 index 0000000..2bb2d0b --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/EditModePCHelper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6d16f2e78a356d34c9a32108929de932 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/EditModeRunner.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/EditModeRunner.cs new file mode 100644 index 0000000..c0d72b4 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/EditModeRunner.cs @@ -0,0 +1,438 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; +using NUnit.Framework.Internal.Filters; +using UnityEngine; +using UnityEngine.TestTools.NUnitExtensions; +using UnityEngine.TestTools.TestRunner; +using UnityEngine.TestTools; +using UnityEngine.TestTools.TestRunner.GUI; +using UnityEditor.Callbacks; +using UnityEditor.TestTools.TestRunner.Api; +using UnityEngine.TestRunner.NUnitExtensions; +using UnityEngine.TestRunner.NUnitExtensions.Runner; + +namespace UnityEditor.TestTools.TestRunner +{ + internal interface IUnityTestAssemblyRunnerFactory + { + IUnityTestAssemblyRunner Create(TestPlatform testPlatform, WorkItemFactory factory); + } + + internal class UnityTestAssemblyRunnerFactory : IUnityTestAssemblyRunnerFactory + { + public IUnityTestAssemblyRunner Create(TestPlatform testPlatform, WorkItemFactory factory) + { + return new UnityTestAssemblyRunner(new UnityTestAssemblyBuilder(), factory); + } + } + + [Serializable] + internal class EditModeRunner : ScriptableObject, IDisposable + { + [SerializeField] + private Filter[] m_Filters; + + //The counter from the IEnumerator object + [SerializeField] + private int m_CurrentPC; + + [SerializeField] + private bool m_ExecuteOnEnable; + + [SerializeField] + private List m_AlreadyStartedTests; + + [SerializeField] + private List m_ExecutedTests; + + [SerializeField] + private List m_CallbackObjects = new List(); + + [SerializeField] + private TestStartedEvent m_TestStartedEvent = new TestStartedEvent(); + + [SerializeField] + private TestFinishedEvent m_TestFinishedEvent = new TestFinishedEvent(); + + [SerializeField] + private RunStartedEvent m_RunStartedEvent = new RunStartedEvent(); + + [SerializeField] + private RunFinishedEvent m_RunFinishedEvent = new RunFinishedEvent(); + + [SerializeField] + private TestRunnerStateSerializer m_TestRunnerStateSerializer = new TestRunnerStateSerializer(); + + [SerializeField] + private bool m_RunningTests; + + [SerializeField] + private TestPlatform m_TestPlatform; + + [SerializeField] + private object m_CurrentYieldObject; + + [SerializeField] + private BeforeAfterTestCommandState m_SetUpTearDownState; + [SerializeField] + private BeforeAfterTestCommandState m_OuterUnityTestActionState; + + [SerializeField] + public bool RunFinished = false; + + public bool RunningSynchronously { get; private set; } + + internal IUnityTestAssemblyRunner m_Runner; + + private ConstructDelegator m_ConstructDelegator; + + private IEnumerator m_RunStep; + + public IUnityTestAssemblyRunnerFactory UnityTestAssemblyRunnerFactory { get; set; } + + public void Init(Filter[] filters, TestPlatform platform, bool runningSynchronously) + { + m_Filters = filters; + m_TestPlatform = platform; + m_AlreadyStartedTests = new List(); + m_ExecutedTests = new List(); + RunningSynchronously = runningSynchronously; + InitRunner(); + } + + private void InitRunner() + { + //We give the EditMode platform here so we dont suddenly create Playmode work items in the test Runner. + m_Runner = (UnityTestAssemblyRunnerFactory ?? new UnityTestAssemblyRunnerFactory()).Create(TestPlatform.EditMode, new EditmodeWorkItemFactory()); + var testAssemblyProvider = new EditorLoadedTestAssemblyProvider(new EditorCompilationInterfaceProxy(), new EditorAssembliesProxy()); + var assemblies = testAssemblyProvider.GetAssembliesGroupedByType(m_TestPlatform).Select(x => x.Assembly).ToArray(); + var loadedTests = m_Runner.Load(assemblies, TestPlatform.EditMode, + UnityTestAssemblyBuilder.GetNUnitTestBuilderSettings(m_TestPlatform)); + loadedTests.ParseForNameDuplicates(); + CallbacksDelegator.instance.TestTreeRebuild(loadedTests); + hideFlags |= HideFlags.DontSave; + EnumerableSetUpTearDownCommand.ActivePcHelper = new EditModePcHelper(); + OuterUnityTestActionCommand.ActivePcHelper = new EditModePcHelper(); + } + + public void OnEnable() + { + if (m_ExecuteOnEnable) + { + InitRunner(); + m_ExecuteOnEnable = false; + foreach (var callback in m_CallbackObjects) + { + AddListeners(callback as ITestRunnerListener); + } + m_ConstructDelegator = new ConstructDelegator(m_TestRunnerStateSerializer); + + EnumeratorStepHelper.SetEnumeratorPC(m_CurrentPC); + + UnityWorkItemDataHolder.alreadyExecutedTests = m_ExecutedTests.Select(x => x.fullName).ToList(); + UnityWorkItemDataHolder.alreadyStartedTests = m_AlreadyStartedTests; + Run(); + } + } + + public void TestStartedEvent(ITest test) + { + m_AlreadyStartedTests.Add(test.FullName); + } + + public void TestFinishedEvent(ITestResult testResult) + { + m_AlreadyStartedTests.Remove(testResult.FullName); + m_ExecutedTests.Add(TestResultSerializer.MakeFromTestResult(testResult)); + } + + public void Run() + { + EditModeTestCallbacks.RestoringTestContext += OnRestoringTest; + var context = m_Runner.GetCurrentContext(); + if (m_SetUpTearDownState == null) + { + m_SetUpTearDownState = CreateInstance(); + } + context.SetUpTearDownState = m_SetUpTearDownState; + + if (m_OuterUnityTestActionState == null) + { + m_OuterUnityTestActionState = CreateInstance(); + } + context.OuterUnityTestActionState = m_OuterUnityTestActionState; + + if (!m_RunningTests) + { + m_RunStartedEvent.Invoke(m_Runner.LoadedTest); + } + + if (m_ConstructDelegator == null) + m_ConstructDelegator = new ConstructDelegator(m_TestRunnerStateSerializer); + + Reflect.ConstructorCallWrapper = m_ConstructDelegator.Delegate; + m_TestStartedEvent.AddListener(TestStartedEvent); + m_TestFinishedEvent.AddListener(TestFinishedEvent); + + AssemblyReloadEvents.beforeAssemblyReload += OnBeforeAssemblyReload; + + RunningTests = true; + + EditorApplication.LockReloadAssemblies(); + + var testListenerWrapper = new TestListenerWrapper(m_TestStartedEvent, m_TestFinishedEvent); + m_RunStep = m_Runner.Run(testListenerWrapper, GetFilter()).GetEnumerator(); + m_RunningTests = true; + + if (!RunningSynchronously) + EditorApplication.update += TestConsumer; + } + + public void CompleteSynchronously() + { + while (!m_Runner.IsTestComplete) + TestConsumer(); + } + + private void OnBeforeAssemblyReload() + { + EditorApplication.update -= TestConsumer; + + if (m_ExecuteOnEnable) + { + AssemblyReloadEvents.beforeAssemblyReload -= OnBeforeAssemblyReload; + return; + } + + if (m_Runner != null && m_Runner.TopLevelWorkItem != null) + m_Runner.TopLevelWorkItem.ResultedInDomainReload = true; + + if (RunningTests) + { + Debug.LogError("TestRunner: Unexpected assembly reload happened while running tests"); + + EditorUtility.ClearProgressBar(); + + if (m_Runner.GetCurrentContext() != null && m_Runner.GetCurrentContext().CurrentResult != null) + { + m_Runner.GetCurrentContext().CurrentResult.SetResult(ResultState.Cancelled, "Unexpected assembly reload happened"); + } + OnRunCancel(); + } + } + + private bool RunningTests; + + private Stack StepStack = new Stack(); + + private bool MoveNextAndUpdateYieldObject() + { + var result = m_RunStep.MoveNext(); + + if (result) + { + m_CurrentYieldObject = m_RunStep.Current; + while (m_CurrentYieldObject is IEnumerator) // going deeper + { + var currentEnumerator = (IEnumerator)m_CurrentYieldObject; + + // go deeper and add parent to stack + StepStack.Push(m_RunStep); + + m_RunStep = currentEnumerator; + m_CurrentYieldObject = m_RunStep.Current; + } + + if (StepStack.Count > 0 && m_CurrentYieldObject != null) // not null and not IEnumerator, nested + { + Debug.LogError("EditMode test can only yield null, but not <" + m_CurrentYieldObject.GetType().Name + ">"); + } + + return true; + } + + if (StepStack.Count == 0) // done + return false; + + m_RunStep = StepStack.Pop(); // going up + return MoveNextAndUpdateYieldObject(); + } + + private void TestConsumer() + { + var moveNext = MoveNextAndUpdateYieldObject(); + + if (m_CurrentYieldObject != null) + { + InvokeDelegator(); + } + + if (!moveNext && !m_Runner.IsTestComplete) + { + CompleteTestRun(); + throw new IndexOutOfRangeException("There are no more elements to process and IsTestComplete is false"); + } + + if (m_Runner.IsTestComplete) + { + CompleteTestRun(); + } + } + + private void CompleteTestRun() + { + if (!RunningSynchronously) + EditorApplication.update -= TestConsumer; + + TestLauncherBase.ExecutePostBuildCleanupMethods(this.GetLoadedTests(), this.GetFilter(), Application.platform); + + m_RunFinishedEvent.Invoke(m_Runner.Result); + RunFinished = true; + + if (m_ConstructDelegator != null) + m_ConstructDelegator.DestroyCurrentTestObjectIfExists(); + Dispose(); + UnityWorkItemDataHolder.alreadyExecutedTests = null; + } + + private void OnRestoringTest() + { + var item = m_ExecutedTests.Find(t => t.fullName == UnityTestExecutionContext.CurrentContext.CurrentTest.FullName); + if (item != null) + { + item.RestoreTestResult(UnityTestExecutionContext.CurrentContext.CurrentResult); + } + } + + private static bool IsCancelled() + { + return UnityTestExecutionContext.CurrentContext.ExecutionStatus == TestExecutionStatus.AbortRequested || UnityTestExecutionContext.CurrentContext.ExecutionStatus == TestExecutionStatus.StopRequested; + } + + private void InvokeDelegator() + { + if (m_CurrentYieldObject == null) + { + return; + } + + if (IsCancelled()) + { + return; + } + + if (m_CurrentYieldObject is RestoreTestContextAfterDomainReload) + { + if (m_TestRunnerStateSerializer.ShouldRestore()) + { + m_TestRunnerStateSerializer.RestoreContext(); + } + + return; + } + + try + { + if (m_CurrentYieldObject is IEditModeTestYieldInstruction) + { + var editModeTestYieldInstruction = (IEditModeTestYieldInstruction)m_CurrentYieldObject; + if (editModeTestYieldInstruction.ExpectDomainReload) + { + PrepareForDomainReload(); + } + return; + } + } + catch (Exception e) + { + UnityTestExecutionContext.CurrentContext.CurrentResult.RecordException(e); + return; + } + + Debug.LogError("EditMode test can only yield null"); + } + + private void CompilationFailureWatch() + { + if (EditorApplication.isCompiling) + return; + + EditorApplication.update -= CompilationFailureWatch; + + if (EditorUtility.scriptCompilationFailed) + { + EditorUtility.ClearProgressBar(); + OnRunCancel(); + } + } + + private void PrepareForDomainReload() + { + m_TestRunnerStateSerializer.SaveContext(); + m_CurrentPC = EnumeratorStepHelper.GetEnumeratorPC(TestEnumerator.Enumerator); + m_ExecuteOnEnable = true; + + RunningTests = false; + } + + public T AddEventHandler() where T : ScriptableObject, ITestRunnerListener + { + var eventHandler = CreateInstance(); + eventHandler.hideFlags |= HideFlags.DontSave; + m_CallbackObjects.Add(eventHandler); + + AddListeners(eventHandler); + + return eventHandler; + } + + private void AddListeners(ITestRunnerListener eventHandler) + { + m_TestStartedEvent.AddListener(eventHandler.TestStarted); + m_TestFinishedEvent.AddListener(eventHandler.TestFinished); + m_RunStartedEvent.AddListener(eventHandler.RunStarted); + m_RunFinishedEvent.AddListener(eventHandler.RunFinished); + } + + public void Dispose() + { + Reflect.MethodCallWrapper = null; + EditorApplication.update -= TestConsumer; + + DestroyImmediate(this); + + if (m_CallbackObjects != null) + { + foreach (var obj in m_CallbackObjects) + { + DestroyImmediate(obj); + } + m_CallbackObjects.Clear(); + } + RunningTests = false; + EditorApplication.UnlockReloadAssemblies(); + } + + public void OnRunCancel() + { + UnityWorkItemDataHolder.alreadyExecutedTests = null; + m_ExecuteOnEnable = false; + m_Runner.StopRun(); + RunFinished = true; + } + + public ITest GetLoadedTests() + { + return m_Runner.LoadedTest; + } + + public ITestFilter GetFilter() + { + return new OrFilter(m_Filters.Select(filter => filter.BuildNUnitFilter(RunningSynchronously)).ToArray()); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/EditModeRunner.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/EditModeRunner.cs.meta new file mode 100644 index 0000000..faf2358 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/EditModeRunner.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c9219e99d466b7741a057132d1994f35 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/EditmodeWorkItemFactory.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/EditmodeWorkItemFactory.cs new file mode 100644 index 0000000..a81fcdc --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/EditmodeWorkItemFactory.cs @@ -0,0 +1,14 @@ +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; +using UnityEngine.TestRunner.NUnitExtensions.Runner; + +namespace UnityEditor.TestTools.TestRunner +{ + internal class EditmodeWorkItemFactory : WorkItemFactory + { + protected override UnityWorkItem Create(TestMethod method, ITestFilter filter, ITest loadedTest) + { + return new EditorEnumeratorTestWorkItem(method, filter); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/EditmodeWorkItemFactory.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/EditmodeWorkItemFactory.cs.meta new file mode 100644 index 0000000..d775d1f --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/EditmodeWorkItemFactory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3dde15f260b0dd1469e60d16eaa795dc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/EditorEnumeratorTestWorkItem.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/EditorEnumeratorTestWorkItem.cs new file mode 100644 index 0000000..14d12c2 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/EditorEnumeratorTestWorkItem.cs @@ -0,0 +1,179 @@ +using System; +using System.Collections; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; +using NUnit.Framework.Internal.Commands; +using NUnit.Framework.Internal.Execution; +using UnityEngine; +using UnityEngine.TestRunner.NUnitExtensions.Runner; +using UnityEngine.TestTools; + +namespace UnityEditor.TestTools.TestRunner +{ + internal class EditorEnumeratorTestWorkItem : UnityWorkItem + { + private TestCommand m_Command; + + public EditorEnumeratorTestWorkItem(TestMethod test, ITestFilter filter) + : base(test, null) + { + m_Command = TestCommandBuilder.BuildTestCommand(test, filter); + } + + private static IEnumerableTestMethodCommand FindFirstIEnumerableTestMethodCommand(TestCommand command) + { + if (command == null) + { + return null; + } + + if (command is IEnumerableTestMethodCommand) + { + return (IEnumerableTestMethodCommand)command; + } + + if (command is DelegatingTestCommand) + { + var delegatingTestCommand = (DelegatingTestCommand)command; + return FindFirstIEnumerableTestMethodCommand(delegatingTestCommand.GetInnerCommand()); + } + return null; + } + + protected override IEnumerable PerformWork() + { + if (IsCancelledRun()) + { + yield break; + } + + if (m_DontRunRestoringResult) + { + if (EditModeTestCallbacks.RestoringTestContext == null) + { + throw new NullReferenceException("RestoringTestContext is not set"); + } + EditModeTestCallbacks.RestoringTestContext(); + Result = Context.CurrentResult; + yield break; + } + + try + { + if (IsCancelledRun()) + { + yield break; + } + + if (m_Command is SkipCommand) + { + m_Command.Execute(Context); + Result = Context.CurrentResult; + yield break; + } + + //Check if we can execute this test + var firstEnumerableCommand = FindFirstIEnumerableTestMethodCommand(m_Command); + if (firstEnumerableCommand == null) + { + Context.CurrentResult.SetResult(ResultState.Error, "Returning IEnumerator but not using test attribute supporting this"); + yield break; + } + + if (m_Command.Test.Method.ReturnType.IsType(typeof(IEnumerator))) + { + if (m_Command is ApplyChangesToContextCommand) + { + var applyChangesToContextCommand = ((ApplyChangesToContextCommand)m_Command); + applyChangesToContextCommand.ApplyChanges(Context); + m_Command = applyChangesToContextCommand.GetInnerCommand(); + } + + var innerCommand = m_Command as IEnumerableTestMethodCommand; + if (innerCommand == null) + { + Debug.Log("failed getting innerCommand"); + throw new Exception("Tests returning IEnumerator can only use test attributes handling those"); + } + + foreach (var workItemStep in innerCommand.ExecuteEnumerable(Context)) + { + if (IsCancelledRun()) + { + yield break; + } + + if (workItemStep is TestEnumerator) + { + if (EnumeratorStepHelper.UpdateEnumeratorPcIfNeeded(TestEnumerator.Enumerator)) + { + yield return new RestoreTestContextAfterDomainReload(); + } + continue; + } + + if (workItemStep is AsyncOperation) + { + var asyncOperation = (AsyncOperation)workItemStep; + while (!asyncOperation.isDone) + { + if (IsCancelledRun()) + { + yield break; + } + + yield return null; + } + continue; + } + + ResultedInDomainReload = false; + + if (workItemStep is IEditModeTestYieldInstruction) + { + var editModeTestYieldInstruction = (IEditModeTestYieldInstruction)workItemStep; + yield return editModeTestYieldInstruction; + var enumerator = editModeTestYieldInstruction.Perform(); + while (true) + { + bool moveNext; + try + { + moveNext = enumerator.MoveNext(); + } + catch (Exception e) + { + Context.CurrentResult.RecordException(e); + break; + } + + if (!moveNext) + { + break; + } + yield return null; + } + } + else + { + yield return workItemStep; + } + } + + Result = Context.CurrentResult; + EditorApplication.isPlaying = false; + yield return null; + } + } + finally + { + WorkItemComplete(); + } + } + + private bool IsCancelledRun() + { + return Context.ExecutionStatus == TestExecutionStatus.AbortRequested || Context.ExecutionStatus == TestExecutionStatus.StopRequested; + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/EditorEnumeratorTestWorkItem.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/EditorEnumeratorTestWorkItem.cs.meta new file mode 100644 index 0000000..9007130 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/EditorEnumeratorTestWorkItem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1ebc1994f9a3d5649a1201d3a84b38df +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/EnumeratorStepHelper.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/EnumeratorStepHelper.cs new file mode 100644 index 0000000..0809a6f --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/EnumeratorStepHelper.cs @@ -0,0 +1,51 @@ +using System.Collections; +using System.Reflection; + +namespace UnityEditor.TestTools.TestRunner +{ + internal class EnumeratorStepHelper + { + private static int m_PC; + + public static void SetEnumeratorPC(int pc) + { + m_PC = pc; + } + + /// + /// Gets the current enumerator PC + /// + /// + /// The PC + /// 0 if no current Enumeration + /// + public static int GetEnumeratorPC(IEnumerator enumerator) + { + if (enumerator == null) + { + return 0; + } + return (int)GetPCFieldInfo(enumerator).GetValue(enumerator); + } + + public static bool UpdateEnumeratorPcIfNeeded(IEnumerator enumerator) + { + if (m_PC > 0) + { + GetPCFieldInfo(enumerator).SetValue(enumerator, m_PC); + m_PC = 0; + return true; + } + return false; + } + + private static FieldInfo GetPCFieldInfo(IEnumerator enumerator) + { + var field = enumerator.GetType().GetField("$PC", BindingFlags.NonPublic | BindingFlags.Instance); + if (field == null) // Roslyn + field = enumerator.GetType().GetField("<>1__state", BindingFlags.NonPublic | BindingFlags.Instance); + + return field; + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/EnumeratorStepHelper.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/EnumeratorStepHelper.cs.meta new file mode 100644 index 0000000..92e993b --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/EnumeratorStepHelper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 901b761c5c1e22d4e8a3ba7d95bc1f5d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Messages.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Messages.meta new file mode 100644 index 0000000..64ff2d2 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Messages.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d9682e749d3efc642af54d789d9090a6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Messages/EnterPlayMode.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Messages/EnterPlayMode.cs new file mode 100644 index 0000000..e1ad8c7 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Messages/EnterPlayMode.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections; +using UnityEditor; + +namespace UnityEngine.TestTools +{ + public class EnterPlayMode : IEditModeTestYieldInstruction + { + public bool ExpectDomainReload { get; } + public bool ExpectedPlaymodeState { get; private set; } + + public EnterPlayMode(bool expectDomainReload = true) + { + ExpectDomainReload = expectDomainReload; + } + + public IEnumerator Perform() + { + if (EditorApplication.isPlaying) + { + throw new Exception("Editor is already in PlayMode"); + } + if (EditorUtility.scriptCompilationFailed) + { + throw new Exception("Script compilation failed"); + } + yield return null; + ExpectedPlaymodeState = true; + + EditorApplication.UnlockReloadAssemblies(); + EditorApplication.isPlaying = true; + + while (!EditorApplication.isPlaying) + { + yield return null; + } + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Messages/EnterPlayMode.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Messages/EnterPlayMode.cs.meta new file mode 100644 index 0000000..f1775e7 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Messages/EnterPlayMode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9bd5a110ed89025499ddee8c7e73778e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Messages/ExitPlayMode.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Messages/ExitPlayMode.cs new file mode 100644 index 0000000..85ef889 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Messages/ExitPlayMode.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections; +using UnityEditor; + +namespace UnityEngine.TestTools +{ + public class ExitPlayMode : IEditModeTestYieldInstruction + { + public bool ExpectDomainReload { get; } + public bool ExpectedPlaymodeState { get; private set; } + + public ExitPlayMode() + { + ExpectDomainReload = false; + ExpectedPlaymodeState = false; + } + + public IEnumerator Perform() + { + if (!EditorApplication.isPlayingOrWillChangePlaymode) + { + throw new Exception("Editor is already in EditMode"); + } + + EditorApplication.isPlaying = false; + while (EditorApplication.isPlaying) + { + yield return null; + } + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Messages/ExitPlayMode.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Messages/ExitPlayMode.cs.meta new file mode 100644 index 0000000..19c058a --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Messages/ExitPlayMode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 408674d91d506a54aac9a7f07951c018 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Messages/RecompileScripts.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Messages/RecompileScripts.cs new file mode 100644 index 0000000..96dc8f3 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Messages/RecompileScripts.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections; +using UnityEditor; + +namespace UnityEngine.TestTools +{ + public class RecompileScripts : IEditModeTestYieldInstruction + { + public RecompileScripts() : this(true) + { + } + + public RecompileScripts(bool expectScriptCompilation) : this(expectScriptCompilation, true) + { + } + + public RecompileScripts(bool expectScriptCompilation, bool expectScriptCompilationSuccess) + { + ExpectScriptCompilation = expectScriptCompilation; + ExpectScriptCompilationSuccess = expectScriptCompilationSuccess; + ExpectDomainReload = true; + } + + public bool ExpectDomainReload { get; private set; } + public bool ExpectedPlaymodeState { get; } + public bool ExpectScriptCompilation { get; private set; } + public bool ExpectScriptCompilationSuccess { get; private set; } + public static RecompileScripts Current { get; private set; } + + public IEnumerator Perform() + { + Current = this; + + // We need to yield, to give the test runner a chance to prepare for the domain reload + // If the script compilation happens very fast, then EditModeRunner.MoveNextAndUpdateYieldObject will not have a chance to set m_CurrentYieldObject + // This really should be fixed in EditModeRunner.MoveNextAndUpdateYieldObject + yield return null; + + AssetDatabase.Refresh(); + + if (ExpectScriptCompilation && !EditorApplication.isCompiling) + { + Current = null; + throw new Exception("Editor does not need to recompile scripts"); + } + + EditorApplication.UnlockReloadAssemblies(); + + while (EditorApplication.isCompiling) + { + yield return null; + } + + Current = null; + + if (ExpectScriptCompilationSuccess && EditorUtility.scriptCompilationFailed) + { + EditorApplication.LockReloadAssemblies(); + throw new Exception("Script compilation failed"); + } + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Messages/RecompileScripts.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Messages/RecompileScripts.cs.meta new file mode 100644 index 0000000..07895f3 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Messages/RecompileScripts.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9202fbba95ea8294cb5e718f028f21b0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Messages/WaitForDomainReload.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Messages/WaitForDomainReload.cs new file mode 100644 index 0000000..19920a1 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Messages/WaitForDomainReload.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections; +using UnityEditor; + +namespace UnityEngine.TestTools +{ + public class WaitForDomainReload : IEditModeTestYieldInstruction + { + public WaitForDomainReload() + { + ExpectDomainReload = true; + } + + public bool ExpectDomainReload { get;  } + public bool ExpectedPlaymodeState { get; } + + public IEnumerator Perform() + { + EditorApplication.UnlockReloadAssemblies(); + + // Detect if AssetDatabase.Refresh was called (true) or if it will be called on next tick + bool isAsync = EditorApplication.isCompiling; + + yield return null; + + if (!isAsync) + { + EditorApplication.LockReloadAssemblies(); + throw new Exception("Expected domain reload, but it did not occur"); + } + + while (EditorApplication.isCompiling) + { + yield return null; + } + + if (EditorUtility.scriptCompilationFailed) + { + EditorApplication.LockReloadAssemblies(); + throw new Exception("Script compilation failed"); + } + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Messages/WaitForDomainReload.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Messages/WaitForDomainReload.cs.meta new file mode 100644 index 0000000..b827ea8 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Messages/WaitForDomainReload.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5df3c21c5237c994db89660fbdfee07d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils.meta new file mode 100644 index 0000000..9c23303 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1f5bbb88ca730434483440cbc0278ef6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/CachingTestListProvider.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/CachingTestListProvider.cs new file mode 100644 index 0000000..9ec2333 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/CachingTestListProvider.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Generic; +using UnityEditor.TestTools.TestRunner.Api; +using UnityEngine.TestRunner.NUnitExtensions; +using UnityEngine.TestTools; + +namespace UnityEditor.TestTools.TestRunner +{ + internal class CachingTestListProvider + { + private readonly ITestListProvider m_InnerTestListProvider; + private readonly ITestListCache m_TestListCache; + private readonly ITestAdaptorFactory m_TestAdaptorFactory; + public CachingTestListProvider(ITestListProvider innerTestListProvider, ITestListCache testListCache, ITestAdaptorFactory testAdaptorFactory) + { + m_InnerTestListProvider = innerTestListProvider; + m_TestListCache = testListCache; + m_TestAdaptorFactory = testAdaptorFactory; + } + + public IEnumerator GetTestListAsync(TestPlatform platform) + { + var testFromCache = m_TestListCache.GetTestFromCacheAsync(platform); + while (testFromCache.MoveNext()) + { + yield return null; + } + + + if (testFromCache.Current != null) + { + yield return testFromCache.Current; + } + else + { + var test = m_InnerTestListProvider.GetTestListAsync(platform); + while (test.MoveNext()) + { + yield return null; + } + + test.Current.ParseForNameDuplicates(); + m_TestListCache.CacheTest(platform, test.Current); + yield return m_TestAdaptorFactory.Create(test.Current); + } + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/CachingTestListProvider.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/CachingTestListProvider.cs.meta new file mode 100644 index 0000000..2a44a64 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/CachingTestListProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 26f3e7301af463c4ca72fa98d59b429e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/EditorAssembliesProxy.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/EditorAssembliesProxy.cs new file mode 100644 index 0000000..ee0e5dc --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/EditorAssembliesProxy.cs @@ -0,0 +1,13 @@ +using System.Linq; +using UnityEngine.TestTools.Utils; + +namespace UnityEditor.TestTools.TestRunner +{ + internal class EditorAssembliesProxy : IEditorAssembliesProxy + { + public IAssemblyWrapper[] loadedAssemblies + { + get { return EditorAssemblies.loadedAssemblies.OrderBy(a => a.FullName).Select(x => new EditorAssemblyWrapper(x)).ToArray(); } + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/EditorAssembliesProxy.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/EditorAssembliesProxy.cs.meta new file mode 100644 index 0000000..711a965 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/EditorAssembliesProxy.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f96d0ea807c081145a1170ed1b6d71e0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/EditorAssemblyWrapper.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/EditorAssemblyWrapper.cs new file mode 100644 index 0000000..8a18b12 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/EditorAssemblyWrapper.cs @@ -0,0 +1,18 @@ +using System.Reflection; +using UnityEngine.TestTools.Utils; + +namespace UnityEditor.TestTools.TestRunner +{ + internal class EditorAssemblyWrapper : AssemblyWrapper + { + public EditorAssemblyWrapper(Assembly assembly) + : base(assembly) {} + + public override AssemblyName[] GetReferencedAssemblies() + { + return Assembly.GetReferencedAssemblies(); + } + + public override string Location { get { return Assembly.Location; } } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/EditorAssemblyWrapper.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/EditorAssemblyWrapper.cs.meta new file mode 100644 index 0000000..14a03af --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/EditorAssemblyWrapper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 20cdb37e6fea6d946bbb84d2c923db85 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/EditorCompilationInterfaceProxy.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/EditorCompilationInterfaceProxy.cs new file mode 100644 index 0000000..5420719 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/EditorCompilationInterfaceProxy.cs @@ -0,0 +1,17 @@ +using UnityEditor.Scripting.ScriptCompilation; + +namespace UnityEditor.TestTools.TestRunner +{ + internal class EditorCompilationInterfaceProxy : IEditorCompilationInterfaceProxy + { + public ScriptAssembly[] GetAllEditorScriptAssemblies() + { + return EditorCompilationInterface.Instance.GetAllEditorScriptAssemblies(EditorCompilationInterface.GetAdditionalEditorScriptCompilationOptions()); + } + + public PrecompiledAssembly[] GetAllPrecompiledAssemblies() + { + return EditorCompilationInterface.Instance.GetAllPrecompiledAssemblies(); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/EditorCompilationInterfaceProxy.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/EditorCompilationInterfaceProxy.cs.meta new file mode 100644 index 0000000..41e354d --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/EditorCompilationInterfaceProxy.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c9b23632c77de204abfe8bf7168d48c0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/EditorLoadedTestAssemblyProvider.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/EditorLoadedTestAssemblyProvider.cs new file mode 100644 index 0000000..cffe42d --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/EditorLoadedTestAssemblyProvider.cs @@ -0,0 +1,69 @@ +using System.Collections.Generic; +using System.IO; +using System.Linq; +using UnityEditor.Scripting.ScriptCompilation; +using UnityEngine.TestTools; +using UnityEngine.TestTools.Utils; + +namespace UnityEditor.TestTools.TestRunner +{ + internal class EditorLoadedTestAssemblyProvider : IEditorLoadedTestAssemblyProvider + { + private const string k_NunitAssemblyName = "nunit.framework"; + private const string k_TestRunnerAssemblyName = "UnityEngine.TestRunner"; + internal const string k_PerformanceTestingAssemblyName = "Unity.PerformanceTesting"; + + private readonly IEditorAssembliesProxy m_EditorAssembliesProxy; + private readonly ScriptAssembly[] m_AllEditorScriptAssemblies; + private readonly PrecompiledAssembly[] m_AllPrecompiledAssemblies; + + public EditorLoadedTestAssemblyProvider(IEditorCompilationInterfaceProxy compilationInterfaceProxy, IEditorAssembliesProxy editorAssembliesProxy) + { + m_EditorAssembliesProxy = editorAssembliesProxy; + m_AllEditorScriptAssemblies = compilationInterfaceProxy.GetAllEditorScriptAssemblies(); + m_AllPrecompiledAssemblies = compilationInterfaceProxy.GetAllPrecompiledAssemblies(); + } + + public List GetAssembliesGroupedByType(TestPlatform mode) + { + var assemblies = GetAssembliesGroupedByTypeAsync(mode); + while (assemblies.MoveNext()) + { + } + + return assemblies.Current.Where(pair => mode.IsFlagIncluded(pair.Key)).SelectMany(pair => pair.Value).ToList(); + } + + public IEnumerator>> GetAssembliesGroupedByTypeAsync(TestPlatform mode) + { + IAssemblyWrapper[] loadedAssemblies = m_EditorAssembliesProxy.loadedAssemblies; + + IDictionary> result = new Dictionary>() + { + {TestPlatform.EditMode, new List() }, + {TestPlatform.PlayMode, new List() } + }; + + foreach (var loadedAssembly in loadedAssemblies) + { + if (loadedAssembly.GetReferencedAssemblies().Any(x => x.Name == k_NunitAssemblyName || x.Name == k_TestRunnerAssemblyName || x.Name == k_PerformanceTestingAssemblyName)) + { + var assemblyName = new FileInfo(loadedAssembly.Location).Name; + var scriptAssemblies = m_AllEditorScriptAssemblies.Where(x => x.Filename == assemblyName).ToList(); + var precompiledAssemblies = m_AllPrecompiledAssemblies.Where(x => new FileInfo(x.Path).Name == assemblyName).ToList(); + if (scriptAssemblies.Count < 1 && precompiledAssemblies.Count < 1) + { + continue; + } + + var assemblyFlags = scriptAssemblies.Any() ? scriptAssemblies.Single().Flags : precompiledAssemblies.Single().Flags; + var assemblyType = (assemblyFlags & AssemblyFlags.EditorOnly) == AssemblyFlags.EditorOnly ? TestPlatform.EditMode : TestPlatform.PlayMode; + result[assemblyType].Add(loadedAssembly); + yield return null; + } + } + + yield return result; + } + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/EditorLoadedTestAssemblyProvider.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/EditorLoadedTestAssemblyProvider.cs.meta new file mode 100644 index 0000000..e2634ad --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/EditorLoadedTestAssemblyProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 033c884ba52437d49bc55935939ef1c6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/IEditorAssembliesProxy.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/IEditorAssembliesProxy.cs new file mode 100644 index 0000000..30dc758 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/IEditorAssembliesProxy.cs @@ -0,0 +1,9 @@ +using UnityEngine.TestTools.Utils; + +namespace UnityEditor.TestTools.TestRunner +{ + internal interface IEditorAssembliesProxy + { + IAssemblyWrapper[] loadedAssemblies { get; } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/IEditorAssembliesProxy.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/IEditorAssembliesProxy.cs.meta new file mode 100644 index 0000000..51988c7 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/IEditorAssembliesProxy.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 98808b11e78f6c84a841a6b4bc5a29d2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/IEditorCompilationInterfaceProxy.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/IEditorCompilationInterfaceProxy.cs new file mode 100644 index 0000000..330e83b --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/IEditorCompilationInterfaceProxy.cs @@ -0,0 +1,10 @@ +using UnityEditor.Scripting.ScriptCompilation; + +namespace UnityEditor.TestTools.TestRunner +{ + internal interface IEditorCompilationInterfaceProxy + { + ScriptAssembly[] GetAllEditorScriptAssemblies(); + PrecompiledAssembly[] GetAllPrecompiledAssemblies(); + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/IEditorCompilationInterfaceProxy.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/IEditorCompilationInterfaceProxy.cs.meta new file mode 100644 index 0000000..d6a3b78 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/IEditorCompilationInterfaceProxy.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 28c8fcb831e6e734a9f564bc4f495eba +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/IEditorLoadedTestAssemblyProvider.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/IEditorLoadedTestAssemblyProvider.cs new file mode 100644 index 0000000..1e06494 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/IEditorLoadedTestAssemblyProvider.cs @@ -0,0 +1,12 @@ +using System.Collections.Generic; +using UnityEngine.TestTools; +using UnityEngine.TestTools.Utils; + +namespace UnityEditor.TestTools.TestRunner +{ + internal interface IEditorLoadedTestAssemblyProvider + { + List GetAssembliesGroupedByType(TestPlatform mode); + IEnumerator>> GetAssembliesGroupedByTypeAsync(TestPlatform mode); + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/IEditorLoadedTestAssemblyProvider.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/IEditorLoadedTestAssemblyProvider.cs.meta new file mode 100644 index 0000000..fa0b20b --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/IEditorLoadedTestAssemblyProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 936b6288befc460409cfdff3ac92fc95 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/ITestListCache.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/ITestListCache.cs new file mode 100644 index 0000000..9d61724 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/ITestListCache.cs @@ -0,0 +1,13 @@ +using System.Collections.Generic; +using NUnit.Framework.Interfaces; +using UnityEditor.TestTools.TestRunner.Api; +using UnityEngine.TestTools; + +namespace UnityEditor.TestTools.TestRunner +{ + interface ITestListCache + { + void CacheTest(TestPlatform platform, ITest test); + IEnumerator GetTestFromCacheAsync(TestPlatform platform); + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/ITestListCache.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/ITestListCache.cs.meta new file mode 100644 index 0000000..6a5a615 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/ITestListCache.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a704c010bcdb1ec4a9f3417b3c393164 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/ITestListCacheData.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/ITestListCacheData.cs new file mode 100644 index 0000000..3aa14e6 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/ITestListCacheData.cs @@ -0,0 +1,13 @@ +using System.Collections.Generic; +using NUnit.Framework.Interfaces; +using UnityEngine.TestRunner.TestLaunchers; +using UnityEngine.TestTools; + +namespace UnityEditor.TestTools.TestRunner +{ + interface ITestListCacheData + { + List platforms { get; } + List cachedData { get; } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/ITestListCacheData.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/ITestListCacheData.cs.meta new file mode 100644 index 0000000..fd02cd0 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/ITestListCacheData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7043e9a330ac2d84a80a965ada4589ad +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/ITestListProvider.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/ITestListProvider.cs new file mode 100644 index 0000000..5657aca --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/ITestListProvider.cs @@ -0,0 +1,11 @@ +using System.Collections.Generic; +using NUnit.Framework.Interfaces; +using UnityEngine.TestTools; + +namespace UnityEditor.TestTools.TestRunner +{ + interface ITestListProvider + { + IEnumerator GetTestListAsync(TestPlatform platform); + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/ITestListProvider.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/ITestListProvider.cs.meta new file mode 100644 index 0000000..1d84e76 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/ITestListProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 64689f8b25eadac4da519e96f514b653 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/TestListCache.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/TestListCache.cs new file mode 100644 index 0000000..897b6b3 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/TestListCache.cs @@ -0,0 +1,56 @@ +using System.Collections.Generic; +using NUnit.Framework.Interfaces; +using UnityEditor.TestTools.TestRunner.Api; +using UnityEngine.TestRunner.TestLaunchers; +using UnityEngine.TestTools; + +namespace UnityEditor.TestTools.TestRunner +{ + internal class TestListCache : ITestListCache + { + private readonly ITestAdaptorFactory m_TestAdaptorFactory; + private readonly IRemoteTestResultDataFactory m_TestResultDataFactory; + private readonly ITestListCacheData m_TestListCacheData; + + public TestListCache(ITestAdaptorFactory testAdaptorFactory, IRemoteTestResultDataFactory testResultDataFactory, ITestListCacheData testListCacheData) + { + m_TestAdaptorFactory = testAdaptorFactory; + m_TestResultDataFactory = testResultDataFactory; + m_TestListCacheData = testListCacheData; + } + + public void CacheTest(TestPlatform platform, ITest test) + { + var index = m_TestListCacheData.platforms.IndexOf(platform); + if (index < 0) + { + m_TestListCacheData.cachedData.Add(test); + m_TestListCacheData.platforms.Add(platform); + } + else + { + m_TestListCacheData.cachedData[index] = test; + } + } + + public IEnumerator GetTestFromCacheAsync(TestPlatform platform) + { + var index = m_TestListCacheData.platforms.IndexOf(platform); + if (index < 0) + { + yield return null; + yield break; + } + + var testData = m_TestListCacheData.cachedData[index]; + yield return m_TestAdaptorFactory.Create(testData); + } + + [Callbacks.DidReloadScripts] + private static void ScriptReloaded() + { + TestListCacheData.instance.cachedData.Clear(); + TestListCacheData.instance.platforms.Clear(); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/TestListCache.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/TestListCache.cs.meta new file mode 100644 index 0000000..fae5fd1 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/TestListCache.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d685d97a1eb004f49afea0cc982ff728 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/TestListCacheData.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/TestListCacheData.cs new file mode 100644 index 0000000..8081b57 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/TestListCacheData.cs @@ -0,0 +1,27 @@ +using System.Collections.Generic; +using NUnit.Framework.Interfaces; +using UnityEngine; +using UnityEngine.TestRunner.TestLaunchers; +using UnityEngine.TestTools; + +namespace UnityEditor.TestTools.TestRunner +{ + internal class TestListCacheData : ScriptableSingleton, ITestListCacheData + { + [SerializeField] + private List m_Platforms = new List(); + + [SerializeField] + private List m_CachedData = new List(); + + public List platforms + { + get { return m_Platforms; } + } + + public List cachedData + { + get { return m_CachedData; } + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/TestListCacheData.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/TestListCacheData.cs.meta new file mode 100644 index 0000000..ba5bab6 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/TestListCacheData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f1b6399349763114d9361bc6dfcd025b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/TestListJob.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/TestListJob.cs new file mode 100644 index 0000000..1864c78 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/TestListJob.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using UnityEditor.TestTools.TestRunner.Api; +using UnityEngine.TestTools; + +namespace UnityEditor.TestTools.TestRunner +{ + internal class TestListJob + { + private CachingTestListProvider m_TestListProvider; + private TestPlatform m_Platform; + private Action m_Callback; + private IEnumerator m_ResultEnumerator; + public TestListJob(CachingTestListProvider testListProvider, TestPlatform platform, Action callback) + { + m_TestListProvider = testListProvider; + m_Platform = platform; + m_Callback = callback; + } + + public void Start() + { + m_ResultEnumerator = m_TestListProvider.GetTestListAsync(m_Platform); + EditorApplication.update += EditorUpdate; + } + + private void EditorUpdate() + { + if (!m_ResultEnumerator.MoveNext()) + { + m_Callback(m_ResultEnumerator.Current); + EditorApplication.update -= EditorUpdate; + } + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/TestListJob.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/TestListJob.cs.meta new file mode 100644 index 0000000..38f8af8 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/TestListJob.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dec9066d4afefe444be0dad3f137730d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/TestListProvider.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/TestListProvider.cs new file mode 100644 index 0000000..e1402a6 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/TestListProvider.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using NUnit.Framework.Interfaces; +using UnityEngine.TestTools; +using UnityEngine.TestTools.NUnitExtensions; + +namespace UnityEditor.TestTools.TestRunner +{ + internal class TestListProvider : ITestListProvider + { + private readonly EditorLoadedTestAssemblyProvider m_AssemblyProvider; + private readonly UnityTestAssemblyBuilder m_AssemblyBuilder; + + public TestListProvider(EditorLoadedTestAssemblyProvider assemblyProvider, UnityTestAssemblyBuilder assemblyBuilder) + { + m_AssemblyProvider = assemblyProvider; + m_AssemblyBuilder = assemblyBuilder; + } + + public IEnumerator GetTestListAsync(TestPlatform platform) + { + var assembliesTask = m_AssemblyProvider.GetAssembliesGroupedByTypeAsync(platform); + while (assembliesTask.MoveNext()) + { + yield return null; + } + + var assemblies = assembliesTask.Current.Where(pair => platform.IsFlagIncluded(pair.Key)) + .SelectMany(pair => pair.Value.Select(assemblyInfo => Tuple.Create(assemblyInfo.Assembly, pair.Key))).ToArray(); + + var settings = UnityTestAssemblyBuilder.GetNUnitTestBuilderSettings(platform); + var test = m_AssemblyBuilder.BuildAsync(assemblies.Select(a => a.Item1).ToArray(), assemblies.Select(a => a.Item2).ToArray(), settings); + while (test.MoveNext()) + { + yield return null; + } + + yield return test.Current; + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/TestListProvider.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/TestListProvider.cs.meta new file mode 100644 index 0000000..975a1a3 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunner/Utils/TestListProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f15cbb987069826429540d0ea0937442 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunnerWindow.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunnerWindow.cs new file mode 100644 index 0000000..45eab30 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunnerWindow.cs @@ -0,0 +1,263 @@ +using System; +using UnityEditor.Callbacks; +using UnityEditor.TestTools.TestRunner.Api; +using UnityEditor.TestTools.TestRunner.GUI; +using UnityEngine; + +namespace UnityEditor.TestTools.TestRunner +{ + [Serializable] + internal class TestRunnerWindow : EditorWindow, IHasCustomMenu + { + internal static class Styles + { + public static GUIStyle info; + public static GUIStyle testList; + + static Styles() + { + info = new GUIStyle(EditorStyles.wordWrappedLabel); + info.wordWrap = false; + info.stretchHeight = true; + info.margin.right = 15; + + testList = new GUIStyle("CN Box"); + testList.margin.top = 0; + testList.padding.left = 3; + } + } + + private readonly GUIContent m_GUIHorizontalSplit = EditorGUIUtility.TrTextContent("Horizontal layout"); + private readonly GUIContent m_GUIVerticalSplit = EditorGUIUtility.TrTextContent("Vertical layout"); + private readonly GUIContent m_GUIEnableaPlaymodeTestsRunner = EditorGUIUtility.TrTextContent("Enable playmode tests for all assemblies"); + private readonly GUIContent m_GUIDisablePlaymodeTestsRunner = EditorGUIUtility.TrTextContent("Disable playmode tests for all assemblies"); + private readonly GUIContent m_GUIRunPlayModeTestAsEditModeTests = EditorGUIUtility.TrTextContent("Run playmode tests as editmode tests"); + + internal static TestRunnerWindow s_Instance; + private bool m_IsBuilding; + [NonSerialized] + private bool m_Enabled; + public TestFilterSettings filterSettings; + + [SerializeField] + private SplitterState m_Spl = new SplitterState(new float[] { 75, 25 }, new[] { 32, 32 }, null); + + private TestRunnerWindowSettings m_Settings; + + private enum TestRunnerMenuLabels + { + PlayMode = 0, + EditMode = 1 + } + [SerializeField] + private int m_TestTypeToolbarIndex = (int)TestRunnerMenuLabels.EditMode; + [SerializeField] + private PlayModeTestListGUI m_PlayModeTestListGUI; + [SerializeField] + private EditModeTestListGUI m_EditModeTestListGUI; + + internal TestListGUI m_SelectedTestTypes; + + private ITestRunnerApi m_testRunnerApi; + + private WindowResultUpdater m_WindowResultUpdater; + + [MenuItem("Window/General/Test Runner", false, 201, false)] + public static void ShowPlaymodeTestsRunnerWindowCodeBased() + { + s_Instance = GetWindow("Test Runner"); + s_Instance.Show(); + } + + static TestRunnerWindow() + { + InitBackgroundRunners(); + } + + private static void InitBackgroundRunners() + { + EditorApplication.playModeStateChanged -= OnPlayModeStateChanged; + EditorApplication.playModeStateChanged += OnPlayModeStateChanged; + } + + [DidReloadScripts] + private static void CompilationCallback() + { + UpdateWindow(); + } + + private static void OnPlayModeStateChanged(PlayModeStateChange state) + { + if (s_Instance && state == PlayModeStateChange.EnteredEditMode && s_Instance.m_SelectedTestTypes.HasTreeData()) + { + //repaint message details after exit playmode + s_Instance.m_SelectedTestTypes.TestSelectionCallback(s_Instance.m_SelectedTestTypes.m_TestListState.selectedIDs.ToArray()); + s_Instance.Repaint(); + } + } + + public void OnDestroy() + { + EditorApplication.playModeStateChanged -= OnPlayModeStateChanged; + if (m_testRunnerApi != null) + { + m_testRunnerApi.UnregisterCallbacks(m_WindowResultUpdater); + } + } + + private void OnEnable() + { + s_Instance = this; + SelectTestListGUI(m_TestTypeToolbarIndex); + + m_testRunnerApi = ScriptableObject.CreateInstance(); + m_WindowResultUpdater = new WindowResultUpdater(); + m_testRunnerApi.RegisterCallbacks(m_WindowResultUpdater); + } + + private void Enable() + { + m_Settings = new TestRunnerWindowSettings("UnityEditor.PlaymodeTestsRunnerWindow"); + filterSettings = new TestFilterSettings("UnityTest.IntegrationTestsRunnerWindow"); + + if (m_SelectedTestTypes == null) + { + SelectTestListGUI(m_TestTypeToolbarIndex); + } + + StartRetrieveTestList(); + m_SelectedTestTypes.Reload(); + m_Enabled = true; + } + + private void SelectTestListGUI(int testTypeToolbarIndex) + { + if (testTypeToolbarIndex == (int)TestRunnerMenuLabels.PlayMode) + { + if (m_PlayModeTestListGUI == null) + { + m_PlayModeTestListGUI = new PlayModeTestListGUI(); + } + m_SelectedTestTypes = m_PlayModeTestListGUI; + } + else if (testTypeToolbarIndex == (int)TestRunnerMenuLabels.EditMode) + { + if (m_EditModeTestListGUI == null) + { + m_EditModeTestListGUI = new EditModeTestListGUI(); + } + m_SelectedTestTypes = m_EditModeTestListGUI; + } + } + + private void StartRetrieveTestList() + { + if (!m_SelectedTestTypes.HasTreeData()) + { + m_testRunnerApi.RetrieveTestList(m_SelectedTestTypes.TestMode, (rootTest) => + { + m_SelectedTestTypes.Init(this, rootTest); + m_SelectedTestTypes.Reload(); + }); + } + } + + public void OnGUI() + { + if (!m_Enabled) + { + Enable(); + } + + if (BuildPipeline.isBuildingPlayer) + { + m_IsBuilding = true; + } + else if (m_IsBuilding) + { + m_IsBuilding = false; + Repaint(); + } + + EditorGUILayout.BeginHorizontal(); + GUILayout.FlexibleSpace(); + var selectedIndex = m_TestTypeToolbarIndex; + m_TestTypeToolbarIndex = GUILayout.Toolbar(m_TestTypeToolbarIndex, Enum.GetNames(typeof(TestRunnerMenuLabels)), "LargeButton", UnityEngine.GUI.ToolbarButtonSize.FitToContents); + GUILayout.FlexibleSpace(); + EditorGUILayout.EndHorizontal(); + + if (selectedIndex != m_TestTypeToolbarIndex) + { + SelectTestListGUI(m_TestTypeToolbarIndex); + StartRetrieveTestList(); + } + + EditorGUILayout.BeginVertical(); + using (new EditorGUI.DisabledScope(EditorApplication.isPlayingOrWillChangePlaymode)) + { + m_SelectedTestTypes.PrintHeadPanel(); + } + EditorGUILayout.EndVertical(); + + if (m_Settings.verticalSplit) + SplitterGUILayout.BeginVerticalSplit(m_Spl); + else + SplitterGUILayout.BeginHorizontalSplit(m_Spl); + + EditorGUILayout.BeginVertical(); + EditorGUILayout.BeginVertical(Styles.testList); + m_SelectedTestTypes.RenderTestList(); + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + m_SelectedTestTypes.RenderDetails(); + + if (m_Settings.verticalSplit) + SplitterGUILayout.EndVerticalSplit(); + else + SplitterGUILayout.EndHorizontalSplit(); + } + + public void AddItemsToMenu(GenericMenu menu) + { + menu.AddItem(m_GUIVerticalSplit, m_Settings.verticalSplit, m_Settings.ToggleVerticalSplit); + menu.AddItem(m_GUIHorizontalSplit, !m_Settings.verticalSplit, m_Settings.ToggleVerticalSplit); + + menu.AddSeparator(null); + + var playModeTestRunnerEnabled = PlayerSettings.playModeTestRunnerEnabled; + var currentActive = playModeTestRunnerEnabled ? m_GUIDisablePlaymodeTestsRunner : m_GUIEnableaPlaymodeTestsRunner; + + if (EditorPrefs.GetBool("InternalMode", false)) + { + menu.AddItem(m_GUIRunPlayModeTestAsEditModeTests, PlayerSettings.runPlayModeTestAsEditModeTest, () => + { + PlayerSettings.runPlayModeTestAsEditModeTest = !PlayerSettings.runPlayModeTestAsEditModeTest; + }); + } + + menu.AddItem(currentActive, false, () => + { + PlayerSettings.playModeTestRunnerEnabled = !playModeTestRunnerEnabled; + EditorUtility.DisplayDialog(currentActive.text, "You need to restart the editor now", "Ok"); + }); + } + + public void RebuildUIFilter() + { + if (m_SelectedTestTypes != null && m_SelectedTestTypes.HasTreeData()) + { + m_SelectedTestTypes.RebuildUIFilter(); + } + } + + public static void UpdateWindow() + { + if (s_Instance != null && s_Instance.m_SelectedTestTypes != null) + { + s_Instance.m_SelectedTestTypes.Repaint(); + s_Instance.Repaint(); + } + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunnerWindow.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunnerWindow.cs.meta new file mode 100644 index 0000000..d4c89a5 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunnerWindow.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4dfcd3a631f61d248b7cc0b845d40345 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunnerWindowSettings.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunnerWindowSettings.cs new file mode 100644 index 0000000..2a52354 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunnerWindowSettings.cs @@ -0,0 +1,26 @@ +namespace UnityEditor.TestTools.TestRunner +{ + internal class TestRunnerWindowSettings + { + public bool verticalSplit; + + private readonly string m_PrefsKey; + + public TestRunnerWindowSettings(string prefsKey) + { + m_PrefsKey = prefsKey; + verticalSplit = EditorPrefs.GetBool(m_PrefsKey + ".verticalSplit", true); + } + + public void ToggleVerticalSplit() + { + verticalSplit = !verticalSplit; + Save(); + } + + private void Save() + { + EditorPrefs.SetBool(m_PrefsKey + ".verticalSplit", verticalSplit); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunnerWindowSettings.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunnerWindowSettings.cs.meta new file mode 100644 index 0000000..24a596d --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestRunnerWindowSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2b301b727225f1941974d69e61a55620 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestSettings.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestSettings.meta new file mode 100644 index 0000000..002779a --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestSettings.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 95b719082a664ea45bb56759eed1f271 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestSettings/ITestSettings.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestSettings/ITestSettings.cs new file mode 100644 index 0000000..f5b97a4 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestSettings/ITestSettings.cs @@ -0,0 +1,22 @@ +using System; + +namespace UnityEditor.TestTools.TestRunner +{ + internal interface ITestSettings : IDisposable + { + ScriptingImplementation? scriptingBackend { get; set; } + + string Architecture { get; set; } + + ApiCompatibilityLevel? apiProfile { get; set; } + + bool? appleEnableAutomaticSigning { get; set; } + string appleDeveloperTeamID { get; set; } + ProvisioningProfileType? iOSManualProvisioningProfileType { get; set; } + string iOSManualProvisioningProfileID { get; set; } + ProvisioningProfileType? tvOSManualProvisioningProfileType { get; set; } + string tvOSManualProvisioningProfileID { get; set; } + + void SetupProjectParameters(); + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestSettings/ITestSettings.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestSettings/ITestSettings.cs.meta new file mode 100644 index 0000000..bcdad73 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestSettings/ITestSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 83eda34b7da01e04aa894f268158b0c0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestSettings/ITestSettingsDeserializer.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestSettings/ITestSettingsDeserializer.cs new file mode 100644 index 0000000..ac3845e --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestSettings/ITestSettingsDeserializer.cs @@ -0,0 +1,7 @@ +namespace UnityEditor.TestTools.TestRunner +{ + interface ITestSettingsDeserializer + { + ITestSettings GetSettingsFromJsonFile(string jsonFilePath); + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestSettings/ITestSettingsDeserializer.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestSettings/ITestSettingsDeserializer.cs.meta new file mode 100644 index 0000000..57ca510 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestSettings/ITestSettingsDeserializer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d208a1684f8aa6a40ad91d6aa9600c14 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestSettings/TestSettings.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestSettings/TestSettings.cs new file mode 100644 index 0000000..6964d22 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestSettings/TestSettings.cs @@ -0,0 +1,160 @@ +using System; + +namespace UnityEditor.TestTools.TestRunner +{ + internal class TestSettings : ITestSettings + { + private readonly TestSetting[] m_Settings = + { + new TestSetting( + settings => settings.scriptingBackend, + () => PlayerSettings.GetScriptingBackend(EditorUserBuildSettings.activeBuildTargetGroup), + implementation => PlayerSettings.SetScriptingBackend(EditorUserBuildSettings.activeBuildTargetGroup, implementation.Value)), + new TestSetting( + settings => settings.Architecture, + () => EditorUserBuildSettings.activeBuildTarget == BuildTarget.Android ? PlayerSettings.Android.targetArchitectures.ToString() : null, + architecture => + { + if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.Android) + { + if (!string.IsNullOrEmpty(architecture)) + { + var targetArchitectures = (AndroidArchitecture)Enum.Parse(typeof(AndroidArchitecture), architecture, true); + PlayerSettings.Android.targetArchitectures = targetArchitectures; + } + } + }), + new TestSetting( + settings => settings.apiProfile, + () => PlayerSettings.GetApiCompatibilityLevel(EditorUserBuildSettings.activeBuildTargetGroup), + implementation => + { + if (Enum.IsDefined(typeof(ApiCompatibilityLevel), implementation.Value)) + { + PlayerSettings.SetApiCompatibilityLevel(EditorUserBuildSettings.activeBuildTargetGroup, + implementation.Value); + } + }), + new TestSetting( + settings => settings.appleEnableAutomaticSigning, + () => PlayerSettings.iOS.appleEnableAutomaticSigning, + enableAutomaticSigning => + { + if (enableAutomaticSigning != null) + PlayerSettings.iOS.appleEnableAutomaticSigning = enableAutomaticSigning.Value; + }), + new TestSetting( + settings => settings.appleDeveloperTeamID, + () => PlayerSettings.iOS.appleDeveloperTeamID, + developerTeam => + { + if (developerTeam != null) + PlayerSettings.iOS.appleDeveloperTeamID = developerTeam; + }), + new TestSetting( + settings => settings.iOSManualProvisioningProfileType, + () => PlayerSettings.iOS.iOSManualProvisioningProfileType, + profileType => + { + if (profileType != null) + PlayerSettings.iOS.iOSManualProvisioningProfileType = profileType.Value; + }), + new TestSetting( + settings => settings.iOSManualProvisioningProfileID, + () => PlayerSettings.iOS.iOSManualProvisioningProfileID, + provisioningUUID => + { + if (provisioningUUID != null) + PlayerSettings.iOS.iOSManualProvisioningProfileID = provisioningUUID; + }), + new TestSetting( + settings => settings.tvOSManualProvisioningProfileType, + () => PlayerSettings.iOS.tvOSManualProvisioningProfileType, + profileType => + { + if (profileType != null) + PlayerSettings.iOS.tvOSManualProvisioningProfileType = profileType.Value; + }), + new TestSetting( + settings => settings.tvOSManualProvisioningProfileID, + () => PlayerSettings.iOS.tvOSManualProvisioningProfileID, + provisioningUUID => + { + if (provisioningUUID != null) + PlayerSettings.iOS.tvOSManualProvisioningProfileID = provisioningUUID; + }), + }; + + private bool m_Disposed; + + public ScriptingImplementation? scriptingBackend { get; set; } + + public string Architecture { get; set; } + + public ApiCompatibilityLevel? apiProfile { get; set; } + + public bool? appleEnableAutomaticSigning { get; set; } + public string appleDeveloperTeamID { get; set; } + public ProvisioningProfileType? iOSManualProvisioningProfileType { get; set; } + public string iOSManualProvisioningProfileID { get; set; } + public ProvisioningProfileType? tvOSManualProvisioningProfileType { get; set; } + public string tvOSManualProvisioningProfileID { get; set; } + + public void Dispose() + { + if (!m_Disposed) + { + foreach (var testSetting in m_Settings) + { + testSetting.Cleanup(); + } + + m_Disposed = true; + } + } + + public void SetupProjectParameters() + { + foreach (var testSetting in m_Settings) + { + testSetting.Setup(this); + } + } + + private abstract class TestSetting + { + public abstract void Setup(TestSettings settings); + public abstract void Cleanup(); + } + + private class TestSetting : TestSetting + { + private T m_ValueBeforeSetup; + private Func m_GetFromSettings; + private Func m_GetCurrentValue; + private Action m_SetValue; + + public TestSetting(Func getFromSettings, Func getCurrentValue, Action setValue) + { + m_GetFromSettings = getFromSettings; + m_GetCurrentValue = getCurrentValue; + m_SetValue = setValue; + } + + public override void Setup(TestSettings settings) + { + m_ValueBeforeSetup = m_GetCurrentValue(); + var newValue = m_GetFromSettings(settings); + if (newValue != null) + { + m_SetValue(newValue); + } + } + + public override void Cleanup() + { + m_SetValue(m_ValueBeforeSetup); + } + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestSettings/TestSettings.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestSettings/TestSettings.cs.meta new file mode 100644 index 0000000..37a7522 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestSettings/TestSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6b32b6725087a0d4bb1670818d26996e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestSettings/TestSettingsDeserializer.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestSettings/TestSettingsDeserializer.cs new file mode 100644 index 0000000..c59ec57 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestSettings/TestSettingsDeserializer.cs @@ -0,0 +1,130 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using UnityEngine; + +namespace UnityEditor.TestTools.TestRunner +{ + /// + /// Handles deserialization of TestSettings from a provided json file path. + /// + internal class TestSettingsDeserializer : ITestSettingsDeserializer + { + private static readonly SettingsMap[] s_SettingsMapping = + { + new SettingsMap("scriptingBackend", (settings, value) => settings.scriptingBackend = value), + new SettingsMap("architecture", (settings, value) => settings.Architecture = value), + new SettingsMap("apiProfile", (settings, value) => settings.apiProfile = value), + new SettingsMap("appleEnableAutomaticSigning", (settings, value) => settings.appleEnableAutomaticSigning = value), + new SettingsMap("appleDeveloperTeamID", (settings, value) => settings.appleDeveloperTeamID = value), + new SettingsMap("iOSManualProvisioningProfileType", (settings, value) => settings.iOSManualProvisioningProfileType = value), + new SettingsMap("iOSManualProvisioningProfileID", (settings, value) => settings.iOSManualProvisioningProfileID = value), + new SettingsMap("tvOSManualProvisioningProfileType", (settings, value) => settings.tvOSManualProvisioningProfileType = value), + new SettingsMap("tvOSManualProvisioningProfileID", (settings, value) => settings.tvOSManualProvisioningProfileID = value), + }; + + private readonly Func m_TestSettingsFactory; + public TestSettingsDeserializer(Func testSettingsFactory) + { + m_TestSettingsFactory = testSettingsFactory; + } + + public ITestSettings GetSettingsFromJsonFile(string jsonFilePath) + { + var text = File.ReadAllText(jsonFilePath); + var settingsDictionary = Json.Deserialize(text) as Dictionary; + + var testSettings = m_TestSettingsFactory(); + if (settingsDictionary == null) + { + return testSettings; + } + + foreach (var settingsMap in s_SettingsMapping) + { + if (!settingsDictionary.ContainsKey(settingsMap.Key)) + { + continue; + } + + if (settingsMap.Type.IsEnum) + { + SetEnumValue(settingsMap.Key, settingsDictionary[settingsMap.Key], settingsMap.Type, value => settingsMap.ApplyToSettings(testSettings, value)); + } + else + { + SetValue(settingsMap.Key, settingsDictionary[settingsMap.Key], settingsMap.Type, value => settingsMap.ApplyToSettings(testSettings, value)); + } + } + + return testSettings; + } + + private abstract class SettingsMap + { + public string Key { get; } + public Type Type { get; } + protected SettingsMap(string key, Type type) + { + Key = key; + Type = type; + } + + public abstract void ApplyToSettings(ITestSettings settings, object value); + } + + private class SettingsMap : SettingsMap + { + private Action m_Setter; + public SettingsMap(string key, Action setter) : base(key, typeof(T)) + { + m_Setter = setter; + } + + public override void ApplyToSettings(ITestSettings settings, object value) + { + m_Setter(settings, (T)value); + } + } + + private static void SetEnumValue(string key, object value, Type type, Action setter) + { + object enumValue; + if (TryGetEnum(value as string, type, out enumValue)) + { + setter(enumValue); + return; + } + + var acceptedValues = string.Join(", ", Enum.GetValues(type).OfType().Select(val => val.ToString()).ToArray()); + + Debug.LogFormat("Could not convert '{0}' argument '{1}' to a valid {2}. Accepted values: {3}.", key, value, type.Name, acceptedValues); + } + + private static bool TryGetEnum(string value, Type type, out object enumValue) + { + try + { + enumValue = Enum.Parse(type, value, true); + return true; + } + catch (Exception) + { + enumValue = null; + return false; + } + } + + private static void SetValue(string key, object value, Type type, Action setter) + { + if (type.IsInstanceOfType(value)) + { + setter(value); + return; + } + + Debug.LogFormat("Could not convert '{0}' argument '{1}' to a valid {2}.", key, value, type.Name); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestSettings/TestSettingsDeserializer.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestSettings/TestSettingsDeserializer.cs.meta new file mode 100644 index 0000000..decd785 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/TestSettings/TestSettingsDeserializer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 75e7d7a9a57458841a85fe42d9c9141f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityEditor.TestRunner.asmdef b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityEditor.TestRunner.asmdef new file mode 100644 index 0000000..f28e7e1 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityEditor.TestRunner.asmdef @@ -0,0 +1,21 @@ +{ + "name": "UnityEditor.TestRunner", + "references": [ + "UnityEngine.TestRunner" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": true, + "precompiledReferences": [ + "nunit.framework.dll", + "Mono.Cecil.dll", + "Mono.Cecil.Pdb.dll", + "Mono.Cecil.Mdb.dll", + "Mono.Cecil.Rocks.dll" + ], + "autoReferenced": false, + "defineConstraints": [] +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityEditor.TestRunner.asmdef.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityEditor.TestRunner.asmdef.meta new file mode 100644 index 0000000..452d7bb --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityEditor.TestRunner.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 0acc523941302664db1f4e527237feb3 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol.meta new file mode 100644 index 0000000..cdf1813 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 936c6340f3468444ebb1785b4c311126 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/AssemblyCompilationErrorsMessage.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/AssemblyCompilationErrorsMessage.cs new file mode 100644 index 0000000..8ed6b3c --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/AssemblyCompilationErrorsMessage.cs @@ -0,0 +1,13 @@ +namespace UnityEditor.TestTools.TestRunner.UnityTestProtocol +{ + internal class AssemblyCompilationErrorsMessage : Message + { + public string assembly; + public string[] errors; + + public AssemblyCompilationErrorsMessage() + { + type = "AssemblyCompilationErrors"; + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/AssemblyCompilationErrorsMessage.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/AssemblyCompilationErrorsMessage.cs.meta new file mode 100644 index 0000000..8c0fea1 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/AssemblyCompilationErrorsMessage.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c346a7445959bba46a96de0747e77c2a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/ITestRunnerApiMapper.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/ITestRunnerApiMapper.cs new file mode 100644 index 0000000..231fe4b --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/ITestRunnerApiMapper.cs @@ -0,0 +1,15 @@ +using System.Collections.Generic; +using UnityEditor.TestTools.TestRunner.Api; + +namespace UnityEditor.TestTools.TestRunner.UnityTestProtocol +{ + interface ITestRunnerApiMapper + { + string GetRunStateFromResultNunitXml(ITestResultAdaptor result); + TestState GetTestStateFromResult(ITestResultAdaptor result); + List FlattenTestNames(ITestAdaptor testsToRun); + TestPlanMessage MapTestToTestPlanMessage(ITestAdaptor testsToRun); + TestStartedMessage MapTestToTestStartedMessage(ITestAdaptor test); + TestFinishedMessage TestResultToTestFinishedMessage(ITestResultAdaptor result); + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/ITestRunnerApiMapper.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/ITestRunnerApiMapper.cs.meta new file mode 100644 index 0000000..af6635c --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/ITestRunnerApiMapper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6de79ae237e51554da96fd28f68b66a6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/IUtpLogger.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/IUtpLogger.cs new file mode 100644 index 0000000..4d7fb71 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/IUtpLogger.cs @@ -0,0 +1,7 @@ +namespace UnityEditor.TestTools.TestRunner.UnityTestProtocol +{ + interface IUtpLogger + { + void Log(Message msg); + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/IUtpLogger.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/IUtpLogger.cs.meta new file mode 100644 index 0000000..82b7277 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/IUtpLogger.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9014630255533ed42915965b4065cde8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/IUtpMessageReporter.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/IUtpMessageReporter.cs new file mode 100644 index 0000000..c134615 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/IUtpMessageReporter.cs @@ -0,0 +1,14 @@ +using System.Collections.Generic; +using UnityEditor.Compilation; +using UnityEditor.TestTools.TestRunner.Api; + +namespace UnityEditor.TestTools.TestRunner.UnityTestProtocol +{ + internal interface IUtpMessageReporter + { + void ReportAssemblyCompilationErrors(string assembly, IEnumerable errorCompilerMessages); + void ReportTestFinished(ITestResultAdaptor result); + void ReportTestRunStarted(ITestAdaptor testsToRun); + void ReportTestStarted(ITestAdaptor test); + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/IUtpMessageReporter.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/IUtpMessageReporter.cs.meta new file mode 100644 index 0000000..d966c9a --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/IUtpMessageReporter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 952b3dc7b47846947b37c8d3ae46579a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/Message.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/Message.cs new file mode 100644 index 0000000..a654b7e --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/Message.cs @@ -0,0 +1,29 @@ +using System; +using System.Diagnostics; + +namespace UnityEditor.TestTools.TestRunner.UnityTestProtocol +{ + [Serializable] + internal abstract class Message + { + public string type; + // Milliseconds since unix epoch + public ulong time; + public int version; + public string phase; + public int processId; + + protected Message() + { + version = 2; + phase = "Immediate"; + processId = Process.GetCurrentProcess().Id; + AddTimeStamp(); + } + + public void AddTimeStamp() + { + time = Convert.ToUInt64((DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalMilliseconds); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/Message.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/Message.cs.meta new file mode 100644 index 0000000..6f55024 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/Message.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 321dc2c0720f8dd4f9396ecdc12b8746 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/TestFinishedMessage.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/TestFinishedMessage.cs new file mode 100644 index 0000000..63d7daf --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/TestFinishedMessage.cs @@ -0,0 +1,18 @@ +namespace UnityEditor.TestTools.TestRunner.UnityTestProtocol +{ + internal class TestFinishedMessage : Message + { + public string name; + public TestState state; + public string message; + public ulong duration; // milliseconds + public ulong durationMicroseconds; + public string stackTrace; + + public TestFinishedMessage() + { + type = "TestStatus"; + phase = "End"; + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/TestFinishedMessage.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/TestFinishedMessage.cs.meta new file mode 100644 index 0000000..581ee84 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/TestFinishedMessage.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 423fe2ef878fa1140a7e1f7f9e365815 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/TestPlanMessage.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/TestPlanMessage.cs new file mode 100644 index 0000000..7e4ea41 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/TestPlanMessage.cs @@ -0,0 +1,14 @@ +using System.Collections.Generic; + +namespace UnityEditor.TestTools.TestRunner.UnityTestProtocol +{ + internal class TestPlanMessage : Message + { + public List tests; + + public TestPlanMessage() + { + type = "TestPlan"; + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/TestPlanMessage.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/TestPlanMessage.cs.meta new file mode 100644 index 0000000..5dcc09d --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/TestPlanMessage.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 28f79a0d7e64c2345bc46f8c4cf788f8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/TestRunnerApiMapper.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/TestRunnerApiMapper.cs new file mode 100644 index 0000000..494646f --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/TestRunnerApiMapper.cs @@ -0,0 +1,99 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Xml; +using UnityEditor.TestTools.TestRunner.Api; + +namespace UnityEditor.TestTools.TestRunner.UnityTestProtocol +{ + internal class TestRunnerApiMapper : ITestRunnerApiMapper + { + public TestPlanMessage MapTestToTestPlanMessage(ITestAdaptor testsToRun) + { + var testsNames = testsToRun != null ? FlattenTestNames(testsToRun) : new List(); + + var msg = new TestPlanMessage + { + tests = testsNames + }; + + return msg; + } + + public TestStartedMessage MapTestToTestStartedMessage(ITestAdaptor test) + { + return new TestStartedMessage + { + name = test.FullName + }; + } + + public TestFinishedMessage TestResultToTestFinishedMessage(ITestResultAdaptor result) + { + return new TestFinishedMessage + { + name = result.Test.FullName, + duration = Convert.ToUInt64(result.Duration * 1000), + durationMicroseconds = Convert.ToUInt64(result.Duration * 1000000), + message = result.Message, + state = GetTestStateFromResult(result), + stackTrace = result.StackTrace + }; + } + + public string GetRunStateFromResultNunitXml(ITestResultAdaptor result) + { + var doc = new XmlDocument(); + doc.LoadXml(result.ToXml().OuterXml); + return doc.FirstChild.Attributes["runstate"].Value; + } + + public TestState GetTestStateFromResult(ITestResultAdaptor result) + { + var state = TestState.Failure; + + if (result.TestStatus == TestStatus.Passed) + { + state = TestState.Success; + + var runstate = GetRunStateFromResultNunitXml(result); + runstate = runstate ?? String.Empty; + + if (runstate.ToLowerInvariant().Equals("explicit")) + state = TestState.Skipped; + } + else if (result.TestStatus == TestStatus.Skipped) + { + state = TestState.Skipped; + + if (result.ResultState.ToLowerInvariant().EndsWith("ignored")) + state = TestState.Ignored; + } + else + { + if (result.ResultState.ToLowerInvariant().Equals("inconclusive")) + state = TestState.Inconclusive; + + if (result.ResultState.ToLowerInvariant().EndsWith("cancelled") || + result.ResultState.ToLowerInvariant().EndsWith("error")) + state = TestState.Error; + } + + return state; + } + + public List FlattenTestNames(ITestAdaptor test) + { + var results = new List(); + + if (!test.IsSuite) + results.Add(test.FullName); + + if (test.Children != null && test.Children.Any()) + foreach (var child in test.Children) + results.AddRange(FlattenTestNames(child)); + + return results; + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/TestRunnerApiMapper.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/TestRunnerApiMapper.cs.meta new file mode 100644 index 0000000..619f384 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/TestRunnerApiMapper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2011a59d3f76b3d4a85cb53f945fceee +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/TestStartedMessage.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/TestStartedMessage.cs new file mode 100644 index 0000000..7a878a6 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/TestStartedMessage.cs @@ -0,0 +1,15 @@ +namespace UnityEditor.TestTools.TestRunner.UnityTestProtocol +{ + internal class TestStartedMessage : Message + { + public string name; + public TestState state; + + public TestStartedMessage() + { + type = "TestStatus"; + phase = "Begin"; + state = TestState.Inconclusive; + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/TestStartedMessage.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/TestStartedMessage.cs.meta new file mode 100644 index 0000000..28492e7 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/TestStartedMessage.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bd3e81baa10021f4d877fa36382bab16 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/TestState.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/TestState.cs new file mode 100644 index 0000000..111813a --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/TestState.cs @@ -0,0 +1,13 @@ +namespace UnityEditor.TestTools.TestRunner.UnityTestProtocol +{ + // This matches the state definitions expected by the Perl code, which in turn matches the NUnit 2 values... + internal enum TestState + { + Inconclusive = 0, + Skipped = 2, + Ignored = 3, + Success = 4, + Failure = 5, + Error = 6 + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/TestState.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/TestState.cs.meta new file mode 100644 index 0000000..125e419 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/TestState.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 77f432980bb30084299a138e15c6f571 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/UnityTestProtocolListener.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/UnityTestProtocolListener.cs new file mode 100644 index 0000000..8ba3d7f --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/UnityTestProtocolListener.cs @@ -0,0 +1,35 @@ +using UnityEditor.TestTools.TestRunner.Api; +using UnityEngine; + +namespace UnityEditor.TestTools.TestRunner.UnityTestProtocol +{ + internal class UnityTestProtocolListener : ScriptableObject, ICallbacks + { + private IUtpMessageReporter m_UtpMessageReporter; + + public UnityTestProtocolListener() + { + m_UtpMessageReporter = new UtpMessageReporter(new UtpDebugLogger()); + } + + public void RunStarted(ITestAdaptor testsToRun) + { + m_UtpMessageReporter.ReportTestRunStarted(testsToRun); + } + + public void RunFinished(ITestResultAdaptor testResults) + { + // Apparently does nothing :) + } + + public void TestStarted(ITestAdaptor test) + { + m_UtpMessageReporter.ReportTestStarted(test); + } + + public void TestFinished(ITestResultAdaptor result) + { + m_UtpMessageReporter.ReportTestFinished(result); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/UnityTestProtocolListener.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/UnityTestProtocolListener.cs.meta new file mode 100644 index 0000000..e369442 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/UnityTestProtocolListener.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 900aac3710bc14542a8d164e3f0ff820 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/UnityTestProtocolStarter.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/UnityTestProtocolStarter.cs new file mode 100644 index 0000000..8d16ca5 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/UnityTestProtocolStarter.cs @@ -0,0 +1,37 @@ +using System; +using System.Linq; +using UnityEditor.Compilation; +using UnityEditor.TestTools.TestRunner.Api; +using UnityEngine; +using UnityEngine.TestTools; + +namespace UnityEditor.TestTools.TestRunner.UnityTestProtocol +{ + [InitializeOnLoad] + internal static class UnityTestProtocolStarter + { + static UnityTestProtocolStarter() + { + var commandLineArgs = Environment.GetCommandLineArgs(); + if (commandLineArgs.Contains("-automated") && commandLineArgs.Contains("-runTests")) // wanna have it only for utr run + { + var api = ScriptableObject.CreateInstance(); + var listener = ScriptableObject.CreateInstance(); + api.RegisterCallbacks(listener); + CompilationPipeline.assemblyCompilationFinished += OnAssemblyCompilationFinished; + } + } + + public static void OnAssemblyCompilationFinished(string assembly, CompilerMessage[] messages) + { + bool checkCompileErrors = RecompileScripts.Current == null || RecompileScripts.Current.ExpectScriptCompilationSuccess; + + if (checkCompileErrors && messages.Any(x => x.type == CompilerMessageType.Error)) + { + var compilerErrorMessages = messages.Where(x => x.type == CompilerMessageType.Error); + var utpMessageReporter = new UtpMessageReporter(new UtpDebugLogger()); + utpMessageReporter.ReportAssemblyCompilationErrors(assembly, compilerErrorMessages); + } + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/UnityTestProtocolStarter.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/UnityTestProtocolStarter.cs.meta new file mode 100644 index 0000000..8d65f46 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/UnityTestProtocolStarter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1ac58cb55fc8daf4abd3945a2bbbb0c5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/UtpDebuglogger.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/UtpDebuglogger.cs new file mode 100644 index 0000000..537e350 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/UtpDebuglogger.cs @@ -0,0 +1,13 @@ +using UnityEngine; + +namespace UnityEditor.TestTools.TestRunner.UnityTestProtocol +{ + class UtpDebugLogger : IUtpLogger + { + public void Log(Message msg) + { + var msgJson = JsonUtility.ToJson(msg); + Debug.LogFormat(LogType.Log, LogOption.NoStacktrace, null, "\n##utp:{0}", msgJson); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/UtpDebuglogger.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/UtpDebuglogger.cs.meta new file mode 100644 index 0000000..eb25630 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/UtpDebuglogger.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d0abdd8cb6b29a24c8ee19626ef741b9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/UtpMessageReporter.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/UtpMessageReporter.cs new file mode 100644 index 0000000..22450c8 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/UtpMessageReporter.cs @@ -0,0 +1,57 @@ +using System.Collections.Generic; +using System.Linq; +using UnityEditor.Compilation; +using UnityEditor.TestTools.TestRunner.Api; + +namespace UnityEditor.TestTools.TestRunner.UnityTestProtocol +{ + internal class UtpMessageReporter : IUtpMessageReporter + { + public ITestRunnerApiMapper TestRunnerApiMapper; + public IUtpLogger Logger; + + public UtpMessageReporter(IUtpLogger utpLogger) + { + TestRunnerApiMapper = new TestRunnerApiMapper(); + Logger = utpLogger; + } + + public void ReportAssemblyCompilationErrors(string assembly, IEnumerable errorCompilerMessages) + { + var compilationErrorMessage = new AssemblyCompilationErrorsMessage + { + assembly = assembly, + errors = errorCompilerMessages.Select(x => x.message).ToArray() + }; + + Logger.Log(compilationErrorMessage); + } + + public void ReportTestRunStarted(ITestAdaptor testsToRun) + { + var msg = TestRunnerApiMapper.MapTestToTestPlanMessage(testsToRun); + + Logger.Log(msg); + } + + public void ReportTestStarted(ITestAdaptor test) + { + if (test.IsSuite) + return; + + var msg = TestRunnerApiMapper.MapTestToTestStartedMessage(test); + + Logger.Log(msg); + } + + public void ReportTestFinished(ITestResultAdaptor result) + { + if (result.Test.IsSuite) + return; + + var msg = TestRunnerApiMapper.TestResultToTestFinishedMessage(result); + + Logger.Log(msg); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/UtpMessageReporter.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/UtpMessageReporter.cs.meta new file mode 100644 index 0000000..02cccdf --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEditor.TestRunner/UnityTestProtocol/UtpMessageReporter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ebcc5f899d9277642868aeda9a17cbaf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner.meta new file mode 100644 index 0000000..2b554fc --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 950890083f4907541a6ed06d70959e49 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/AssemblyInfo.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/AssemblyInfo.cs new file mode 100644 index 0000000..8c3afaa --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/AssemblyInfo.cs @@ -0,0 +1,16 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +[assembly: AssemblyTitle("UnityEngine.TestRunner")] + +[assembly: InternalsVisibleTo("UnityEditor.TestRunner")] +[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")] +[assembly: InternalsVisibleTo("Unity.PerformanceTesting")] +[assembly: InternalsVisibleTo("Unity.PerformanceTesting.Editor")] +[assembly: InternalsVisibleTo("Assembly-CSharp-testable")] +[assembly: InternalsVisibleTo("Assembly-CSharp-Editor-testable")] +[assembly: InternalsVisibleTo("UnityEngine.TestRunner.Tests")] +[assembly: InternalsVisibleTo("UnityEditor.TestRunner.Tests")] +[assembly: InternalsVisibleTo("Unity.PackageManagerUI.Editor")] + +[assembly: AssemblyVersion("1.0.0")] diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/AssemblyInfo.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/AssemblyInfo.cs.meta new file mode 100644 index 0000000..47de243 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/AssemblyInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cc22cc13b69c1094c85e176c008b9ef8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions.meta new file mode 100644 index 0000000..c1fd9d7 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1ad55f5ad04d1d045a1f287409c650dd +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/AllocatingGCMemoryConstraint.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/AllocatingGCMemoryConstraint.cs new file mode 100644 index 0000000..d765cdb --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/AllocatingGCMemoryConstraint.cs @@ -0,0 +1,83 @@ +using System; +using NUnit.Framework; +using NUnit.Framework.Constraints; +using UnityEngine.Profiling; + +namespace UnityEngine.TestTools.Constraints +{ + public class AllocatingGCMemoryConstraint : Constraint + { + private class AllocatingGCMemoryResult : ConstraintResult + { + private readonly int diff; + public AllocatingGCMemoryResult(IConstraint constraint, object actualValue, int diff) : base(constraint, actualValue, diff > 0) + { + this.diff = diff; + } + + public override void WriteMessageTo(MessageWriter writer) + { + if (diff == 0) + writer.WriteMessageLine("The provided delegate did not make any GC allocations."); + else + writer.WriteMessageLine("The provided delegate made {0} GC allocation(s).", diff); + } + } + + private ConstraintResult ApplyTo(Action action, object original) + { + var recorder = Recorder.Get("GC.Alloc"); + + // The recorder was created enabled, which means it captured the creation of the Recorder object itself, etc. + // Disabling it flushes its data, so that we can retrieve the sample block count and have it correctly account + // for these initial allocations. + recorder.enabled = false; + +#if !UNITY_WEBGL + recorder.FilterToCurrentThread(); +#endif + + recorder.enabled = true; + + try + { + action(); + } + finally + { + recorder.enabled = false; +#if !UNITY_WEBGL + recorder.CollectFromAllThreads(); +#endif + } + + return new AllocatingGCMemoryResult(this, original, recorder.sampleBlockCount); + } + + public override ConstraintResult ApplyTo(object obj) + { + if (obj == null) + throw new ArgumentNullException(); + + TestDelegate d = obj as TestDelegate; + if (d == null) + throw new ArgumentException(string.Format("The actual value must be a TestDelegate but was {0}", + obj.GetType())); + + return ApplyTo(() => d.Invoke(), obj); + } + + public override ConstraintResult ApplyTo(ActualValueDelegate del) + { + if (del == null) + throw new ArgumentNullException(); + + return ApplyTo(() => del.Invoke(), del); + } + + public override string Description + { + get { return "allocates GC memory"; } + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/AllocatingGCMemoryConstraint.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/AllocatingGCMemoryConstraint.cs.meta new file mode 100644 index 0000000..e38d0b4 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/AllocatingGCMemoryConstraint.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d09858396dd7adb4bbdb22ea0c8c3a37 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/ConstraintsExtensions.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/ConstraintsExtensions.cs new file mode 100644 index 0000000..54b8e64 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/ConstraintsExtensions.cs @@ -0,0 +1,14 @@ +using NUnit.Framework.Constraints; + +namespace UnityEngine.TestTools.Constraints +{ + public static class ConstraintExtensions + { + public static AllocatingGCMemoryConstraint AllocatingGCMemory(this ConstraintExpression chain) + { + var constraint = new AllocatingGCMemoryConstraint(); + chain.Append(constraint); + return constraint; + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/ConstraintsExtensions.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/ConstraintsExtensions.cs.meta new file mode 100644 index 0000000..b0fc061 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/ConstraintsExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 68a48d1900320ed458e118415857faf6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/InvalidSignatureException.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/InvalidSignatureException.cs new file mode 100644 index 0000000..b9c132b --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/InvalidSignatureException.cs @@ -0,0 +1,18 @@ +using NUnit.Framework; +using NUnit.Framework.Interfaces; + +namespace UnityEngine.TestTools.TestRunner +{ + internal class InvalidSignatureException : ResultStateException + { + public InvalidSignatureException(string message) + : base(message) + { + } + + public override ResultState ResultState + { + get { return ResultState.NotRunnable; } + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/InvalidSignatureException.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/InvalidSignatureException.cs.meta new file mode 100644 index 0000000..a995fcf --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/InvalidSignatureException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9650d910fcaefb34cb45f121c1993892 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/Is.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/Is.cs new file mode 100644 index 0000000..4cdc715 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/Is.cs @@ -0,0 +1,10 @@ +namespace UnityEngine.TestTools.Constraints +{ + public class Is : NUnit.Framework.Is + { + public static AllocatingGCMemoryConstraint AllocatingGCMemory() + { + return new AllocatingGCMemoryConstraint(); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/Is.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/Is.cs.meta new file mode 100644 index 0000000..636110b --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/Is.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6d5833966abeadb429de247e4316eef4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/LogAssert.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/LogAssert.cs new file mode 100644 index 0000000..32900eb --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/LogAssert.cs @@ -0,0 +1,39 @@ +using System.Text.RegularExpressions; +using UnityEngine.TestTools.Logging; + +namespace UnityEngine.TestTools +{ + public static class LogAssert + { + public static void Expect(LogType type, string message) + { + LogScope.Current.ExpectedLogs.Enqueue(new LogMatch() { LogType = type, Message = message }); + } + + public static void Expect(LogType type, Regex message) + { + LogScope.Current.ExpectedLogs.Enqueue(new LogMatch() { LogType = type, MessageRegex = message }); + } + + public static void NoUnexpectedReceived() + { + LogScope.Current.NoUnexpectedReceived(); + } + + public static bool ignoreFailingMessages + { + get + { + return LogScope.Current.IgnoreFailingMessages; + } + set + { + if (value != LogScope.Current.IgnoreFailingMessages) + { + Debug.LogFormat(LogType.Log, LogOption.NoStacktrace, null, "\nIgnoreFailingMessages:" + (value? "true":"false")); + } + LogScope.Current.IgnoreFailingMessages = value; + } + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/LogAssert.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/LogAssert.cs.meta new file mode 100644 index 0000000..222bb52 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/LogAssert.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c97b794b51780d349a16826a4c7898d7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/LogScope.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/LogScope.meta new file mode 100644 index 0000000..a225ac0 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/LogScope.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b1d8465ba1376b148bdab58965101f47 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/LogScope/ILogScope.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/LogScope/ILogScope.cs new file mode 100644 index 0000000..efd00f7 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/LogScope/ILogScope.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; + +namespace UnityEngine.TestTools.Logging +{ + internal interface ILogScope : IDisposable + { + Queue ExpectedLogs { get; set; } + List AllLogs { get; } + List FailingLogs { get; } + bool IgnoreFailingMessages { get; set; } + bool IsNUnitException { get; } + bool IsNUnitSuccessException { get; } + bool IsNUnitInconclusiveException { get; } + bool IsNUnitIgnoreException { get; } + string NUnitExceptionMessage { get; } + void AddLog(string message, string stacktrace, LogType type); + bool AnyFailingLogs(); + void ProcessExpectedLogs(); + void NoUnexpectedReceived(); + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/LogScope/ILogScope.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/LogScope/ILogScope.cs.meta new file mode 100644 index 0000000..97b0e2c --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/LogScope/ILogScope.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3504aa04cda851b44a65973f9aead6f7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/LogScope/LogEvent.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/LogScope/LogEvent.cs new file mode 100644 index 0000000..49f58cb --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/LogScope/LogEvent.cs @@ -0,0 +1,18 @@ +namespace UnityEngine.TestTools.Logging +{ + internal class LogEvent + { + public string Message { get; set; } + + public string StackTrace { get; set; } + + public LogType LogType { get; set; } + + public bool IsHandled { get; set; } + + public override string ToString() + { + return string.Format("[{0}] {1}", LogType, Message); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/LogScope/LogEvent.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/LogScope/LogEvent.cs.meta new file mode 100644 index 0000000..1609325 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/LogScope/LogEvent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0c56471f08a0f6846afc792f0b4205b9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/LogScope/LogMatch.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/LogScope/LogMatch.cs new file mode 100644 index 0000000..05df048 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/LogScope/LogMatch.cs @@ -0,0 +1,103 @@ +using System; +using System.Text.RegularExpressions; + +namespace UnityEngine.TestTools.Logging +{ + [Serializable] + internal class LogMatch + { + [SerializeField] + private bool m_UseRegex; + [SerializeField] + private string m_Message; + [SerializeField] + private string m_MessageRegex; + [SerializeField] + private string m_LogType; + + public string Message + { + get { return m_Message; } + set + { + m_Message = value; + m_UseRegex = false; + } + } + + public Regex MessageRegex + { + get + { + if (!m_UseRegex) + { + return null; + } + + return new Regex(m_MessageRegex); + } + set + { + if (value != null) + { + m_MessageRegex = value.ToString(); + m_UseRegex = true; + } + else + { + m_MessageRegex = null; + m_UseRegex = false; + } + } + } + + public LogType? LogType + { + get + { + if (!string.IsNullOrEmpty(m_LogType)) + { + return Enum.Parse(typeof(LogType), m_LogType) as LogType ? ; + } + + return null; + } + set + { + if (value != null) + { + m_LogType = value.Value.ToString(); + } + else + { + m_LogType = null; + } + } + } + + public bool Matches(LogEvent log) + { + if (LogType != null && LogType != log.LogType) + { + return false; + } + + if (m_UseRegex) + { + return MessageRegex.IsMatch(log.Message); + } + else + { + return Message.Equals(log.Message); + } + } + + public override string ToString() + { + if (m_UseRegex) + return string.Format("[{0}] Regex: {1}", LogType, MessageRegex); + else + return string.Format("[{0}] {1}", LogType, Message); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/LogScope/LogMatch.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/LogScope/LogMatch.cs.meta new file mode 100644 index 0000000..12f2cf8 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/LogScope/LogMatch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9945ffed4692c6044b6d3acf81efd694 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/LogScope/LogScope.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/LogScope/LogScope.cs new file mode 100644 index 0000000..6f429c9 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/LogScope/LogScope.cs @@ -0,0 +1,223 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using UnityEngine.TestTools.TestRunner; + +namespace UnityEngine.TestTools.Logging +{ + sealed class LogScope : ILogScope + { + static List s_ActiveScopes = new List(); + + readonly object m_Lock = new object(); + bool m_Disposed; + bool m_NeedToProcessLogs; + + public Queue ExpectedLogs { get; set; } + public List AllLogs { get; } + public List FailingLogs { get; } + public bool IgnoreFailingMessages { get; set; } + public bool IsNUnitException { get; private set; } + public bool IsNUnitSuccessException { get; private set; } + public bool IsNUnitInconclusiveException { get; private set; } + public bool IsNUnitIgnoreException { get; private set; } + public string NUnitExceptionMessage { get; private set; } + + public static LogScope Current + { + get + { + if (s_ActiveScopes.Count == 0) + throw new InvalidOperationException("No log scope is available"); + return s_ActiveScopes[0]; + } + } + + public static bool HasCurrentLogScope() + { + return s_ActiveScopes.Count > 0; + } + + public LogScope() + { + AllLogs = new List(); + FailingLogs = new List(); + ExpectedLogs = new Queue(); + IgnoreFailingMessages = false; + Activate(); + } + + void Activate() + { + s_ActiveScopes.Insert(0, this); + RegisterScope(this); + Application.logMessageReceivedThreaded -= AddLog; + Application.logMessageReceivedThreaded += AddLog; + } + + void Deactivate() + { + Application.logMessageReceivedThreaded -= AddLog; + s_ActiveScopes.Remove(this); + UnregisterScope(this); + } + + static void RegisterScope(LogScope logScope) + { + Application.logMessageReceivedThreaded += logScope.AddLog; + } + + static void UnregisterScope(LogScope logScope) + { + Application.logMessageReceivedThreaded -= logScope.AddLog; + } + + public void AddLog(string message, string stacktrace, LogType type) + { + lock (m_Lock) + { + m_NeedToProcessLogs = true; + var log = new LogEvent + { + LogType = type, + Message = message, + StackTrace = stacktrace, + }; + + AllLogs.Add(log); + + if (IsNUnitResultStateException(stacktrace, type)) + { + if (message.StartsWith("SuccessException")) + { + IsNUnitException = true; + IsNUnitSuccessException = true; + if (message.StartsWith("SuccessException: ")) + { + NUnitExceptionMessage = message.Substring("SuccessException: ".Length); + return; + } + } + else if (message.StartsWith("InconclusiveException")) + { + IsNUnitException = true; + IsNUnitInconclusiveException = true; + if (message.StartsWith("InconclusiveException: ")) + { + NUnitExceptionMessage = message.Substring("InconclusiveException: ".Length); + return; + } + } + else if (message.StartsWith("IgnoreException")) + { + IsNUnitException = true; + IsNUnitIgnoreException = true; + if (message.StartsWith("IgnoreException: ")) + { + NUnitExceptionMessage = message.Substring("IgnoreException: ".Length); + return; + } + } + } + + if (IsFailingLog(type) && !IgnoreFailingMessages) + { + FailingLogs.Add(log); + } + } + } + + static bool IsNUnitResultStateException(string stacktrace, LogType logType) + { + if (logType != LogType.Exception) + return false; + + return string.IsNullOrEmpty(stacktrace) || stacktrace.StartsWith("NUnit.Framework.Assert."); + } + + static bool IsFailingLog(LogType type) + { + switch (type) + { + case LogType.Assert: + case LogType.Error: + case LogType.Exception: + return true; + default: + return false; + } + } + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + void Dispose(bool disposing) + { + if (m_Disposed) + { + return; + } + + m_Disposed = true; + + if (disposing) + { + Deactivate(); + } + } + + public bool AnyFailingLogs() + { + ProcessExpectedLogs(); + return FailingLogs.Any(); + } + + public void ProcessExpectedLogs() + { + lock (m_Lock) + { + if (!m_NeedToProcessLogs || !ExpectedLogs.Any()) + return; + + LogMatch expectedLog = null; + foreach (var logEvent in AllLogs) + { + if (!ExpectedLogs.Any()) + break; + if (expectedLog == null && ExpectedLogs.Any()) + expectedLog = ExpectedLogs.Peek(); + + if (expectedLog != null && expectedLog.Matches(logEvent)) + { + ExpectedLogs.Dequeue(); + logEvent.IsHandled = true; + if (FailingLogs.Any(expectedLog.Matches)) + { + var failingLog = FailingLogs.First(expectedLog.Matches); + FailingLogs.Remove(failingLog); + } + expectedLog = null; + } + } + m_NeedToProcessLogs = false; + } + } + + public void NoUnexpectedReceived() + { + lock (m_Lock) + { + ProcessExpectedLogs(); + + var unhandledLog = AllLogs.FirstOrDefault(x => !x.IsHandled); + if (unhandledLog != null) + { + throw new UnhandledLogMessageException(unhandledLog); + } + } + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/LogScope/LogScope.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/LogScope/LogScope.cs.meta new file mode 100644 index 0000000..876c080 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/LogScope/LogScope.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4bbc17b35884fdf468e4b52ae4222882 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/UnexpectedLogMessageException.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/UnexpectedLogMessageException.cs new file mode 100644 index 0000000..4a491be --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/UnexpectedLogMessageException.cs @@ -0,0 +1,29 @@ +using NUnit.Framework; +using NUnit.Framework.Interfaces; +using UnityEngine.TestTools.Logging; + +namespace UnityEngine.TestTools.TestRunner +{ + internal class UnexpectedLogMessageException : ResultStateException + { + public LogMatch LogEvent; + + public UnexpectedLogMessageException(LogMatch log) + : base(BuildMessage(log)) + { + LogEvent = log; + } + + private static string BuildMessage(LogMatch log) + { + return string.Format("Expected log did not appear: {0}", log); + } + + public override ResultState ResultState + { + get { return ResultState.Failure; } + } + + public override string StackTrace { get { return null; } } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/UnexpectedLogMessageException.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/UnexpectedLogMessageException.cs.meta new file mode 100644 index 0000000..57673e2 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/UnexpectedLogMessageException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5b2eeca598284bd4abb4a15c30df1576 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/UnhandledLogMessageException.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/UnhandledLogMessageException.cs new file mode 100644 index 0000000..5a7ab33 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/UnhandledLogMessageException.cs @@ -0,0 +1,35 @@ +using NUnit.Framework; +using NUnit.Framework.Interfaces; +using UnityEngine.TestTools.Logging; +using UnityEngine.TestTools.Utils; + +namespace UnityEngine.TestTools.TestRunner +{ + internal class UnhandledLogMessageException : ResultStateException + { + public LogEvent LogEvent; + private readonly string m_CustomStackTrace; + + public UnhandledLogMessageException(LogEvent log) + : base(BuildMessage(log)) + { + LogEvent = log; + m_CustomStackTrace = StackTraceFilter.Filter(log.StackTrace); + } + + private static string BuildMessage(LogEvent log) + { + return string.Format("Unhandled log message: '{0}'. Use UnityEngine.TestTools.LogAssert.Expect", log); + } + + public override ResultState ResultState + { + get { return ResultState.Failure; } + } + + public override string StackTrace + { + get { return m_CustomStackTrace; } + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/UnhandledLogMessageException.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/UnhandledLogMessageException.cs.meta new file mode 100644 index 0000000..6394a8d --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/UnhandledLogMessageException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a8ed4063f2beecd41a234a582202f3c4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/UnityTestTimeoutException.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/UnityTestTimeoutException.cs new file mode 100644 index 0000000..56566d7 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/UnityTestTimeoutException.cs @@ -0,0 +1,28 @@ +using NUnit.Framework; +using NUnit.Framework.Interfaces; + +namespace UnityEngine.TestTools.TestRunner +{ + internal class UnityTestTimeoutException : ResultStateException + { + public UnityTestTimeoutException(int timeout) + : base(BuildMessage(timeout)) + { + } + + private static string BuildMessage(int timeout) + { + return string.Format("UnityTest exceeded Timeout value of {0}ms", timeout); + } + + public override ResultState ResultState + { + get { return ResultState.Failure; } + } + + public override string StackTrace + { + get { return ""; } + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/UnityTestTimeoutException.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/UnityTestTimeoutException.cs.meta new file mode 100644 index 0000000..188de19 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Assertions/UnityTestTimeoutException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ffb335140c799c4408411d81789fb05c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions.meta new file mode 100644 index 0000000..ac6f127 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3e8d6af343b383544ba5743d119f4062 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/ActionDelegator.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/ActionDelegator.cs new file mode 100644 index 0000000..d13a7e0 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/ActionDelegator.cs @@ -0,0 +1,79 @@ +using System; +using System.Linq; +using UnityEngine.TestRunner.NUnitExtensions.Runner; +using UnityEngine.TestTools.Logging; +using UnityEngine.TestTools.TestRunner; + +namespace UnityEngine.TestTools.NUnitExtensions +{ + /// + /// This class delegates actions from the NUnit thread that should be executed on the main thread. + /// NUnit thread calls Delegate which blocks the execution on the thread until the action is executed. + /// The main thread will poll for awaiting actions (HasAction) and invoke them (Execute). + /// Once the action is executed, the main thread releases the lock and executino on the NUnit thread is continued. + /// + internal class ActionDelegator : BaseDelegator + { + private Func m_Action; + public object Delegate(Action action) + { + return Delegate(() => { action(); return null; }); + } + + public object Delegate(Func action) + { + if (m_Aborted) + { + return null; + } + + AssertState(); + m_Context = UnityTestExecutionContext.CurrentContext; + + m_Signal.Reset(); + m_Action = action; + + WaitForSignal(); + + return HandleResult(); + } + + private void AssertState() + { + if (m_Action != null) + { + throw new Exception("Action not executed yet"); + } + } + + public bool HasAction() + { + return m_Action != null; + } + + public void Execute(LogScope logScope) + { + try + { + SetCurrentTestContext(); + m_Result = m_Action(); + if (logScope.AnyFailingLogs()) + { + var failingLog = logScope.FailingLogs.First(); + throw new UnhandledLogMessageException(failingLog); + } + if (logScope.ExpectedLogs.Any()) + throw new UnexpectedLogMessageException(LogScope.Current.ExpectedLogs.Peek()); + } + catch (Exception e) + { + m_Exception = e; + } + finally + { + m_Action = null; + m_Signal.Set(); + } + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/ActionDelegator.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/ActionDelegator.cs.meta new file mode 100644 index 0000000..4800886 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/ActionDelegator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4f939b9e23a0946439b812551e07ac81 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes.meta new file mode 100644 index 0000000..d2d34f6 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0cb14878543cf3d4f8472b15f7ecf0e3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/ConditionalIgnoreAttribute.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/ConditionalIgnoreAttribute.cs new file mode 100644 index 0000000..3cf9714 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/ConditionalIgnoreAttribute.cs @@ -0,0 +1,36 @@ +using System.Collections.Generic; +using NUnit.Framework; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; + +namespace UnityEngine.TestTools +{ + public class ConditionalIgnoreAttribute : NUnitAttribute, IApplyToTest + { + string m_ConditionKey; + string m_IgnoreReason; + + public ConditionalIgnoreAttribute(string conditionKey, string ignoreReason) + { + m_ConditionKey = conditionKey; + m_IgnoreReason = ignoreReason; + } + + public void ApplyToTest(Test test) + { + var key = m_ConditionKey.ToLowerInvariant(); + if (m_ConditionMap.ContainsKey(key) && m_ConditionMap[key]) + { + test.RunState = RunState.Ignored; + string skipReason = string.Format(m_IgnoreReason); + test.Properties.Add(PropertyNames.SkipReason, skipReason); + } + } + + static Dictionary m_ConditionMap = new Dictionary(); + public static void AddConditionalIgnoreMapping(string key, bool value) + { + m_ConditionMap.Add(key.ToLowerInvariant(), value); + } + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/ConditionalIgnoreAttribute.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/ConditionalIgnoreAttribute.cs.meta new file mode 100644 index 0000000..b1601ee --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/ConditionalIgnoreAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c82a8473f4a8f7b42a004c91e06d2f2b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/TestEnumerator.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/TestEnumerator.cs new file mode 100644 index 0000000..18bb46c --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/TestEnumerator.cs @@ -0,0 +1,52 @@ +using System; +using System.Collections; +using NUnit.Framework; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; + +namespace UnityEngine.TestTools +{ + internal class TestEnumerator + { + private readonly ITestExecutionContext m_Context; + private static IEnumerator m_TestEnumerator; + + public static IEnumerator Enumerator { get { return m_TestEnumerator; } } + + public TestEnumerator(ITestExecutionContext context, IEnumerator testEnumerator) + { + m_Context = context; + m_TestEnumerator = testEnumerator; + } + + public IEnumerator Execute() + { + m_Context.CurrentResult.SetResult(ResultState.Success); + + while (true) + { + object current = null; + try + { + if (!m_TestEnumerator.MoveNext()) + { + yield break; + } + + if (!m_Context.CurrentResult.ResultState.Equals(ResultState.Success)) + { + yield break; + } + + current = m_TestEnumerator.Current; + } + catch (Exception exception) + { + m_Context.CurrentResult.RecordException(exception); + yield break; + } + yield return current; + } + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/TestEnumerator.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/TestEnumerator.cs.meta new file mode 100644 index 0000000..3a6022e --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/TestEnumerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 750aad009559b814dbc27001341fc1c3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/TestMustExpectAllLogsAttribute.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/TestMustExpectAllLogsAttribute.cs new file mode 100644 index 0000000..8f2ea0f --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/TestMustExpectAllLogsAttribute.cs @@ -0,0 +1,28 @@ +using System; + +namespace UnityEngine.TestTools +{ + /// + /// The presence of this attribute will cause the test runner to require that every single log is expected. By + /// default, the runner will only automatically fail on any error logs, so this adds warnings and infos as well. + /// It is the same as calling `LogAssert.NoUnexpectedReceived()` at the bottom of every affected test. + /// + /// This attribute can be applied to test assemblies (will affect every test in the assembly), fixtures (will + /// affect every test in the fixture), or on individual test methods. It is also automatically inherited from base + /// fixtures. + /// + /// The MustExpect property (on by default) lets you selectively enable or disable the higher level value. For + /// example when migrating an assembly to this more strict checking method, you might attach + /// `[assembly:TestMustExpectAllLogs]` to the assembly itself, but then whitelist failing fixtures and test methods + /// with `[TestMustExpectAllLogs(MustExpect=false)]` until they can be migrated. This also means new tests in that + /// assembly would be required to have the more strict checking. + /// + [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Class | AttributeTargets.Method)] + public class TestMustExpectAllLogsAttribute : Attribute + { + public TestMustExpectAllLogsAttribute(bool mustExpect = true) + => MustExpect = mustExpect; + + public bool MustExpect { get; } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/TestMustExpectAllLogsAttribute.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/TestMustExpectAllLogsAttribute.cs.meta new file mode 100644 index 0000000..6ae8514 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/TestMustExpectAllLogsAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3803f736886e77842995ddbc3531afaa +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnityCombinatorialStrategy.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnityCombinatorialStrategy.cs new file mode 100644 index 0000000..144f78c --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnityCombinatorialStrategy.cs @@ -0,0 +1,20 @@ +using System.Collections; +using System.Collections.Generic; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal.Builders; + +namespace UnityEngine.TestTools +{ + internal class UnityCombinatorialStrategy : CombinatorialStrategy, ICombiningStrategy + { + public new IEnumerable GetTestCases(IEnumerable[] sources) + { + var testCases = base.GetTestCases(sources); + foreach (var testCase in testCases) + { + testCase.GetType().GetProperty("ExpectedResult").SetValue(testCase, new object(), null); + } + return testCases; + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnityCombinatorialStrategy.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnityCombinatorialStrategy.cs.meta new file mode 100644 index 0000000..422dd17 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnityCombinatorialStrategy.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7af6ac3e6b51b8d4aab04adc85b8de2f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnityPlatformAttribute.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnityPlatformAttribute.cs new file mode 100644 index 0000000..68f7816 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnityPlatformAttribute.cs @@ -0,0 +1,56 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using NUnit.Framework; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; + +namespace UnityEngine.TestTools +{ + [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = false)] + public class UnityPlatformAttribute : NUnitAttribute, IApplyToTest + { + public RuntimePlatform[] include { get; set; } + public RuntimePlatform[] exclude { get; set; } + + private string m_skippedReason; + + public UnityPlatformAttribute() + { + include = new List().ToArray(); + exclude = new List().ToArray(); + } + + public UnityPlatformAttribute(params RuntimePlatform[] include) + : this() + { + this.include = include; + } + + public void ApplyToTest(Test test) + { + if (test.RunState == RunState.NotRunnable || test.RunState == RunState.Ignored || IsPlatformSupported(Application.platform)) + { + return; + } + test.RunState = RunState.Skipped; + test.Properties.Add("_SKIPREASON", m_skippedReason); + } + + internal bool IsPlatformSupported(RuntimePlatform testTargetPlatform) + { + if (include.Any() && !include.Any(x => x == testTargetPlatform)) + { + m_skippedReason = string.Format("Only supported on {0}", string.Join(", ", include.Select(x => x.ToString()).ToArray())); + return false; + } + + if (exclude.Any(x => x == testTargetPlatform)) + { + m_skippedReason = string.Format("Not supported on {0}", string.Join(", ", include.Select(x => x.ToString()).ToArray())); + return false; + } + return true; + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnityPlatformAttribute.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnityPlatformAttribute.cs.meta new file mode 100644 index 0000000..bb41d89 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnityPlatformAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5440c1153b397e14c9c7b1d6eb83b9f9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnitySetUpAttribute.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnitySetUpAttribute.cs new file mode 100644 index 0000000..cdb8a82 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnitySetUpAttribute.cs @@ -0,0 +1,10 @@ +using System; +using NUnit.Framework; + +namespace UnityEngine.TestTools +{ + [AttributeUsage(AttributeTargets.Method)] + public class UnitySetUpAttribute : NUnitAttribute + { + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnitySetUpAttribute.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnitySetUpAttribute.cs.meta new file mode 100644 index 0000000..1668931 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnitySetUpAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cc6401f13df54ba44bfd7cdc93c7d64d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnityTearDownAttribute.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnityTearDownAttribute.cs new file mode 100644 index 0000000..d159d39 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnityTearDownAttribute.cs @@ -0,0 +1,10 @@ +using System; +using NUnit.Framework; + +namespace UnityEngine.TestTools +{ + [AttributeUsage(AttributeTargets.Method)] + public class UnityTearDownAttribute : NUnitAttribute + { + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnityTearDownAttribute.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnityTearDownAttribute.cs.meta new file mode 100644 index 0000000..169eefb --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnityTearDownAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 600f4b74746dbf944901257f81a8af6d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnityTestAttribute.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnityTestAttribute.cs new file mode 100644 index 0000000..5d2b5f1 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnityTestAttribute.cs @@ -0,0 +1,33 @@ +using System; +using NUnit.Framework; +using NUnit.Framework.Internal.Commands; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; +using NUnit.Framework.Internal.Builders; +using UnityEngine.TestRunner.NUnitExtensions.Runner; + +namespace UnityEngine.TestTools +{ + [AttributeUsage(AttributeTargets.Method)] + public class UnityTestAttribute : CombiningStrategyAttribute, ISimpleTestBuilder, IImplyFixture + { + public UnityTestAttribute() : base(new UnityCombinatorialStrategy(), new ParameterDataSourceProvider()) {} + + private readonly NUnitTestCaseBuilder _builder = new NUnitTestCaseBuilder(); + + TestMethod ISimpleTestBuilder.BuildFrom(IMethodInfo method, Test suite) + { + TestCaseParameters parms = new TestCaseParameters + { + ExpectedResult = new object(), + HasExpectedResult = true + }; + + var t = _builder.BuildTestMethod(method, suite, parms); + + if (t.parms != null) + t.parms.HasExpectedResult = false; + return t; + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnityTestAttribute.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnityTestAttribute.cs.meta new file mode 100644 index 0000000..a7572d4 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnityTestAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fedb0f9e5006b1943abae52f52f08a1a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/BaseDelegator.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/BaseDelegator.cs new file mode 100644 index 0000000..596c000 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/BaseDelegator.cs @@ -0,0 +1,58 @@ +using System; +using System.Threading; +using NUnit.Framework.Internal; + +namespace UnityEngine.TestTools.NUnitExtensions +{ + internal abstract class BaseDelegator + { + protected ManualResetEvent m_Signal = new ManualResetEvent(false); + + protected object m_Result; + protected Exception m_Exception; + protected ITestExecutionContext m_Context; + + protected bool m_Aborted; + + protected object HandleResult() + { + SetCurrentTestContext(); + if (m_Exception != null) + { + var temp = m_Exception; + m_Exception = null; + throw temp; + } + var tempResult = m_Result; + m_Result = null; + return tempResult; + } + + protected void WaitForSignal() + { + while (!m_Signal.WaitOne(100)) + { + if (m_Aborted) + { + m_Aborted = false; + Reflect.MethodCallWrapper = null; + throw new Exception(); + } + } + } + + public void Abort() + { + m_Aborted = true; + } + + protected void SetCurrentTestContext() + { + var prop = typeof(TestExecutionContext).GetProperty("CurrentContext"); + if (prop != null) + { + prop.SetValue(null, m_Context, null); + } + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/BaseDelegator.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/BaseDelegator.cs.meta new file mode 100644 index 0000000..3c1a81a --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/BaseDelegator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 37cea569bfefafe49a1513c4d7f0e9eb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands.meta new file mode 100644 index 0000000..3d3cf4a --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6b72875690e0f7343911e06af3145bd5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/BeforeAfterTestCommandBase.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/BeforeAfterTestCommandBase.cs new file mode 100644 index 0000000..aef740a --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/BeforeAfterTestCommandBase.cs @@ -0,0 +1,196 @@ +using System; +using System.Collections; +using System.Linq; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; +using NUnit.Framework.Internal.Commands; +using UnityEngine.TestRunner.NUnitExtensions; +using UnityEngine.TestRunner.NUnitExtensions.Runner; +using UnityEngine.TestTools.Logging; +using UnityEngine.TestTools.TestRunner; + +namespace UnityEngine.TestTools +{ + internal abstract class BeforeAfterTestCommandBase : DelegatingTestCommand, IEnumerableTestMethodCommand + { + private string m_BeforeErrorPrefix; + private string m_AfterErrorPrefix; + private bool m_SkipYieldAfterActions; + protected BeforeAfterTestCommandBase(TestCommand innerCommand, string beforeErrorPrefix, string afterErrorPrefix, bool skipYieldAfterActions = false) + : base(innerCommand) + { + m_BeforeErrorPrefix = beforeErrorPrefix; + m_AfterErrorPrefix = afterErrorPrefix; + m_SkipYieldAfterActions = skipYieldAfterActions; + } + + protected T[] BeforeActions = new T[0]; + + protected T[] AfterActions = new T[0]; + + protected abstract IEnumerator InvokeBefore(T action, Test test, UnityTestExecutionContext context); + + protected abstract IEnumerator InvokeAfter(T action, Test test, UnityTestExecutionContext context); + + protected abstract BeforeAfterTestCommandState GetState(UnityTestExecutionContext context); + + public IEnumerable ExecuteEnumerable(ITestExecutionContext context) + { + var unityContext = (UnityTestExecutionContext)context; + var state = GetState(unityContext); + + if (state == null) + { + // We do not expect a state to exist in playmode + state = ScriptableObject.CreateInstance(); + } + + state.ApplyTestResult(context.CurrentResult); + + while (state.NextBeforeStepIndex < BeforeActions.Length) + { + var action = BeforeActions[state.NextBeforeStepIndex]; + var enumerator = InvokeBefore(action, Test, unityContext); + ActivePcHelper.SetEnumeratorPC(enumerator, state.NextBeforeStepPc); + + using (var logScope = new LogScope()) + { + while (true) + { + try + { + if (!enumerator.MoveNext()) + { + break; + } + } + catch (Exception ex) + { + state.TestHasRun = true; + context.CurrentResult.RecordPrefixedException(m_BeforeErrorPrefix, ex); + state.StoreTestResult(context.CurrentResult); + break; + } + + state.NextBeforeStepPc = ActivePcHelper.GetEnumeratorPC(enumerator); + state.StoreTestResult(context.CurrentResult); + if (m_SkipYieldAfterActions) + { + break; + } + else + { + yield return enumerator.Current; + } + } + + if (logScope.AnyFailingLogs()) + { + state.TestHasRun = true; + context.CurrentResult.RecordPrefixedError(m_BeforeErrorPrefix, new UnhandledLogMessageException(logScope.FailingLogs.First()).Message); + state.StoreTestResult(context.CurrentResult); + } + } + + state.NextBeforeStepIndex++; + state.NextBeforeStepPc = 0; + } + + if (!state.TestHasRun) + { + if (innerCommand is IEnumerableTestMethodCommand) + { + var executeEnumerable = ((IEnumerableTestMethodCommand)innerCommand).ExecuteEnumerable(context); + foreach (var iterator in executeEnumerable) + { + state.StoreTestResult(context.CurrentResult); + yield return iterator; + } + } + else + { + context.CurrentResult = innerCommand.Execute(context); + state.StoreTestResult(context.CurrentResult); + } + + state.TestHasRun = true; + } + + while (state.NextAfterStepIndex < AfterActions.Length) + { + state.TestAfterStarted = true; + var action = AfterActions[state.NextAfterStepIndex]; + var enumerator = InvokeAfter(action, Test, unityContext); + ActivePcHelper.SetEnumeratorPC(enumerator, state.NextAfterStepPc); + + using (var logScope = new LogScope()) + { + while (true) + { + try + { + if (!enumerator.MoveNext()) + { + break; + } + } + catch (Exception ex) + { + context.CurrentResult.RecordPrefixedException(m_AfterErrorPrefix, ex); + state.StoreTestResult(context.CurrentResult); + break; + } + + state.NextAfterStepPc = ActivePcHelper.GetEnumeratorPC(enumerator); + state.StoreTestResult(context.CurrentResult); + + if (m_SkipYieldAfterActions) + { + break; + } + else + { + yield return enumerator.Current; + } + } + + if (logScope.AnyFailingLogs()) + { + state.TestHasRun = true; + context.CurrentResult.RecordPrefixedError(m_AfterErrorPrefix, new UnhandledLogMessageException(logScope.FailingLogs.First()).Message); + state.StoreTestResult(context.CurrentResult); + } + } + + state.NextAfterStepIndex++; + state.NextAfterStepPc = 0; + } + + state.Reset(); + } + + public override TestResult Execute(ITestExecutionContext context) + { + throw new NotImplementedException("Use ExecuteEnumerable"); + } + + private static TestCommandPcHelper pcHelper; + + internal static TestCommandPcHelper ActivePcHelper + { + get + { + if (pcHelper == null) + { + pcHelper = new TestCommandPcHelper(); + } + + return pcHelper; + } + set + { + pcHelper = value; + } + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/BeforeAfterTestCommandBase.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/BeforeAfterTestCommandBase.cs.meta new file mode 100644 index 0000000..21b2681 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/BeforeAfterTestCommandBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cbbca1d8a0434be4bbc7f165523763ac +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/BeforeAfterTestCommandState.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/BeforeAfterTestCommandState.cs new file mode 100644 index 0000000..daed396 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/BeforeAfterTestCommandState.cs @@ -0,0 +1,49 @@ +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; + +namespace UnityEngine.TestTools +{ + internal class BeforeAfterTestCommandState : ScriptableObject + { + public int NextBeforeStepIndex; + public int NextBeforeStepPc; + public int NextAfterStepIndex; + public int NextAfterStepPc; + public bool TestHasRun; + public TestStatus CurrentTestResultStatus; + public string CurrentTestResultLabel; + public FailureSite CurrentTestResultSite; + public string CurrentTestMessage; + public string CurrentTestStrackTrace; + public bool TestAfterStarted; + + public void Reset() + { + NextBeforeStepIndex = 0; + NextBeforeStepPc = 0; + NextAfterStepIndex = 0; + NextAfterStepPc = 0; + TestHasRun = false; + CurrentTestResultStatus = TestStatus.Inconclusive; + CurrentTestResultLabel = null; + CurrentTestResultSite = default(FailureSite); + CurrentTestMessage = null; + CurrentTestStrackTrace = null; + TestAfterStarted = false; + } + + public void StoreTestResult(TestResult result) + { + CurrentTestResultStatus = result.ResultState.Status; + CurrentTestResultLabel = result.ResultState.Label; + CurrentTestResultSite = result.ResultState.Site; + CurrentTestMessage = result.Message; + CurrentTestStrackTrace = result.StackTrace; + } + + public void ApplyTestResult(TestResult result) + { + result.SetResult(new ResultState(CurrentTestResultStatus, CurrentTestResultLabel, CurrentTestResultSite), CurrentTestMessage, CurrentTestStrackTrace); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/BeforeAfterTestCommandState.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/BeforeAfterTestCommandState.cs.meta new file mode 100644 index 0000000..8e304ac --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/BeforeAfterTestCommandState.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7f65567c9026afb4db5de3355accc636 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableApplyChangesToContextCommand.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableApplyChangesToContextCommand.cs new file mode 100644 index 0000000..81a672a --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableApplyChangesToContextCommand.cs @@ -0,0 +1,34 @@ + +using System.Collections; +using System.Collections.Generic; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; +using NUnit.Framework.Internal.Commands; +using UnityEngine.TestRunner.NUnitExtensions.Runner; + +namespace UnityEngine.TestTools +{ + internal class EnumerableApplyChangesToContextCommand : ApplyChangesToContextCommand, IEnumerableTestMethodCommand + { + public EnumerableApplyChangesToContextCommand(TestCommand innerCommand, IEnumerable changes) + : base(innerCommand, changes) { } + + public IEnumerable ExecuteEnumerable(ITestExecutionContext context) + { + ApplyChanges(context); + + if (innerCommand is IEnumerableTestMethodCommand) + { + var executeEnumerable = ((IEnumerableTestMethodCommand)innerCommand).ExecuteEnumerable(context); + foreach (var iterator in executeEnumerable) + { + yield return iterator; + } + } + else + { + context.CurrentResult = innerCommand.Execute(context); + } + } + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableApplyChangesToContextCommand.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableApplyChangesToContextCommand.cs.meta new file mode 100644 index 0000000..f652088 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableApplyChangesToContextCommand.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3b4429eff9fcffb48b006e8edcc90338 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableRepeatedTestCommand.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableRepeatedTestCommand.cs new file mode 100644 index 0000000..a692d78 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableRepeatedTestCommand.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections; +using System.Reflection; +using NUnit.Framework; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; +using NUnit.Framework.Internal.Commands; +using UnityEngine.TestRunner.NUnitExtensions.Runner; + +namespace UnityEngine.TestTools +{ + internal class EnumerableRepeatedTestCommand : DelegatingTestCommand, IEnumerableTestMethodCommand + { + private int repeatCount; + + public EnumerableRepeatedTestCommand(RepeatAttribute.RepeatedTestCommand commandToReplace) : base(commandToReplace.GetInnerCommand()) + { + repeatCount = (int) typeof(RepeatAttribute.RepeatedTestCommand) + .GetField("repeatCount", BindingFlags.NonPublic | BindingFlags.Instance) + .GetValue(commandToReplace); + } + + public override TestResult Execute(ITestExecutionContext context) + { + throw new NotImplementedException("Use ExecuteEnumerable"); + } + + public IEnumerable ExecuteEnumerable(ITestExecutionContext context) + { + var unityContext = (UnityTestExecutionContext)context; + int count = unityContext.EnumerableRepeatedTestState; + + while (count < repeatCount) + { + count++; + unityContext.EnumerableRepeatedTestState = count; + + if (innerCommand is IEnumerableTestMethodCommand) + { + var executeEnumerable = ((IEnumerableTestMethodCommand)innerCommand).ExecuteEnumerable(context); + foreach (var iterator in executeEnumerable) + { + yield return iterator; + } + } + else + { + context.CurrentResult = innerCommand.Execute(context); + } + + if (context.CurrentResult.ResultState != ResultState.Success) + { + break; + } + } + + unityContext.EnumerableRepeatedTestState = 0; + } + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableRepeatedTestCommand.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableRepeatedTestCommand.cs.meta new file mode 100644 index 0000000..121fb18 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableRepeatedTestCommand.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e273462feb9a65948826739f683cc9a9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableRetryTestCommand.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableRetryTestCommand.cs new file mode 100644 index 0000000..2dbe145 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableRetryTestCommand.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections; +using System.Reflection; +using NUnit.Framework; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; +using NUnit.Framework.Internal.Commands; +using UnityEngine.TestRunner.NUnitExtensions.Runner; + +namespace UnityEngine.TestTools +{ + internal class EnumerableRetryTestCommand : DelegatingTestCommand, IEnumerableTestMethodCommand + { + private int retryCount; + + public EnumerableRetryTestCommand(RetryAttribute.RetryCommand commandToReplace) : base(commandToReplace.GetInnerCommand()) + { + retryCount = (int) typeof(RetryAttribute.RetryCommand) + .GetField("_retryCount", BindingFlags.NonPublic | BindingFlags.Instance) + .GetValue(commandToReplace); + } + + public override TestResult Execute(ITestExecutionContext context) + { + throw new NotImplementedException("Use ExecuteEnumerable"); + } + + public IEnumerable ExecuteEnumerable(ITestExecutionContext context) + { + var unityContext = (UnityTestExecutionContext)context; + int count = unityContext.EnumerableRetryTestState; + + while (count < retryCount) + { + count++; + unityContext.EnumerableRetryTestState = count; + + if (innerCommand is IEnumerableTestMethodCommand) + { + var executeEnumerable = ((IEnumerableTestMethodCommand)innerCommand).ExecuteEnumerable(context); + foreach (var iterator in executeEnumerable) + { + yield return iterator; + } + } + else + { + context.CurrentResult = innerCommand.Execute(context); + } + + if (context.CurrentResult.ResultState != ResultState.Failure) + { + break; + } + } + + unityContext.EnumerableRetryTestState = 0; + } + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableRetryTestCommand.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableRetryTestCommand.cs.meta new file mode 100644 index 0000000..da1781c --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableRetryTestCommand.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6de2f178a24cd2e48a0816cacd9a0583 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableSetUpTearDownCommand.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableSetUpTearDownCommand.cs new file mode 100644 index 0000000..e4010c0 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableSetUpTearDownCommand.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections; +using System.Linq; +using System.Reflection; +using NUnit.Framework.Internal; +using NUnit.Framework.Internal.Commands; +using UnityEngine.TestRunner.NUnitExtensions.Runner; + +namespace UnityEngine.TestTools +{ + internal class EnumerableSetUpTearDownCommand : BeforeAfterTestCommandBase + { + public EnumerableSetUpTearDownCommand(TestCommand innerCommand) + : base(innerCommand, "SetUp", "TearDown") + { + if (Test.TypeInfo.Type != null) + { + BeforeActions = GetMethodsWithAttributeFromFixture(Test.TypeInfo.Type, typeof(UnitySetUpAttribute)); + AfterActions = GetMethodsWithAttributeFromFixture(Test.TypeInfo.Type, typeof(UnityTearDownAttribute)).Reverse().ToArray(); + } + } + + private static MethodInfo[] GetMethodsWithAttributeFromFixture(Type fixtureType, Type setUpType) + { + MethodInfo[] methodsWithAttribute = Reflect.GetMethodsWithAttribute(fixtureType, setUpType, true); + return methodsWithAttribute.Where(x => x.ReturnType == typeof(IEnumerator)).ToArray(); + } + + protected override IEnumerator InvokeBefore(MethodInfo action, Test test, UnityTestExecutionContext context) + { + return (IEnumerator)Reflect.InvokeMethod(action, context.TestObject); + } + + protected override IEnumerator InvokeAfter(MethodInfo action, Test test, UnityTestExecutionContext context) + { + return (IEnumerator)Reflect.InvokeMethod(action, context.TestObject); + } + + protected override BeforeAfterTestCommandState GetState(UnityTestExecutionContext context) + { + return context.SetUpTearDownState; + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableSetUpTearDownCommand.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableSetUpTearDownCommand.cs.meta new file mode 100644 index 0000000..2d1f6b7 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableSetUpTearDownCommand.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dd85a35169d313840a0874aea1a28629 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableTestMethodCommand.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableTestMethodCommand.cs new file mode 100644 index 0000000..17be307 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableTestMethodCommand.cs @@ -0,0 +1,86 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using NUnit.Framework; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; +using NUnit.Framework.Internal.Commands; +using NUnit.Framework.Internal.Execution; +using UnityEngine.TestRunner.NUnitExtensions.Runner; +using UnityEngine.TestTools.TestRunner; + +namespace UnityEngine.TestTools +{ + internal class EnumerableTestMethodCommand : TestCommand, IEnumerableTestMethodCommand + { + private readonly TestMethod testMethod; + + public EnumerableTestMethodCommand(TestMethod testMethod) + : base(testMethod) + { + this.testMethod = testMethod; + } + + public IEnumerable ExecuteEnumerable(ITestExecutionContext context) + { + yield return null; + + var currentExecutingTestEnumerator = new TestEnumeratorWrapper(testMethod).GetEnumerator(context); + if (currentExecutingTestEnumerator != null) + { + var testEnumeraterYieldInstruction = new TestEnumerator(context, currentExecutingTestEnumerator); + + yield return testEnumeraterYieldInstruction; + + var enumerator = testEnumeraterYieldInstruction.Execute(); + + var executingEnumerator = ExecuteEnumerableAndRecordExceptions(enumerator, context); + while (executingEnumerator.MoveNext()) + { + yield return executingEnumerator.Current; + } + } + else + { + if (context.CurrentResult.ResultState != ResultState.Ignored) + { + context.CurrentResult.SetResult(ResultState.Success); + } + } + } + + private static IEnumerator ExecuteEnumerableAndRecordExceptions(IEnumerator enumerator, ITestExecutionContext context) + { + while (true) + { + try + { + if (!enumerator.MoveNext()) + { + break; + } + } + catch (Exception ex) + { + context.CurrentResult.RecordException(ex); + break; + } + + if (enumerator.Current is IEnumerator) + { + var current = (IEnumerator)enumerator.Current; + yield return ExecuteEnumerableAndRecordExceptions(current, context); + } + else + { + yield return enumerator.Current; + } + } + } + + public override TestResult Execute(ITestExecutionContext context) + { + throw new NotImplementedException("Use ExecuteEnumerable"); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableTestMethodCommand.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableTestMethodCommand.cs.meta new file mode 100644 index 0000000..d9b61f0 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableTestMethodCommand.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 19a6f000f81e24c4a826c1abd43e77c7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/ImmediateEnumerableCommand.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/ImmediateEnumerableCommand.cs new file mode 100644 index 0000000..a50a95e --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/ImmediateEnumerableCommand.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections; +using NUnit.Framework.Internal; +using NUnit.Framework.Internal.Commands; +using UnityEngine.TestRunner.NUnitExtensions.Runner; + +namespace UnityEngine.TestTools +{ + internal class ImmediateEnumerableCommand : DelegatingTestCommand + { + public ImmediateEnumerableCommand(TestCommand innerCommand) + : base(innerCommand) { } + + public override TestResult Execute(ITestExecutionContext context) + { + if (innerCommand is IEnumerableTestMethodCommand) + { + var executeEnumerable = ((IEnumerableTestMethodCommand)innerCommand).ExecuteEnumerable(context); + foreach (var iterator in executeEnumerable) + { + if (iterator != null) + { + throw new Exception("Only null can be yielded at this point."); + } + } + return context.CurrentResult; + } + + return innerCommand.Execute(context); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/ImmediateEnumerableCommand.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/ImmediateEnumerableCommand.cs.meta new file mode 100644 index 0000000..ec993f6 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/ImmediateEnumerableCommand.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8349e42a2b30c7a4abd8678c203428ba +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/OuterUnityTestActionCommand.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/OuterUnityTestActionCommand.cs new file mode 100644 index 0000000..34c2d21 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/OuterUnityTestActionCommand.cs @@ -0,0 +1,49 @@ +using System.Collections; +using System.Collections.Generic; +using System.Reflection; +using NUnit.Framework.Internal; +using NUnit.Framework.Internal.Commands; +using UnityEngine.TestRunner.NUnitExtensions.Runner; + +namespace UnityEngine.TestTools +{ + internal class OuterUnityTestActionCommand : BeforeAfterTestCommandBase + { + public OuterUnityTestActionCommand(TestCommand innerCommand) + : base(innerCommand, "BeforeTest", "AfterTest") + { + if (Test.TypeInfo.Type != null) + { + BeforeActions = GetUnityTestActionsFromMethod(Test.Method.MethodInfo); + AfterActions = BeforeActions; + } + } + + private static IOuterUnityTestAction[] GetUnityTestActionsFromMethod(MethodInfo method) + { + var attributes = method.GetCustomAttributes(false); + List actions = new List(); + foreach (var attribute in attributes) + { + if (attribute is IOuterUnityTestAction) + actions.Add(attribute as IOuterUnityTestAction); + } + return actions.ToArray(); + } + + protected override IEnumerator InvokeBefore(IOuterUnityTestAction action, Test test, UnityTestExecutionContext context) + { + return action.BeforeTest(test); + } + + protected override IEnumerator InvokeAfter(IOuterUnityTestAction action, Test test, UnityTestExecutionContext context) + { + return action.AfterTest(test); + } + + protected override BeforeAfterTestCommandState GetState(UnityTestExecutionContext context) + { + return context.OuterUnityTestActionState; + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/OuterUnityTestActionCommand.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/OuterUnityTestActionCommand.cs.meta new file mode 100644 index 0000000..321a388 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/OuterUnityTestActionCommand.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0d4fc309a0784294c8ab658b53b12320 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/SetUpTearDownCommand.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/SetUpTearDownCommand.cs new file mode 100644 index 0000000..b0f96cc --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/SetUpTearDownCommand.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections; +using System.Linq; +using System.Reflection; +using NUnit.Framework; +using NUnit.Framework.Internal; +using NUnit.Framework.Internal.Commands; +using NUnit.Framework.Internal.Execution; +using UnityEngine.TestRunner.NUnitExtensions.Runner; + +namespace UnityEngine.TestTools +{ + internal class SetUpTearDownCommand : BeforeAfterTestCommandBase + { + public SetUpTearDownCommand(TestCommand innerCommand) + : base(innerCommand, "SetUp", "TearDown", true) + { + if (Test.TypeInfo.Type != null) + { + BeforeActions = GetMethodsWithAttributeFromFixture(Test.TypeInfo.Type, typeof(SetUpAttribute)); + AfterActions = GetMethodsWithAttributeFromFixture(Test.TypeInfo.Type, typeof(TearDownAttribute)).Reverse().ToArray(); + } + } + + private static MethodInfo[] GetMethodsWithAttributeFromFixture(Type fixtureType, Type setUpType) + { + MethodInfo[] methodsWithAttribute = Reflect.GetMethodsWithAttribute(fixtureType, setUpType, true); + return methodsWithAttribute.Where(x => x.ReturnType == typeof(void)).ToArray(); + } + + protected override IEnumerator InvokeBefore(MethodInfo action, Test test, UnityTestExecutionContext context) + { + Reflect.InvokeMethod(action, context.TestObject); + yield return null; + } + + protected override IEnumerator InvokeAfter(MethodInfo action, Test test, UnityTestExecutionContext context) + { + Reflect.InvokeMethod(action, context.TestObject); + yield return null; + } + + protected override BeforeAfterTestCommandState GetState(UnityTestExecutionContext context) + { + return null; + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/SetUpTearDownCommand.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/SetUpTearDownCommand.cs.meta new file mode 100644 index 0000000..fbcea8b --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/SetUpTearDownCommand.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e0db3f3921670cd4ca2e925737c3fba4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/TestActionCommand.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/TestActionCommand.cs new file mode 100644 index 0000000..2b08fe1 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/TestActionCommand.cs @@ -0,0 +1,53 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; +using NUnit.Framework; +using NUnit.Framework.Internal; +using NUnit.Framework.Internal.Commands; +using UnityEngine.TestRunner.NUnitExtensions.Runner; + +namespace UnityEngine.TestTools +{ + internal class TestActionCommand : BeforeAfterTestCommandBase + { + public TestActionCommand(TestCommand innerCommand) + : base(innerCommand, "BeforeTest", "AfterTest", true) + { + if (Test.TypeInfo.Type != null) + { + BeforeActions = GetTestActionsFromMethod(Test.Method.MethodInfo); + AfterActions = BeforeActions; + } + } + + private static ITestAction[] GetTestActionsFromMethod(MethodInfo method) + { + var attributes = method.GetCustomAttributes(false); + List actions = new List(); + foreach (var attribute in attributes) + { + if (attribute is ITestAction) + actions.Add(attribute as ITestAction); + } + return actions.ToArray(); + } + + protected override IEnumerator InvokeBefore(ITestAction action, Test test, UnityTestExecutionContext context) + { + action.BeforeTest(test); + yield return null; + } + + protected override IEnumerator InvokeAfter(ITestAction action, Test test, UnityTestExecutionContext context) + { + action.AfterTest(test); + yield return null; + } + + protected override BeforeAfterTestCommandState GetState(UnityTestExecutionContext context) + { + return null; + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/TestActionCommand.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/TestActionCommand.cs.meta new file mode 100644 index 0000000..0349788 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/TestActionCommand.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2de8ba3b840049641897e0da7ce1d5cd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/TestCommandPcHelper.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/TestCommandPcHelper.cs new file mode 100644 index 0000000..62dc806 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/TestCommandPcHelper.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections; + +namespace UnityEngine.TestTools +{ + internal class TestCommandPcHelper + { + public virtual void SetEnumeratorPC(IEnumerator enumerator, int pc) + { + // Noop implementation used in playmode. + } + + public virtual int GetEnumeratorPC(IEnumerator enumerator) + { + return 0; + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/TestCommandPcHelper.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/TestCommandPcHelper.cs.meta new file mode 100644 index 0000000..6f8f8f8 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Commands/TestCommandPcHelper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 33e6b78c96bb0694e96383e3c56b7b54 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/ConstructDelegator.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/ConstructDelegator.cs new file mode 100644 index 0000000..1a6dd61 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/ConstructDelegator.cs @@ -0,0 +1,141 @@ +using System; +using System.Linq; +using NUnit.Framework.Internal; +using UnityEngine.TestRunner.NUnitExtensions.Runner; +using UnityEngine.TestTools.Logging; +using UnityEngine.TestTools.TestRunner; + +namespace UnityEngine.TestTools.NUnitExtensions +{ + /// + /// Specialization of BaseDelegator that makes sure objects are created on the MainThread. + /// It also deals with ScriptableObjects so that tests can survive assembly reload. + /// + internal class ConstructDelegator + { + private Type m_RequestedType; + private object[] m_Arguments; + + private ScriptableObject m_CurrentRunningTest; + private readonly IStateSerializer m_StateSerializer; + + protected Exception m_Exception; + protected object m_Result; + protected ITestExecutionContext m_Context; + + public ConstructDelegator(IStateSerializer stateSerializer) + { + m_StateSerializer = stateSerializer; + } + + protected object HandleResult() + { + SetCurrentTestContext(); + if (m_Exception != null) + { + var temp = m_Exception; + m_Exception = null; + throw temp; + } + var tempResult = m_Result; + m_Result = null; + return tempResult; + } + + protected void SetCurrentTestContext() + { + var prop = typeof(UnityTestExecutionContext).GetProperty("CurrentContext"); + if (prop != null) + { + prop.SetValue(null, m_Context, null); + } + } + + public object Delegate(Type type, object[] arguments) + { + AssertState(); + m_Context = UnityTestExecutionContext.CurrentContext; + + m_RequestedType = type; + m_Arguments = arguments; + + using (var logScope = new LogScope()) + { + Execute(logScope); + } + + return HandleResult(); + } + + private void AssertState() + { + if (m_RequestedType != null) + { + throw new Exception("Constructor not executed yet"); + } + } + + public bool HasAction() + { + return m_RequestedType != null; + } + + public void Execute(LogScope logScope) + { + try + { + if (typeof(ScriptableObject).IsAssignableFrom(m_RequestedType)) + { + if (m_CurrentRunningTest != null && m_RequestedType != m_CurrentRunningTest.GetType()) + { + DestroyCurrentTestObjectIfExists(); + } + if (m_CurrentRunningTest == null) + { + if (m_StateSerializer.CanRestoreFromScriptableObject(m_RequestedType)) + { + m_CurrentRunningTest = m_StateSerializer.RestoreScriptableObjectInstance(); + } + else + { + m_CurrentRunningTest = ScriptableObject.CreateInstance(m_RequestedType); + } + } + m_Result = m_CurrentRunningTest; + } + else + { + DestroyCurrentTestObjectIfExists(); + m_Result = Activator.CreateInstance(m_RequestedType, m_Arguments); + if (m_StateSerializer.CanRestoreFromJson(m_RequestedType)) + { + m_StateSerializer.RestoreClassFromJson(ref m_Result); + } + } + if (logScope.AnyFailingLogs()) + { + var failingLog = logScope.FailingLogs.First(); + throw new UnhandledLogMessageException(failingLog); + } + if (logScope.ExpectedLogs.Any()) + throw new UnexpectedLogMessageException(LogScope.Current.ExpectedLogs.Peek()); + } + catch (Exception e) + { + m_Exception = e; + } + finally + { + m_RequestedType = null; + m_Arguments = null; + } + } + + public void DestroyCurrentTestObjectIfExists() + { + if (m_CurrentRunningTest == null) + return; + Object.DestroyImmediate(m_CurrentRunningTest); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/ConstructDelegator.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/ConstructDelegator.cs.meta new file mode 100644 index 0000000..dbd68a8 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/ConstructDelegator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b42e1db66fe9c634798674cb9e1df2ca +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Filters.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Filters.meta new file mode 100644 index 0000000..7cad26c --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Filters.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c3de99f9efc582a48995bc8e8c2df418 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Filters/AssemblyNameFilter.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Filters/AssemblyNameFilter.cs new file mode 100644 index 0000000..a1f6803 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Filters/AssemblyNameFilter.cs @@ -0,0 +1,25 @@ +using System; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal.Filters; + +namespace UnityEngine.TestRunner.NUnitExtensions.Filters +{ + internal class AssemblyNameFilter : ValueMatchFilter + { + public AssemblyNameFilter(string assemblyName) : base(assemblyName) {} + + public override bool Match(ITest test) + { + string assemblyName = string.Empty; + //Assembly fullname is in the format "Assembly-name, meta data ...", so extract the name by looking for the comma + if (test.TypeInfo != null && test.TypeInfo.Assembly != null && test.TypeInfo.FullName != null) + assemblyName = test.TypeInfo.Assembly.FullName.Substring(0, test.TypeInfo.Assembly.FullName.IndexOf(',')).TrimEnd(','); + return ExpectedValue.Equals(assemblyName, StringComparison.OrdinalIgnoreCase); + } + + protected override string ElementName + { + get { return "id"; } + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Filters/AssemblyNameFilter.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Filters/AssemblyNameFilter.cs.meta new file mode 100644 index 0000000..bee56e6 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Filters/AssemblyNameFilter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 91319408591cec1478efd3c62f9f418a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Filters/CategoryFilterExtended.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Filters/CategoryFilterExtended.cs new file mode 100644 index 0000000..f060d47 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Filters/CategoryFilterExtended.cs @@ -0,0 +1,36 @@ +using System.Collections; +using System.Linq; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; +using NUnit.Framework.Internal.Filters; + +namespace UnityEngine.TestRunner.NUnitExtensions.Filters +{ + internal class CategoryFilterExtended : CategoryFilter + { + public static string k_DefaultCategory = "Uncategorized"; + + public CategoryFilterExtended(string name) : base(name) + { + } + + public override bool Match(ITest test) + { + IList testCategories = test.Properties[PropertyNames.Category].Cast().ToList(); + + if (test is TestMethod) + { + // Do not count tests with no attribute as Uncategorized if test fixture class has at least one attribute + // The test inherits the attribute from the test fixture + IList fixtureCategories = test.Parent.Properties[PropertyNames.Category].Cast().ToList(); + if (fixtureCategories.Count > 0) + return false; + } + + if (testCategories.Count == 0 && ExpectedValue == k_DefaultCategory && test is TestMethod) + return true; + + return base.Match(test); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Filters/CategoryFilterExtended.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Filters/CategoryFilterExtended.cs.meta new file mode 100644 index 0000000..8ff1134 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Filters/CategoryFilterExtended.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ebeedaa04bb53e24ba2e7fb6745e3fd3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/IAsyncTestAssemblyBuilder.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/IAsyncTestAssemblyBuilder.cs new file mode 100644 index 0000000..9058d9f --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/IAsyncTestAssemblyBuilder.cs @@ -0,0 +1,12 @@ +using System.Collections.Generic; +using System.Reflection; +using NUnit.Framework.Api; +using NUnit.Framework.Interfaces; + +namespace UnityEngine.TestTools.NUnitExtensions +{ + internal interface IAsyncTestAssemblyBuilder : ITestAssemblyBuilder + { + IEnumerator BuildAsync(Assembly[] assemblies, TestPlatform[] testPlatforms, IDictionary options); + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/IAsyncTestAssemblyBuilder.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/IAsyncTestAssemblyBuilder.cs.meta new file mode 100644 index 0000000..e22e4e8 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/IAsyncTestAssemblyBuilder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c3aa5c3d59b94854e843f10b75b3ad63 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/IStateSerializer.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/IStateSerializer.cs new file mode 100644 index 0000000..d4a3338 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/IStateSerializer.cs @@ -0,0 +1,12 @@ +using System; + +namespace UnityEngine.TestTools.NUnitExtensions +{ + internal interface IStateSerializer + { + ScriptableObject RestoreScriptableObjectInstance(); + void RestoreClassFromJson(ref object instance); + bool CanRestoreFromJson(Type requestedType); + bool CanRestoreFromScriptableObject(Type requestedType); + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/IStateSerializer.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/IStateSerializer.cs.meta new file mode 100644 index 0000000..350aa38 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/IStateSerializer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5f875a14565308a40a5262d2504da705 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner.meta new file mode 100644 index 0000000..718bce8 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 37888acc09d9ee848bf9559f06645c45 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/CompositeWorkItem.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/CompositeWorkItem.cs new file mode 100644 index 0000000..2efbd86 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/CompositeWorkItem.cs @@ -0,0 +1,342 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using NUnit.Framework; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; +using NUnit.Framework.Internal.Commands; +using NUnit.Framework.Internal.Execution; +using UnityEngine.TestTools.Logging; +using UnityEngine.TestTools.TestRunner; + +namespace UnityEngine.TestRunner.NUnitExtensions.Runner +{ + internal class CompositeWorkItem : UnityWorkItem + { + private readonly TestSuite _suite; + private readonly TestSuiteResult _suiteResult; + private readonly ITestFilter _childFilter; + private TestCommand _setupCommand; + private TestCommand _teardownCommand; + + public List Children { get; private set; } + + private int _countOrder; + + private CountdownEvent _childTestCountdown; + + public CompositeWorkItem(TestSuite suite, ITestFilter childFilter, WorkItemFactory factory) + : base(suite, factory) + { + _suite = suite; + _suiteResult = Result as TestSuiteResult; + _childFilter = childFilter; + _countOrder = 0; + } + + protected override IEnumerable PerformWork() + { + InitializeSetUpAndTearDownCommands(); + + if (UnityTestExecutionContext.CurrentContext != null && m_DontRunRestoringResult && EditModeTestCallbacks.RestoringTestContext != null) + { + EditModeTestCallbacks.RestoringTestContext(); + } + + if (!CheckForCancellation()) + if (Test.RunState == RunState.Explicit && !_childFilter.IsExplicitMatch(Test)) + SkipFixture(ResultState.Explicit, GetSkipReason(), null); + else + switch (Test.RunState) + { + default: + case RunState.Runnable: + case RunState.Explicit: + Result.SetResult(ResultState.Success); + + CreateChildWorkItems(); + + if (Children.Count > 0) + { + if (!m_DontRunRestoringResult) + { + //This is needed to give the editor a chance to go out of playmode if needed before creating objects. + //If we do not, the objects could be automatically destroyed when exiting playmode and could result in errors later on + yield return null; + PerformOneTimeSetUp(); + } + + if (!CheckForCancellation()) + { + switch (Result.ResultState.Status) + { + case TestStatus.Passed: + foreach (var child in RunChildren()) + { + if (CheckForCancellation()) + { + yield break; + } + + yield return child; + } + break; + case TestStatus.Skipped: + case TestStatus.Inconclusive: + case TestStatus.Failed: + SkipChildren(_suite, Result.ResultState.WithSite(FailureSite.Parent), "OneTimeSetUp: " + Result.Message); + break; + } + } + + if (Context.ExecutionStatus != TestExecutionStatus.AbortRequested && !m_DontRunRestoringResult) + { + PerformOneTimeTearDown(); + } + } + break; + + case RunState.Skipped: + SkipFixture(ResultState.Skipped, GetSkipReason(), null); + break; + + case RunState.Ignored: + SkipFixture(ResultState.Ignored, GetSkipReason(), null); + break; + + case RunState.NotRunnable: + SkipFixture(ResultState.NotRunnable, GetSkipReason(), GetProviderStackTrace()); + break; + } + if (!ResultedInDomainReload) + { + WorkItemComplete(); + } + } + + private bool CheckForCancellation() + { + if (Context.ExecutionStatus != TestExecutionStatus.Running) + { + Result.SetResult(ResultState.Cancelled, "Test cancelled by user"); + return true; + } + + return false; + } + + private void InitializeSetUpAndTearDownCommands() + { + List setUpTearDownItems = _suite.TypeInfo != null + ? CommandBuilder.BuildSetUpTearDownList(_suite.TypeInfo.Type, typeof(OneTimeSetUpAttribute), typeof(OneTimeTearDownAttribute)) + : new List(); + + var actionItems = new List(); + foreach (ITestAction action in Actions) + { + bool applyToSuite = (action.Targets & ActionTargets.Suite) == ActionTargets.Suite + || action.Targets == ActionTargets.Default && !(Test is ParameterizedMethodSuite); + + bool applyToTest = (action.Targets & ActionTargets.Test) == ActionTargets.Test + && !(Test is ParameterizedMethodSuite); + + if (applyToSuite) + actionItems.Add(new TestActionItem(action)); + + if (applyToTest) + Context.UpstreamActions.Add(action); + } + + _setupCommand = CommandBuilder.MakeOneTimeSetUpCommand(_suite, setUpTearDownItems, actionItems); + _teardownCommand = CommandBuilder.MakeOneTimeTearDownCommand(_suite, setUpTearDownItems, actionItems); + } + + private void PerformOneTimeSetUp() + { + var logScope = new LogScope(); + try + { + _setupCommand.Execute(Context); + } + catch (Exception ex) + { + if (ex is NUnitException || ex is TargetInvocationException) + ex = ex.InnerException; + + Result.RecordException(ex, FailureSite.SetUp); + } + + if (logScope.AnyFailingLogs()) + { + Result.RecordException(new UnhandledLogMessageException(logScope.FailingLogs.First())); + } + logScope.Dispose(); + } + + private IEnumerable RunChildren() + { + int childCount = Children.Count; + if (childCount == 0) + throw new InvalidOperationException("RunChildren called but item has no children"); + + _childTestCountdown = new CountdownEvent(childCount); + + foreach (UnityWorkItem child in Children) + { + if (CheckForCancellation()) + { + yield break; + } + + var unityTestExecutionContext = new UnityTestExecutionContext(Context); + child.InitializeContext(unityTestExecutionContext); + + var enumerable = child.Execute().GetEnumerator(); + + while (true) + { + if (!enumerable.MoveNext()) + { + break; + } + ResultedInDomainReload |= child.ResultedInDomainReload; + yield return enumerable.Current; + } + + _suiteResult.AddResult(child.Result); + childCount--; + } + + if (childCount > 0) + { + while (childCount-- > 0) + CountDownChildTest(); + } + } + + private void CreateChildWorkItems() + { + Children = new List(); + var testSuite = _suite; + + foreach (ITest test in testSuite.Tests) + { + if (_childFilter.Pass(test)) + { + var child = m_Factory.Create(test, _childFilter); + + if (test.Properties.ContainsKey(PropertyNames.Order)) + { + Children.Insert(0, child); + _countOrder++; + } + else + { + Children.Add(child); + } + } + } + + if (_countOrder != 0) SortChildren(); + } + + private class UnityWorkItemOrderComparer : IComparer + { + public int Compare(UnityWorkItem x, UnityWorkItem y) + { + var xKey = int.MaxValue; + var yKey = int.MaxValue; + + if (x.Test.Properties.ContainsKey(PropertyNames.Order)) + xKey = (int)x.Test.Properties[PropertyNames.Order][0]; + + if (y.Test.Properties.ContainsKey(PropertyNames.Order)) + yKey = (int)y.Test.Properties[PropertyNames.Order][0]; + + return xKey.CompareTo(yKey); + } + } + + private void SortChildren() + { + Children.Sort(0, _countOrder, new UnityWorkItemOrderComparer()); + } + + private void SkipFixture(ResultState resultState, string message, string stackTrace) + { + Result.SetResult(resultState.WithSite(FailureSite.SetUp), message, StackFilter.Filter(stackTrace)); + SkipChildren(_suite, resultState.WithSite(FailureSite.Parent), "OneTimeSetUp: " + message); + } + + private void SkipChildren(TestSuite suite, ResultState resultState, string message) + { + foreach (Test child in suite.Tests) + { + if (_childFilter.Pass(child)) + { + Context.Listener.TestStarted(child); + TestResult childResult = child.MakeTestResult(); + childResult.SetResult(resultState, message); + _suiteResult.AddResult(childResult); + + if (child.IsSuite) + SkipChildren((TestSuite)child, resultState, message); + + Context.Listener.TestFinished(childResult); + } + } + } + + private void PerformOneTimeTearDown() + { + _teardownCommand.Execute(Context); + } + + private string GetSkipReason() + { + return (string)Test.Properties.Get(PropertyNames.SkipReason); + } + + private string GetProviderStackTrace() + { + return (string)Test.Properties.Get(PropertyNames.ProviderStackTrace); + } + + private void CountDownChildTest() + { + _childTestCountdown.Signal(); + if (_childTestCountdown.CurrentCount == 0) + { + if (Context.ExecutionStatus != TestExecutionStatus.AbortRequested) + PerformOneTimeTearDown(); + + foreach (var childResult in _suiteResult.Children) + if (childResult.ResultState == ResultState.Cancelled) + { + this.Result.SetResult(ResultState.Cancelled, "Cancelled by user"); + break; + } + + WorkItemComplete(); + } + } + + public override void Cancel(bool force) + { + if (Children == null) + return; + + foreach (var child in Children) + { + var ctx = child.Context; + if (ctx != null) + ctx.ExecutionStatus = force ? TestExecutionStatus.AbortRequested : TestExecutionStatus.StopRequested; + + if (child.State == WorkItemState.Running) + child.Cancel(force); + } + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/CompositeWorkItem.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/CompositeWorkItem.cs.meta new file mode 100644 index 0000000..148e65b --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/CompositeWorkItem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 110d5035a36a6a34580fb65bb40cd78f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/CoroutineTestWorkItem.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/CoroutineTestWorkItem.cs new file mode 100644 index 0000000..2574e77 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/CoroutineTestWorkItem.cs @@ -0,0 +1,75 @@ +using System; +using System.Collections; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; +using NUnit.Framework.Internal.Commands; +using NUnit.Framework.Internal.Execution; +using UnityEngine.TestTools.Utils; + +namespace UnityEngine.TestRunner.NUnitExtensions.Runner +{ + internal class CoroutineTestWorkItem : UnityWorkItem + { + private static MonoBehaviour m_MonoBehaviourCoroutineRunner; + private TestCommand m_Command; + + public static MonoBehaviour monoBehaviourCoroutineRunner + { + get + { + if (m_MonoBehaviourCoroutineRunner == null) + { + throw new NullReferenceException("MonoBehaviour coroutine runner not set"); + } + return m_MonoBehaviourCoroutineRunner; + } + set { m_MonoBehaviourCoroutineRunner = value; } + } + + public CoroutineTestWorkItem(TestMethod test, ITestFilter filter) + : base(test, null) + { + m_Command = m_Command = TestCommandBuilder.BuildTestCommand(test, filter); + } + + protected override IEnumerable PerformWork() + { + if (m_Command is SkipCommand) + { + m_Command.Execute(Context); + Result = Context.CurrentResult; + WorkItemComplete(); + yield break; + } + + if (m_Command is ApplyChangesToContextCommand) + { + var applyChangesToContextCommand = (ApplyChangesToContextCommand)m_Command; + applyChangesToContextCommand.ApplyChanges(Context); + m_Command = applyChangesToContextCommand.GetInnerCommand(); + } + + var enumerableTestMethodCommand = (IEnumerableTestMethodCommand)m_Command; + try + { + var executeEnumerable = enumerableTestMethodCommand.ExecuteEnumerable(Context).GetEnumerator(); + + var coroutineRunner = new CoroutineRunner(monoBehaviourCoroutineRunner, Context); + yield return coroutineRunner.HandleEnumerableTest(executeEnumerable); + + if (coroutineRunner.HasFailedWithTimeout()) + { + Context.CurrentResult.SetResult(ResultState.Failure, string.Format("Test exceeded Timeout value of {0}ms", Context.TestCaseTimeout)); + } + + while (executeEnumerable.MoveNext()) {} + + Result = Context.CurrentResult; + } + finally + { + WorkItemComplete(); + } + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/CoroutineTestWorkItem.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/CoroutineTestWorkItem.cs.meta new file mode 100644 index 0000000..dabb0f2 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/CoroutineTestWorkItem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b557515fff172984e8c4400b43f1c631 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/DefaultTestWorkItem.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/DefaultTestWorkItem.cs new file mode 100644 index 0000000..5acf8bc --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/DefaultTestWorkItem.cs @@ -0,0 +1,96 @@ +using System; +using System.Collections; +using System.Linq; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; +using NUnit.Framework.Internal.Commands; +using NUnit.Framework.Internal.Execution; +using UnityEngine.TestTools; +using SetUpTearDownCommand = NUnit.Framework.Internal.Commands.SetUpTearDownCommand; +using TestActionCommand = NUnit.Framework.Internal.Commands.TestActionCommand; + +namespace UnityEngine.TestRunner.NUnitExtensions.Runner +{ + internal class EditModeTestCallbacks + { + public static Action RestoringTestContext { get; set; } + } + + internal class DefaultTestWorkItem : UnityWorkItem + { + private TestCommand _command; + + public DefaultTestWorkItem(TestMethod test, ITestFilter filter) + : base(test, null) + { + _command = TestCommandBuilder.BuildTestCommand(test, filter); + } + + protected override IEnumerable PerformWork() + { + if (m_DontRunRestoringResult && EditModeTestCallbacks.RestoringTestContext != null) + { + EditModeTestCallbacks.RestoringTestContext(); + Result = Context.CurrentResult; + yield break; + } + + try + { + if (_command is SkipCommand || _command is FailCommand) + { + Result = _command.Execute(Context); + yield break; + } + + if (!(_command is IEnumerableTestMethodCommand)) + { + Debug.LogError("Cannot perform work on " + _command.GetType().Name); + yield break; + } + + foreach (var workItemStep in ((IEnumerableTestMethodCommand)_command).ExecuteEnumerable(Context)) + { + ResultedInDomainReload = false; + + if (workItemStep is IEditModeTestYieldInstruction) + { + var editModeTestYieldInstruction = (IEditModeTestYieldInstruction)workItemStep; + yield return editModeTestYieldInstruction; + var enumerator = editModeTestYieldInstruction.Perform(); + while (true) + { + bool moveNext; + try + { + moveNext = enumerator.MoveNext(); + } + catch (Exception e) + { + Context.CurrentResult.RecordException(e); + break; + } + + if (!moveNext) + { + break; + } + + yield return null; + } + } + else + { + yield return workItemStep; + } + } + + Result = Context.CurrentResult; + } + finally + { + WorkItemComplete(); + } + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/DefaultTestWorkItem.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/DefaultTestWorkItem.cs.meta new file mode 100644 index 0000000..a880ec1 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/DefaultTestWorkItem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c7cfda246e604b945b12b7afedb094ce +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/FailCommand.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/FailCommand.cs new file mode 100644 index 0000000..0c31ded --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/FailCommand.cs @@ -0,0 +1,34 @@ + +using System.Collections; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; +using NUnit.Framework.Internal.Commands; + +namespace UnityEngine.TestRunner.NUnitExtensions.Runner +{ + internal class FailCommand : TestCommand, IEnumerableTestMethodCommand + { + private ResultState m_ResultState; + private string m_Message; + + public FailCommand(Test test, ResultState resultState, string message) + : base(test) + { + m_ResultState = resultState; + m_Message = message; + } + + public override TestResult Execute(ITestExecutionContext context) + { + context.CurrentResult.SetResult(m_ResultState, m_Message); + return context.CurrentResult; + } + + public IEnumerable ExecuteEnumerable(ITestExecutionContext context) + { + context.CurrentResult.SetResult(m_ResultState, m_Message); + yield return null; + } + } + +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/FailCommand.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/FailCommand.cs.meta new file mode 100644 index 0000000..b0f7840 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/FailCommand.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 68e5dc8bfd5d72647a93b7f2e1da831a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/IEnumerableTestMethodCommand.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/IEnumerableTestMethodCommand.cs new file mode 100644 index 0000000..d62979a --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/IEnumerableTestMethodCommand.cs @@ -0,0 +1,10 @@ +using System.Collections; +using NUnit.Framework.Internal; + +namespace UnityEngine.TestRunner.NUnitExtensions.Runner +{ + internal interface IEnumerableTestMethodCommand + { + IEnumerable ExecuteEnumerable(ITestExecutionContext context); + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/IEnumerableTestMethodCommand.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/IEnumerableTestMethodCommand.cs.meta new file mode 100644 index 0000000..29ed5a5 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/IEnumerableTestMethodCommand.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dbd43d8a3b8122d4e89b055f53382b11 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/PlaymodeWorkItemFactory.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/PlaymodeWorkItemFactory.cs new file mode 100644 index 0000000..bdb55fe --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/PlaymodeWorkItemFactory.cs @@ -0,0 +1,13 @@ +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; + +namespace UnityEngine.TestRunner.NUnitExtensions.Runner +{ + internal class PlaymodeWorkItemFactory : WorkItemFactory + { + protected override UnityWorkItem Create(TestMethod method, ITestFilter filter, ITest loadedTest) + { + return new CoroutineTestWorkItem(method, filter); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/PlaymodeWorkItemFactory.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/PlaymodeWorkItemFactory.cs.meta new file mode 100644 index 0000000..42a71f6 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/PlaymodeWorkItemFactory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7ef6801a8b664544aa9f2ab1bc1f8b60 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/RestoreTestContextAfterDomainReload.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/RestoreTestContextAfterDomainReload.cs new file mode 100644 index 0000000..4171ed8 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/RestoreTestContextAfterDomainReload.cs @@ -0,0 +1,4 @@ +namespace UnityEngine.TestRunner.NUnitExtensions.Runner +{ + internal class RestoreTestContextAfterDomainReload {} +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/RestoreTestContextAfterDomainReload.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/RestoreTestContextAfterDomainReload.cs.meta new file mode 100644 index 0000000..eaf8bc2 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/RestoreTestContextAfterDomainReload.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 26721f9940339264fb14bdbfe1290e21 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/TestCommandBuilder.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/TestCommandBuilder.cs new file mode 100644 index 0000000..7cf2103 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/TestCommandBuilder.cs @@ -0,0 +1,127 @@ +using System; +using System.Collections; +using System.Linq; +using NUnit.Framework; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; +using NUnit.Framework.Internal.Commands; +using UnityEngine.TestTools; + +namespace UnityEngine.TestRunner.NUnitExtensions.Runner +{ + internal static class TestCommandBuilder + { + public static TestCommand BuildTestCommand(TestMethod test, ITestFilter filter) + { + if (test.RunState != RunState.Runnable && + !(test.RunState == RunState.Explicit && filter.IsExplicitMatch(test))) + { + return new SkipCommand(test); + } + + var testReturnsIEnumerator = test.Method.ReturnType.Type == typeof(IEnumerator); + + TestCommand command; + if (!testReturnsIEnumerator) + { + command = new TestMethodCommand(test); + } + else + { + command = new EnumerableTestMethodCommand(test); + } + + command = new UnityLogCheckDelegatingCommand(command); + foreach (var wrapper in test.Method.GetCustomAttributes(true)) + { + command = wrapper.Wrap(command); + if (command == null) + { + var message = String.Format("IWrapTestMethod implementation '{0}' returned null as command.", + wrapper.GetType().FullName); + return new FailCommand(test, ResultState.Failure, message); + } + + if (testReturnsIEnumerator && !(command is IEnumerableTestMethodCommand)) + { + command = TryReplaceWithEnumerableCommand(command); + if (command != null) + { + continue; + } + + var message = String.Format("'{0}' is not supported on {1} as it does not handle returning IEnumerator.", + wrapper.GetType().FullName, + GetTestBuilderName(test)); + return new FailCommand(test, ResultState.Failure, message); + } + } + + command = new UnityEngine.TestTools.TestActionCommand(command); + command = new UnityEngine.TestTools.SetUpTearDownCommand(command); + + if (!testReturnsIEnumerator) + { + command = new ImmediateEnumerableCommand(command); + } + + foreach (var wrapper in test.Method.GetCustomAttributes(true)) + { + command = wrapper.Wrap(command); + if (command == null) + { + var message = String.Format("IWrapSetUpTearDown implementation '{0}' returned null as command.", + wrapper.GetType().FullName); + return new FailCommand(test, ResultState.Failure, message); + } + + if (testReturnsIEnumerator && !(command is IEnumerableTestMethodCommand)) + { + command = TryReplaceWithEnumerableCommand(command); + if (command != null) + { + continue; + } + + var message = String.Format("'{0}' is not supported on {1} as it does not handle returning IEnumerator.", + wrapper.GetType().FullName, + GetTestBuilderName(test)); + return new FailCommand(test, ResultState.Failure, message); + } + } + + command = new EnumerableSetUpTearDownCommand(command); + command = new OuterUnityTestActionCommand(command); + + IApplyToContext[] changes = test.Method.GetCustomAttributes(true); + if (changes.Length > 0) + { + command = new EnumerableApplyChangesToContextCommand(command, changes); + } + + return command; + } + + private static string GetTestBuilderName(TestMethod testMethod) + { + return new[] + { + testMethod.Method.GetCustomAttributes(true).Select(attribute => attribute.GetType().Name), + testMethod.Method.GetCustomAttributes(true).Select(attribute => attribute.GetType().Name) + }.SelectMany(v => v).FirstOrDefault(); + } + + private static TestCommand TryReplaceWithEnumerableCommand(TestCommand command) + { + switch (command.GetType().Name) + { + case nameof(RepeatAttribute.RepeatedTestCommand): + return new EnumerableRepeatedTestCommand(command as RepeatAttribute.RepeatedTestCommand); + case nameof(RetryAttribute.RetryCommand): + return new EnumerableRetryTestCommand(command as RetryAttribute.RetryCommand); + default: + return null; + } + } + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/TestCommandBuilder.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/TestCommandBuilder.cs.meta new file mode 100644 index 0000000..2c4a37b --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/TestCommandBuilder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f40df9c8cf926b241b093a37028d8815 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityLogCheckDelegatingCommand.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityLogCheckDelegatingCommand.cs new file mode 100644 index 0000000..1081e06 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityLogCheckDelegatingCommand.cs @@ -0,0 +1,143 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using NUnit.Framework.Internal; +using NUnit.Framework.Internal.Commands; +using UnityEngine.TestTools; +using UnityEngine.TestTools.Logging; +using UnityEngine.TestTools.TestRunner; + +namespace UnityEngine.TestRunner.NUnitExtensions.Runner +{ + class UnityLogCheckDelegatingCommand : DelegatingTestCommand, IEnumerableTestMethodCommand + { + static Dictionary s_AttributeCache = new Dictionary(); + + public UnityLogCheckDelegatingCommand(TestCommand innerCommand) + : base(innerCommand) {} + + public override TestResult Execute(ITestExecutionContext context) + { + using (var logScope = new LogScope()) + { + if (ExecuteAndCheckLog(logScope, context.CurrentResult, () => innerCommand.Execute(context))) + PostTestValidation(logScope, innerCommand, context.CurrentResult); + } + + return context.CurrentResult; + } + + public IEnumerable ExecuteEnumerable(ITestExecutionContext context) + { + if (!(innerCommand is IEnumerableTestMethodCommand enumerableTestMethodCommand)) + { + Execute(context); + yield break; + } + + using (var logScope = new LogScope()) + { + IEnumerable executeEnumerable = null; + + if (!ExecuteAndCheckLog(logScope, context.CurrentResult, + () => executeEnumerable = enumerableTestMethodCommand.ExecuteEnumerable(context))) + yield break; + + foreach (var step in executeEnumerable) + { + // do not check expected logs here - we want to permit expecting and receiving messages to run + // across frames. (but we do always want to catch a fail immediately.) + if (!CheckFailingLogs(logScope, context.CurrentResult)) + yield break; + + yield return step; + } + + if (!CheckLogs(context.CurrentResult, logScope)) + yield break; + + PostTestValidation(logScope, innerCommand, context.CurrentResult); + } + } + + static bool CaptureException(TestResult result, Action action) + { + try + { + action(); + return true; + } + catch (Exception e) + { + result.RecordException(e); + return false; + } + } + + static bool ExecuteAndCheckLog(LogScope logScope, TestResult result, Action action) + => CaptureException(result, action) && CheckLogs(result, logScope); + + static void PostTestValidation(LogScope logScope, TestCommand command, TestResult result) + { + if (MustExpect(command.Test.Method.MethodInfo)) + CaptureException(result, logScope.NoUnexpectedReceived); + } + + static bool CheckLogs(TestResult result, LogScope logScope) + => CheckFailingLogs(logScope, result) && CheckExpectedLogs(logScope, result); + + static bool CheckFailingLogs(LogScope logScope, TestResult result) + { + if (!logScope.AnyFailingLogs()) + return true; + + var failingLog = logScope.FailingLogs.First(); + result.RecordException(new UnhandledLogMessageException(failingLog)); + return false; + } + + static bool CheckExpectedLogs(LogScope logScope, TestResult result) + { + if (!logScope.ExpectedLogs.Any()) + return true; + + var expectedLog = logScope.ExpectedLogs.Peek(); + result.RecordException(new UnexpectedLogMessageException(expectedLog)); + return false; + } + + static bool MustExpect(MemberInfo method) + { + // method + + var methodAttr = method.GetCustomAttributes(true).FirstOrDefault(); + if (methodAttr != null) + return methodAttr.MustExpect; + + // fixture + + var fixture = method.DeclaringType; + if (!s_AttributeCache.TryGetValue(fixture, out var mustExpect)) + { + var fixtureAttr = fixture.GetCustomAttributes(true).FirstOrDefault(); + mustExpect = s_AttributeCache[fixture] = fixtureAttr?.MustExpect; + } + + if (mustExpect != null) + return mustExpect.Value; + + // assembly + + var assembly = fixture.Assembly; + if (!s_AttributeCache.TryGetValue(assembly, out mustExpect)) + { + var assemblyAttr = assembly.GetCustomAttributes().FirstOrDefault(); + mustExpect = s_AttributeCache[assembly] = assemblyAttr?.MustExpect; + } + + return mustExpect == true; + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityLogCheckDelegatingCommand.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityLogCheckDelegatingCommand.cs.meta new file mode 100644 index 0000000..42b3b73 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityLogCheckDelegatingCommand.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 48230e4e90fb4d14a9d56bddea898413 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityTestAssemblyRunner.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityTestAssemblyRunner.cs new file mode 100644 index 0000000..dbb60c8 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityTestAssemblyRunner.cs @@ -0,0 +1,98 @@ +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using NUnit; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; +using UnityEngine.TestTools; +using UnityEngine.TestTools.NUnitExtensions; + +namespace UnityEngine.TestRunner.NUnitExtensions.Runner +{ + internal interface IUnityTestAssemblyRunner + { + ITest LoadedTest { get; } + ITestResult Result { get; } + bool IsTestLoaded { get; } + bool IsTestRunning { get; } + bool IsTestComplete { get; } + UnityWorkItem TopLevelWorkItem { get; set; } + UnityTestExecutionContext GetCurrentContext(); + ITest Load(Assembly[] assemblies, TestPlatform testPlatform, IDictionary settings); + IEnumerable Run(ITestListener listener, ITestFilter filter); + void StopRun(); + } + + internal class UnityTestAssemblyRunner : IUnityTestAssemblyRunner + { + private readonly UnityTestAssemblyBuilder unityBuilder; + private readonly WorkItemFactory m_Factory; + + protected UnityTestExecutionContext Context { get; set; } + + public UnityTestExecutionContext GetCurrentContext() + { + return UnityTestExecutionContext.CurrentContext; + } + + protected IDictionary Settings { get; set; } + public ITest LoadedTest { get; protected set; } + + public ITestResult Result + { + get { return TopLevelWorkItem == null ? null : TopLevelWorkItem.Result; } + } + + public bool IsTestLoaded + { + get { return LoadedTest != null; } + } + + public bool IsTestRunning + { + get { return TopLevelWorkItem != null && TopLevelWorkItem.State == NUnit.Framework.Internal.Execution.WorkItemState.Running; } + } + public bool IsTestComplete + { + get { return TopLevelWorkItem != null && TopLevelWorkItem.State == NUnit.Framework.Internal.Execution.WorkItemState.Complete; } + } + + public UnityTestAssemblyRunner(UnityTestAssemblyBuilder builder, WorkItemFactory factory) + { + unityBuilder = builder; + m_Factory = factory; + Context = new UnityTestExecutionContext(); + } + + public ITest Load(Assembly[] assemblies, TestPlatform testPlatform, IDictionary settings) + { + Settings = settings; + + if (settings.ContainsKey(FrameworkPackageSettings.RandomSeed)) + Randomizer.InitialSeed = (int)settings[FrameworkPackageSettings.RandomSeed]; + + return LoadedTest = unityBuilder.Build(assemblies, Enumerable.Repeat(testPlatform, assemblies.Length).ToArray(), settings); + } + + public IEnumerable Run(ITestListener listener, ITestFilter filter) + { + TopLevelWorkItem = m_Factory.Create(LoadedTest, filter); + TopLevelWorkItem.InitializeContext(Context); + UnityTestExecutionContext.CurrentContext = Context; + Context.Listener = listener; + + return TopLevelWorkItem.Execute(); + } + + public UnityWorkItem TopLevelWorkItem { get; set; } + + public void StopRun() + { + if (IsTestRunning) + { + TopLevelWorkItem.Cancel(false); + } + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityTestAssemblyRunner.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityTestAssemblyRunner.cs.meta new file mode 100644 index 0000000..2277fc0 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityTestAssemblyRunner.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 874e40a588dbb1e48bc128d686337d4e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityTestExecutionContext.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityTestExecutionContext.cs new file mode 100644 index 0000000..ca17b70 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityTestExecutionContext.cs @@ -0,0 +1,130 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using NUnit.Framework; +using NUnit.Framework.Constraints; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; +using NUnit.Framework.Internal.Execution; +using UnityEngine.TestTools; + +namespace UnityEngine.TestRunner.NUnitExtensions.Runner +{ + internal class UnityTestExecutionContext : ITestExecutionContext + { + private readonly UnityTestExecutionContext _priorContext; + private TestResult _currentResult; + private int _assertCount; + + public static UnityTestExecutionContext CurrentContext { get; set; } + + public UnityTestExecutionContext Context { get; private set; } + + public Test CurrentTest { get; set; } + public DateTime StartTime { get; set; } + public long StartTicks { get; set; } + public TestResult CurrentResult + { + get { return _currentResult; } + set + { + _currentResult = value; + if (value != null) + OutWriter = value.OutWriter; + } + } + + public object TestObject { get; set; } + public string WorkDirectory { get; set; } + + + private TestExecutionStatus _executionStatus; + public TestExecutionStatus ExecutionStatus + { + get + { + // ExecutionStatus may have been set to StopRequested or AbortRequested + // in a prior context. If so, reflect the same setting in this context. + if (_executionStatus == TestExecutionStatus.Running && _priorContext != null) + _executionStatus = _priorContext.ExecutionStatus; + + return _executionStatus; + } + set + { + _executionStatus = value; + + // Push the same setting up to all prior contexts + if (_priorContext != null) + _priorContext.ExecutionStatus = value; + } + } + + public List UpstreamActions { get; private set; } + public int TestCaseTimeout { get; set; } + public CultureInfo CurrentCulture { get; set; } + public CultureInfo CurrentUICulture { get; set; } + public ITestListener Listener { get; set; } + + public UnityTestExecutionContext() + { + UpstreamActions = new List(); + CurrentContext = this; + } + + public UnityTestExecutionContext(UnityTestExecutionContext other) + { + _priorContext = other; + + CurrentTest = other.CurrentTest; + CurrentResult = other.CurrentResult; + TestObject = other.TestObject; + WorkDirectory = other.WorkDirectory; + Listener = other.Listener; + TestCaseTimeout = other.TestCaseTimeout; + UpstreamActions = new List(other.UpstreamActions); + SetUpTearDownState = other.SetUpTearDownState; + OuterUnityTestActionState = other.OuterUnityTestActionState; + + TestContext.CurrentTestExecutionContext = this; + + CurrentCulture = other.CurrentCulture; + CurrentUICulture = other.CurrentUICulture; + CurrentContext = this; + } + + public TextWriter OutWriter { get; private set; } + public bool StopOnError { get; set; } + + public IWorkItemDispatcher Dispatcher { get; set; } + + public ParallelScope ParallelScope { get; set; } + public string WorkerId { get; private set; } + public Randomizer RandomGenerator { get; private set; } + public ValueFormatter CurrentValueFormatter { get; private set; } + public bool IsSingleThreaded { get; set; } + public BeforeAfterTestCommandState SetUpTearDownState { get; set; } + public BeforeAfterTestCommandState OuterUnityTestActionState { get; set; } + public int EnumerableRepeatedTestState { get; set; } + public int EnumerableRetryTestState { get; set; } + + internal int AssertCount + { + get + { + return _assertCount; + } + } + + public void IncrementAssertCount() + { + _assertCount += 1; + } + + public void AddFormatter(ValueFormatterFactory formatterFactory) + { + throw new NotImplementedException(); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityTestExecutionContext.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityTestExecutionContext.cs.meta new file mode 100644 index 0000000..f218a3d --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityTestExecutionContext.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 59ff995fabb3bac45afa0f96f333e5dc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityWorkItem.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityWorkItem.cs new file mode 100644 index 0000000..a4593db --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityWorkItem.cs @@ -0,0 +1,113 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using NUnit.Framework; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; +using NUnit.Framework.Internal.Execution; + +namespace UnityEngine.TestRunner.NUnitExtensions.Runner +{ + internal abstract class UnityWorkItem + { + protected readonly WorkItemFactory m_Factory; + protected bool m_ExecuteTestStartEvent; + protected bool m_DontRunRestoringResult; + public event EventHandler Completed; + + public bool ResultedInDomainReload { get; internal set; } + + public UnityTestExecutionContext Context { get; private set; } + + public Test Test { get; private set; } + + public TestResult Result { get; protected set; } + + public WorkItemState State { get; private set; } + + public List Actions { get; private set; } + + protected UnityWorkItem(Test test, WorkItemFactory factory) + { + m_Factory = factory; + Test = test; + Actions = new List(); + Result = test.MakeTestResult(); + State = WorkItemState.Ready; + m_ExecuteTestStartEvent = ShouldExecuteStartEvent(); + m_DontRunRestoringResult = ShouldRestore(test); + } + + protected static bool ShouldRestore(ITest loadedTest) + { + return UnityWorkItemDataHolder.alreadyExecutedTests != null && UnityWorkItemDataHolder.alreadyExecutedTests.Contains(loadedTest.FullName); + } + + protected bool ShouldExecuteStartEvent() + { + return UnityWorkItemDataHolder.alreadyStartedTests != null && UnityWorkItemDataHolder.alreadyStartedTests.All(x => x != Test.FullName) && !ShouldRestore(Test); + } + + protected abstract IEnumerable PerformWork(); + + public void InitializeContext(UnityTestExecutionContext context) + { + Context = context; + + if (Test is TestAssembly) + Actions.AddRange(ActionsHelper.GetActionsFromTestAssembly((TestAssembly)Test)); + else if (Test is ParameterizedMethodSuite) + Actions.AddRange(ActionsHelper.GetActionsFromTestMethodInfo(Test.Method)); + else if (Test.TypeInfo != null) + Actions.AddRange(ActionsHelper.GetActionsFromTypesAttributes(Test.TypeInfo.Type)); + } + + public virtual IEnumerable Execute() + { + Context.CurrentTest = this.Test; + Context.CurrentResult = this.Result; + + if (m_ExecuteTestStartEvent) + { + Context.Listener.TestStarted(Test); + } + + Context.StartTime = DateTime.UtcNow; + Context.StartTicks = Stopwatch.GetTimestamp(); + + State = WorkItemState.Running; + + return PerformWork(); + } + + protected void WorkItemComplete() + { + State = WorkItemState.Complete; + + Result.StartTime = Context.StartTime; + Result.EndTime = DateTime.UtcNow; + + long tickCount = Stopwatch.GetTimestamp() - Context.StartTicks; + double seconds = (double)tickCount / Stopwatch.Frequency; + Result.Duration = seconds; + + //Result.AssertCount += Context.AssertCount; + + Context.Listener.TestFinished(Result); + + if (Completed != null) + Completed(this, EventArgs.Empty); + + Context.TestObject = null; + Test.Fixture = null; + } + + public virtual void Cancel(bool force) + { + Result.SetResult(ResultState.Cancelled, "Cancelled by user"); + Context.Listener.TestFinished(Result); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityWorkItem.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityWorkItem.cs.meta new file mode 100644 index 0000000..e0b4496 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityWorkItem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 79ced2556f0af814a840b86232613ff1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityWorkItemDataHolder.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityWorkItemDataHolder.cs new file mode 100644 index 0000000..dc9a3d1 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityWorkItemDataHolder.cs @@ -0,0 +1,10 @@ +using System.Collections.Generic; + +namespace UnityEngine.TestRunner.NUnitExtensions.Runner +{ + internal class UnityWorkItemDataHolder + { + public static List alreadyStartedTests = new List(); + public static List alreadyExecutedTests; + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityWorkItemDataHolder.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityWorkItemDataHolder.cs.meta new file mode 100644 index 0000000..77b31f2 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityWorkItemDataHolder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5b3e90046c38f1d4dad2e0d5a79e871c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/WorkItemFactory.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/WorkItemFactory.cs new file mode 100644 index 0000000..89683ac --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/WorkItemFactory.cs @@ -0,0 +1,28 @@ +using System.Collections; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; + +namespace UnityEngine.TestRunner.NUnitExtensions.Runner +{ + internal abstract class WorkItemFactory + { + public UnityWorkItem Create(ITest loadedTest, ITestFilter filter) + { + TestSuite suite = loadedTest as TestSuite; + if (suite != null) + { + return new CompositeWorkItem(suite, filter, this); + } + + var testMethod = (TestMethod)loadedTest; + if (testMethod.Method.ReturnType.Type != typeof(IEnumerator)) + { + return new DefaultTestWorkItem(testMethod, filter); + } + + return Create(testMethod, filter, loadedTest); + } + + protected abstract UnityWorkItem Create(TestMethod method, ITestFilter filter, ITest loadedTest); + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/WorkItemFactory.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/WorkItemFactory.cs.meta new file mode 100644 index 0000000..e22ce95 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/Runner/WorkItemFactory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5c15bf0966eb95847a4260d830a30d30 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/TestExtensions.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/TestExtensions.cs new file mode 100644 index 0000000..a326004 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/TestExtensions.cs @@ -0,0 +1,146 @@ +using System.Collections.Generic; +using System.Linq; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; +using UnityEngine.TestRunner.NUnitExtensions.Filters; + +namespace UnityEngine.TestRunner.NUnitExtensions +{ + internal static class TestExtensions + { + private static IEnumerable GetTestCategories(this ITest test) + { + var categories = test.Properties[PropertyNames.Category].Cast().ToList(); + if (categories.Count == 0 && test is TestMethod) + { + // only mark tests as Uncategorized if the test fixture doesn't have a category, + // otherwise the test inherits the Fixture category + var fixtureCategories = test.Parent.Properties[PropertyNames.Category].Cast().ToList(); + if (fixtureCategories.Count == 0) + categories.Add(CategoryFilterExtended.k_DefaultCategory); + } + return categories; + } + + public static bool HasCategory(this ITest test, string[] categoryFilter) + { + var categories = test.GetAllCategoriesFromTest().Distinct(); + return categoryFilter.Any(c => categories.Any(r => r == c)); + } + + public static List GetAllCategoriesFromTest(this ITest test) + { + if (test.Parent == null) + return test.GetTestCategories().ToList(); + + var categories = GetAllCategoriesFromTest(test.Parent); + categories.AddRange(test.GetTestCategories()); + return categories; + } + + public static void ParseForNameDuplicates(this ITest test) + { + var duplicates = new Dictionary(); + for (var i = 0; i < test.Tests.Count; i++) + { + var child = test.Tests[i]; + int count; + if (duplicates.TryGetValue(child.FullName, out count)) + { + count++; + child.Properties.Add("childIndex", count); + duplicates[child.FullName] = count; + } + else + { + duplicates.Add(child.FullName, 1); + } + ParseForNameDuplicates(child); + } + } + + public static int GetChildIndex(this ITest test) + { + var index = test.Properties["childIndex"]; + return (int)index[0]; + } + + public static bool HasChildIndex(this ITest test) + { + var index = test.Properties["childIndex"]; + return index.Count > 0; + } + + static string GetAncestorPath(ITest test) + { + var path = ""; + var testParent = test.Parent; + + while (testParent != null && testParent.Parent != null && !string.IsNullOrEmpty(testParent.Name)) + { + path = testParent.Name + "/" + path; + testParent = testParent.Parent; + } + + return path; + } + + public static string GetUniqueName(this ITest test) + { + var id = GetAncestorPath(test) + GetFullName(test); + if (test.HasChildIndex()) + { + var index = test.GetChildIndex(); + if (index >= 0) + id += index; + } + if (test.IsSuite) + { + id += "[suite]"; + } + return id; + } + + public static string GetFullName(ITest test) + { + if (test.TypeInfo == null && (test.Parent == null || test.Parent.TypeInfo == null)) + { + return "[" + test.FullName + "]"; + } + var assemblyId = test.TypeInfo == null ? test.Parent.TypeInfo.Assembly.GetName().Name : test.TypeInfo.Assembly.GetName().Name; + return string.Format("[{0}][{1}]", assemblyId, test.FullName); + } + + public static string GetSkipReason(this ITest test) + { + if (test.Properties.ContainsKey(PropertyNames.SkipReason)) + return (string)test.Properties.Get(PropertyNames.SkipReason); + + return null; + } + + public static string GetParentId(this ITest test) + { + if (test.Parent != null) + return test.Parent.Id; + + return null; + } + + public static string GetParentFullName(this ITest test) + { + if (test.Parent != null) + return test.Parent.FullName; + + return null; + } + + public static string GetParentUniqueName(this ITest test) + { + if (test.Parent != null) + return GetUniqueName(test.Parent); + + return null; + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/TestExtensions.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/TestExtensions.cs.meta new file mode 100644 index 0000000..d7e04b4 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/TestExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8bc74398aa3944646ade4ee78cd57484 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/TestResultExtensions.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/TestResultExtensions.cs new file mode 100644 index 0000000..0c14397 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/TestResultExtensions.cs @@ -0,0 +1,77 @@ +using System; +using NUnit.Framework; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; + +namespace UnityEngine.TestRunner.NUnitExtensions +{ + internal static class TestResultExtensions + { + public static void RecordPrefixedException(this TestResult testResult, string prefix, Exception ex, ResultState resultState = null) + + { + if (ex is NUnitException) + { + ex = ex.InnerException; + } + + if (resultState == null) + { + resultState = testResult.ResultState == ResultState.Cancelled + ? ResultState.Cancelled + : ResultState.Error; + } + + var exceptionMessage = ExceptionHelper.BuildMessage(ex); + string stackTrace = "--" + prefix + NUnit.Env.NewLine + ExceptionHelper.BuildStackTrace(ex); + if (testResult.StackTrace != null) + { + stackTrace = testResult.StackTrace + NUnit.Env.NewLine + stackTrace; + } + + if (testResult.Test.IsSuite) + { + resultState = resultState.WithSite(FailureSite.TearDown); + } + + if (ex is ResultStateException) + { + exceptionMessage = ex.Message; + resultState = ((ResultStateException)ex).ResultState; + stackTrace = StackFilter.Filter(ex.StackTrace); + } + + string message = (string.IsNullOrEmpty(prefix) ? "" : (prefix + " : ")) + exceptionMessage; + if (testResult.Message != null) + { + message = testResult.Message + NUnit.Env.NewLine + message; + } + + testResult.SetResult(resultState, message, stackTrace); + } + + public static void RecordPrefixedError(this TestResult testResult, string prefix, string error, ResultState resultState = null) + + { + if (resultState == null) + { + resultState = testResult.ResultState == ResultState.Cancelled + ? ResultState.Cancelled + : ResultState.Error; + } + + if (testResult.Test.IsSuite) + { + resultState = resultState.WithSite(FailureSite.TearDown); + } + + string message = (string.IsNullOrEmpty(prefix) ? "" : (prefix + " : ")) + error; + if (testResult.Message != null) + { + message = testResult.Message + NUnit.Env.NewLine + message; + } + + testResult.SetResult(resultState, message); + } + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/TestResultExtensions.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/TestResultExtensions.cs.meta new file mode 100644 index 0000000..86eb9ad --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/TestResultExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 65fb6da362a78334ab360a125cfafdaf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/UnityTestAssemblyBuilder.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/UnityTestAssemblyBuilder.cs new file mode 100644 index 0000000..3a130c5 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/UnityTestAssemblyBuilder.cs @@ -0,0 +1,58 @@ +using System.Collections.Generic; +using System.IO; +using System.Reflection; +using NUnit; +using NUnit.Framework.Api; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; + +namespace UnityEngine.TestTools.NUnitExtensions +{ + internal class UnityTestAssemblyBuilder : DefaultTestAssemblyBuilder, IAsyncTestAssemblyBuilder + { + private readonly string m_ProductName; + public UnityTestAssemblyBuilder() + { + m_ProductName = Application.productName; + } + + public ITest Build(Assembly[] assemblies, TestPlatform[] testPlatforms, IDictionary options) + { + var test = BuildAsync(assemblies, testPlatforms, options); + while (test.MoveNext()) + { + } + + return test.Current; + } + + public IEnumerator BuildAsync(Assembly[] assemblies, TestPlatform[] testPlatforms, IDictionary options) + { + var productName = string.Join("_", m_ProductName.Split(Path.GetInvalidFileNameChars())); + var suite = new TestSuite(productName); + for (var index = 0; index < assemblies.Length; index++) + { + var assembly = assemblies[index]; + var platform = testPlatforms[index]; + + var assemblySuite = Build(assembly, options) as TestSuite; + if (assemblySuite != null && assemblySuite.HasChildren) + { + assemblySuite.Properties.Set("platform", platform); + suite.Add(assemblySuite); + } + + yield return null; + } + + yield return suite; + } + + public static Dictionary GetNUnitTestBuilderSettings(TestPlatform testPlatform) + { + var emptySettings = new Dictionary(); + emptySettings.Add(FrameworkPackageSettings.TestParameters, "platform=" + testPlatform); + return emptySettings; + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/UnityTestAssemblyBuilder.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/UnityTestAssemblyBuilder.cs.meta new file mode 100644 index 0000000..abd0444 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/NUnitExtensions/UnityTestAssemblyBuilder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 98ba0396e4b4ee8498a8f097affcfddf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner.meta new file mode 100644 index 0000000..bf3d145 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1ddb9e1c877ea80479d1eab4ddaa5d0d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/Callbacks.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/Callbacks.meta new file mode 100644 index 0000000..46b230c --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/Callbacks.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 61e236e8570a95e4eb754fb291e102e0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/Callbacks/PlayModeRunnerCallback.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/Callbacks/PlayModeRunnerCallback.cs new file mode 100644 index 0000000..66c48e5 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/Callbacks/PlayModeRunnerCallback.cs @@ -0,0 +1,47 @@ +using NUnit.Framework; +using NUnit.Framework.Interfaces; + +namespace UnityEngine.TestTools.TestRunner.Callbacks +{ + [AddComponentMenu("")] + internal class PlayModeRunnerCallback : MonoBehaviour, ITestRunnerListener + { + private TestResultRenderer m_ResultRenderer; + + public void RunFinished(ITestResult testResults) + { + Application.logMessageReceivedThreaded -= LogRecieved; + if (Camera.main == null) + { + gameObject.AddComponent(); + } + m_ResultRenderer = new TestResultRenderer(testResults); + m_ResultRenderer.ShowResults(); + } + + public void TestFinished(ITestResult result) + { + } + + public void OnGUI() + { + if (m_ResultRenderer != null) + m_ResultRenderer.Draw(); + } + + public void RunStarted(ITest testsToRun) + { + Application.logMessageReceivedThreaded += LogRecieved; + } + + public void TestStarted(ITest test) + { + } + + private void LogRecieved(string message, string stacktrace, LogType type) + { + if (TestContext.Out != null) + TestContext.Out.WriteLine(message); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/Callbacks/PlayModeRunnerCallback.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/Callbacks/PlayModeRunnerCallback.cs.meta new file mode 100644 index 0000000..7f533f6 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/Callbacks/PlayModeRunnerCallback.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3cf5cb9e1ef590c48b1f919f2a7bd895 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/Callbacks/RemoteTestResultSender.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/Callbacks/RemoteTestResultSender.cs new file mode 100644 index 0000000..1bfb63e --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/Callbacks/RemoteTestResultSender.cs @@ -0,0 +1,151 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using NUnit.Framework.Interfaces; +using UnityEngine.Networking.PlayerConnection; +using UnityEngine.TestRunner.TestLaunchers; + +namespace UnityEngine.TestTools.TestRunner.Callbacks +{ + [AddComponentMenu("")] + internal class RemoteTestResultSender : MonoBehaviour, ITestRunnerListener + { + private class QueueData + { + public Guid id { get; set; } + public byte[] data { get; set; } + } + + private const int k_aliveMessageFrequency = 120; + private float m_NextliveMessage = k_aliveMessageFrequency; + private readonly Queue m_SendQueue = new Queue(); + private readonly object m_LockQueue = new object(); + private readonly IRemoteTestResultDataFactory m_TestResultDataFactory = new RemoteTestResultDataFactory(); + + public void Start() + { + PlayerConnection.instance.Register(PlayerConnectionMessageIds.quitPlayerMessageId, EditorProccessedTheResult); + StartCoroutine(SendDataRoutine()); + } + + private void EditorProccessedTheResult(MessageEventArgs arg0) + { + if (arg0.data != null) + { + return; + } + + //Some platforms don't quit, so we need to disconnect to make sure they will not connect to another editor instance automatically. + PlayerConnection.instance.DisconnectAll(); + + //XBOX has an error when quitting + if (Application.platform == RuntimePlatform.XboxOne) + { + return; + } + Application.Quit(); + } + + private byte[] SerializeObject(object objectToSerialize) + { + return Encoding.UTF8.GetBytes(JsonUtility.ToJson(objectToSerialize)); + } + + public void RunStarted(ITest testsToRun) + { + var data = SerializeObject(m_TestResultDataFactory.CreateFromTest(testsToRun)); + lock (m_LockQueue) + { + m_SendQueue.Enqueue(new QueueData + { + id = PlayerConnectionMessageIds.runStartedMessageId, + data = data + }); + } + } + + public void RunFinished(ITestResult testResults) + { + var data = SerializeObject(m_TestResultDataFactory.CreateFromTestResult(testResults)); + lock (m_LockQueue) + { + m_SendQueue.Enqueue(new QueueData { id = PlayerConnectionMessageIds.runFinishedMessageId, data = data, }); + } + } + + public void TestStarted(ITest test) + { + var data = SerializeObject(m_TestResultDataFactory.CreateFromTest(test)); + lock (m_LockQueue) + { + m_SendQueue.Enqueue(new QueueData + { + id = PlayerConnectionMessageIds.testStartedMessageId, + data = data + }); + } + } + + public void TestFinished(ITestResult result) + { + var testRunnerResultForApi = m_TestResultDataFactory.CreateFromTestResult(result); + var resultData = SerializeObject(testRunnerResultForApi); + lock (m_LockQueue) + { + m_SendQueue.Enqueue(new QueueData + { + id = PlayerConnectionMessageIds.testFinishedMessageId, + data = resultData, + }); + } + } + + public IEnumerator SendDataRoutine() + { + while (!PlayerConnection.instance.isConnected) + { + yield return new WaitForSeconds(1); + } + + while (true) + { + lock (m_LockQueue) + { + if (PlayerConnection.instance.isConnected && m_SendQueue.Count > 0) + { + ResetNextPlayerAliveMessageTime(); + var queueData = m_SendQueue.Dequeue(); + PlayerConnection.instance.Send(queueData.id, queueData.data); + yield return null; + } + + //This is needed so we dont stall the player totally + if (!m_SendQueue.Any()) + { + SendAliveMessageIfNeeded(); + yield return new WaitForSeconds(0.02f); + } + } + } + } + + private void SendAliveMessageIfNeeded() + { + if (Time.timeSinceLevelLoad < m_NextliveMessage) + { + return; + } + + Debug.Log("Sending player alive message back to editor."); + ResetNextPlayerAliveMessageTime(); + PlayerConnection.instance.Send(PlayerConnectionMessageIds.playerAliveHeartbeat, new byte[0]); + } + + private void ResetNextPlayerAliveMessageTime() + { + m_NextliveMessage = Time.timeSinceLevelLoad + k_aliveMessageFrequency; + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/Callbacks/RemoteTestResultSender.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/Callbacks/RemoteTestResultSender.cs.meta new file mode 100644 index 0000000..13af2c8 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/Callbacks/RemoteTestResultSender.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 20793418366caf14293b29c55df5e9ec +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/Callbacks/TestResultRenderer.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/Callbacks/TestResultRenderer.cs new file mode 100644 index 0000000..95316e7 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/Callbacks/TestResultRenderer.cs @@ -0,0 +1,97 @@ +using System.Collections.Generic; +using System.Linq; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; + +namespace UnityEngine.TestTools.TestRunner.Callbacks +{ + internal class TestResultRenderer + { + private static class Styles + { + public static readonly GUIStyle SucceedLabelStyle; + public static readonly GUIStyle FailedLabelStyle; + public static readonly GUIStyle FailedMessagesStyle; + + static Styles() + { + SucceedLabelStyle = new GUIStyle("label"); + SucceedLabelStyle.normal.textColor = Color.green; + SucceedLabelStyle.fontSize = 48; + + FailedLabelStyle = new GUIStyle("label"); + FailedLabelStyle.normal.textColor = Color.red; + FailedLabelStyle.fontSize = 32; + + FailedMessagesStyle = new GUIStyle("label"); + FailedMessagesStyle.wordWrap = false; + FailedMessagesStyle.richText = true; + } + } + + private readonly List m_FailedTestCollection; + + private bool m_ShowResults; + private Vector2 m_ScrollPosition; + + public TestResultRenderer(ITestResult testResults) + { + m_FailedTestCollection = new List(); + GetFailedTests(testResults); + } + + private void GetFailedTests(ITestResult testResults) + { + if (testResults is TestCaseResult) + { + if (testResults.ResultState.Status == TestStatus.Failed) + m_FailedTestCollection.Add(testResults); + } + else if (testResults.HasChildren) + { + foreach (var testResultsChild in testResults.Children) + { + GetFailedTests(testResultsChild); + } + } + } + + private const int k_MaxStringLength = 15000; + + public void ShowResults() + { + m_ShowResults = true; + Cursor.visible = true; + } + + public void Draw() + { + if (!m_ShowResults) return; + if (m_FailedTestCollection.Count == 0) + { + GUILayout.Label("All test(s) succeeded", Styles.SucceedLabelStyle, GUILayout.Width(600)); + } + else + { + int count = m_FailedTestCollection.Count; + GUILayout.Label(count + " tests failed!", Styles.FailedLabelStyle); + + m_ScrollPosition = GUILayout.BeginScrollView(m_ScrollPosition, GUILayout.ExpandWidth(true)); + var text = ""; + + text += "Code-based tests\n"; + text += string.Join("\n", m_FailedTestCollection + .Select(result => result.Name + " " + result.ResultState + "\n" + result.Message) + .ToArray()); + + if (text.Length > k_MaxStringLength) + text = text.Substring(0, k_MaxStringLength); + + GUILayout.TextArea(text, Styles.FailedMessagesStyle); + GUILayout.EndScrollView(); + } + if (GUILayout.Button("Close")) + Application.Quit(); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/Callbacks/TestResultRenderer.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/Callbacks/TestResultRenderer.cs.meta new file mode 100644 index 0000000..1814f78 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/Callbacks/TestResultRenderer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5ebb87899ca30b743bb4274bc00c02b4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/Callbacks/TestResultRendererCallback.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/Callbacks/TestResultRendererCallback.cs new file mode 100644 index 0000000..9f5ce05 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/Callbacks/TestResultRendererCallback.cs @@ -0,0 +1,36 @@ +using NUnit.Framework.Interfaces; + +namespace UnityEngine.TestTools.TestRunner.Callbacks +{ + internal class TestResultRendererCallback : MonoBehaviour, ITestRunnerListener + { + private TestResultRenderer m_ResultRenderer; + public void RunStarted(ITest testsToRun) + { + } + + public void RunFinished(ITestResult testResults) + { + if (Camera.main == null) + { + gameObject.AddComponent(); + } + m_ResultRenderer = new TestResultRenderer(testResults); + m_ResultRenderer.ShowResults(); + } + + public void OnGUI() + { + if (m_ResultRenderer != null) + m_ResultRenderer.Draw(); + } + + public void TestStarted(ITest test) + { + } + + public void TestFinished(ITestResult result) + { + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/Callbacks/TestResultRendererCallback.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/Callbacks/TestResultRendererCallback.cs.meta new file mode 100644 index 0000000..21e7ef0 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/Callbacks/TestResultRendererCallback.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dfc336f10b83bd74eaded16a658275c7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/ITestRunnerListener.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/ITestRunnerListener.cs new file mode 100644 index 0000000..358ac74 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/ITestRunnerListener.cs @@ -0,0 +1,26 @@ +using System; +using NUnit.Framework.Interfaces; +using UnityEngine.Events; + +namespace UnityEngine.TestTools.TestRunner +{ + internal interface ITestRunnerListener + { + void RunStarted(ITest testsToRun); + void RunFinished(ITestResult testResults); + void TestStarted(ITest test); + void TestFinished(ITestResult result); + } + + [Serializable] + internal class TestFinishedEvent : UnityEvent {} + + [Serializable] + internal class TestStartedEvent : UnityEvent {} + + [Serializable] + internal class RunFinishedEvent : UnityEvent {} + + [Serializable] + internal class RunStartedEvent : UnityEvent {} +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/ITestRunnerListener.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/ITestRunnerListener.cs.meta new file mode 100644 index 0000000..8a6ef78 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/ITestRunnerListener.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d1b534518943030499685344fd1d476d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/Messages.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/Messages.meta new file mode 100644 index 0000000..0a8a314 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/Messages.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 256a0ca37fa972840bce7fca446e75e7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/Messages/IEditModeTestYieldInstruction.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/Messages/IEditModeTestYieldInstruction.cs new file mode 100644 index 0000000..da4bcb5 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/Messages/IEditModeTestYieldInstruction.cs @@ -0,0 +1,12 @@ +using System.Collections; + +namespace UnityEngine.TestTools +{ + public interface IEditModeTestYieldInstruction + { + bool ExpectDomainReload { get; } + bool ExpectedPlaymodeState { get; } + + IEnumerator Perform(); + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/Messages/IEditModeTestYieldInstruction.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/Messages/IEditModeTestYieldInstruction.cs.meta new file mode 100644 index 0000000..5760500 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/Messages/IEditModeTestYieldInstruction.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 898bc38486fc899428fbe5bd6adfe473 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/PlaymodeTestsController.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/PlaymodeTestsController.cs new file mode 100644 index 0000000..7375557 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/PlaymodeTestsController.cs @@ -0,0 +1,129 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using UnityEngine.SceneManagement; +using UnityEngine.TestRunner.NUnitExtensions; +using UnityEngine.TestRunner.NUnitExtensions.Runner; +using UnityEngine.TestTools.NUnitExtensions; +using UnityEngine.TestTools.Utils; + +namespace UnityEngine.TestTools.TestRunner +{ + [Serializable] + [AddComponentMenu("")] + internal class PlaymodeTestsController : MonoBehaviour + { + private IEnumerator m_TestSteps; + + [SerializeField] + private List m_AssembliesWithTests; + public List AssembliesWithTests + { + get + { + return m_AssembliesWithTests; + } + set + { + m_AssembliesWithTests = value; + } + } + + [SerializeField] + internal TestStartedEvent testStartedEvent = new TestStartedEvent(); + [SerializeField] + internal TestFinishedEvent testFinishedEvent = new TestFinishedEvent(); + [SerializeField] + internal RunStartedEvent runStartedEvent = new RunStartedEvent(); + [SerializeField] + internal RunFinishedEvent runFinishedEvent = new RunFinishedEvent(); + + internal const string kPlaymodeTestControllerName = "Code-based tests runner"; + + [SerializeField] + public PlaymodeTestsControllerSettings settings = new PlaymodeTestsControllerSettings(); + + internal UnityTestAssemblyRunner m_Runner; + + public IEnumerator Start() + { + //Skip 2 frame because Unity. + yield return null; + yield return null; + StartCoroutine(Run()); + } + + internal static bool IsControllerOnScene() + { + return GameObject.Find(kPlaymodeTestControllerName) != null; + } + + internal static PlaymodeTestsController GetController() + { + return GameObject.Find(kPlaymodeTestControllerName).GetComponent(); + } + + public IEnumerator TestRunnerCoroutine() + { + while (m_TestSteps.MoveNext()) + { + yield return m_TestSteps.Current; + } + + if (m_Runner.IsTestComplete) + { + runFinishedEvent.Invoke(m_Runner.Result); + Cleanup(); + + yield return null; + } + } + + public IEnumerator Run() + { + CoroutineTestWorkItem.monoBehaviourCoroutineRunner = this; + gameObject.hideFlags |= HideFlags.DontSave; + + if (settings.sceneBased) + { + SceneManager.LoadScene(1, LoadSceneMode.Additive); + yield return null; + } + + var testListUtil = new PlayerTestAssemblyProvider(new AssemblyLoadProxy(), m_AssembliesWithTests); + m_Runner = new UnityTestAssemblyRunner(new UnityTestAssemblyBuilder(), new PlaymodeWorkItemFactory()); + + var loadedTests = m_Runner.Load(testListUtil.GetUserAssemblies().Select(a => a.Assembly).ToArray(), TestPlatform.PlayMode, UnityTestAssemblyBuilder.GetNUnitTestBuilderSettings(TestPlatform.PlayMode)); + loadedTests.ParseForNameDuplicates(); + runStartedEvent.Invoke(m_Runner.LoadedTest); + + var testListenerWrapper = new TestListenerWrapper(testStartedEvent, testFinishedEvent); + m_TestSteps = m_Runner.Run(testListenerWrapper, settings.BuildNUnitFilter()).GetEnumerator(); + + yield return TestRunnerCoroutine(); + } + + public void Cleanup() + { + if (m_Runner != null) + { + m_Runner.StopRun(); + m_Runner = null; + } + if (Application.isEditor) + { + Destroy(gameObject); + } + } + + public static void TryCleanup() + { + var controller = GetController(); + if (controller != null) + { + controller.Cleanup(); + } + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/PlaymodeTestsController.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/PlaymodeTestsController.cs.meta new file mode 100644 index 0000000..ba95396 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/PlaymodeTestsController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 102e512f651ee834f951a2516c1ea3b8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/PlaymodeTestsControllerSettings.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/PlaymodeTestsControllerSettings.cs new file mode 100644 index 0000000..a062b55 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/PlaymodeTestsControllerSettings.cs @@ -0,0 +1,36 @@ +using System; +using System.Linq; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal.Filters; +using UnityEngine.SceneManagement; +using UnityEngine.TestTools.TestRunner.GUI; + +namespace UnityEngine.TestTools.TestRunner +{ + [Serializable] + internal class PlaymodeTestsControllerSettings + { + [SerializeField] + public TestRunnerFilter[] filters; + public bool sceneBased; + public string originalScene; + public string bootstrapScene; + + public static PlaymodeTestsControllerSettings CreateRunnerSettings(TestRunnerFilter[] filters) + { + var settings = new PlaymodeTestsControllerSettings + { + filters = filters, + sceneBased = false, + originalScene = SceneManager.GetActiveScene().path, + bootstrapScene = null + }; + return settings; + } + + internal ITestFilter BuildNUnitFilter() + { + return new OrFilter(filters.Select(f => f.BuildNUnitFilter()).ToArray()); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/PlaymodeTestsControllerSettings.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/PlaymodeTestsControllerSettings.cs.meta new file mode 100644 index 0000000..d354fad --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/PlaymodeTestsControllerSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2799eb4c84e72e54092a292cf626936b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/RemoteHelpers.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/RemoteHelpers.meta new file mode 100644 index 0000000..e70ae47 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/RemoteHelpers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 91c20d2c22b8b3a4cb6c816bd225591a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/RemoteHelpers/IRemoteTestResultDataFactory.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/RemoteHelpers/IRemoteTestResultDataFactory.cs new file mode 100644 index 0000000..1032e6a --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/RemoteHelpers/IRemoteTestResultDataFactory.cs @@ -0,0 +1,11 @@ +using System; +using NUnit.Framework.Interfaces; + +namespace UnityEngine.TestRunner.TestLaunchers +{ + internal interface IRemoteTestResultDataFactory + { + RemoteTestResultDataWithTestData CreateFromTestResult(ITestResult result); + RemoteTestResultDataWithTestData CreateFromTest(ITest test); + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/RemoteHelpers/IRemoteTestResultDataFactory.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/RemoteHelpers/IRemoteTestResultDataFactory.cs.meta new file mode 100644 index 0000000..173f175 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/RemoteHelpers/IRemoteTestResultDataFactory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 874c0713cdc44f549b0161750b48d2c2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/RemoteHelpers/PlayerConnectionMessageIds.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/RemoteHelpers/PlayerConnectionMessageIds.cs new file mode 100644 index 0000000..58f6263 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/RemoteHelpers/PlayerConnectionMessageIds.cs @@ -0,0 +1,14 @@ +using System; + +namespace UnityEngine.TestRunner.TestLaunchers +{ + internal static class PlayerConnectionMessageIds + { + public static Guid runStartedMessageId { get { return new Guid("6a7f53dd-4672-461d-a7b5-9467e9393fd3"); } } + public static Guid runFinishedMessageId { get { return new Guid("ffb622fc-34ad-4901-8d7b-47fb04b0bdd4"); } } + public static Guid testStartedMessageId { get { return new Guid("b54d241e-d88d-4dba-8c8f-ee415d11c030"); } } + public static Guid testFinishedMessageId { get { return new Guid("72f7b7f4-6829-4cd1-afde-78872b9d5adc"); } } + public static Guid quitPlayerMessageId { get { return new Guid("ab44bfe0-bb50-4ee6-9977-69d2ea6bb3a0"); } } + public static Guid playerAliveHeartbeat { get { return new Guid("8c0c307b-f7fd-4216-8623-35b4b3f55fb6"); } } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/RemoteHelpers/PlayerConnectionMessageIds.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/RemoteHelpers/PlayerConnectionMessageIds.cs.meta new file mode 100644 index 0000000..1b606e4 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/RemoteHelpers/PlayerConnectionMessageIds.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 41d60936b62cc6d4ca7fe628b22b0e40 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/RemoteHelpers/RemoteTestData.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/RemoteHelpers/RemoteTestData.cs new file mode 100644 index 0000000..eaf7078 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/RemoteHelpers/RemoteTestData.cs @@ -0,0 +1,56 @@ +using System; +using System.Linq; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; +using UnityEngine.TestRunner.NUnitExtensions; + +namespace UnityEngine.TestRunner.TestLaunchers +{ + [Serializable] + internal class RemoteTestData + { + public string id; + public string name; + public string fullName; + public int testCaseCount; + public int ChildIndex; + public bool hasChildren; + public bool isSuite; + public string[] childrenIds; + public int testCaseTimeout; + public string[] Categories; + public bool IsTestAssembly; + public RunState RunState; + public string Description; + public string SkipReason; + public string ParentId; + public string UniqueName; + public string ParentUniqueName; + public string ParentFullName; + + internal RemoteTestData(ITest test) + { + id = test.Id; + name = test.Name; + fullName = test.FullName; + testCaseCount = test.TestCaseCount; + ChildIndex = -1; + if (test.Properties["childIndex"].Count > 0) + { + ChildIndex = (int)test.Properties["childIndex"][0]; + } + hasChildren = test.HasChildren; + isSuite = test.IsSuite; + childrenIds = test.Tests.Select(t => t.Id).ToArray(); + Categories = test.GetAllCategoriesFromTest().ToArray(); + IsTestAssembly = test is TestAssembly; + RunState = (RunState)Enum.Parse(typeof(RunState), test.RunState.ToString()); + Description = (string)test.Properties.Get(PropertyNames.Description); + SkipReason = test.GetSkipReason(); + ParentId = test.GetParentId(); + UniqueName = test.GetUniqueName(); + ParentUniqueName = test.GetParentUniqueName(); + ParentFullName = test.GetParentFullName(); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/RemoteHelpers/RemoteTestData.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/RemoteHelpers/RemoteTestData.cs.meta new file mode 100644 index 0000000..34b9c5a --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/RemoteHelpers/RemoteTestData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b135ec222fdcd11468014c90d11d6821 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/RemoteHelpers/RemoteTestResultData.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/RemoteHelpers/RemoteTestResultData.cs new file mode 100644 index 0000000..a0a34c3 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/RemoteHelpers/RemoteTestResultData.cs @@ -0,0 +1,54 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using NUnit.Framework.Interfaces; + +namespace UnityEngine.TestRunner.TestLaunchers +{ + [Serializable] + internal class RemoteTestResultData + { + public string testId; + public string name; + public string fullName; + public string resultState; + public TestStatus testStatus; + public double duration; + public DateTime startTime; + public DateTime endTime; + public string message; + public string stackTrace; + public int assertCount; + public int failCount; + public int passCount; + public int skipCount; + public int inconclusiveCount; + public bool hasChildren; + public string output; + public string xml; + public string[] childrenIds; + + internal RemoteTestResultData(ITestResult result) + { + testId = result.Test.Id; + name = result.Name; + fullName = result.FullName; + resultState = result.ResultState.ToString(); + testStatus = result.ResultState.Status; + duration = result.Duration; + startTime = result.StartTime; + endTime = result.EndTime; + message = result.Message; + stackTrace = result.StackTrace; + assertCount = result.AssertCount; + failCount = result.FailCount; + passCount = result.PassCount; + skipCount = result.SkipCount; + inconclusiveCount = result.InconclusiveCount; + hasChildren = result.HasChildren; + output = result.Output; + xml = result.ToXml(true).OuterXml; + childrenIds = result.Children.Select(child => child.Test.Id).ToArray(); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/RemoteHelpers/RemoteTestResultData.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/RemoteHelpers/RemoteTestResultData.cs.meta new file mode 100644 index 0000000..247a8a3 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/RemoteHelpers/RemoteTestResultData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 03e4d63665d06f04c8a6cf68133c1592 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/RemoteHelpers/RemoteTestResultDataFactory.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/RemoteHelpers/RemoteTestResultDataFactory.cs new file mode 100644 index 0000000..356a39d --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/RemoteHelpers/RemoteTestResultDataFactory.cs @@ -0,0 +1,51 @@ +using System.Collections.Generic; +using System.Linq; +using NUnit.Framework.Interfaces; +using UnityEngine.TestRunner.NUnitExtensions.Runner; + +namespace UnityEngine.TestRunner.TestLaunchers +{ + internal class RemoteTestResultDataFactory : IRemoteTestResultDataFactory + { + public RemoteTestResultDataWithTestData CreateFromTestResult(ITestResult result) + { + var tests = CreateTestDataList(result.Test); + tests.First().testCaseTimeout = UnityTestExecutionContext.CurrentContext.TestCaseTimeout; + return new RemoteTestResultDataWithTestData() + { + results = CreateTestResultDataList(result), + tests = tests + }; + } + + public RemoteTestResultDataWithTestData CreateFromTest(ITest test) + { + var tests = CreateTestDataList(test); + if (UnityTestExecutionContext.CurrentContext != null) + { + tests.First().testCaseTimeout = UnityTestExecutionContext.CurrentContext.TestCaseTimeout; + } + + return new RemoteTestResultDataWithTestData() + { + tests = tests + }; + } + + private RemoteTestData[] CreateTestDataList(ITest test) + { + var list = new List(); + list.Add(new RemoteTestData(test)); + list.AddRange(test.Tests.SelectMany(CreateTestDataList)); + return list.ToArray(); + } + + private static RemoteTestResultData[] CreateTestResultDataList(ITestResult result) + { + var list = new List(); + list.Add(new RemoteTestResultData(result)); + list.AddRange(result.Children.SelectMany(CreateTestResultDataList)); + return list.ToArray(); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/RemoteHelpers/RemoteTestResultDataFactory.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/RemoteHelpers/RemoteTestResultDataFactory.cs.meta new file mode 100644 index 0000000..575b017 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/RemoteHelpers/RemoteTestResultDataFactory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 826b6becaef90fb458eedebe4c2f3664 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/RemoteHelpers/RemoteTestResultDataWithTestData.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/RemoteHelpers/RemoteTestResultDataWithTestData.cs new file mode 100644 index 0000000..5b28f49 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/RemoteHelpers/RemoteTestResultDataWithTestData.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using NUnit.Framework.Interfaces; +using UnityEngine.TestRunner.NUnitExtensions.Runner; + +namespace UnityEngine.TestRunner.TestLaunchers +{ + [Serializable] + internal class RemoteTestResultDataWithTestData + { + public RemoteTestResultData[] results; + public RemoteTestData[] tests; + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/RemoteHelpers/RemoteTestResultDataWithTestData.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/RemoteHelpers/RemoteTestResultDataWithTestData.cs.meta new file mode 100644 index 0000000..ea1a860 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/RemoteHelpers/RemoteTestResultDataWithTestData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 475e3699f219c854f8581a9838135002 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/SynchronousFilter.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/SynchronousFilter.cs new file mode 100644 index 0000000..6916d81 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/SynchronousFilter.cs @@ -0,0 +1,51 @@ +using System.Collections; +using System.Linq; +using System.Reflection; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; + +namespace UnityEngine.TestTools.TestRunner.GUI +{ + class SynchronousFilter : ITestFilter + { + public TNode ToXml(bool recursive) + { + return new TNode("synchronousOnly"); + } + + public TNode AddToXml(TNode parentNode, bool recursive) + { + return parentNode.AddElement("synchronousOnly"); + } + + public bool Pass(ITest test) + { + if (test.Method == null) + return true; + + if (test.Method.ReturnType.Type == typeof(IEnumerator)) + return false; + + if (test.Method.GetCustomAttributes(true).Any()) + return false; + + if (test.TypeInfo?.Type != null) + { + if (Reflect.GetMethodsWithAttribute(test.TypeInfo.Type, typeof(UnitySetUpAttribute), true) + .Any(mi => mi.ReturnType == typeof(System.Collections.IEnumerator))) + return false; + + if (Reflect.GetMethodsWithAttribute(test.TypeInfo.Type, typeof(UnityTearDownAttribute), true) + .Any(mi => mi.ReturnType == typeof(System.Collections.IEnumerator))) + return false; + } + + return true; + } + + public bool IsExplicitMatch(ITest test) + { + return Pass(test); + } + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/SynchronousFilter.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/SynchronousFilter.cs.meta new file mode 100644 index 0000000..809accf --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/SynchronousFilter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b9aec9d3b0a86466ab4647d01e8fc87d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/TestEnumeratorWrapper.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/TestEnumeratorWrapper.cs new file mode 100644 index 0000000..31171d1 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/TestEnumeratorWrapper.cs @@ -0,0 +1,51 @@ +using System; +using System.Collections; +using System.Reflection; +using NUnit.Framework; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; + +namespace UnityEngine.TestTools.TestRunner +{ + internal class TestEnumeratorWrapper + { + private readonly TestMethod m_TestMethod; + + public TestEnumeratorWrapper(TestMethod testMethod) + { + m_TestMethod = testMethod; + } + + public IEnumerator GetEnumerator(ITestExecutionContext context) + { + if (m_TestMethod.Method.ReturnType.Type == typeof(IEnumerator)) + { + return HandleEnumerableTest(context); + } + var message = string.Format("Return type {0} of {1} in {2} is not supported.", + m_TestMethod.Method.ReturnType, m_TestMethod.Method.Name, m_TestMethod.Method.TypeInfo.FullName); + if (m_TestMethod.Method.ReturnType.Type == typeof(IEnumerable)) + { + message += "\nDid you mean IEnumerator?"; + } + throw new InvalidSignatureException(message); + } + + private IEnumerator HandleEnumerableTest(ITestExecutionContext context) + { + try + { + return m_TestMethod.Method.MethodInfo.Invoke(context.TestObject, m_TestMethod.parms != null ? m_TestMethod.parms.OriginalArguments : null) as IEnumerator; + } + catch (TargetInvocationException e) + { + if (e.InnerException is IgnoreException) + { + context.CurrentResult.SetResult(ResultState.Ignored, e.InnerException.Message); + return null; + } + throw; + } + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/TestEnumeratorWrapper.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/TestEnumeratorWrapper.cs.meta new file mode 100644 index 0000000..41bc421 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/TestEnumeratorWrapper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9ad0b0c865b01af4ca1b414689e71259 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/TestListenerWrapper.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/TestListenerWrapper.cs new file mode 100644 index 0000000..0c1c75e --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/TestListenerWrapper.cs @@ -0,0 +1,30 @@ +using NUnit.Framework.Interfaces; + +namespace UnityEngine.TestTools.TestRunner +{ + internal class TestListenerWrapper : ITestListener + { + private readonly TestFinishedEvent m_TestFinishedEvent; + private readonly TestStartedEvent m_TestStartedEvent; + + public TestListenerWrapper(TestStartedEvent testStartedEvent, TestFinishedEvent testFinishedEvent) + { + m_TestStartedEvent = testStartedEvent; + m_TestFinishedEvent = testFinishedEvent; + } + + public void TestStarted(ITest test) + { + m_TestStartedEvent.Invoke(test); + } + + public void TestFinished(ITestResult result) + { + m_TestFinishedEvent.Invoke(result); + } + + public void TestOutput(TestOutput output) + { + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/TestListenerWrapper.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/TestListenerWrapper.cs.meta new file mode 100644 index 0000000..963a50e --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/TestListenerWrapper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 73deb9b8722aa284eab27c4dc90956c6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/TestPlatform.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/TestPlatform.cs new file mode 100644 index 0000000..2c8a3a8 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/TestPlatform.cs @@ -0,0 +1,21 @@ +using System; + +namespace UnityEngine.TestTools +{ + [Flags] + [Serializable] + public enum TestPlatform : byte + { + All = 0xFF, + EditMode = 1 << 1, + PlayMode = 1 << 2 + } + + internal static class TestPlatformEnumExtensions + { + public static bool IsFlagIncluded(this TestPlatform flags, TestPlatform flag) + { + return (flags & flag) == flag; + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/TestPlatform.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/TestPlatform.cs.meta new file mode 100644 index 0000000..ea2e596 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/TestPlatform.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 743879b4db4bc1a4b829aae4386f4acf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/TestRunnerFilter.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/TestRunnerFilter.cs new file mode 100644 index 0000000..68e3761 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/TestRunnerFilter.cs @@ -0,0 +1,203 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text.RegularExpressions; +using System.IO; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; +using NUnit.Framework.Internal.Filters; +using UnityEngine.TestRunner.NUnitExtensions.Filters; + +namespace UnityEngine.TestTools.TestRunner.GUI +{ + [Serializable] + internal class TestRunnerFilter + { +#pragma warning disable 649 + public string[] assemblyNames; + public string[] groupNames; + public string[] categoryNames; + public static TestRunnerFilter empty = new TestRunnerFilter(); + public string[] testNames; + public int testRepetitions = 1; + public bool synchronousOnly = false; + + public static string AssemblyNameFromPath(string path) + { + string output = Path.GetFileName(path); + if (output != null && output.EndsWith(".dll", StringComparison.OrdinalIgnoreCase)) + return output.Substring(0, output.Length - 4); + return output; + } + + private bool CategoryMatches(IEnumerable categories) + { + if (categoryNames == null || categoryNames.Length == 0) + return true; + + foreach (string category in categories) + { + if (categoryNames.Contains(category)) + return true; + } + + return false; + } + + private bool IDMatchesAssembly(string id) + { + if (AreOptionalFiltersEmpty()) + return true; + + if (assemblyNames == null) + return false; + + int openingBracket = id.IndexOf('['); + int closingBracket = id.IndexOf(']'); + if (openingBracket >= 0 && openingBracket < id.Length && closingBracket > openingBracket && openingBracket < id.Length) + { + //Some assemblies are absolute and explicitly part of the test ID e.g. + //"[/path/to/assembly-name.dll][rest of ID ...]" + //While some are minimal assembly names e.g. + //"[assembly-name][rest of ID ...]" + //Strip them down to just the assembly name + string assemblyNameFromID = AssemblyNameFromPath(id.Substring(openingBracket + 1, closingBracket - openingBracket - 1)); + foreach (string assemblyName in assemblyNames) + { + if (assemblyName.Equals(assemblyNameFromID, StringComparison.OrdinalIgnoreCase)) + return true; + } + } + return false; + } + + private bool NameMatches(string name) + { + if (AreOptionalFiltersEmpty()) + return true; + + if (groupNames == null) + return false; + + foreach (var nameFromFilter in groupNames) + { + //Strict regex match for test group name on its own + if (Regex.IsMatch(name, nameFromFilter)) + return true; + //Match test names that end with parametrized test values and full nunit generated test names that have . separators + var regex = nameFromFilter.TrimEnd('$') + @"[\.|\(.*\)]"; + if (Regex.IsMatch(name, regex)) + return true; + } + return false; + } + + private bool AreOptionalFiltersEmpty() + { + if (assemblyNames != null && assemblyNames.Length != 0) + return false; + if (groupNames != null && groupNames.Length != 0) + return false; + if (testNames != null && testNames.Length != 0) + return false; + return true; + } + + private bool NameMatchesExactly(string name) + { + if (AreOptionalFiltersEmpty()) + return true; + + if (testNames == null) + return false; + + foreach (var exactName in testNames) + { + if (name == exactName) + return true; + } + return false; + } + + private static void ClearAncestors(IEnumerable newResultList, string parentID) + { + if (string.IsNullOrEmpty(parentID)) + return; + foreach (var result in newResultList) + { + if (result.Id == parentID) + { + result.Clear(); + ClearAncestors(newResultList, result.ParentId); + break; + } + } + } + + public void ClearResults(List newResultList) + { + foreach (var result in newResultList) + { + if (!result.IsSuite && CategoryMatches(result.Categories)) + { + if (IDMatchesAssembly(result.Id) || NameMatches(result.FullName) || NameMatchesExactly(result.FullName)) + { + result.Clear(); + ClearAncestors(newResultList, result.ParentId); + } + } + } + } + + public ITestFilter BuildNUnitFilter() + { + var filters = new List(); + + if (testNames != null && testNames.Length != 0) + { + var nameFilter = new OrFilter(testNames.Select(n => new FullNameFilter(n)).ToArray()); + filters.Add(nameFilter); + } + + if (groupNames != null && groupNames.Length != 0) + { + var exactNamesFilter = new OrFilter(groupNames.Select(n => + { + var f = new FullNameFilter(n); + f.IsRegex = true; + return f; + }).ToArray()); + filters.Add(exactNamesFilter); + } + + if (assemblyNames != null && assemblyNames.Length != 0) + { + var assemblyFilter = new OrFilter(assemblyNames.Select(c => new AssemblyNameFilter(c)).ToArray()); + filters.Add(assemblyFilter); + } + + if (categoryNames != null && categoryNames.Length != 0) + { + var categoryFilter = new OrFilter(categoryNames.Select(c => new CategoryFilterExtended(c) {IsRegex = true}).ToArray()); + filters.Add(categoryFilter); + } + + if (synchronousOnly) + { + filters.Add(new SynchronousFilter()); + } + + return filters.Count == 0 ? TestFilter.Empty : new AndFilter(filters.ToArray()); + } + + internal interface IClearableResult + { + string Id { get; } + string FullName { get; } + string ParentId { get; } + bool IsSuite { get; } + List Categories { get; } + void Clear(); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/TestRunnerFilter.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/TestRunnerFilter.cs.meta new file mode 100644 index 0000000..671327b --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/TestRunner/TestRunnerFilter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a025ba7ee40d0104db8d08b1d9eabb0d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/UnityEngine.TestRunner.asmdef b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/UnityEngine.TestRunner.asmdef new file mode 100644 index 0000000..f85c16a --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/UnityEngine.TestRunner.asmdef @@ -0,0 +1,13 @@ +{ + "name": "UnityEngine.TestRunner", + "references": [], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": true, + "precompiledReferences": [ + "nunit.framework.dll" + ], + "autoReferenced": false, + "defineConstraints": [] +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/UnityEngine.TestRunner.asmdef.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/UnityEngine.TestRunner.asmdef.meta new file mode 100644 index 0000000..5f4a7ac --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/UnityEngine.TestRunner.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 27619889b8ba8c24980f49ee34dbb44a +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils.meta new file mode 100644 index 0000000..4cc1a1f --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bb32bccaf32a6db448d1c0cc99c78688 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider.meta new file mode 100644 index 0000000..e12e5eb --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 51557afa652635743b264a309f0a5c60 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/AssemblyLoadProxy.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/AssemblyLoadProxy.cs new file mode 100644 index 0000000..be41950 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/AssemblyLoadProxy.cs @@ -0,0 +1,12 @@ +using System.Reflection; + +namespace UnityEngine.TestTools.Utils +{ + internal class AssemblyLoadProxy : IAssemblyLoadProxy + { + public IAssemblyWrapper Load(string assemblyString) + { + return new AssemblyWrapper(Assembly.Load(assemblyString)); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/AssemblyLoadProxy.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/AssemblyLoadProxy.cs.meta new file mode 100644 index 0000000..26b76a6 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/AssemblyLoadProxy.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fb593906b7b6d824087dcaebf6c082e0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/AssemblyWrapper.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/AssemblyWrapper.cs new file mode 100644 index 0000000..86d450e --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/AssemblyWrapper.cs @@ -0,0 +1,30 @@ +using System; +using System.Reflection; + +namespace UnityEngine.TestTools.Utils +{ + internal class AssemblyWrapper : IAssemblyWrapper + { + public AssemblyWrapper(Assembly assembly) + { + Assembly = assembly; + } + + public Assembly Assembly { get; } + + public virtual string Location + { + get + { + //Some platforms dont support this + throw new NotImplementedException(); + } + } + + public virtual AssemblyName[] GetReferencedAssemblies() + { + //Some platforms dont support this + throw new NotImplementedException(); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/AssemblyWrapper.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/AssemblyWrapper.cs.meta new file mode 100644 index 0000000..bd3090c --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/AssemblyWrapper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2e3b9bbf2c1a3cd4f88883ca32882ec6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/IAssemblyLoadProxy.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/IAssemblyLoadProxy.cs new file mode 100644 index 0000000..6e05914 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/IAssemblyLoadProxy.cs @@ -0,0 +1,7 @@ +namespace UnityEngine.TestTools.Utils +{ + internal interface IAssemblyLoadProxy + { + IAssemblyWrapper Load(string assemblyString); + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/IAssemblyLoadProxy.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/IAssemblyLoadProxy.cs.meta new file mode 100644 index 0000000..a794168 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/IAssemblyLoadProxy.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 12dfd4bdbb5c8e6419432fbc54ef25d9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/IAssemblyWrapper.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/IAssemblyWrapper.cs new file mode 100644 index 0000000..d423db9 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/IAssemblyWrapper.cs @@ -0,0 +1,11 @@ +using System.Reflection; + +namespace UnityEngine.TestTools.Utils +{ + internal interface IAssemblyWrapper + { + Assembly Assembly { get; } + string Location { get; } + AssemblyName[] GetReferencedAssemblies(); + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/IAssemblyWrapper.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/IAssemblyWrapper.cs.meta new file mode 100644 index 0000000..ae919ef --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/IAssemblyWrapper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1c5afe945b715e149a70113a4be7b32a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/IScriptingRuntimeProxy.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/IScriptingRuntimeProxy.cs new file mode 100644 index 0000000..2bb572d --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/IScriptingRuntimeProxy.cs @@ -0,0 +1,7 @@ +namespace UnityEngine.TestTools.Utils +{ + internal interface IScriptingRuntimeProxy + { + string[] GetAllUserAssemblies(); + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/IScriptingRuntimeProxy.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/IScriptingRuntimeProxy.cs.meta new file mode 100644 index 0000000..6002d28 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/IScriptingRuntimeProxy.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fe4aef60e4ace544c8430da8ef8acba2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/ITestAssemblyProvider.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/ITestAssemblyProvider.cs new file mode 100644 index 0000000..2944936 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/ITestAssemblyProvider.cs @@ -0,0 +1,10 @@ +using NUnit.Framework.Interfaces; + +namespace UnityEngine.TestTools.Utils +{ + internal interface ITestAssemblyProvider + { + ITest GetTestsWithNUnit(); + IAssemblyWrapper[] GetUserAssemblies(); + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/ITestAssemblyProvider.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/ITestAssemblyProvider.cs.meta new file mode 100644 index 0000000..f187c63 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/ITestAssemblyProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c5acba6181d845c4e92146009bd4480f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/PlayerTestAssemblyProvider.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/PlayerTestAssemblyProvider.cs new file mode 100644 index 0000000..0b47e1d --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/PlayerTestAssemblyProvider.cs @@ -0,0 +1,66 @@ +using System.Collections.Generic; +using System.IO; +using System.Linq; +using NUnit.Framework.Interfaces; +using UnityEngine.TestTools.NUnitExtensions; + +namespace UnityEngine.TestTools.Utils +{ + internal class PlayerTestAssemblyProvider + { + private IAssemblyLoadProxy m_AssemblyLoadProxy; + private readonly List m_AssembliesToLoad; + + //Cached until domain reload + private static List m_LoadedAssemblies; + + internal PlayerTestAssemblyProvider(IAssemblyLoadProxy assemblyLoadProxy, List assembliesToLoad) + { + m_AssemblyLoadProxy = assemblyLoadProxy; + m_AssembliesToLoad = assembliesToLoad; + LoadAssemblies(); + } + + public ITest GetTestsWithNUnit() + { + return BuildTests(TestPlatform.PlayMode, m_LoadedAssemblies.ToArray()); + } + + public List GetUserAssemblies() + { + return m_LoadedAssemblies; + } + + protected static ITest BuildTests(TestPlatform testPlatform, IAssemblyWrapper[] assemblies) + { + var settings = UnityTestAssemblyBuilder.GetNUnitTestBuilderSettings(testPlatform); + var builder = new UnityTestAssemblyBuilder(); + return builder.Build(assemblies.Select(a => a.Assembly).ToArray(), Enumerable.Repeat(testPlatform, assemblies.Length).ToArray(), settings); + } + + private void LoadAssemblies() + { + if (m_LoadedAssemblies != null) + { + return; + } + + m_LoadedAssemblies = new List(); + + foreach (var userAssembly in m_AssembliesToLoad) + { + IAssemblyWrapper a; + try + { + a = m_AssemblyLoadProxy.Load(userAssembly); + } + catch (FileNotFoundException) + { + continue; + } + if (a != null) + m_LoadedAssemblies.Add(a); + } + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/PlayerTestAssemblyProvider.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/PlayerTestAssemblyProvider.cs.meta new file mode 100644 index 0000000..f2c86cd --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/PlayerTestAssemblyProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 43a3aec217baa9644a7cf34b5f93fed9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/ScriptingRuntimeProxy.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/ScriptingRuntimeProxy.cs new file mode 100644 index 0000000..d84470e --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/ScriptingRuntimeProxy.cs @@ -0,0 +1,10 @@ +namespace UnityEngine.TestTools.Utils +{ + internal class ScriptingRuntimeProxy : IScriptingRuntimeProxy + { + public string[] GetAllUserAssemblies() + { + return ScriptingRuntime.GetAllUserAssemblies(); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/ScriptingRuntimeProxy.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/ScriptingRuntimeProxy.cs.meta new file mode 100644 index 0000000..2baf4f4 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AssemblyProvider/ScriptingRuntimeProxy.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f3a361a6ad1aff14ba8f48976e94ad76 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AttributeHelper.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AttributeHelper.cs new file mode 100644 index 0000000..9d2269b --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AttributeHelper.cs @@ -0,0 +1,45 @@ +using System; +using System.IO; +using System.Linq; + +namespace UnityEngine.TestTools +{ + internal static class AttributeHelper + { + internal static Type GetTargetClassFromName(string targetClassName, Type attributeInterface) + { + Type targetClass = null; + foreach (var assemblyName in ScriptingRuntime.GetAllUserAssemblies()) + { + // we need to pass the assembly name without the .dll extension, so removing that first + var name = Path.GetFileNameWithoutExtension(assemblyName); + targetClass = Type.GetType(targetClassName + "," + name); + if (targetClass != null) + break; + } + + if (targetClass == null) + { + Debug.LogWarningFormat("Class type not found: " + targetClassName); + return null; + } + + ValidateTargetClass(targetClass, attributeInterface); + return targetClass; + } + + private static void ValidateTargetClass(Type targetClass, Type attributeInterface) + { + var constructorInfos = targetClass.GetConstructors(); + if (constructorInfos.All(constructor => constructor.GetParameters().Length != 0)) + { + Debug.LogWarningFormat("{0} does not implement default constructor", targetClass.Name); + } + + if (!attributeInterface.IsAssignableFrom(targetClass)) + { + Debug.LogWarningFormat("{0} does not implement {1}", targetClass.Name, attributeInterface.Name); + } + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AttributeHelper.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AttributeHelper.cs.meta new file mode 100644 index 0000000..5ed31a9 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/AttributeHelper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ae8ce3ffe04ac2c42945fd27e0291fc3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/ColorEqualityComparer.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/ColorEqualityComparer.cs new file mode 100644 index 0000000..347ec93 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/ColorEqualityComparer.cs @@ -0,0 +1,36 @@ +using System.Collections.Generic; + +namespace UnityEngine.TestTools.Utils +{ + public class ColorEqualityComparer : IEqualityComparer + { + private const float k_DefaultError = 0.01f; + private readonly float AllowedError; + + + private static readonly ColorEqualityComparer m_Instance = new ColorEqualityComparer(); + public static ColorEqualityComparer Instance { get { return m_Instance; } } + + private ColorEqualityComparer() : this(k_DefaultError) + { + } + + public ColorEqualityComparer(float error) + { + this.AllowedError = error; + } + + public bool Equals(Color expected, Color actual) + { + return Utils.AreFloatsEqualAbsoluteError(expected.r, actual.r, AllowedError) && + Utils.AreFloatsEqualAbsoluteError(expected.g, actual.g, AllowedError) && + Utils.AreFloatsEqualAbsoluteError(expected.b, actual.b, AllowedError) && + Utils.AreFloatsEqualAbsoluteError(expected.a, actual.a, AllowedError); + } + + public int GetHashCode(Color color) + { + return 0; + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/ColorEqualityComparer.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/ColorEqualityComparer.cs.meta new file mode 100644 index 0000000..87a9fe8 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/ColorEqualityComparer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d6105bc8cf5ce544487daca4cbc62583 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/CoroutineRunner.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/CoroutineRunner.cs new file mode 100644 index 0000000..e775aa7 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/CoroutineRunner.cs @@ -0,0 +1,103 @@ +using System; +using System.Collections; +using NUnit.Framework.Internal; +using UnityEngine.TestRunner.NUnitExtensions.Runner; + +namespace UnityEngine.TestTools.Utils +{ + internal class CoroutineRunner + { + private bool m_Running; + private bool m_TestFailed; + private bool m_Timeout; + private readonly MonoBehaviour m_Controller; + private readonly UnityTestExecutionContext m_Context; + private Coroutine m_TimeOutCoroutine; + private IEnumerator m_TestCoroutine; + + internal const int k_DefaultTimeout = 1000 * 180; + + public CoroutineRunner(MonoBehaviour playmodeTestsController, UnityTestExecutionContext context) + { + m_Controller = playmodeTestsController; + m_Context = context; + } + + public IEnumerator HandleEnumerableTest(IEnumerator testEnumerator) + { + if (m_Context.TestCaseTimeout == 0) + { + m_Context.TestCaseTimeout = k_DefaultTimeout; + } + do + { + if (!m_Running) + { + m_Running = true; + m_TestCoroutine = ExMethod(testEnumerator, m_Context.TestCaseTimeout); + m_Controller.StartCoroutine(m_TestCoroutine); + } + if (m_TestFailed) + { + StopAllRunningCoroutines(); + yield break; + } + + if (m_Context.ExecutionStatus == TestExecutionStatus.StopRequested || m_Context.ExecutionStatus == TestExecutionStatus.AbortRequested) + { + StopAllRunningCoroutines(); + yield break; + } + yield return null; + } + while (m_Running); + } + + private void StopAllRunningCoroutines() + { + if (m_TimeOutCoroutine != null) + { + m_Controller.StopCoroutine(m_TimeOutCoroutine); + } + + if (m_TestCoroutine != null) + { + m_Controller.StopCoroutine(m_TestCoroutine); + } + } + + private IEnumerator ExMethod(IEnumerator e, int timeout) + { + m_TimeOutCoroutine = m_Controller.StartCoroutine(StartTimer(e, timeout, + () => + { + m_TestFailed = true; + m_Timeout = true; + m_Running = false; + })); + + yield return m_Controller.StartCoroutine(e); + m_Controller.StopCoroutine(m_TimeOutCoroutine); + m_Running = false; + } + + private IEnumerator StartTimer(IEnumerator coroutineToBeKilled, int timeout, Action onTimeout) + { + yield return new WaitForSecondsRealtime(timeout / 1000f); + if (coroutineToBeKilled != null) + m_Controller.StopCoroutine(coroutineToBeKilled); + if (onTimeout != null) + onTimeout(); + } + + public bool HasFailedWithTimeout() + { + return m_Timeout; + } + + public int GetDefaultTimeout() + { + return k_DefaultTimeout; + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/CoroutineRunner.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/CoroutineRunner.cs.meta new file mode 100644 index 0000000..ed7d3e9 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/CoroutineRunner.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 24a158219395ebf44a60547b97784ddc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/FloatEqualityComparer.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/FloatEqualityComparer.cs new file mode 100644 index 0000000..dfd4956 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/FloatEqualityComparer.cs @@ -0,0 +1,30 @@ +using System.Collections.Generic; + +namespace UnityEngine.TestTools.Utils +{ + public class FloatEqualityComparer : IEqualityComparer + { + private const float k_DefaultError = 0.0001f; + private readonly float AllowedError; + + private static readonly FloatEqualityComparer m_Instance = new FloatEqualityComparer(); + public static FloatEqualityComparer Instance { get { return m_Instance; } } + + private FloatEqualityComparer() : this(k_DefaultError) {} + + public FloatEqualityComparer(float allowedError) + { + this.AllowedError = allowedError; + } + + public bool Equals(float expected, float actual) + { + return Utils.AreFloatsEqual(expected, actual, AllowedError); + } + + public int GetHashCode(float value) + { + return 0; + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/FloatEqualityComparer.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/FloatEqualityComparer.cs.meta new file mode 100644 index 0000000..5486c55 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/FloatEqualityComparer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: af5042802f06c804c8abddd544b77a4a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/IOuterUnityTestAction.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/IOuterUnityTestAction.cs new file mode 100644 index 0000000..e9eaa3c --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/IOuterUnityTestAction.cs @@ -0,0 +1,19 @@ +using System.Collections; +using NUnit.Framework.Interfaces; + +namespace UnityEngine.TestTools +{ + /// + /// When implemented by an attribute, this interface implemented to provide actions to execute before setup and after teardown of tests. + /// + public interface IOuterUnityTestAction + { + /// Executed before each test is run + /// The test that is going to be run. + IEnumerator BeforeTest(ITest test); + + /// Executed after each test is run + /// The test that has just been run. + IEnumerator AfterTest(ITest test); + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/IOuterUnityTestAction.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/IOuterUnityTestAction.cs.meta new file mode 100644 index 0000000..91da147 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/IOuterUnityTestAction.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b9c2a6302985d3846b7b9f6fd9e2da9a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/IPostBuildCleanup.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/IPostBuildCleanup.cs new file mode 100644 index 0000000..5f79948 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/IPostBuildCleanup.cs @@ -0,0 +1,7 @@ +namespace UnityEngine.TestTools +{ + public interface IPostBuildCleanup + { + void Cleanup(); + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/IPostBuildCleanup.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/IPostBuildCleanup.cs.meta new file mode 100644 index 0000000..281b577 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/IPostBuildCleanup.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ff67c526455160f4690a44f74dee4cbe +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/IPrebuildSceneSetup.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/IPrebuildSceneSetup.cs new file mode 100644 index 0000000..c480fbf --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/IPrebuildSceneSetup.cs @@ -0,0 +1,7 @@ +namespace UnityEngine.TestTools +{ + public interface IPrebuildSetup + { + void Setup(); + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/IPrebuildSceneSetup.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/IPrebuildSceneSetup.cs.meta new file mode 100644 index 0000000..f776662 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/IPrebuildSceneSetup.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: acc16f0c684508f44813662a300c574b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/ITestRunCallback.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/ITestRunCallback.cs new file mode 100644 index 0000000..dd4c170 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/ITestRunCallback.cs @@ -0,0 +1,12 @@ +using NUnit.Framework.Interfaces; + +namespace UnityEngine.TestRunner +{ + public interface ITestRunCallback + { + void RunStarted(ITest testsToRun); + void RunFinished(ITestResult testResults); + void TestStarted(ITest test); + void TestFinished(ITestResult result); + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/ITestRunCallback.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/ITestRunCallback.cs.meta new file mode 100644 index 0000000..1888c05 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/ITestRunCallback.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 38d0b8a87b967304da08a2ae9b955066 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/MonoBehaviourTest.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/MonoBehaviourTest.meta new file mode 100644 index 0000000..9d60b01 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/MonoBehaviourTest.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ce8da628f68c7594b8b9a597fa52db7b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/MonoBehaviourTest/IMonoBehaviourTest.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/MonoBehaviourTest/IMonoBehaviourTest.cs new file mode 100644 index 0000000..478d606 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/MonoBehaviourTest/IMonoBehaviourTest.cs @@ -0,0 +1,7 @@ +namespace UnityEngine.TestTools +{ + public interface IMonoBehaviourTest + { + bool IsTestFinished {get; } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/MonoBehaviourTest/IMonoBehaviourTest.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/MonoBehaviourTest/IMonoBehaviourTest.cs.meta new file mode 100644 index 0000000..fb11dfb --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/MonoBehaviourTest/IMonoBehaviourTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a002d3737b873954395b7cf862873ab8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/MonoBehaviourTest/MonoBehaviourTest.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/MonoBehaviourTest/MonoBehaviourTest.cs new file mode 100644 index 0000000..b3c1c62 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/MonoBehaviourTest/MonoBehaviourTest.cs @@ -0,0 +1,23 @@ +namespace UnityEngine.TestTools +{ + public class MonoBehaviourTest : CustomYieldInstruction where T : MonoBehaviour, IMonoBehaviourTest + { + public T component { get; } + public GameObject gameObject { get { return component.gameObject; } } + + public MonoBehaviourTest(bool dontDestroyOnLoad = true) + { + var go = new GameObject("MonoBehaviourTest: " + typeof(T).FullName); + component = go.AddComponent(); + if (dontDestroyOnLoad) + { + Object.DontDestroyOnLoad(go); + } + } + + public override bool keepWaiting + { + get { return !component.IsTestFinished; } + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/MonoBehaviourTest/MonoBehaviourTest.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/MonoBehaviourTest/MonoBehaviourTest.cs.meta new file mode 100644 index 0000000..d0fa5a1 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/MonoBehaviourTest/MonoBehaviourTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 164c9b1458eaab743a4b45c37a4d720d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/PostBuildCleanupAttribute.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/PostBuildCleanupAttribute.cs new file mode 100644 index 0000000..2864daf --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/PostBuildCleanupAttribute.cs @@ -0,0 +1,20 @@ +using System; + +namespace UnityEngine.TestTools +{ + [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Class | AttributeTargets.Method)] + public class PostBuildCleanupAttribute : Attribute + { + public PostBuildCleanupAttribute(Type targetClass) + { + TargetClass = targetClass; + } + + public PostBuildCleanupAttribute(string targetClassName) + { + TargetClass = AttributeHelper.GetTargetClassFromName(targetClassName, typeof(IPostBuildCleanup)); + } + + internal Type TargetClass { get; private set; } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/PostBuildCleanupAttribute.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/PostBuildCleanupAttribute.cs.meta new file mode 100644 index 0000000..e3ac3e8 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/PostBuildCleanupAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 621fd19bcb071b64aa1d68f0271aa780 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/PrebuildSceneSetupAttribute.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/PrebuildSceneSetupAttribute.cs new file mode 100644 index 0000000..ea2c172 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/PrebuildSceneSetupAttribute.cs @@ -0,0 +1,20 @@ +using System; + +namespace UnityEngine.TestTools +{ + [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Class | AttributeTargets.Method)] + public class PrebuildSetupAttribute : Attribute + { + public PrebuildSetupAttribute(Type targetClass) + { + TargetClass = targetClass; + } + + public PrebuildSetupAttribute(string targetClassName) + { + TargetClass = AttributeHelper.GetTargetClassFromName(targetClassName, typeof(IPrebuildSetup)); + } + + internal Type TargetClass { get; private set; } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/PrebuildSceneSetupAttribute.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/PrebuildSceneSetupAttribute.cs.meta new file mode 100644 index 0000000..15402ac --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/PrebuildSceneSetupAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d1b7ce919aa8864409412e809073cf96 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/QuaternionEqualityComparer.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/QuaternionEqualityComparer.cs new file mode 100644 index 0000000..ede7a8f --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/QuaternionEqualityComparer.cs @@ -0,0 +1,31 @@ +using System.Collections.Generic; + +namespace UnityEngine.TestTools.Utils +{ + public class QuaternionEqualityComparer : IEqualityComparer + { + private const float k_DefaultError = 0.00001f; + private readonly float AllowedError; + + private static readonly QuaternionEqualityComparer m_Instance = new QuaternionEqualityComparer(); + public static QuaternionEqualityComparer Instance { get { return m_Instance; } } + + + private QuaternionEqualityComparer() : this(k_DefaultError) {} + + public QuaternionEqualityComparer(float allowedError) + { + AllowedError = allowedError; + } + + public bool Equals(Quaternion expected, Quaternion actual) + { + return Mathf.Abs(Quaternion.Dot(expected, actual)) > (1.0f - AllowedError); + } + + public int GetHashCode(Quaternion quaternion) + { + return 0; + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/QuaternionEqualityComparer.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/QuaternionEqualityComparer.cs.meta new file mode 100644 index 0000000..8c3d16b --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/QuaternionEqualityComparer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3b28913f21577de429da928d6d05219f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/StacktraceFilter.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/StacktraceFilter.cs new file mode 100644 index 0000000..6f1e690 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/StacktraceFilter.cs @@ -0,0 +1,43 @@ +using System.Linq; +using System.Text; + +namespace UnityEngine.TestTools.Utils +{ + internal static class StackTraceFilter + { + private static readonly string[] s_FilteredLogMessages = + { + @"UnityEngine.DebugLogHandler:Internal_Log", + @"UnityEngine.DebugLogHandler:Log", + @"UnityEngine.Logger:Log", + @"UnityEngine.Debug" + }; + + private static readonly string[] s_LastMessages = + { + @"System.Reflection.MonoMethod:InternalInvoke(Object, Object[], Exception&)", + @"UnityEditor.TestTools.TestRunner.EditModeRunner:InvokeDelegator" + }; + + public static string Filter(string inputStackTrace) + { + int idx; + foreach (var lastMessage in s_LastMessages) + { + idx = inputStackTrace.IndexOf(lastMessage); + if (idx != -1) + inputStackTrace = inputStackTrace.Substring(0, idx); + } + + var inputStackTraceLines = inputStackTrace.Split('\n'); + var result = new StringBuilder(); + foreach (var line in inputStackTraceLines) + { + if (s_FilteredLogMessages.Any(s => line.StartsWith(s))) + continue; + result.AppendLine(line); + } + return result.ToString(); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/StacktraceFilter.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/StacktraceFilter.cs.meta new file mode 100644 index 0000000..3ba70cd --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/StacktraceFilter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fc748d99f1f0d484a811a566fc7915ec +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/TestRunCallbackAttribute.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/TestRunCallbackAttribute.cs new file mode 100644 index 0000000..b8a5086 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/TestRunCallbackAttribute.cs @@ -0,0 +1,24 @@ +using System; + +namespace UnityEngine.TestRunner +{ + [AttributeUsage(AttributeTargets.Assembly)] + public class TestRunCallbackAttribute : Attribute + { + private Type m_Type; + public TestRunCallbackAttribute(Type type) + { + var interfaceType = typeof(ITestRunCallback); + if (!interfaceType.IsAssignableFrom(type)) + { + throw new ArgumentException(string.Format("Type provided to {0} does not implement {1}", this.GetType().Name, interfaceType.Name)); + } + m_Type = type; + } + + internal ITestRunCallback ConstructCallback() + { + return Activator.CreateInstance(m_Type) as ITestRunCallback; + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/TestRunCallbackAttribute.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/TestRunCallbackAttribute.cs.meta new file mode 100644 index 0000000..c40da51 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/TestRunCallbackAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 76b3a3296de548f48b0c3d088fb4b490 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/TestRunCallbackListener.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/TestRunCallbackListener.cs new file mode 100644 index 0000000..4425fa0 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/TestRunCallbackListener.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; +using UnityEngine.TestTools.TestRunner; + +namespace UnityEngine.TestRunner.Utils +{ + internal class TestRunCallbackListener : ScriptableObject, ITestRunnerListener + { + private ITestRunCallback[] m_Callbacks; + public void RunStarted(ITest testsToRun) + { + InvokeAllCallbacks(callback => callback.RunStarted(testsToRun)); + } + + private static ITestRunCallback[] GetAllCallbacks() + { + var allAssemblies = AppDomain.CurrentDomain.GetAssemblies(); + allAssemblies = allAssemblies.Where(x => x.GetReferencedAssemblies().Any(z => z.Name == "UnityEngine.TestRunner")).ToArray(); + var attributes = allAssemblies.SelectMany(assembly => assembly.GetCustomAttributes(typeof(TestRunCallbackAttribute), true).OfType()).ToArray(); + return attributes.Select(attribute => attribute.ConstructCallback()).ToArray(); + } + + private void InvokeAllCallbacks(Action invoker) + { + if (m_Callbacks == null) + { + m_Callbacks = GetAllCallbacks(); + } + + foreach (var testRunCallback in m_Callbacks) + { + try + { + invoker(testRunCallback); + } + catch (Exception e) + { + Debug.LogException(e); + throw; + } + } + } + + public void RunFinished(ITestResult testResults) + { + InvokeAllCallbacks(callback => callback.RunFinished(testResults)); + } + + public void TestStarted(ITest test) + { + InvokeAllCallbacks(callback => callback.TestStarted(test)); + } + + public void TestFinished(ITestResult result) + { + InvokeAllCallbacks(callback => callback.TestFinished(result)); + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/TestRunCallbackListener.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/TestRunCallbackListener.cs.meta new file mode 100644 index 0000000..aec1caa --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/TestRunCallbackListener.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 68f09f0f82599b5448579854e622a4c1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/Utils.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/Utils.cs new file mode 100644 index 0000000..52a1482 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/Utils.cs @@ -0,0 +1,40 @@ +using System; + +namespace UnityEngine.TestTools.Utils +{ + public static class Utils + { + public static bool AreFloatsEqual(float expected, float actual, float epsilon) + { + // special case for infinity + if (expected == Mathf.Infinity || actual == Mathf.Infinity || expected == Mathf.NegativeInfinity || actual == Mathf.NegativeInfinity) + return expected == actual; + + // we cover both relative and absolute tolerance with this check + // which is better than just relative in case of small (in abs value) args + // please note that "usually" approximation is used [i.e. abs(x)+abs(y)+1] + // but we speak about test code so we dont care that much about performance + // but we do care about checks being more precise + return Math.Abs(actual - expected) <= epsilon * Mathf.Max(Mathf.Max(Mathf.Abs(actual), Mathf.Abs(expected)), 1.0f); + } + + public static bool AreFloatsEqualAbsoluteError(float expected, float actual, float allowedAbsoluteError) + { + return Math.Abs(actual - expected) <= allowedAbsoluteError; + } + + /// + /// Analogous to GameObject.CreatePrimitive, but creates a primitive mesh renderer with fast shader instead of a default builtin shader. + /// Optimized for testing performance. + /// + /// A GameObject with primitive mesh renderer and collider. + public static GameObject CreatePrimitive(PrimitiveType type) + { + var prim = GameObject.CreatePrimitive(type); + var renderer = prim.GetComponent(); + if (renderer) + renderer.sharedMaterial = new Material(Shader.Find("VertexLit")); + return prim; + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/Utils.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/Utils.cs.meta new file mode 100644 index 0000000..32a5d6f --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/Utils.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9502550ba4785e3499d6c9251fa2114b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/Vector2ComparerWithEqualsOperator.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/Vector2ComparerWithEqualsOperator.cs new file mode 100644 index 0000000..074dfa5 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/Vector2ComparerWithEqualsOperator.cs @@ -0,0 +1,22 @@ +using System.Collections.Generic; + +namespace UnityEngine.TestTools.Utils +{ + public class Vector2ComparerWithEqualsOperator : IEqualityComparer + { + private static readonly Vector2ComparerWithEqualsOperator m_Instance = new Vector2ComparerWithEqualsOperator(); + public static Vector2ComparerWithEqualsOperator Instance { get { return m_Instance; } } + + private Vector2ComparerWithEqualsOperator() {} + + public bool Equals(Vector2 expected, Vector2 actual) + { + return expected == actual; + } + + public int GetHashCode(Vector2 vec2) + { + return 0; + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/Vector2ComparerWithEqualsOperator.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/Vector2ComparerWithEqualsOperator.cs.meta new file mode 100644 index 0000000..9f25fdc --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/Vector2ComparerWithEqualsOperator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 65701ebe8bada6b4785e9c7afe7f5bee +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/Vector2EqualityComparer.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/Vector2EqualityComparer.cs new file mode 100644 index 0000000..6806b7a --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/Vector2EqualityComparer.cs @@ -0,0 +1,33 @@ +using System.Collections.Generic; + +namespace UnityEngine.TestTools.Utils +{ + public class Vector2EqualityComparer : IEqualityComparer + { + private const float k_DefaultError = 0.0001f; + private readonly float AllowedError; + + private static readonly Vector2EqualityComparer m_Instance = new Vector2EqualityComparer(); + public static Vector2EqualityComparer Instance { get { return m_Instance; } } + + private Vector2EqualityComparer() : this(k_DefaultError) + { + } + + public Vector2EqualityComparer(float error) + { + this.AllowedError = error; + } + + public bool Equals(Vector2 expected, Vector2 actual) + { + return Utils.AreFloatsEqual(expected.x, actual.x, AllowedError) && + Utils.AreFloatsEqual(expected.y, actual.y, AllowedError); + } + + public int GetHashCode(Vector2 vec2) + { + return 0; + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/Vector2EqualityComparer.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/Vector2EqualityComparer.cs.meta new file mode 100644 index 0000000..06fc773 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/Vector2EqualityComparer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 58ad09607a0d62d458a78d7174665566 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/Vector3ComparerWithEqualsOperator.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/Vector3ComparerWithEqualsOperator.cs new file mode 100644 index 0000000..0650e0e --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/Vector3ComparerWithEqualsOperator.cs @@ -0,0 +1,22 @@ +using System.Collections.Generic; + +namespace UnityEngine.TestTools.Utils +{ + public class Vector3ComparerWithEqualsOperator : IEqualityComparer + { + private static readonly Vector3ComparerWithEqualsOperator m_Instance = new Vector3ComparerWithEqualsOperator(); + public static Vector3ComparerWithEqualsOperator Instance { get { return m_Instance; } } + + private Vector3ComparerWithEqualsOperator() {} + + public bool Equals(Vector3 expected, Vector3 actual) + { + return expected == actual; + } + + public int GetHashCode(Vector3 vec3) + { + return 0; + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/Vector3ComparerWithEqualsOperator.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/Vector3ComparerWithEqualsOperator.cs.meta new file mode 100644 index 0000000..b3c4c43 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/Vector3ComparerWithEqualsOperator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5b994928117e3db418da69c821da7e19 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/Vector3EqualityComparer.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/Vector3EqualityComparer.cs new file mode 100644 index 0000000..42ff0b0 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/Vector3EqualityComparer.cs @@ -0,0 +1,32 @@ +using System.Collections.Generic; + + +namespace UnityEngine.TestTools.Utils +{ + public class Vector3EqualityComparer : IEqualityComparer + { + private const float k_DefaultError = 0.0001f; + private readonly float AllowedError; + + private static readonly Vector3EqualityComparer m_Instance = new Vector3EqualityComparer(); + public static Vector3EqualityComparer Instance { get { return m_Instance; } } + + private Vector3EqualityComparer() : this(k_DefaultError) {} + public Vector3EqualityComparer(float allowedError) + { + this.AllowedError = allowedError; + } + + public bool Equals(Vector3 expected, Vector3 actual) + { + return Utils.AreFloatsEqual(expected.x, actual.x, AllowedError) && + Utils.AreFloatsEqual(expected.y, actual.y, AllowedError) && + Utils.AreFloatsEqual(expected.z, actual.z, AllowedError); + } + + public int GetHashCode(Vector3 vec3) + { + return 0; + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/Vector3EqualityComparer.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/Vector3EqualityComparer.cs.meta new file mode 100644 index 0000000..1474236 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/Vector3EqualityComparer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4bd2bc28ff24d5c488844851cb785db0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/Vector4ComparerWithEqualsOperator.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/Vector4ComparerWithEqualsOperator.cs new file mode 100644 index 0000000..2524817 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/Vector4ComparerWithEqualsOperator.cs @@ -0,0 +1,22 @@ +using System.Collections.Generic; + +namespace UnityEngine.TestTools.Utils +{ + public class Vector4ComparerWithEqualsOperator : IEqualityComparer + { + private static readonly Vector4ComparerWithEqualsOperator m_Instance = new Vector4ComparerWithEqualsOperator(); + public static Vector4ComparerWithEqualsOperator Instance { get { return m_Instance; } } + + private Vector4ComparerWithEqualsOperator() {} + + public bool Equals(Vector4 expected, Vector4 actual) + { + return expected == actual; + } + + public int GetHashCode(Vector4 vec4) + { + return 0; + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/Vector4ComparerWithEqualsOperator.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/Vector4ComparerWithEqualsOperator.cs.meta new file mode 100644 index 0000000..ef9d109 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/Vector4ComparerWithEqualsOperator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 44100f5f60f351348b9719b46d46cebe +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/Vector4EqualityComparer.cs b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/Vector4EqualityComparer.cs new file mode 100644 index 0000000..23640f6 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/Vector4EqualityComparer.cs @@ -0,0 +1,32 @@ +using System.Collections.Generic; + +namespace UnityEngine.TestTools.Utils +{ + public class Vector4EqualityComparer : IEqualityComparer + { + private const float k_DefaultError = 0.0001f; + private readonly float AllowedError; + + private static readonly Vector4EqualityComparer m_Instance = new Vector4EqualityComparer(); + public static Vector4EqualityComparer Instance { get { return m_Instance; } } + + private Vector4EqualityComparer() : this(k_DefaultError) {} + public Vector4EqualityComparer(float allowedError) + { + this.AllowedError = allowedError; + } + + public bool Equals(Vector4 expected, Vector4 actual) + { + return Utils.AreFloatsEqual(expected.x, actual.x, AllowedError) && + Utils.AreFloatsEqual(expected.y, actual.y, AllowedError) && + Utils.AreFloatsEqual(expected.z, actual.z, AllowedError) && + Utils.AreFloatsEqual(expected.w, actual.w, AllowedError); + } + + public int GetHashCode(Vector4 vec4) + { + return 0; + } + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/Vector4EqualityComparer.cs.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/Vector4EqualityComparer.cs.meta new file mode 100644 index 0000000..75f969d --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/UnityEngine.TestRunner/Utils/Vector4EqualityComparer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 32da81683c22faf458026716a2b821aa +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/package.json b/Library/PackageCache/com.unity.test-framework@1.1.11/package.json new file mode 100644 index 0000000..0fa8602 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/package.json @@ -0,0 +1,26 @@ +{ + "name": "com.unity.test-framework", + "displayName": "Test Framework", + "version": "1.1.11", + "unity": "2019.2", + "unityRelease": "0a10", + "description": "Test framework for running Edit mode and Play mode tests in Unity.", + "keywords": [ + "Test", + "TestFramework" + ], + "category": "Unity Test Framework", + "repository": { + "type": "git", + "url": "git@github.com:Unity-Technologies/com.unity.test-framework.git", + "revision": "815e122f0a538e96d3b3b29e23bb7691bd2d4844" + }, + "dependencies": { + "com.unity.ext.nunit": "1.0.0", + "com.unity.modules.imgui": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0" + }, + "relatedPackages": { + "com.unity.test-framework.tests": "1.1.11" + } +} diff --git a/Library/PackageCache/com.unity.test-framework@1.1.11/package.json.meta b/Library/PackageCache/com.unity.test-framework@1.1.11/package.json.meta new file mode 100644 index 0000000..d45c176 --- /dev/null +++ b/Library/PackageCache/com.unity.test-framework@1.1.11/package.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d6a2e6e4803de7b43baacdc355fc144d +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/.gitlab-ci.yml b/Library/PackageCache/com.unity.textmeshpro@2.0.1/.gitlab-ci.yml new file mode 100644 index 0000000..e8c8114 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/.gitlab-ci.yml @@ -0,0 +1,12 @@ +image: node:6.10.0 + +stages: + - push_to_packman_staging + +push_to_packman_staging: + stage: push_to_packman_staging + only: + - tags + script: + - curl -u $USER_NAME:$API_KEY https://staging-packages.unity.com/auth > .npmrc + - npm publish diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/CHANGELOG.md b/Library/PackageCache/com.unity.textmeshpro@2.0.1/CHANGELOG.md new file mode 100644 index 0000000..56e1e8b --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/CHANGELOG.md @@ -0,0 +1,180 @@ +# Changelog +These are the release notes for the TextMesh Pro UPM package which was first introduced with Unity 2018.1. Please see the following link for the Release Notes for prior versions of TextMesh Pro. http://digitalnativestudios.com/forum/index.php?topic=1363.0 + +## [2.0.1] - 2019-05-08 +### Changes +- See Release 1.4.1 +- Requires .Net 4.x Scripting Runtime. + +## [2.0.0] - 2019-03-01 +### Changes +- Same release as 1.4.0 + +## [1.4.1] - 2019-05-08 +### Changes +- Improved handling of automatic Font Asset upgrade to version 1.1.0 which is required to support the new Dynamic SDF system. See Case #1144858 +- Made release compatible with .Net 3.5 Scripting Runtime. +- Added support for Stereo rendering to the TMP SDF Overlay shaders. +- Fixed Caret positioning issue when using IME. Case #1146626 + +## [1.4.0] - 2019-03-07 +### Changes +- Same release as 1.4.0-preview.3a. + +## [1.4.0-preview.3a] - 2019-02-28 +### Changes +- Improved performance of the Project Files GUID Remapping Tool. +- Fixed an issue with the TMP_FontAsset.TryAddCharacters() functions which was resulting in an error when added characters exceeded the capacity of the atlas texture. +- Updated TMP_FontAsset.TryAddCharacters functions to add new overloads returning list of characters that could not be added. +- Added function in OnEnable of FontAsset Editor's to clean up Fallback list to remove any null / empty entries. +- Added support for Stereo rendering to the TMP Distance Field and Mobile Distance Field shaders. + +## [1.4.0-preview.2a] - 2019-02-14 +### Changes +- Fixed an issue with SDF Scale handling where the text object would not render correctly after the object scale had been set to zero. +- Fixed an issue with the TMP_UpdateManager where text objects were not getting unregistered correctly. +- Any changes to Font Asset Creation Settings' padding, atlas width and / or atlas height will now result in all Material Presets for the given font asset to also be updated. +- Added new section in the TMP Settings related to the new Dynamic Font System. +- Added new property in the Dynamic Font System section to determine if OpenType Font Features will be retrieved from source font files at runtime as new characters are added to font assets. Glyph Adjustment Data (Kerning) is the only feature currently supported. +- Fix an issue where font assets created at runtime were not getting their asset version number set to "1.1.0". +- Improved parsing of the text file used in the Font Asset Creator and "Characters from File" option to handle UTF16 "\u" and UTF32 "\U" escape character sequences. +- Fixed a Null Reference Error (NRE) that could occur when using the <font> tag with an invalid font name followed by the <sprite> tag. +- The Glyph Adjustment Table presentation and internal data structure has been changed to facilitate the future addition of OpenType font features. See https://forum.unity.com/threads/version-1-4-0-preview-with-dynamic-sdf-for-unity-2018-3-now-available.622420/#post-4206595 for more details. +- Fixed an issue with the <rotate> tag incorrectly affecting character spacing. + +## [1.4.0-preview.1] - 2019-01-30 +### Changes +- Renamed TMPro_FontUtilities to TMP_FontAssetCommon to more accurately reflect the content of this file. +- Accessing the TextMesh Pro Settings via the new Edit - Settings menu when TMP Essential Resources have not yet been imported in the project will no longer open a new window to provide the options to import these resources. +- Fixed an issue where using int.MaxValue, int.MinValue, float.MaxValue and float.MinValue in conjunction with SetText() would display incorrect numerical values. Case #1078521. +- Added public setter to the TMP Settings' missingGlyphCharacter to allow changing which character will be used for missing characters via scripting. +- Fixed a potential Null Reference Exception related to loading the Default Style Sheet. +- Added compiler conditional to TMP_UpdateManager.cs to address changes to SRP. +- Improved the <margin> tag to make it possible to define both left and right margin values. Example: <margin left=10% right=10px>. +- Added new menu option to allow the quick creation of a UI Button using TMP. New menu option is located in Create - UI - Button (TextMeshPro). +- Renamed TMP related create menu options. +- Fixed TMP object creation handling when using Prefab isolation mode. Case #1077392 +- Fixed another issue related to Prefabs where some serialized properties of the text object would incorrectly show up in the Overrides prefab options. Case #1093101 +- Fixed issue where changing the Sorting Layer or Sorting Order of a object would not dirty the scene. Case #1069776 +- Fixed a text alignment issue when setting text alignment on disabled text objects. Case #1047771 +- Fixed an issue where text object bounds were not set correctly on newly created text objects or in some cases when setting the text to null or string.empty. Case #1093388 +- Fixed an issue in the IntToString() function that could result in Index Out Of Bounds error. Case #1102007 +- Changed the TMP_InputField IsValidChar function to protected virtual. +- The "Allow Rich Text Editing" property of the TMP_InputField is now set to false by default. +- Added new option to the Sprite Asset context menu to make it easier to update sprite glyphs edited via the Unity Sprite Editor. +- Added new Sharpness slider in the Debug section of the SDF Material inspector. +- Fixed an error that would occur when using the context menu Reset on text component. Case #1044726 +- Fixed issue where CharacterInfo.index would be incorrect as a result of using Surrogate Pairs in the text. Case #1037828 +- The TMP_EditorPanel and TMP_UiEditorPanel now have their "UseForChildren" flag set to true to enable user / custom inspectors to inherit from them. +- Fixed an issue where rich text tags using pixel (px) or font units (em) were not correctly accounting for orthographic camera mode. This change only affects the normal TMP text component. +- Fixed an inspector issue related to changes to the margin in the TMP Extra Settings panel. Case #1114253 +- Added new property to Glyph Adjustment Pairs which determines if Character Spacing Adjustments should affect the given pair. +- Updated the Glyph Adjustment Table where ID now represents the unicode (hex) value for the character instead of its decimal value. +- Added new SetValueWithoutNotify() function to TMP_DropDown and SetTextWithoutNotify() function to TMP_InputField allowing these to be set without triggering OnValueChanged event. +- Geometry buffer deallocation which normally takes place when current allocations exceed those of the new text by more than 256 characters will no longer occur if the new text is set to null or string.empty. +- Fixed a minor issue where the underline SDF scale would be incorrect when the underline text sequence contained normal size characters and ended with a subscript or superscript character. +- Fixed an error that would occur when using the Reset Context menu on a Material using the SDF Surface or Mobile SDF Surface Shaders. Case #1122279 +- Resolved a Null Reference Error that would appear when cycling through the text overflow modes. Case #1121624 + +## [1.3.0] - 2018-08-09 +### Changes +- Revamped UI to conform to Unity Human Interface Guidelines. +- Updated the title text on the Font Asset Creator window tab to "Font Asset Creator". +- Using TMP_Text.SetCharArray() with an empty char[] array will now clear the text. +- Made a small improvement to the TMP Input Field when using nested 2d RectMasks. +- Renamed symbol defines used by TMP to append TMP_ in front of the define to avoid potential conflicts with user defines. +- Improved the Project Files GUID Remapping tool to allow specifying a target folder to scan. +- Added the ability to cancel the scanning process used by the Project Files GUID Remapping tool. +- Moved TMP Settings to universal settings window in 2018.3 and above. +- Changing style sheet in the TMP Settings will now be reflected automatically on existing text objects in the editor. +- Added new function TMP_StyleSheet.UpdateStyleSheet() to update the internal reference to which style sheet text objects should be using in conjunction with the style tag. + +## [1.2.4] - 2018-06-10 +### Changes +- Fixed a minor issue when using Justified and Flush alignment in conjunction with \u00A0. +- The Font Asset creationSettings field is no longer an Editor only serialized field. + +## [1.2.3] - 2018-05-29 +### Changes +- Added new bitmap shader with support for Custom Font Atlas texture. This shader also includes a new property "Padding" to provide control over the geometry padding to closely fit a modified / custom font atlas texture. +- Fixed an issue with ForceMeshUpdate(bool ignoreActiveState) not being handled correctly. +- Cleaned up memory allocations from repeated use of the Font Asset Creator. +- Sprites are now scaled based on the current font instead of the primary font asset assigned to the text object. +- It is now possible to recall the most recent settings used when creating a font asset in the Font Asset Creator. +- Newly created font assets now contain the settings used when they were last created. This will make the process of updating / regenerating font assets much easier. +- New context menu "Update Font Asset" was added to the Font Asset inspector which will open the Font Asset Creator with the most recently used settings for that font asset. +- New Context Menu "Create Font Asset" was added to the Font inspector panel which will open the Font Asset Creator with this source font file already selected. +- Fixed 3 compiler warnings that would appear when using .Net 4.x. +- Modified the TMP Settings to place the Missing Glyph options in their own section. +- Renamed a symbol used for internal debugging to avoid potential conflicts with other user project defines. +- TMP Sprite Importer "Create Sprite Asset" and "Save Sprite Asset" options are disabled unless a Sprite Data Source, Import Format and Sprite Texture Atlas are provided. +- Improved the performance of the Project Files GUID Remapping tool. +- Users will now be prompted to import the TMP Essential Resources when using the Font Asset Creator if such resources have not already been imported. + +## [1.2.2] - 2018-03-28 +### Changes +- Calling SetAllDirty() on a TMP text component will now force a regeneration of the text object including re-parsing of the text. +- Fixed potential Null Reference Exception that could occur when assigning a new fallback font asset. +- Removed public from test classes. +- Fixed an issue where using nested links (which doesn't make sense conceptually) would result in an error. Should accidental use of nested links occurs, the last / most nested ends up being used. +- Fixed a potential text alignment issue where an hyphen at the end of a line followed by a new line containing a single word too long to fit the text container would result in miss alignment of the hyphen. +- Updated package license. +- Non-Breaking Space character (0xA0) will now be excluded from word spacing adjustments when using Justified or Flush text alignment. +- Improved handling of Underline, Strikethrough and Mark tag with regards to vertex color and Color tag alpha. +- Improved TMP_FontAsset.HasCharacter(char character, bool searchFallbacks) to include a recursive search of fallbacks as well as TMP Settings fallback list and default font asset. +- The <gradient> tag will now also apply to sprites provided the sprite tint attribute is set to a value of 1. Ex. <sprite="Sprite Asset" index=0 tint=1>. +- Updated Font Asset Creator Plugin to allow for cancellation of the font asset generation process. +- Added callback to support the Scriptable Render Pipeline (SRP) with the normal TextMeshPro component. +- Improved handling of some non-breaking space characters which should not be ignored at the end of a line. +- Sprite Asset fallbacks will now be searched when using the <sprite> tag and referencing a sprite by Unicode or by Name. +- Updated EmojiOne samples from https://www.emojione.com/ and added attribution. +- Removed the 32bit versions of the TMP Plugins used by the Font Asset Creator since the Unity Editor is now only available as 64bit. +- The isTextTruncated property is now serialized. +- Added new event handler to the TMP_TextEventHandler.cs script included in Example 12a to allow tracking of interactions with Sprites. + +## [1.2.1] - 2018-02-14 +### Changes +- Package is now backwards compatible with Unity 2018.1. +- Renamed Assembly Definitions (.asmdef) to new UPM package conventions. +- Added DisplayName for TMP UPM package. +- Revised Editor and Playmode tests to ignore / skip over the tests if the required resources are not present in the project. +- Revised implementation of Font Asset Creator progress bar to use Unity's EditorGUI.ProgressBar instead of custom texture. +- Fixed an issue where using the material tag in conjunction with fallback font assets was not handled correctly. +- Fixed an issue where changing the fontStyle property in conjunction with using alternative typefaces / font weights would not correctly trigger a regeneration of the text object. + +## [1.2.0] - 2018-01-23 +### Changes +- Package version # increased to 1.2.0 which is the first release for Unity 2018.2. + +## [1.1.0] - 2018-01-23 +### Changes +- Package version # increased to 1.1.0 which is the first release for Unity 2018.1. + +## [1.0.27] - 2018-01-16 +### Changes +- Fixed an issue where setting the TMP_InputField.text property to null would result in an error. +- Fixed issue with Raycast Target state not getting serialized properly when saving / reloading a scene. +- Changed reference to PrefabUtility.GetPrefabParent() to PrefabUtility.GetCorrespondingObjectFromSource() to reflect public API change in 2018.2 +- Option to import package essential resources will only be presented to users when accessing a TMP component or the TMP Settings file via the project menu. + +## [1.0.26] - 2018-01-10 +### Added +- Removed Tizen player references in the TMP_InputField as the Tizen player is no longer supported as of Unity 2018.1. + +## [1.0.25] - 2018-01-05 +### Added +- Fixed a minor issue with PreferredValues calculation in conjunction with using text auto-sizing. +- Improved Kerning handling where it is now possible to define positional adjustments for the first and second glyph in the pair. +- Renamed Kerning Info Table to Glyph Adjustment Table to better reflect the added functionality of this table. +- Added Search toolbar to the Glyph Adjustment Table. +- Fixed incorrect detection / handling of Asset Serialization mode in the Project Conversion Utility. +- Removed SelectionBase attribute from TMP components. +- Revised TMP Shaders to support the new UNITY_UI_CLIP_RECT shader keyword which can provide a performance improvement of up to 30% on some devices. +- Added TMP_PRESENT define as per the request of several third party asset publishers. + +## [1.0.23] - 2017-11-14 +### Added +- New menu option added to Import Examples and additional content like Font Assets, Materials Presets, etc for TextMesh Pro. This new menu option is located in "Window -> TextMeshPro -> Import Examples and Extra Content". +- New menu option added to Convert existing project files and assets created with either the Source Code or DLL only version of TextMesh Pro. Please be sure to backup your project before using this option. The new menu option is located in "Window -> TextMeshPro -> Project Files GUID Remapping Tool". +- Added Assembly Definitions for the TMP Runtime and Editor scripts. +- Added support for the UI DirtyLayoutCallback, DirtyVerticesCallback and DirtyMaterialCallback. \ No newline at end of file diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/CHANGELOG.md.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/CHANGELOG.md.meta new file mode 100644 index 0000000..dcb004a --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/CHANGELOG.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 22464cf7ab0243a6bf9c79851183b002 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Documentation~/TextMeshPro.md b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Documentation~/TextMeshPro.md new file mode 100644 index 0000000..db47562 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Documentation~/TextMeshPro.md @@ -0,0 +1,35 @@ +# **_TextMesh Pro User Guide_** + +#### **Overview** +This User Guide was designed to provide first time users of TextMesh Pro with a basic overview of the features and functionality of the tool. + +#### **Installation** +The TextMesh Pro UPM package is already included with the Unity Editor and as such does not require installation. TextMesh Pro "TMP" does however require adding resources to your project which are essential for using TextMesh Pro. + +To import the "*TMP Essential Resources*", please use the "*Window -> TextMeshPro -> Import TMP Essential Resources*" menu option. These resources will be added at the root of your project in the "*TextMesh Pro*" folder. + +The TextMesh Pro package also includes additional resources and examples that will make discovering and learning about TextMesh Pro's powerful features easier. It is strongly recommended that first time users import these additional resources. + +To import the "*TMP Examples & Extras*", please use the "*Window -> TextMeshPro -> Import TMP Examples & Extras*" menu option. These resources will also be added in the same "*TextMesh Pro*" folder inside your project. + + +#### **Quick Start** +There are two TextMesh Pro components available. The first TMP text component is of type <TextMeshPro> and designed to work with the MeshRenderer. This component is an ideal replacement for the legacy TextMesh component. + +To add a new <TextMeshPro> text object, go to: *GameObject->3D Object->TextMeshPro Text*. + +The second TMP text component is of type <TextMeshProUGUI> and designed to work with the CanvasRenderer and Canvas system. This component is an ideal replacement for the UI.Text component. + +To add a new <TextMeshProUGUI> text object, go to: *GameObject->UI->TextMeshPro Text*. + +You may also wish to watch this [Getting Started](https://youtu.be/olnxlo-Wri4) short video which covers this topic. + +We strongly recommend that you also watch the [Font Asset Creation](https://youtu.be/qzJNIGCFFtY) video as well as the [Working with Material Presets](https://youtu.be/d2MARbDNeaA) as these two topics is also key to working and getting the most out of TextMesh Pro. + +As mentionned in the Installation section of this guide, it is recommended that you import the "*TMP Examples & Extras*" and take the time to explore each of the examples as they provide a great overview of the functionality of the tool and the many text layout and [rich text tags](http://digitalnativestudios.com/textmeshpro/docs/rich-text/) available in TextMesh Pro. + +#### **Support & API Documentation** +Should you have questions or require assistance, please visit the [Unity UI & TextMesh Pro](https://forum.unity.com/forums/unity-ui-textmesh-pro.60/) section of the Unity forum as well as the [TextMesh Pro User Forum](http://digitalnativestudios.com/forum/index.php) where you will find additional information, [Video Tutorials](http://digitalnativestudios.com/forum/index.php?board=4.0) and [FAQ](http://digitalnativestudios.com/forum/index.php?topic=890.0). In the event you are unable to find the information you seek, always feel free to post on the [Unity UI & TextMesh Pro](https://forum.unity.com/forums/unity-ui-textmesh-pro.60/) section user forum. + +[Online Documentation](http://digitalnativestudios.com/textmeshpro/docs/) is also available on TextMesh Pro including Rich Text tags, Shaders, Scripting API and more. + diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Documentation~/TextMeshPro.md.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Documentation~/TextMeshPro.md.meta new file mode 100644 index 0000000..f94c4e3 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Documentation~/TextMeshPro.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ca77d26d10b9455ca5a4b22c93be2a31 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources.meta new file mode 100644 index 0000000..2f748c9 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d1a0a27327b54c3bac52a08929c33f81 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Gizmos.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Gizmos.meta new file mode 100644 index 0000000..9397cd5 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Gizmos.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e93ec7eb6de342aabd156833e253f838 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Gizmos/TMP - Dropdown Icon.psd b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Gizmos/TMP - Dropdown Icon.psd new file mode 100644 index 0000000..93f5a2c Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Gizmos/TMP - Dropdown Icon.psd differ diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Gizmos/TMP - Dropdown Icon.psd.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Gizmos/TMP - Dropdown Icon.psd.meta new file mode 100644 index 0000000..1b180c6 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Gizmos/TMP - Dropdown Icon.psd.meta @@ -0,0 +1,143 @@ +fileFormatVersion: 2 +guid: a7ec9e7ad8b847b7ae4510af83c5d868 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 7 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -2 + maxTextureSize: 128 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 128 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 128 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: iPhone + maxTextureSize: 128 + resizeAlgorithm: 0 + textureFormat: 2 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Android + maxTextureSize: 128 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Windows Store Apps + maxTextureSize: 128 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: WebGL + maxTextureSize: 128 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 1 + pSDShowRemoveMatteOption: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Gizmos/TMP - Font Asset Icon.psd b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Gizmos/TMP - Font Asset Icon.psd new file mode 100644 index 0000000..2fb1164 Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Gizmos/TMP - Font Asset Icon.psd differ diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Gizmos/TMP - Font Asset Icon.psd.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Gizmos/TMP - Font Asset Icon.psd.meta new file mode 100644 index 0000000..3cad9ca --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Gizmos/TMP - Font Asset Icon.psd.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: ee148e281f3c41c5b4ff5f8a5afe5a6c +timeCreated: 1463559213 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 128 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Gizmos/TMP - Input Field Icon.psd b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Gizmos/TMP - Input Field Icon.psd new file mode 100644 index 0000000..f0360d3 Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Gizmos/TMP - Input Field Icon.psd differ diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Gizmos/TMP - Input Field Icon.psd.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Gizmos/TMP - Input Field Icon.psd.meta new file mode 100644 index 0000000..a24a171 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Gizmos/TMP - Input Field Icon.psd.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: 3ee40aa79cd242a5b53b0b0ca4f13f0f +timeCreated: 1457860876 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 128 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Gizmos/TMP - Sprite Asset Icon.psd b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Gizmos/TMP - Sprite Asset Icon.psd new file mode 100644 index 0000000..7036296 Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Gizmos/TMP - Sprite Asset Icon.psd differ diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Gizmos/TMP - Sprite Asset Icon.psd.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Gizmos/TMP - Sprite Asset Icon.psd.meta new file mode 100644 index 0000000..fc9f31c --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Gizmos/TMP - Sprite Asset Icon.psd.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: ec7c645d93308c04d8840982af12101e +timeCreated: 1463559213 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 128 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Gizmos/TMP - Text Component Icon.psd b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Gizmos/TMP - Text Component Icon.psd new file mode 100644 index 0000000..3cc4163 Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Gizmos/TMP - Text Component Icon.psd differ diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Gizmos/TMP - Text Component Icon.psd.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Gizmos/TMP - Text Component Icon.psd.meta new file mode 100644 index 0000000..e848826 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Gizmos/TMP - Text Component Icon.psd.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: 2fd6421f253b4ef1a19526541f9ffc0c +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 128 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Shaders.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Shaders.meta new file mode 100644 index 0000000..34468d2 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Shaders.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2da27f5fe80a3a549ac7331d9f52f5f0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Shaders/TMP_Properties.cginc b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Shaders/TMP_Properties.cginc new file mode 100644 index 0000000..e8adf28 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Shaders/TMP_Properties.cginc @@ -0,0 +1,85 @@ +// UI Editable properties +uniform sampler2D _FaceTex; // Alpha : Signed Distance +uniform float _FaceUVSpeedX; +uniform float _FaceUVSpeedY; +uniform fixed4 _FaceColor; // RGBA : Color + Opacity +uniform float _FaceDilate; // v[ 0, 1] +uniform float _OutlineSoftness; // v[ 0, 1] + +uniform sampler2D _OutlineTex; // RGBA : Color + Opacity +uniform float _OutlineUVSpeedX; +uniform float _OutlineUVSpeedY; +uniform fixed4 _OutlineColor; // RGBA : Color + Opacity +uniform float _OutlineWidth; // v[ 0, 1] + +uniform float _Bevel; // v[ 0, 1] +uniform float _BevelOffset; // v[-1, 1] +uniform float _BevelWidth; // v[-1, 1] +uniform float _BevelClamp; // v[ 0, 1] +uniform float _BevelRoundness; // v[ 0, 1] + +uniform sampler2D _BumpMap; // Normal map +uniform float _BumpOutline; // v[ 0, 1] +uniform float _BumpFace; // v[ 0, 1] + +uniform samplerCUBE _Cube; // Cube / sphere map +uniform fixed4 _ReflectFaceColor; // RGB intensity +uniform fixed4 _ReflectOutlineColor; +//uniform float _EnvTiltX; // v[-1, 1] +//uniform float _EnvTiltY; // v[-1, 1] +uniform float3 _EnvMatrixRotation; +uniform float4x4 _EnvMatrix; + +uniform fixed4 _SpecularColor; // RGB intensity +uniform float _LightAngle; // v[ 0,Tau] +uniform float _SpecularPower; // v[ 0, 1] +uniform float _Reflectivity; // v[ 5, 15] +uniform float _Diffuse; // v[ 0, 1] +uniform float _Ambient; // v[ 0, 1] + +uniform fixed4 _UnderlayColor; // RGBA : Color + Opacity +uniform float _UnderlayOffsetX; // v[-1, 1] +uniform float _UnderlayOffsetY; // v[-1, 1] +uniform float _UnderlayDilate; // v[-1, 1] +uniform float _UnderlaySoftness; // v[ 0, 1] + +uniform fixed4 _GlowColor; // RGBA : Color + Intesity +uniform float _GlowOffset; // v[-1, 1] +uniform float _GlowOuter; // v[ 0, 1] +uniform float _GlowInner; // v[ 0, 1] +uniform float _GlowPower; // v[ 1, 1/(1+4*4)] + +// API Editable properties +uniform float _ShaderFlags; +uniform float _WeightNormal; +uniform float _WeightBold; + +uniform float _ScaleRatioA; +uniform float _ScaleRatioB; +uniform float _ScaleRatioC; + +uniform float _VertexOffsetX; +uniform float _VertexOffsetY; + +//uniform float _UseClipRect; +uniform float _MaskID; +uniform sampler2D _MaskTex; +uniform float4 _MaskCoord; +uniform float4 _ClipRect; // bottom left(x,y) : top right(z,w) +//uniform float _MaskWipeControl; +//uniform float _MaskEdgeSoftness; +//uniform fixed4 _MaskEdgeColor; +//uniform bool _MaskInverse; + +uniform float _MaskSoftnessX; +uniform float _MaskSoftnessY; + +// Font Atlas properties +uniform sampler2D _MainTex; +uniform float _TextureWidth; +uniform float _TextureHeight; +uniform float _GradientScale; +uniform float _ScaleX; +uniform float _ScaleY; +uniform float _PerspectiveFilter; +uniform float _Sharpness; diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Shaders/TMP_Properties.cginc.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Shaders/TMP_Properties.cginc.meta new file mode 100644 index 0000000..cd55b56 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Shaders/TMP_Properties.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 3c6c403084eacec478a1129ce20061ea +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Shaders/TMP_SDF Internal SSD.shader b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Shaders/TMP_SDF Internal SSD.shader new file mode 100644 index 0000000..d053216 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Shaders/TMP_SDF Internal SSD.shader @@ -0,0 +1,126 @@ +// Simplified SDF shader: +// - No Shading Option (bevel / bump / env map) +// - No Glow Option +// - Softness is applied on both side of the outline + +Shader "Hidden/TextMeshPro/Internal/Distance Field SSD" { + +Properties { + _FaceColor ("Face Color", Color) = (1,1,1,1) + _FaceDilate ("Face Dilate", Range(-1,1)) = 0 + + _OutlineSoftness ("Outline Softness", Range(0,1)) = 0.02 + + _WeightNormal ("Weight Normal", float) = 0 + _WeightBold ("Weight Bold", float) = .5 + + _MainTex ("Font Atlas", 2D) = "white" {} + _TextureWidth ("Texture Width", float) = 512 + _TextureHeight ("Texture Height", float) = 512 + _GradientScale ("Gradient Scale", float) = 5 + _ScaleX ("Scale X", float) = 1 + _ScaleY ("Scale Y", float) = 1 + _Sharpness ("Sharpness", Range(-1,1)) = 0 + + _VertexOffsetX ("Vertex OffsetX", float) = 0 + _VertexOffsetY ("Vertex OffsetY", float) = 0 + + _ColorMask ("Color Mask", Float) = 15 +} + +SubShader { + Tags + { + "ForceSupported" = "True" + } + + Lighting Off + Blend One OneMinusSrcAlpha + Cull Off + ZWrite Off + ZTest Always + + Pass { + CGPROGRAM + #pragma vertex VertShader + #pragma fragment PixShader + + #include "UnityCG.cginc" + #include "TMP_Properties.cginc" + + sampler2D _GUIClipTexture; + uniform float4x4 unity_GUIClipTextureMatrix; + + struct vertex_t { + float4 vertex : POSITION; + float3 normal : NORMAL; + fixed4 color : COLOR; + float2 texcoord0 : TEXCOORD0; + float2 texcoord1 : TEXCOORD1; + }; + + struct pixel_t { + float4 vertex : SV_POSITION; + fixed4 faceColor : COLOR; + float2 texcoord0 : TEXCOORD0; + float2 clipUV : TEXCOORD1; + }; + + + pixel_t VertShader(vertex_t input) + { + // Does not handle simulated bold correctly. + + float4 vert = input.vertex; + vert.x += _VertexOffsetX; + vert.y += _VertexOffsetY; + float4 vPosition = UnityObjectToClipPos(vert); + + float opacity = input.color.a; + + fixed4 faceColor = fixed4(input.color.rgb, opacity) * _FaceColor; + faceColor.rgb *= faceColor.a; + + // Generate UV for the Clip Texture + float3 eyePos = UnityObjectToViewPos(input.vertex); + float2 clipUV = mul(unity_GUIClipTextureMatrix, float4(eyePos.xy, 0, 1.0)); + + // Structure for pixel shader + pixel_t output = { + vPosition, + faceColor, + float2(input.texcoord0.x, input.texcoord0.y), + clipUV, + }; + + return output; + } + + half transition(half2 range, half distance) + { + return smoothstep(range.x, range.y, distance); + } + + // PIXEL SHADER + fixed4 PixShader(pixel_t input) : SV_Target + { + half distanceSample = tex2D(_MainTex, input.texcoord0).a; + half smoothing = fwidth(distanceSample) * (1 - _Sharpness) + _OutlineSoftness; + half contour = 0.5 - _FaceDilate * 0.5; + half2 edgeRange = half2(contour - smoothing, contour + smoothing); + + half4 c = input.faceColor; + + half edgeTransition = transition(edgeRange, distanceSample); + c *= edgeTransition; + + c *= tex2D(_GUIClipTexture, input.clipUV).a; + + return c; + } + ENDCG + } +} + +CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI" +} diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Shaders/TMP_SDF Internal SSD.shader.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Shaders/TMP_SDF Internal SSD.shader.meta new file mode 100644 index 0000000..2c6f9be --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Shaders/TMP_SDF Internal SSD.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: ce4ec0f498d1b1a4f90fe94e115b6f9a +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures.meta new file mode 100644 index 0000000..7214572 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f8e6a2d47aba4c6c9b3c5a72d9f48da5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/SectionHeader_Dark.psd b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/SectionHeader_Dark.psd new file mode 100644 index 0000000..8ebaa27 Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/SectionHeader_Dark.psd differ diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/SectionHeader_Dark.psd.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/SectionHeader_Dark.psd.meta new file mode 100644 index 0000000..aaf6109 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/SectionHeader_Dark.psd.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: fb5730e24283d0c489e5c7d0bee023d9 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/SectionHeader_Light.psd b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/SectionHeader_Light.psd new file mode 100644 index 0000000..e598e6d Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/SectionHeader_Light.psd differ diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/SectionHeader_Light.psd.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/SectionHeader_Light.psd.meta new file mode 100644 index 0000000..7c0b341 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/SectionHeader_Light.psd.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: e3b0f810fdea84e40ab4ba20f256f7e8 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignBaseLine.psd b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignBaseLine.psd new file mode 100644 index 0000000..3da358a Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignBaseLine.psd differ diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignBaseLine.psd.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignBaseLine.psd.meta new file mode 100644 index 0000000..25dfa98 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignBaseLine.psd.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: 8bc445bb79654bf496c92d0407840a92 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignBaseLine_Light.psd b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignBaseLine_Light.psd new file mode 100644 index 0000000..cf49b6c Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignBaseLine_Light.psd differ diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignBaseLine_Light.psd.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignBaseLine_Light.psd.meta new file mode 100644 index 0000000..9357830 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignBaseLine_Light.psd.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: 18775b51e3bd42299fd30bd036ea982f +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignBottom.psd b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignBottom.psd new file mode 100644 index 0000000..1f35779 Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignBottom.psd differ diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignBottom.psd.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignBottom.psd.meta new file mode 100644 index 0000000..dac530c --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignBottom.psd.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: ca51b19024094d1b87f3e07edb0a75fb +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignBottom_Light.psd b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignBottom_Light.psd new file mode 100644 index 0000000..d8af55b Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignBottom_Light.psd differ diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignBottom_Light.psd.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignBottom_Light.psd.meta new file mode 100644 index 0000000..9828dc2 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignBottom_Light.psd.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: 585b70cb75dd43efbfead809c30a1731 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignCapLine.psd b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignCapLine.psd new file mode 100644 index 0000000..7eefe6b Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignCapLine.psd differ diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignCapLine.psd.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignCapLine.psd.meta new file mode 100644 index 0000000..1a93ca9 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignCapLine.psd.meta @@ -0,0 +1,58 @@ +fileFormatVersion: 2 +guid: 0d9a36012a224080966c7b55896aa0f9 +timeCreated: 1467964791 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignCapLine_Light.psd b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignCapLine_Light.psd new file mode 100644 index 0000000..f08bb6c Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignCapLine_Light.psd differ diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignCapLine_Light.psd.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignCapLine_Light.psd.meta new file mode 100644 index 0000000..5f63ea7 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignCapLine_Light.psd.meta @@ -0,0 +1,58 @@ +fileFormatVersion: 2 +guid: 49679f302ac6408697f6b9314a38985c +timeCreated: 1467964413 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignCenter.psd b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignCenter.psd new file mode 100644 index 0000000..939bc6d Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignCenter.psd differ diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignCenter.psd.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignCenter.psd.meta new file mode 100644 index 0000000..4aa5056 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignCenter.psd.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: 81ed8c76d2bc4a4c95d092c98af4e58f +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignCenterGeo.psd b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignCenterGeo.psd new file mode 100644 index 0000000..f9ce9a8 Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignCenterGeo.psd differ diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignCenterGeo.psd.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignCenterGeo.psd.meta new file mode 100644 index 0000000..871fa21 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignCenterGeo.psd.meta @@ -0,0 +1,56 @@ +fileFormatVersion: 2 +guid: c76700ea0062413d9f69409b4e9e151b +timeCreated: 1484171296 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignCenterGeo_Light.psd b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignCenterGeo_Light.psd new file mode 100644 index 0000000..e37b2e2 Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignCenterGeo_Light.psd differ diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignCenterGeo_Light.psd.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignCenterGeo_Light.psd.meta new file mode 100644 index 0000000..205f60f --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignCenterGeo_Light.psd.meta @@ -0,0 +1,56 @@ +fileFormatVersion: 2 +guid: 35ff0937876540d3bd4b6a941df62a92 +timeCreated: 1484171296 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignCenter_Light.psd b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignCenter_Light.psd new file mode 100644 index 0000000..7274887 Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignCenter_Light.psd differ diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignCenter_Light.psd.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignCenter_Light.psd.meta new file mode 100644 index 0000000..b25ea7c --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignCenter_Light.psd.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: 6ace62d30f494c948b71d5594afce11d +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignFlush.psd b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignFlush.psd new file mode 100644 index 0000000..eeeea67 Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignFlush.psd differ diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignFlush.psd.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignFlush.psd.meta new file mode 100644 index 0000000..d9ea2ab --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignFlush.psd.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: 691475c57a824010be0c6f474caeb7e1 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignFlush_Light.psd b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignFlush_Light.psd new file mode 100644 index 0000000..b69f6a2 Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignFlush_Light.psd differ diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignFlush_Light.psd.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignFlush_Light.psd.meta new file mode 100644 index 0000000..38e53d0 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignFlush_Light.psd.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: 64b9fad609434c489c32b1cdf2004a1c +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignJustified.psd b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignJustified.psd new file mode 100644 index 0000000..3ce55c4 Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignJustified.psd differ diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignJustified.psd.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignJustified.psd.meta new file mode 100644 index 0000000..1a8140f --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignJustified.psd.meta @@ -0,0 +1,59 @@ +fileFormatVersion: 2 +guid: 92027f7f8cfc4feaa477da0dc38d3d46 +timeCreated: 1472535271 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignJustified_Light.psd b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignJustified_Light.psd new file mode 100644 index 0000000..d7fd5c8 Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignJustified_Light.psd differ diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignJustified_Light.psd.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignJustified_Light.psd.meta new file mode 100644 index 0000000..c8420d4 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignJustified_Light.psd.meta @@ -0,0 +1,59 @@ +fileFormatVersion: 2 +guid: fa6bd40a216346b783a4cce741d277a5 +timeCreated: 1472535778 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignLeft.psd b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignLeft.psd new file mode 100644 index 0000000..fc7e10b Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignLeft.psd differ diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignLeft.psd.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignLeft.psd.meta new file mode 100644 index 0000000..d421ca5 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignLeft.psd.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: 9288066c33474b94b6ee5465f4df1cc0 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignLeft_Light.psd b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignLeft_Light.psd new file mode 100644 index 0000000..5522c37 Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignLeft_Light.psd differ diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignLeft_Light.psd.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignLeft_Light.psd.meta new file mode 100644 index 0000000..8bcb86d --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignLeft_Light.psd.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: 12736c98af174f91827a26b66d2b01b9 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignMidLine.psd b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignMidLine.psd new file mode 100644 index 0000000..14d28a2 Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignMidLine.psd differ diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignMidLine.psd.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignMidLine.psd.meta new file mode 100644 index 0000000..416a44c --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignMidLine.psd.meta @@ -0,0 +1,58 @@ +fileFormatVersion: 2 +guid: c2f7f6a88b4c4f20a53deb72f3d9144c +timeCreated: 1426240649 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignMiddle.psd b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignMiddle.psd new file mode 100644 index 0000000..c4483db Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignMiddle.psd differ diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignMiddle.psd.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignMiddle.psd.meta new file mode 100644 index 0000000..c8b350d --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignMiddle.psd.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: 41b96614b2e6494ba995ddcd252d11ae +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignMiddle_Light.psd b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignMiddle_Light.psd new file mode 100644 index 0000000..4263bf9 Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignMiddle_Light.psd differ diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignMiddle_Light.psd.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignMiddle_Light.psd.meta new file mode 100644 index 0000000..fae8d92 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignMiddle_Light.psd.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: 066619c9c9c84f89acb1b48c11a7efe2 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignMidline_Light.psd b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignMidline_Light.psd new file mode 100644 index 0000000..a5bed37 Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignMidline_Light.psd differ diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignMidline_Light.psd.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignMidline_Light.psd.meta new file mode 100644 index 0000000..2b8e9d3 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignMidline_Light.psd.meta @@ -0,0 +1,58 @@ +fileFormatVersion: 2 +guid: bb42b2d967d6427983c901a4ffc8ecd9 +timeCreated: 1426240650 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignRight.psd b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignRight.psd new file mode 100644 index 0000000..4ef1998 Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignRight.psd differ diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignRight.psd.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignRight.psd.meta new file mode 100644 index 0000000..0d7c53c --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignRight.psd.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: 342a0f8aca7f4f0691338912faec0494 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignRight_Light.psd b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignRight_Light.psd new file mode 100644 index 0000000..bdeff41 Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignRight_Light.psd differ diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignRight_Light.psd.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignRight_Light.psd.meta new file mode 100644 index 0000000..e942b8a --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignRight_Light.psd.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: e05ace3bd15740cda0bad60d89092a5b +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignTop.psd b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignTop.psd new file mode 100644 index 0000000..b00d458 Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignTop.psd differ diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignTop.psd.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignTop.psd.meta new file mode 100644 index 0000000..dba7b9e --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignTop.psd.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: 48d034c499ee4697af9dd6e327110249 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignTop_Light.psd b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignTop_Light.psd new file mode 100644 index 0000000..84f0e61 Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignTop_Light.psd differ diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignTop_Light.psd.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignTop_Light.psd.meta new file mode 100644 index 0000000..1779f7f --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Editor Resources/Textures/btn_AlignTop_Light.psd.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: ed041e68439749a69d0efa0e3d896c2e +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/LICENSE.md b/Library/PackageCache/com.unity.textmeshpro@2.0.1/LICENSE.md new file mode 100644 index 0000000..dfecfad --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/LICENSE.md @@ -0,0 +1,5 @@ +TextMesh Pro copyright © 2014-2019 Unity Technologies ApS + +Licensed under the Unity Companion License for Unity-dependent projects--see [Unity Companion License](http://www.unity3d.com/legal/licenses/Unity_Companion_License). + +Unless expressly provided otherwise, the Software under this license is made available strictly on an “AS IS” BASIS WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. Please review the license for details on these and other terms and conditions. \ No newline at end of file diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/LICENSE.md.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/LICENSE.md.meta new file mode 100644 index 0000000..b0676a7 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/LICENSE.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 0d2d0f36e67d4518a07df76235e91f9a +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Package Resources.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Package Resources.meta new file mode 100644 index 0000000..71db47e --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Package Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5ec95f4d5b2d1f14e9ff8682562553f9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Package Resources/TMP Essential Resources.unitypackage b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Package Resources/TMP Essential Resources.unitypackage new file mode 100644 index 0000000..6c1904f Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Package Resources/TMP Essential Resources.unitypackage differ diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Package Resources/TMP Essential Resources.unitypackage.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Package Resources/TMP Essential Resources.unitypackage.meta new file mode 100644 index 0000000..2971783 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Package Resources/TMP Essential Resources.unitypackage.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ce4ff17ca867d2b48b5c8a4181611901 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Package Resources/TMP Examples & Extras.unitypackage b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Package Resources/TMP Examples & Extras.unitypackage new file mode 100644 index 0000000..975bf1b Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Package Resources/TMP Examples & Extras.unitypackage differ diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Package Resources/TMP Examples & Extras.unitypackage.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Package Resources/TMP Examples & Extras.unitypackage.meta new file mode 100644 index 0000000..c124ea9 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Package Resources/TMP Examples & Extras.unitypackage.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: bc00e25696e4132499f56528d3fed2e3 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/PackageConversionData.json b/Library/PackageCache/com.unity.textmeshpro@2.0.1/PackageConversionData.json new file mode 100644 index 0000000..75369eb --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/PackageConversionData.json @@ -0,0 +1,654 @@ +{ + "assetRecords": [ + { + "referencedResource": "Blue to Purple - Vertical.asset", + "target": "guid: 1e643bbd7e13d46418da3774e72bef60", + "replacement": "guid: 479a66fa4b094512a62b0a8e553ad95a" + }, + { + "referencedResource": "Dark to Light Green - Vertical.asset", + "target": "guid: 90c9133b254e2184b8084dea4f392337", + "replacement": "guid: 4c86a3366cd840348ebe8dc438570ee4" + }, + { + "referencedResource": "Light to Dark Green - Vertical.asset", + "target": "guid: 33c745f0979f3984182a138bcc6e57ec", + "replacement": "guid: 5cf8ae092ca54931b443bec5148f3c59" + }, + { + "referencedResource": "Yellow to Orange - Vertical.asset", + "target": "guid: e002cb2a36d9e4a439a062867fa24e1e", + "replacement": "guid: 69a525efa7e6472eab268f6ea605f06e" + }, + { + "referencedResource": "Crate - Surface Shader Scene.mat", + "target": "guid: e177c46c2a091564d88df2c2ca9dcf97", + "replacement": "guid: e6b9b44320f4448d9d5e0ee634259966" + }, + { + "referencedResource": "Ground - Logo Scene.mat", + "target": "guid: 504ae362e57fc464b847f1e9fd0e4035", + "replacement": "guid: c719e38f25a9480abd2480ab621a2949" + }, + { + "referencedResource": "Ground - Surface Shader Scene.mat", + "target": "guid: 9ed9aa864ec2d7f4dad266b9534c6d85", + "replacement": "guid: aadd5a709a48466c887296bb5b1b8110" + }, + { + "referencedResource": "Small Crate_diffuse.mat", + "target": "guid: 92f161029a6d3c54a92d9d283352a135", + "replacement": "guid: 22262639920f43d6be32430e4e58350d" + }, + { + "referencedResource": "Text Popup.prefab", + "target": "guid: c879e892866c8db4f8930b25672233ac", + "replacement": "guid: b06f0e6c1dfa4356ac918da1bb32c603" + }, + { + "referencedResource": "TextMeshPro - Prefab 1.prefab", + "target": "guid: a6a60659abb4d9d4b934feebd3dcc952", + "replacement": "guid: a6e39ced0ea046bcb636c3f0b2e2a745" + }, + { + "referencedResource": "TextMeshPro - Prefab 2.prefab", + "target": "guid: 1b190e3e0ab4c8e4881656b9160c59c2", + "replacement": "guid: fdad9d952ae84cafb74c63f2e694d042" + }, + { + "referencedResource": "Anton SDF.asset", + "target": "guid: f76ef802b8b940c46a31f9027f2b0158", + "replacement": "guid: 8a89fa14b10d46a99122fd4f73fca9a2" + }, + { + "referencedResource": "Anton SDF - Drop Shadow.mat", + "target": "guid: 250a1a103b3b4914c9707e6a423446d6", + "replacement": "guid: 749b9069dc4742c5bfa5c74644049926" + }, + { + "referencedResource": "Anton SDF - Outline.mat", + "target": "guid: e077dc203e948b740859c1c0ca8b9691", + "replacement": "guid: a00013af81304728b2be1f4309ee2433" + }, + { + "referencedResource": "Bangers SDF.asset", + "target": "guid: 808aa8f1ab804104aa7d0c337a6c1481", + "replacement": "guid: 125cb55b44b24c4393181402bc6200e6" + }, + { + "referencedResource": "Bangers SDF - Drop Shadow.mat", + "target": "guid: c26f698d4eee19e4a8b8f42cd299bab5", + "replacement": "guid: f2dcf029949142e28b974630369c8b4e" + }, + { + "referencedResource": "Bangers SDF - Outline.mat", + "target": "guid: db7f2cfbf23d6d54ca4e74a9abd55326", + "replacement": "guid: f629c6e43dba4bf38cb74d8860150664" + }, + { + "referencedResource": "Bangers SDF Glow.mat", + "target": "guid: 7dd7006c58d8a3148a73aa211d8c13d0", + "replacement": "guid: d75b8f41e959450c84ac6e967084d3e1" + }, + { + "referencedResource": "Bangers SDF Logo.mat", + "target": "guid: 4fb51aa7001a2244395ddf6a15d37389", + "replacement": "guid: f4e195ac1e204eff960149d1cb34e18c" + }, + { + "referencedResource": "Electronic Highway Sign SDF.asset", + "target": "guid: 163292f6f226d954593d45b079f8aae0", + "replacement": "guid: dc36b3fdc14f47ebb36fd484a67e268a" + }, + { + "referencedResource": "LiberationSans SDF - Drop Shadow.mat", + "target": "guid: 33db60c37b63f08448ded4b385e74e38", + "replacement": "guid: e73a58f6e2794ae7b1b7e50b7fb811b0" + }, + { + "referencedResource": "LiberationSans SDF - Metalic Green.mat", + "target": "guid: 4f9843c79516ed1468b9b5a4f32e67e3", + "replacement": "guid: 8b29aaa3eec7468097ff07adfcf29ac9" + }, + { + "referencedResource": "LiberationSans SDF - Outline.mat", + "target": "guid: 83a1b0fe6c3dbac44b66f09c82e1d509", + "replacement": "guid: 79459efec17a4d00a321bdcc27bbc385" + }, + { + "referencedResource": "LiberationSans SDF - Overlay.mat", + "target": "guid: 55eb086ae18c76e4bb6cc7106d0dd6e2", + "replacement": "guid: 9ad269c99dcf42b7aedefd83dd5a7b9d" + }, + { + "referencedResource": "LiberationSans SDF - Soft Mask.mat", + "target": "guid: 74e06d99c1657fc4abd33f20685ea9ff", + "replacement": "guid: 42df1c7856584b6b8db9a509b6b10074" + }, + { + "referencedResource": "Oswald Bold SDF.asset", + "target": "guid: 09641b029dfa78843902b548a9de7553", + "replacement": "guid: 0161d805a3764c089bef00bfe00793f5" + }, + { + "referencedResource": "Roboto-Bold SDF.asset", + "target": "guid: d62a573c923f5cb47b8ff65261033b90", + "replacement": "guid: 5302535af1044152a457ed104f1f4b91" + }, + { + "referencedResource": "Roboto-Bold SDF - Drop Shadow.mat", + "target": "guid: 102e7c5c5e3b1f3468518cb166967d77", + "replacement": "guid: b246c4190f4e46ec9352fe15a7b09ce0" + }, + { + "referencedResource": "Roboto-Bold SDF - Surface.mat", + "target": "guid: e2da38ead8f8238449c54a1ef49e080f", + "replacement": "guid: e6b276ec991f467aa14ef1f3cc665993" + }, + { + "referencedResource": "DropCap Numbers.asset", + "target": "guid: c4fd2a959a50b584b92dedfefec1ffda", + "replacement": "guid: 14aa93acbb234d16aaef0e8b46814db6" + }, + { + "referencedResource": "Benchmark01.cs", + "target": "guid: c5fb1b5c24460f745be29cc0eb06a58c", + "replacement": "guid: f970ea55f9f84bf79b05dab180b8c125" + }, + { + "referencedResource": "Benchmark01_UGUI.cs", + "target": "guid: 5e6abf300e36c0a4eb43969c3f2172f8", + "replacement": "guid: 8ef7be1c625941f7ba8ed7cc71718c0d" + }, + { + "referencedResource": "Benchmark02.cs", + "target": "guid: 3467f4170568a484d8b57e2051a27363", + "replacement": "guid: e8538afcddc14efbb5d9e94b7ae50197" + }, + { + "referencedResource": "Benchmark03.cs", + "target": "guid: e6e9d20624a23da4c8b2b6fb7608bb9a", + "replacement": "guid: a73109742c8d47ac822895a473300c29" + }, + { + "referencedResource": "Benchmark04.cs", + "target": "guid: 481dd67bdedc3104ea2156ed49f3acd5", + "replacement": "guid: dc20866c0d5e413ab7559440e15333ae" + }, + { + "referencedResource": "CameraController.cs", + "target": "guid: a9f0e07aefca0cc459134ff9df622278", + "replacement": "guid: 2d687537154440a3913a9a3c7977978c" + }, + { + "referencedResource": "ChatController.cs", + "target": "guid: eba5a4db2591a5844aea5f6f3ad8548e", + "replacement": "guid: 53d91f98a2664f5cb9af11de72ac54ec" + }, + { + "referencedResource": "EnvMapAnimator.cs", + "target": "guid: 7e69f3f28c520ce4d9ab9964b2895b1a", + "replacement": "guid: a4b6f99e8bc54541bbd149b014ff441c" + }, + { + "referencedResource": "ObjectSpin.cs", + "target": "guid: 5e7872ff51989434dabf7807265ada3c", + "replacement": "guid: 4f19c7f94c794c5097d8bd11e39c750d" + }, + { + "referencedResource": "ShaderPropAnimator.cs", + "target": "guid: c56cf968fb6a5b6488e709242718845d", + "replacement": "guid: 2787a46a4dc848c1b4b7b9307b614bfd" + }, + { + "referencedResource": "SimpleScript.cs", + "target": "guid: c64808ff5137c9044a583750e5b0468a", + "replacement": "guid: 9eff140b25d64601aabc6ba32245d099" + }, + { + "referencedResource": "SkewTextExample.cs", + "target": "guid: 48d40dfeb33b717488f55ddbf676643a", + "replacement": "guid: d412675cfb3441efa3bf8dcd9b7624dc" + }, + { + "referencedResource": "TeleType.cs", + "target": "guid: 9094c5c777af3f14489e8947748e86e6", + "replacement": "guid: e32c266ee6204b21a427753cb0694c81" + }, + { + "referencedResource": "TextConsoleSimulator.cs", + "target": "guid: 45757dcc8f119454dac6365e8fd15e8b", + "replacement": "guid: 43bcd35a1c0c40ccb6d472893fe2093f" + }, + { + "referencedResource": "TextMeshProFloatingText.cs", + "target": "guid: dd0e4b969aa70504382a89d2f208ae6c", + "replacement": "guid: a4d4c76e63944cba8c7d00f56334b98c" + }, + { + "referencedResource": "TextMeshSpawner.cs", + "target": "guid: 385939aed18e82d41894437798c30ed8", + "replacement": "guid: 76c11bbcfddf44e0ba17d6c2751c8d84" + }, + { + "referencedResource": "TMP_ExampleScript_01.cs", + "target": "guid: 36bafabb5572c6347923b971425ab3be", + "replacement": "guid: 6f2c5b59b6874405865e2616e4ec276a" + }, + { + "referencedResource": "TMP_FrameRateCounter.cs", + "target": "guid: c0357609254b68d4881cab18f04dd4dc", + "replacement": "guid: 686ec78b56aa445795335fbadafcfaa4" + }, + { + "referencedResource": "TMP_TextEventCheck.cs", + "target": "guid: ba181bda76b7f6047ba2188e94bf0894", + "replacement": "guid: d736ce056cf444ca96e424f4d9c42b76" + }, + { + "referencedResource": "TMP_TextEventHandler.cs", + "target": "guid: 48a2fdbd95acd794caf78a85a0b6926a", + "replacement": "guid: 1312ae25639a4bae8e25ae223209cc50" + }, + { + "referencedResource": "TMP_TextInfoDebugTool.cs", + "target": "guid: 5eeee4467ee5b6a4884a1ec94812d93e", + "replacement": "guid: 21256c5b62f346f18640dad779911e20" + }, + { + "referencedResource": "TMP_TextSelector_A.cs", + "target": "guid: 68baf2864c88f4a43a50f16709de8717", + "replacement": "guid: 103e0a6a1d404693b9fb1a5173e0e979" + }, + { + "referencedResource": "TMP_TextSelector_B.cs", + "target": "guid: f499ff45b9a3d0840a0df48d01b2877b", + "replacement": "guid: a05dcd8be7ec4ccbb35c26219884aa37" + }, + { + "referencedResource": "TMP_UiFrameRateCounter.cs", + "target": "guid: dc33b7a34d20d5e4e8d54b6867ce81e3", + "replacement": "guid: 24b0dc2d1d494adbbec1f4db26b4cf83" + }, + { + "referencedResource": "TMPro_InstructionOverlay.cs", + "target": "guid: 53b866620ba77504eaf52cab7dbd95c9", + "replacement": "guid: c3c1afeda5e545e0b19add5373896d2e" + }, + { + "referencedResource": "VertexColorCycler.cs", + "target": "guid: c8d54cdd5913d4e4bb7b655d7d16835b", + "replacement": "guid: 91b8ba3d52e041fab2d0e0f169855539" + }, + { + "referencedResource": "VertexJitter.cs", + "target": "guid: e4769cb37968ea948a763a9a89f9e583", + "replacement": "guid: 2ed57967c52645d390a89dcf8f61ba73" + }, + { + "referencedResource": "VertexShakeA.cs", + "target": "guid: eaa12d191e718c945ac55da73fa469db", + "replacement": "guid: f7cfa58e417a46ea8889989684c2522e" + }, + { + "referencedResource": "VertexShakeB.cs", + "target": "guid: 32c83a5d3ba42b84aa26386eac47566b", + "replacement": "guid: e4e0d9ccee5f4950be8979268c9014e0" + }, + { + "referencedResource": "VertexZoom.cs", + "target": "guid: 5305493000edc7d4ea4302757dc19a99", + "replacement": "guid: 52ec835d14bd486f900952b77698b7eb" + }, + { + "referencedResource": "WarpTextExample.cs", + "target": "guid: f3eef864a10f51045a7530e2afe7c179", + "replacement": "guid: 790744c462254b7ba8038e6ed28b3db2" + }, + { + "referencedResource": "DropCap Numbers.psd", + "target": "guid: 28b41fef228d6814f90e541deaf9f262", + "replacement": "guid: fd09957580ac4326916010f1f260975b" + }, + { + "referencedResource": "Brushed Metal 3.jpg", + "target": "guid: c30270e41dccf9441ab56d94261bdcfa", + "replacement": "guid: f88677df267a41d6be1e7a6133e7d227" + }, + { + "referencedResource": "Engraved Wall.jpg", + "target": "guid: 93d6f74f2ef358e41989d4152b195f88", + "replacement": "guid: e0f91e6569da4934a48d85bf8d3063f0" + }, + { + "referencedResource": "Engraved Wall Normal.jpg", + "target": "guid: 1edd0950293e8664094053a041548c23", + "replacement": "guid: 20f91c93e7fb490f9496609c52ef3904" + }, + { + "referencedResource": "Floor Cement.jpg", + "target": "guid: ac5a0a5373b36e049bb7f98f88dbc244", + "replacement": "guid: 283f897e4925411ebbaa758b4cb13fc2" + }, + { + "referencedResource": "Floor Tiles 1 - diffuse.jpg", + "target": "guid: 7bbfb8818476e4641ba3e75f5225eb69", + "replacement": "guid: 85ac55597b97403c82fc6601a93cf241" + }, + { + "referencedResource": "Floor Tiles 1 - normal.jpg", + "target": "guid: e00d5a9a0944134448432ccacf221b95", + "replacement": "guid: c45cd05946364f32aba704f0853a975b" + }, + { + "referencedResource": "Fruit Jelly (B&W).jpg", + "target": "guid: 74d8c208a0193e14ca6916bea88a2c52", + "replacement": "guid: 1cdc5b506b1a4a33a53c30669ced1f51" + }, + { + "referencedResource": "Gradient Diagonal (Color).jpg", + "target": "guid: 2421a4955e71725448211e6bfbc7d7fb", + "replacement": "guid: 2ce5c55e85304b819a1826ecbc839aa5" + }, + { + "referencedResource": "Gradient Horizontal (Color).jpg", + "target": "guid: 0bbb43aff4f7811419ffceb1b16cf3d6", + "replacement": "guid: 6eb184de103d4b3f812b38561065192f" + }, + { + "referencedResource": "Gradient Vertical (Color).jpg", + "target": "guid: 3359915af07779e4e9a966df9eed764f", + "replacement": "guid: 03d0538de6e24c0f819bfc9ce084dfa9" + }, + { + "referencedResource": "Mask Zig-n-Zag.psd", + "target": "guid: 04eb87e72b3c1c648ba47a869ee00505", + "replacement": "guid: bb8dfcd263ad4eb383a33d74a720be6f" + }, + { + "referencedResource": "Sand Normal Map.jpg", + "target": "guid: 89e1b1c005d29cf4598ea861deb35a80", + "replacement": "guid: 8b8c8a10edf94ddc8cc4cc4fcd5696a9" + }, + { + "referencedResource": "Small Crate_diffuse.jpg", + "target": "guid: 64734c9bc6df32149a0c9cb0b18693e1", + "replacement": "guid: 602cb87b6a29443b8636370ea0751574" + }, + { + "referencedResource": "Small Crate_normal.jpg", + "target": "guid: 81b50d9cb6f3104448ec54c00a80101a", + "replacement": "guid: 8878a782f4334ecbbcf683b3ac780966" + }, + { + "referencedResource": "Stainless 03.png", + "target": "guid: 40d7f27f614cc1043a1f7e19074f461c", + "replacement": "guid: 83cb272f9ee046f6ab6636ca38af8db4" + }, + { + "referencedResource": "Text Overflow - Linked Text Image 1.png", + "target": "guid: 1fd8c568b1fcdbe43be65c1619cf3293", + "replacement": "guid: 4ccf43d26c4748c792174516f4a8fcef" + }, + { + "referencedResource": "Text Overflow - Linked Text UI Screenshot.png", + "target": "guid: 7983d2ec0427c114a916ae3c4769dc10", + "replacement": "guid: c76d18757a194d618355f05f815cb0a1" + }, + { + "referencedResource": "Wipe Pattern - Circle.psd", + "target": "guid: 6f5e9497d22a7a84193ec825e2eb41ac", + "replacement": "guid: 10c49fcd9c64421db7c0133e61e55f97" + }, + { + "referencedResource": "Wipe Pattern - Diagonal.psd", + "target": "guid: 8ee4d366b96418044aa9f94b3e2de645", + "replacement": "guid: ed5290d8df18488780e2996b9b882f01" + }, + { + "referencedResource": "Wipe Pattern - Radial Double.psd", + "target": "guid: 3e0e22da7c9570b498205179ef58ef38", + "replacement": "guid: 7631f4eff8f74ed38eb3eb9db17134e1" + }, + { + "referencedResource": "Wipe Pattern - Radial Quad.psd", + "target": "guid: 05ffd580f33f74644a6025ec196860af", + "replacement": "guid: 2b5e9ae96c5644d8bae932f8b4ca68a2" + }, + { + "referencedResource": "LiberationSans SDF.asset", + "target": "guid: 715b80e429c437e40867928a4e1fc975", + "replacement": "guid: 8f586378b4e144a9851e7b34d9b748ee" + }, + { + "referencedResource": "LineBreaking Following Characters.txt", + "target": "guid: 312ba5b9e90627940866e19549a788cf", + "replacement": "guid: fade42e8bc714b018fac513c043d323b" + }, + { + "referencedResource": "LineBreaking Leading Characters.txt", + "target": "guid: 8d713940fcbede142ae4a33ea0062b33", + "replacement": "guid: d82c1b31c7e74239bff1220585707d2b" + }, + { + "referencedResource": "TMP_Bitmap.shader", + "target": "guid: edfcf888cd11d9245b91d2883049a57e", + "replacement": "guid: 128e987d567d4e2c824d754223b3f3b0" + }, + { + "referencedResource": "TMP_Bitmap-Mobile.shader", + "target": "guid: d1cf17907700cb647aa3ea423ba38f2e", + "replacement": "guid: 1e3b057af24249748ff873be7fafee47" + }, + { + "referencedResource": "TMP_SDF.shader", + "target": "guid: dca26082f9cb439469295791d9f76fe5", + "replacement": "guid: 68e6db2ebdc24f95958faec2be5558d6" + }, + { + "referencedResource": "TMP_SDF Overlay.shader", + "target": "guid: 4a7755d6b5b67874f89c85f56f95fe97", + "replacement": "guid: dd89cf5b9246416f84610a006f916af7" + }, + { + "referencedResource": "TMP_SDF-Mobile.shader", + "target": "guid: cafd18099dfc0114896e0a8b277b81b6", + "replacement": "guid: fe393ace9b354375a9cb14cdbbc28be4" + }, + { + "referencedResource": "TMP_SDF-Mobile Masking.shader", + "target": "guid: afc255f7c2be52e41973a3d10a2e632d", + "replacement": "guid: bc1ede39bf3643ee8e493720e4259791" + }, + { + "referencedResource": "TMP_SDF-Mobile Overlay.shader", + "target": "guid: 9ecb3fe313cb5f7478141eba4a2d54ed", + "replacement": "guid: a02a7d8c237544f1962732b55a9aebf1" + }, + { + "referencedResource": "TMP_SDF-Surface.shader", + "target": "guid: 8e6b9842dbb1a5a4887378afab854e63", + "replacement": "guid: f7ada0af4f174f0694ca6a487b8f543d" + }, + { + "referencedResource": "TMP_SDF-Surface-Mobile.shader", + "target": "guid: 3c2ea7753c1425145a74d106ec1cd852", + "replacement": "guid: 85187c2149c549c5b33f0cdb02836b17" + }, + { + "referencedResource": "TMP_Sprite.shader", + "target": "guid: 3a1c68c8292caf046bd21158886c5e40", + "replacement": "guid: cf81c85f95fe47e1a27f6ae460cf182c" + }, + { + "referencedResource": "Default Sprite Asset.asset", + "target": "guid: 273ca6c80b4b5d746b5e548f532bffd8", + "replacement": "guid: fbef3c704dce48f08a44612d6c856c8d" + }, + { + "referencedResource": "EmojiOne.asset", + "target": "guid: 9a952e2781ef26940ae089f1053ef4ef", + "replacement": "guid: c41005c129ba4d66911b75229fd70b45" + }, + { + "referencedResource": "TMP Default Style Sheet.asset", + "target": "guid: 54d1085f9a2fdea4587fcfc7dddcd4bc", + "replacement": "guid: f952c082cb03451daed3ee968ac6c63e" + }, + { + "referencedResource": "TMP Settings.asset", + "target": "guid: 69ed5bac41eebaa4c97e9d2a4168c54f", + "replacement": "guid: 3f5b5dff67a942289a9defa416b206f3" + }, + { + "referencedResource": "TextContainer.cs", + "target": "guid: 3b34fc186f40e8043b977d4fa70db8c5", + "replacement": "guid: 32d40088a6124c578ad6b428df586e2e" + }, + { + "referencedResource": "TextContainer.cs", + "target": "fileID: 311004786, guid: 89f0137620f6af44b9ba852b4190e64e", + "replacement": "fileID: 11500000, guid: 32d40088a6124c578ad6b428df586e2e" + }, + { + "referencedResource": "TextMeshPro.cs", + "target": "guid: 1a1578b9753d2604f98d608cb4239e2f", + "replacement": "guid: 9541d86e2fd84c1d9990edf0852d74ab" + }, + { + "referencedResource": "TextMeshPro.cs", + "target": "fileID: -806885394, guid: 89f0137620f6af44b9ba852b4190e64e", + "replacement": "fileID: 11500000, guid: 9541d86e2fd84c1d9990edf0852d74ab" + }, + { + "referencedResource": "TextMeshProUGUI.cs", + "target": "guid: 496f2e385b0c62542b5c739ccfafd8da", + "replacement": "guid: f4688fdb7df04437aeb418b961361dc5" + }, + { + "referencedResource": "TextMeshProUGUI.cs", + "target": "fileID: 1453722849, guid: 89f0137620f6af44b9ba852b4190e64e", + "replacement": "fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5" + }, + { + "referencedResource": "TMP_Asset.cs", + "target": "guid: e2c4405608b405a4680436e183e53c45", + "replacement": "guid: 3bda1886f58f4e0ab1139400b160c3ee" + }, + { + "referencedResource": "TMP_Asset.cs", + "target": "fileID: -659140726, guid: 89f0137620f6af44b9ba852b4190e64e", + "replacement": "fileID: 11500000, guid: 3bda1886f58f4e0ab1139400b160c3ee" + }, + { + "referencedResource": "TMP_ColorGradient.cs", + "target": "guid: e90e18dd4a044ff4394833216e6bf4d2", + "replacement": "guid: 54d21f6ece3b46479f0c328f8c6007e0" + }, + { + "referencedResource": "TMP_ColorGradient.cs", + "target": "fileID: 2108210716, guid: 89f0137620f6af44b9ba852b4190e64e", + "replacement": "fileID: 11500000, guid: 54d21f6ece3b46479f0c328f8c6007e0" + }, + { + "referencedResource": "TMP_Dropdown.cs", + "target": "guid: 44cb1d34ddab9d449a05fc3747876be1", + "replacement": "guid: 7b743370ac3e4ec2a1668f5455a8ef8a" + }, + { + "referencedResource": "TMP_Dropdown.cs", + "target": "fileID: 1148083418, guid: 89f0137620f6af44b9ba852b4190e64e", + "replacement": "fileID: 11500000, guid: 7b743370ac3e4ec2a1668f5455a8ef8a" + }, + { + "referencedResource": "TMP_FontAsset.cs", + "target": "guid: 74dfce233ddb29b4294c3e23c1d3650d", + "replacement": "guid: 71c1514a6bd24e1e882cebbe1904ce04" + }, + { + "referencedResource": "TMP_FontAsset.cs", + "target": "fileID: -667331979, guid: 89f0137620f6af44b9ba852b4190e64e", + "replacement": "fileID: 11500000, guid: 71c1514a6bd24e1e882cebbe1904ce04" + }, + { + "referencedResource": "TMP_InputField.cs", + "target": "guid: 7b85855a3deaa2e44ac6741a6bbc85f6", + "replacement": "guid: 2da0c512f12947e489f739169773d7ca" + }, + { + "referencedResource": "TMP_InputField.cs", + "target": "fileID: -1620774994, guid: 89f0137620f6af44b9ba852b4190e64e", + "replacement": "fileID: 11500000, guid: 2da0c512f12947e489f739169773d7ca" + }, + { + "referencedResource": "TMP_Settings.cs", + "target": "guid: aafc3c7b9e915d64e8ec3d2c88b3a231", + "replacement": "guid: 2705215ac5b84b70bacc50632be6e391" + }, + { + "referencedResource": "TMP_Settings.cs", + "target": "fileID: -395462249, guid: 89f0137620f6af44b9ba852b4190e64e", + "replacement": "fileID: 11500000, guid: 2705215ac5b84b70bacc50632be6e391" + }, + { + "referencedResource": "TMP_SpriteAsset.cs", + "target": "guid: 90940d439ca0ef746af0b48419b92d2e", + "replacement": "guid: 84a92b25f83d49b9bc132d206b370281" + }, + { + "referencedResource": "TMP_SpriteAsset.cs", + "target": "fileID: 2019389346, guid: 89f0137620f6af44b9ba852b4190e64e", + "replacement": "fileID: 11500000, guid: 84a92b25f83d49b9bc132d206b370281" + }, + { + "referencedResource": "TMP_StyleSheet.cs", + "target": "guid: 13259b4ce497b194eb52a33d8eda0bdc", + "replacement": "guid: ab2114bdc8544297b417dfefe9f1e410" + }, + { + "referencedResource": "TMP_StyleSheet.cs", + "target": "fileID: -1936749209, guid: 89f0137620f6af44b9ba852b4190e64e", + "replacement": "fileID: 11500000, guid: ab2114bdc8544297b417dfefe9f1e410" + }, + { + "referencedResource": "TMP_SubMesh.cs", + "target": "guid: bd950677b2d06c74494b1c1118584fff", + "replacement": "guid: 07994bfe8b0e4adb97d706de5dea48d5" + }, + { + "referencedResource": "TMP_SubMesh.cs", + "target": "fileID: 1330537494, guid: 89f0137620f6af44b9ba852b4190e64e", + "replacement": "fileID: 11500000, guid: 07994bfe8b0e4adb97d706de5dea48d5" + }, + { + "referencedResource": "TMP_SubMeshUI.cs", + "target": "guid: a5378e1f14d974d419f811d6b0861f20", + "replacement": "guid: 058cba836c1846c3aa1c5fd2e28aea77" + }, + { + "referencedResource": "TMP_SubMeshUI.cs", + "target": "fileID: 1908110080, guid: 89f0137620f6af44b9ba852b4190e64e", + "replacement": "fileID: 11500000, guid: 058cba836c1846c3aa1c5fd2e28aea77" + }, + { + "referencedResource": "TMP_Text.cs", + "target": "guid: 9ec8dc9c3fa2e5d41b939b5888d2f1e8", + "replacement": "guid: 5143f58107604835ab1a5efa2d8818fd" + }, + { + "referencedResource": "TMP_Text.cs", + "target": "fileID: -1385168320, guid: 89f0137620f6af44b9ba852b4190e64e", + "replacement": "fileID: 11500000, guid: 5143f58107604835ab1a5efa2d8818fd" + }, + { + "referencedResource": "Default Sprite Asset.png", + "target": "guid: 5b32c2d36abe44540bed74c1f787033b", + "replacement": "guid: a0fc465d6cf04254a2938578735e2383" + }, + { + "referencedResource": "EmojiOne.png", + "target": "guid: 6ec706981a919c3489f0b061a40054e2", + "replacement": "guid: dffef66376be4fa480fb02b19edbe903" + } + ] +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/PackageConversionData.json.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/PackageConversionData.json.meta new file mode 100644 index 0000000..fd67af1 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/PackageConversionData.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 05f5bfd584002f948982a1498890f9a9 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/PackageConversionData_Assets.json b/Library/PackageCache/com.unity.textmeshpro@2.0.1/PackageConversionData_Assets.json new file mode 100644 index 0000000..eb2621e --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/PackageConversionData_Assets.json @@ -0,0 +1,184 @@ +{ + "assetRecords": [ + { + "referencedResource": "TMP_FontAsset.cs", + "target": "guid: 74dfce233ddb29b4294c3e23c1d3650d", + "replacement": "guid: 71c1514a6bd24e1e882cebbe1904ce04" + }, + { + "referencedResource": "TMP_FontAsset.cs", + "target": "fileID: -667331979, guid: 89f0137620f6af44b9ba852b4190e64e", + "replacement": "fileID: 11500000, guid: 71c1514a6bd24e1e882cebbe1904ce04" + }, + { + "referencedResource": "Anton SDF.asset", + "target": "guid: f76ef802b8b940c46a31f9027f2b0158", + "replacement": "guid: 8a89fa14b10d46a99122fd4f73fca9a2" + }, + { + "referencedResource": "Bangers SDF.asset", + "target": "guid: 808aa8f1ab804104aa7d0c337a6c1481", + "replacement": "guid: 125cb55b44b24c4393181402bc6200e6" + }, + { + "referencedResource": "Electronic Highway Sign SDF.asset", + "target": "guid: 163292f6f226d954593d45b079f8aae0", + "replacement": "guid: dc36b3fdc14f47ebb36fd484a67e268a" + }, + { + "referencedResource": "Oswald Bold SDF.asset", + "target": "guid: 09641b029dfa78843902b548a9de7553", + "replacement": "guid: 0161d805a3764c089bef00bfe00793f5" + }, + { + "referencedResource": "Roboto-Bold SDF.asset", + "target": "guid: d62a573c923f5cb47b8ff65261033b90", + "replacement": "guid: 5302535af1044152a457ed104f1f4b91" + }, + { + "referencedResource": "LiberationSans SDF.asset", + "target": "guid: 715b80e429c437e40867928a4e1fc975", + "replacement": "guid: 8f586378b4e144a9851e7b34d9b748ee" + }, + { + "referencedResource": "TMP_Bitmap.shader", + "target": "guid: edfcf888cd11d9245b91d2883049a57e", + "replacement": "guid: 128e987d567d4e2c824d754223b3f3b0" + }, + { + "referencedResource": "TMP_Bitmap-Mobile.shader", + "target": "guid: d1cf17907700cb647aa3ea423ba38f2e", + "replacement": "guid: 1e3b057af24249748ff873be7fafee47" + }, + { + "referencedResource": "TMP_SDF.shader", + "target": "guid: dca26082f9cb439469295791d9f76fe5", + "replacement": "guid: 68e6db2ebdc24f95958faec2be5558d6" + }, + { + "referencedResource": "TMP_SDF Overlay.shader", + "target": "guid: 4a7755d6b5b67874f89c85f56f95fe97", + "replacement": "guid: dd89cf5b9246416f84610a006f916af7" + }, + { + "referencedResource": "TMP_SDF-Mobile.shader", + "target": "guid: cafd18099dfc0114896e0a8b277b81b6", + "replacement": "guid: fe393ace9b354375a9cb14cdbbc28be4" + }, + { + "referencedResource": "TMP_SDF-Mobile Masking.shader", + "target": "guid: afc255f7c2be52e41973a3d10a2e632d", + "replacement": "guid: bc1ede39bf3643ee8e493720e4259791" + }, + { + "referencedResource": "TMP_SDF-Mobile Overlay.shader", + "target": "guid: 9ecb3fe313cb5f7478141eba4a2d54ed", + "replacement": "guid: a02a7d8c237544f1962732b55a9aebf1" + }, + { + "referencedResource": "TMP_SDF-Surface.shader", + "target": "guid: 8e6b9842dbb1a5a4887378afab854e63", + "replacement": "guid: f7ada0af4f174f0694ca6a487b8f543d" + }, + { + "referencedResource": "TMP_SDF-Surface-Mobile.shader", + "target": "guid: 3c2ea7753c1425145a74d106ec1cd852", + "replacement": "guid: 85187c2149c549c5b33f0cdb02836b17" + }, + { + "referencedResource": "TMP_Sprite.shader", + "target": "guid: 3a1c68c8292caf046bd21158886c5e40", + "replacement": "guid: cf81c85f95fe47e1a27f6ae460cf182c" + }, + { + "referencedResource": "TMP_ColorGradient.cs", + "target": "guid: e90e18dd4a044ff4394833216e6bf4d2", + "replacement": "guid: 54d21f6ece3b46479f0c328f8c6007e0" + }, + { + "referencedResource": "TMP_ColorGradient.cs", + "target": "fileID: 2108210716, guid: 89f0137620f6af44b9ba852b4190e64e", + "replacement": "fileID: 11500000, guid: 54d21f6ece3b46479f0c328f8c6007e0" + }, + { + "referencedResource": "TMP_Settings.cs", + "target": "guid: aafc3c7b9e915d64e8ec3d2c88b3a231", + "replacement": "guid: 2705215ac5b84b70bacc50632be6e391" + }, + { + "referencedResource": "TMP_Settings.cs", + "target": "fileID: -395462249, guid: 89f0137620f6af44b9ba852b4190e64e", + "replacement": "fileID: 11500000, guid: 2705215ac5b84b70bacc50632be6e391" + }, + { + "referencedResource": "TMP Settings.asset", + "target": "guid: 69ed5bac41eebaa4c97e9d2a4168c54f", + "replacement": "guid: 3f5b5dff67a942289a9defa416b206f3" + }, + { + "referencedResource": "LineBreaking Following Characters.txt", + "target": "guid: 312ba5b9e90627940866e19549a788cf", + "replacement": "guid: fade42e8bc714b018fac513c043d323b" + }, + { + "referencedResource": "LineBreaking Leading Characters.txt", + "target": "guid: 8d713940fcbede142ae4a33ea0062b33", + "replacement": "guid: d82c1b31c7e74239bff1220585707d2b" + }, + { + "referencedResource": "TMP_StyleSheet.cs", + "target": "guid: 13259b4ce497b194eb52a33d8eda0bdc", + "replacement": "guid: ab2114bdc8544297b417dfefe9f1e410" + }, + { + "referencedResource": "TMP_StyleSheet.cs", + "target": "fileID: -1936749209, guid: 89f0137620f6af44b9ba852b4190e64e", + "replacement": "fileID: 11500000, guid: ab2114bdc8544297b417dfefe9f1e410" + }, + { + "referencedResource": "TMP Default Style Sheet.asset", + "target": "guid: 54d1085f9a2fdea4587fcfc7dddcd4bc", + "replacement": "guid: f952c082cb03451daed3ee968ac6c63e" + }, + { + "referencedResource": "TMP_SpriteAsset.cs", + "target": "guid: 90940d439ca0ef746af0b48419b92d2e", + "replacement": "guid: 84a92b25f83d49b9bc132d206b370281" + }, + { + "referencedResource": "TMP_SpriteAsset.cs", + "target": "fileID: 2019389346, guid: 89f0137620f6af44b9ba852b4190e64e", + "replacement": "fileID: 11500000, guid: 84a92b25f83d49b9bc132d206b370281" + }, + { + "referencedResource": "Default Sprite Asset.asset", + "target": "guid: 273ca6c80b4b5d746b5e548f532bffd8", + "replacement": "guid: fbef3c704dce48f08a44612d6c856c8d" + }, + { + "referencedResource": "Default Sprite Asset.png", + "target": "guid: 5b32c2d36abe44540bed74c1f787033b", + "replacement": "guid: a0fc465d6cf04254a2938578735e2383" + }, + { + "referencedResource": "EmojiOne.asset", + "target": "guid: 9a952e2781ef26940ae089f1053ef4ef", + "replacement": "guid: c41005c129ba4d66911b75229fd70b45" + }, + { + "referencedResource": "EmojiOne.png", + "target": "guid: 6ec706981a919c3489f0b061a40054e2", + "replacement": "guid: dffef66376be4fa480fb02b19edbe903" + }, + { + "referencedResource": "DropCap Numbers.asset", + "target": "guid: c4fd2a959a50b584b92dedfefec1ffda", + "replacement": "guid: 14aa93acbb234d16aaef0e8b46814db6" + }, + { + "referencedResource": "DropCap Numbers.psd", + "target": "guid: 28b41fef228d6814f90e541deaf9f262", + "replacement": "guid: fd09957580ac4326916010f1f260975b" + } + ] +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/PackageConversionData_Assets.json.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/PackageConversionData_Assets.json.meta new file mode 100644 index 0000000..cbca20d --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/PackageConversionData_Assets.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 0e0afa652c0031c48896a97b424d027b +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts.meta new file mode 100644 index 0000000..5a7958a --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e6a1d1e3d2384453a7371b4a07a41ca4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor.meta new file mode 100644 index 0000000..f38b830 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b5d6c28ed7b94775be9e2560f300247c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/DropdownOptionListDrawer.cs b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/DropdownOptionListDrawer.cs new file mode 100644 index 0000000..d082b5f --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/DropdownOptionListDrawer.cs @@ -0,0 +1,60 @@ +using UnityEditorInternal; +using UnityEngine; +using UnityEngine.UI; +using UnityEditor; + +namespace TMPro.EditorUtilities +{ + [CustomPropertyDrawer(typeof(TMP_Dropdown.OptionDataList), true)] + class DropdownOptionListDrawer : PropertyDrawer + { + private ReorderableList m_ReorderableList; + + private void Init(SerializedProperty property) + { + if (m_ReorderableList != null) + return; + + SerializedProperty array = property.FindPropertyRelative("m_Options"); + + m_ReorderableList = new ReorderableList(property.serializedObject, array); + m_ReorderableList.drawElementCallback = DrawOptionData; + m_ReorderableList.drawHeaderCallback = DrawHeader; + m_ReorderableList.elementHeight += 16; + } + + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + Init(property); + + m_ReorderableList.DoList(position); + } + + private void DrawHeader(Rect rect) + { + GUI.Label(rect, "Options"); + } + + private void DrawOptionData(Rect rect, int index, bool isActive, bool isFocused) + { + SerializedProperty itemData = m_ReorderableList.serializedProperty.GetArrayElementAtIndex(index); + SerializedProperty itemText = itemData.FindPropertyRelative("m_Text"); + SerializedProperty itemImage = itemData.FindPropertyRelative("m_Image"); + + RectOffset offset = new RectOffset(0, 0, -1, -3); + rect = offset.Add(rect); + rect.height = EditorGUIUtility.singleLineHeight; + + EditorGUI.PropertyField(rect, itemText, GUIContent.none); + rect.y += EditorGUIUtility.singleLineHeight; + EditorGUI.PropertyField(rect, itemImage, GUIContent.none); + } + + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + Init(property); + + return m_ReorderableList.GetHeight(); + } + } +} diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/DropdownOptionListDrawer.cs.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/DropdownOptionListDrawer.cs.meta new file mode 100644 index 0000000..f077fd3 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/DropdownOptionListDrawer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 9545c9eb3bf94265810463794fec8334 +timeCreated: 1464818008 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/GlyphInfoDrawer.cs b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/GlyphInfoDrawer.cs new file mode 100644 index 0000000..6c1163a --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/GlyphInfoDrawer.cs @@ -0,0 +1,61 @@ +/* +using UnityEngine; +using UnityEditor; +using System.Collections; + + +namespace TMPro.EditorUtilities +{ + + [CustomPropertyDrawer(typeof(TMP_Glyph))] + public class GlyphInfoDrawer : PropertyDrawer + { + + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + SerializedProperty prop_id = property.FindPropertyRelative("id"); + SerializedProperty prop_x = property.FindPropertyRelative("x"); + SerializedProperty prop_y = property.FindPropertyRelative("y"); + SerializedProperty prop_width = property.FindPropertyRelative("width"); + SerializedProperty prop_height = property.FindPropertyRelative("height"); + SerializedProperty prop_xOffset = property.FindPropertyRelative("xOffset"); + SerializedProperty prop_yOffset = property.FindPropertyRelative("yOffset"); + SerializedProperty prop_xAdvance = property.FindPropertyRelative("xAdvance"); + SerializedProperty prop_scale = property.FindPropertyRelative("scale"); + + + // We get Rect since a valid position may not be provided by the caller. + Rect rect = GUILayoutUtility.GetRect(position.width, 48); + rect.y -= 15; + + //GUI.enabled = false; + EditorGUIUtility.labelWidth = 40f; + EditorGUIUtility.fieldWidth = 45f; + + bool prevGuiState = GUI.enabled; + GUI.enabled = true; + EditorGUI.LabelField(new Rect(rect.x + 5f, rect.y, 80f, 18), new GUIContent("Ascii: " + prop_id.intValue + ""), TMP_UIStyleManager.label); + EditorGUI.LabelField(new Rect(rect.x + 90f, rect.y, 80f, 18), new GUIContent("Hex: " + prop_id.intValue.ToString("X") + ""), TMP_UIStyleManager.label); + EditorGUI.LabelField(new Rect(rect.x + 170f, rect.y, 80, 18), "Char: [ " + (char)prop_id.intValue + " ]", TMP_UIStyleManager.label); + GUI.enabled = prevGuiState; + + EditorGUIUtility.labelWidth = 35f; + EditorGUIUtility.fieldWidth = 10f; + + float width = (rect.width - 5f) / 4; + EditorGUI.PropertyField(new Rect(rect.x + 5f + width * 0, rect.y + 22, width - 5f, 18), prop_x, new GUIContent("X:")); + EditorGUI.PropertyField(new Rect(rect.x + 5f + width * 1, rect.y + 22, width - 5f, 18), prop_y, new GUIContent("Y:")); + EditorGUI.PropertyField(new Rect(rect.x + 5f + width * 2, rect.y + 22, width - 5f, 18), prop_width, new GUIContent("W:")); + EditorGUI.PropertyField(new Rect(rect.x + 5f + width * 3, rect.y + 22, width - 5f, 18), prop_height, new GUIContent("H:")); + + //GUI.enabled = true; + EditorGUI.PropertyField(new Rect(rect.x + 5f + width * 0, rect.y + 44, width - 5f, 18), prop_xOffset, new GUIContent("OX:")); + EditorGUI.PropertyField(new Rect(rect.x + 5f + width * 1, rect.y + 44, width - 5f, 18), prop_yOffset, new GUIContent("OY:")); + //GUI.enabled = true; + EditorGUI.PropertyField(new Rect(rect.x + 5f + width * 2, rect.y + 44, width - 5f, 18), prop_xAdvance, new GUIContent("ADV:")); + EditorGUI.PropertyField(new Rect(rect.x + 5f + width * 3, rect.y + 44, width - 5f, 18), prop_scale, new GUIContent("SF:")); + } + + } +} +*/ \ No newline at end of file diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/GlyphInfoDrawer.cs.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/GlyphInfoDrawer.cs.meta new file mode 100644 index 0000000..d840c53 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/GlyphInfoDrawer.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 900f1a451c764dc3bdcc0de815a15935 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/GlyphMetricsPropertyDrawer.cs b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/GlyphMetricsPropertyDrawer.cs new file mode 100644 index 0000000..ee8459f --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/GlyphMetricsPropertyDrawer.cs @@ -0,0 +1,53 @@ +using UnityEngine; +using UnityEngine.TextCore; +using UnityEditor; +using System.Collections; + + +namespace TMPro.EditorUtilities +{ + + [CustomPropertyDrawer(typeof(GlyphMetrics))] + public class GlyphMetricsPropertyDrawer : PropertyDrawer + { + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + SerializedProperty prop_Width = property.FindPropertyRelative("m_Width"); + SerializedProperty prop_Height = property.FindPropertyRelative("m_Height"); + SerializedProperty prop_HoriBearingX = property.FindPropertyRelative("m_HorizontalBearingX"); + SerializedProperty prop_HoriBearingY = property.FindPropertyRelative("m_HorizontalBearingY"); + SerializedProperty prop_HoriAdvance = property.FindPropertyRelative("m_HorizontalAdvance"); + + // We get Rect since a valid position may not be provided by the caller. + Rect rect = new Rect(position.x, position.y, position.width, 49); + + EditorGUI.LabelField(rect, new GUIContent("Glyph Metrics")); + + EditorGUIUtility.labelWidth = 30f; + EditorGUIUtility.fieldWidth = 10f; + + //GUI.enabled = false; + float width = (rect.width - 75f) / 2; + EditorGUI.PropertyField(new Rect(rect.x + width * 0, rect.y + 20, width - 5f, 18), prop_Width, new GUIContent("W:")); + EditorGUI.PropertyField(new Rect(rect.x + width * 1, rect.y + 20, width - 5f, 18), prop_Height, new GUIContent("H:")); + + //GUI.enabled = true; + + width = (rect.width - 75f) / 3; + EditorGUI.BeginChangeCheck(); + EditorGUI.PropertyField(new Rect(rect.x + width * 0, rect.y + 40, width - 5f, 18), prop_HoriBearingX, new GUIContent("BX:")); + EditorGUI.PropertyField(new Rect(rect.x + width * 1, rect.y + 40, width - 5f, 18), prop_HoriBearingY, new GUIContent("BY:")); + EditorGUI.PropertyField(new Rect(rect.x + width * 2, rect.y + 40, width - 5f, 18), prop_HoriAdvance, new GUIContent("AD:")); + if (EditorGUI.EndChangeCheck()) + { + + } + } + + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + return 65f; + } + + } +} diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/GlyphMetricsPropertyDrawer.cs.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/GlyphMetricsPropertyDrawer.cs.meta new file mode 100644 index 0000000..484aab6 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/GlyphMetricsPropertyDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e3882522a08b6f5459b4dea6f8791278 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/GlyphRectPropertyDrawer.cs b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/GlyphRectPropertyDrawer.cs new file mode 100644 index 0000000..eaf8dd4 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/GlyphRectPropertyDrawer.cs @@ -0,0 +1,44 @@ +using UnityEngine; +using UnityEngine.TextCore; +using UnityEditor; +using System.Collections; + + +namespace TMPro.EditorUtilities +{ + + [CustomPropertyDrawer(typeof(GlyphRect))] + public class GlyphRectPropertyDrawer : PropertyDrawer + { + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + //EditorGUI.BeginProperty(position, label, property); + + SerializedProperty prop_X = property.FindPropertyRelative("m_X"); + SerializedProperty prop_Y = property.FindPropertyRelative("m_Y"); + SerializedProperty prop_Width = property.FindPropertyRelative("m_Width"); + SerializedProperty prop_Height = property.FindPropertyRelative("m_Height"); + + // We get Rect since a valid position may not be provided by the caller. + Rect rect = new Rect(position.x, position.y, position.width, 49); + EditorGUI.LabelField(rect, new GUIContent("Glyph Rect")); + + EditorGUIUtility.labelWidth = 30f; + EditorGUIUtility.fieldWidth = 10f; + + //GUI.enabled = false; + float width = (rect.width - 75f) / 4; + EditorGUI.PropertyField(new Rect(rect.x + width * 0, rect.y + 20, width - 5f, 18), prop_X, new GUIContent("X:")); + EditorGUI.PropertyField(new Rect(rect.x + width * 1, rect.y + 20, width - 5f, 18), prop_Y, new GUIContent("Y:")); + EditorGUI.PropertyField(new Rect(rect.x + width * 2, rect.y + 20, width - 5f, 18), prop_Width, new GUIContent("W:")); + EditorGUI.PropertyField(new Rect(rect.x + width * 3, rect.y + 20, width - 5f, 18), prop_Height, new GUIContent("H:")); + + //EditorGUI.EndProperty(); + } + + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + return 45f; + } + } +} diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/GlyphRectPropertyDrawer.cs.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/GlyphRectPropertyDrawer.cs.meta new file mode 100644 index 0000000..137f460 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/GlyphRectPropertyDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8bc2b083b068f3546a9509c805e0541c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_BaseEditorPanel.cs b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_BaseEditorPanel.cs new file mode 100644 index 0000000..07651bf --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_BaseEditorPanel.cs @@ -0,0 +1,1116 @@ +using UnityEngine; +using UnityEditor; + +namespace TMPro.EditorUtilities +{ + public abstract class TMP_BaseEditorPanel : Editor + { + //Labels and Tooltips + static readonly GUIContent k_RtlToggleLabel = new GUIContent("Enable RTL Editor", "Reverses text direction and allows right to left editing."); + static readonly GUIContent k_MainSettingsLabel = new GUIContent("Main Settings"); + static readonly GUIContent k_FontAssetLabel = new GUIContent("Font Asset", "The Font Asset containing the glyphs that can be rendered for this text."); + static readonly GUIContent k_MaterialPresetLabel = new GUIContent("Material Preset", "The material used for rendering. Only materials created from the Font Asset can be used."); + static readonly GUIContent k_AutoSizeLabel = new GUIContent("Auto Size", "Auto sizes the text to fit the available space."); + static readonly GUIContent k_FontSizeLabel = new GUIContent("Font Size", "The size the text will be rendered at in points."); + static readonly GUIContent k_AutoSizeOptionsLabel = new GUIContent("Auto Size Options"); + static readonly GUIContent k_MinLabel = new GUIContent("Min", "The minimum font size."); + static readonly GUIContent k_MaxLabel = new GUIContent("Max", "The maximum font size."); + static readonly GUIContent k_WdLabel = new GUIContent("WD%", "Compresses character width up to this value before reducing font size."); + static readonly GUIContent k_LineLabel = new GUIContent("Line", "Negative value only. Compresses line height down to this value before reducing font size."); + static readonly GUIContent k_FontStyleLabel = new GUIContent("Font Style", "Styles to apply to the text such as Bold or Italic."); + + static readonly GUIContent k_BoldLabel = new GUIContent("B", "Bold"); + static readonly GUIContent k_ItalicLabel = new GUIContent("I", "Italic"); + static readonly GUIContent k_UnderlineLabel = new GUIContent("U", "Underline"); + static readonly GUIContent k_StrikethroughLabel = new GUIContent("S", "Strikethrough"); + static readonly GUIContent k_LowercaseLabel = new GUIContent("ab", "Lowercase"); + static readonly GUIContent k_UppercaseLabel = new GUIContent("AB", "Uppercase"); + static readonly GUIContent k_SmallcapsLabel = new GUIContent("SC", "Smallcaps"); + + static readonly GUIContent k_ColorModeLabel = new GUIContent("Color Mode", "The type of gradient to use."); + static readonly GUIContent k_BaseColorLabel = new GUIContent("Vertex Color", "The base color of the text vertices."); + static readonly GUIContent k_ColorPresetLabel = new GUIContent("Color Preset", "A Color Preset which override the local color settings."); + static readonly GUIContent k_ColorGradientLabel = new GUIContent("Color Gradient", "The gradient color applied over the Vertex Color. Can be locally set or driven by a Gradient Asset."); + static readonly GUIContent k_CorenerColorsLabel = new GUIContent("Colors", "The color composition of the gradient."); + static readonly GUIContent k_OverrideTagsLabel = new GUIContent("Override Tags", "Whether the color settings override the tag."); + + static readonly GUIContent k_SpacingOptionsLabel = new GUIContent("Spacing Options", "Spacing adjustments between different elements of the text."); + static readonly GUIContent k_CharacterSpacingLabel = new GUIContent("Character"); + static readonly GUIContent k_WordSpacingLabel = new GUIContent("Word"); + static readonly GUIContent k_LineSpacingLabel = new GUIContent("Line"); + static readonly GUIContent k_ParagraphSpacingLabel = new GUIContent("Paragraph"); + + static readonly GUIContent k_AlignmentLabel = new GUIContent("Alignment", "Horizontal and vertical aligment of the text within its container."); + static readonly GUIContent k_WrapMixLabel = new GUIContent("Wrap Mix (W <-> C)", "How much to favor words versus characters when distributing the text."); + + static readonly GUIContent k_WrappingLabel = new GUIContent("Wrapping", "Wraps text to the next line when reaching the edge of the container."); + static readonly GUIContent[] k_WrappingOptions = { new GUIContent("Disabled"), new GUIContent("Enabled") }; + static readonly GUIContent k_OverflowLabel = new GUIContent("Overflow", "How to display text which goes past the edge of the container."); + + static readonly GUIContent k_MarginsLabel = new GUIContent("Margins", "The space between the text and the edge of its container."); + static readonly GUIContent k_GeometrySortingLabel = new GUIContent("Geometry Sorting", "The order in which text geometry is sorted. Used to adjust the way overlapping characters are displayed."); + static readonly GUIContent k_RichTextLabel = new GUIContent("Rich Text", "Enables the use of rich text tags such as and ."); + static readonly GUIContent k_EscapeCharactersLabel = new GUIContent("Parse Escape Characters", "Whether to display strings such as \"\\n\" as is or replace them by the character they represent."); + static readonly GUIContent k_VisibleDescenderLabel = new GUIContent("Visible Descender", "Compute descender values from visible characters only. Used to adjust layout behavior when hiding and revealing characters dynamically."); + static readonly GUIContent k_SpriteAssetLabel = new GUIContent("Sprite Asset", "The Sprite Asset used when NOT specifically referencing one using ."); + + static readonly GUIContent k_HorizontalMappingLabel = new GUIContent("Horizontal Mapping", "Horizontal UV mapping when using a shader with a texture face option."); + static readonly GUIContent k_VerticalMappingLabel = new GUIContent("Vertical Mapping", "Vertical UV mapping when using a shader with a texture face option."); + static readonly GUIContent k_LineOffsetLabel = new GUIContent("Line Offset", "Adds an horizontal offset to each successive line. Used for slanted texturing."); + + static readonly GUIContent k_KerningLabel = new GUIContent("Kerning", "Enables character specific spacing between pairs of characters."); + static readonly GUIContent k_PaddingLabel = new GUIContent("Extra Padding", "Adds some padding between the characters and the edge of the text mesh. Can reduce graphical errors when displaying small text."); + + static readonly GUIContent k_LeftLabel = new GUIContent("Left"); + static readonly GUIContent k_TopLabel = new GUIContent("Top"); + static readonly GUIContent k_RightLabel = new GUIContent("Right"); + static readonly GUIContent k_BottomLabel = new GUIContent("Bottom"); + + protected static readonly GUIContent k_ExtraSettingsLabel = new GUIContent("Extra Settings"); + + protected struct Foldout + { + // Track Inspector foldout panel states, globally. + public static bool extraSettings = false; + public static bool materialInspector = true; + } + + protected static int s_EventId; + + public int selAlignGridA; + public int selAlignGridB; + + protected SerializedProperty m_TextProp; + + protected SerializedProperty m_IsRightToLeftProp; + protected string m_RtlText; + + protected SerializedProperty m_FontAssetProp; + + protected SerializedProperty m_FontSharedMaterialProp; + protected Material[] m_MaterialPresets; + protected GUIContent[] m_MaterialPresetNames; + protected int m_MaterialPresetSelectionIndex; + protected bool m_IsPresetListDirty; + + protected SerializedProperty m_FontStyleProp; + + protected SerializedProperty m_FontColorProp; + protected SerializedProperty m_EnableVertexGradientProp; + protected SerializedProperty m_FontColorGradientProp; + protected SerializedProperty m_FontColorGradientPresetProp; + protected SerializedProperty m_OverrideHtmlColorProp; + + protected SerializedProperty m_FontSizeProp; + protected SerializedProperty m_FontSizeBaseProp; + + protected SerializedProperty m_AutoSizingProp; + protected SerializedProperty m_FontSizeMinProp; + protected SerializedProperty m_FontSizeMaxProp; + + protected SerializedProperty m_LineSpacingMaxProp; + protected SerializedProperty m_CharWidthMaxAdjProp; + + protected SerializedProperty m_CharacterSpacingProp; + protected SerializedProperty m_WordSpacingProp; + protected SerializedProperty m_LineSpacingProp; + protected SerializedProperty m_ParagraphSpacingProp; + + protected SerializedProperty m_TextAlignmentProp; + + protected SerializedProperty m_HorizontalMappingProp; + protected SerializedProperty m_VerticalMappingProp; + protected SerializedProperty m_UvLineOffsetProp; + + protected SerializedProperty m_EnableWordWrappingProp; + protected SerializedProperty m_WordWrappingRatiosProp; + protected SerializedProperty m_TextOverflowModeProp; + protected SerializedProperty m_PageToDisplayProp; + protected SerializedProperty m_LinkedTextComponentProp; + protected SerializedProperty m_IsLinkedTextComponentProp; + + protected SerializedProperty m_EnableKerningProp; + + protected SerializedProperty m_IsRichTextProp; + + protected SerializedProperty m_HasFontAssetChangedProp; + + protected SerializedProperty m_EnableExtraPaddingProp; + protected SerializedProperty m_CheckPaddingRequiredProp; + protected SerializedProperty m_EnableEscapeCharacterParsingProp; + protected SerializedProperty m_UseMaxVisibleDescenderProp; + protected SerializedProperty m_GeometrySortingOrderProp; + + protected SerializedProperty m_SpriteAssetProp; + + protected SerializedProperty m_MarginProp; + + protected SerializedProperty m_ColorModeProp; + + protected bool m_HavePropertiesChanged; + + protected TMP_Text m_TextComponent; + protected RectTransform m_RectTransform; + + protected Material m_TargetMaterial; + + protected Vector3[] m_RectCorners = new Vector3[4]; + protected Vector3[] m_HandlePoints = new Vector3[4]; + + protected virtual void OnEnable() + { + m_TextProp = serializedObject.FindProperty("m_text"); + m_IsRightToLeftProp = serializedObject.FindProperty("m_isRightToLeft"); + m_FontAssetProp = serializedObject.FindProperty("m_fontAsset"); + m_FontSharedMaterialProp = serializedObject.FindProperty("m_sharedMaterial"); + + m_FontStyleProp = serializedObject.FindProperty("m_fontStyle"); + + m_FontSizeProp = serializedObject.FindProperty("m_fontSize"); + m_FontSizeBaseProp = serializedObject.FindProperty("m_fontSizeBase"); + + m_AutoSizingProp = serializedObject.FindProperty("m_enableAutoSizing"); + m_FontSizeMinProp = serializedObject.FindProperty("m_fontSizeMin"); + m_FontSizeMaxProp = serializedObject.FindProperty("m_fontSizeMax"); + + m_LineSpacingMaxProp = serializedObject.FindProperty("m_lineSpacingMax"); + m_CharWidthMaxAdjProp = serializedObject.FindProperty("m_charWidthMaxAdj"); + + // Colors & Gradient + m_FontColorProp = serializedObject.FindProperty("m_fontColor"); + m_EnableVertexGradientProp = serializedObject.FindProperty("m_enableVertexGradient"); + m_FontColorGradientProp = serializedObject.FindProperty("m_fontColorGradient"); + m_FontColorGradientPresetProp = serializedObject.FindProperty("m_fontColorGradientPreset"); + m_OverrideHtmlColorProp = serializedObject.FindProperty("m_overrideHtmlColors"); + + m_CharacterSpacingProp = serializedObject.FindProperty("m_characterSpacing"); + m_WordSpacingProp = serializedObject.FindProperty("m_wordSpacing"); + m_LineSpacingProp = serializedObject.FindProperty("m_lineSpacing"); + m_ParagraphSpacingProp = serializedObject.FindProperty("m_paragraphSpacing"); + + m_TextAlignmentProp = serializedObject.FindProperty("m_textAlignment"); + + m_HorizontalMappingProp = serializedObject.FindProperty("m_horizontalMapping"); + m_VerticalMappingProp = serializedObject.FindProperty("m_verticalMapping"); + m_UvLineOffsetProp = serializedObject.FindProperty("m_uvLineOffset"); + + m_EnableWordWrappingProp = serializedObject.FindProperty("m_enableWordWrapping"); + m_WordWrappingRatiosProp = serializedObject.FindProperty("m_wordWrappingRatios"); + m_TextOverflowModeProp = serializedObject.FindProperty("m_overflowMode"); + m_PageToDisplayProp = serializedObject.FindProperty("m_pageToDisplay"); + m_LinkedTextComponentProp = serializedObject.FindProperty("m_linkedTextComponent"); + m_IsLinkedTextComponentProp = serializedObject.FindProperty("m_isLinkedTextComponent"); + + m_EnableKerningProp = serializedObject.FindProperty("m_enableKerning"); + + m_EnableExtraPaddingProp = serializedObject.FindProperty("m_enableExtraPadding"); + m_IsRichTextProp = serializedObject.FindProperty("m_isRichText"); + m_CheckPaddingRequiredProp = serializedObject.FindProperty("checkPaddingRequired"); + m_EnableEscapeCharacterParsingProp = serializedObject.FindProperty("m_parseCtrlCharacters"); + m_UseMaxVisibleDescenderProp = serializedObject.FindProperty("m_useMaxVisibleDescender"); + + m_GeometrySortingOrderProp = serializedObject.FindProperty("m_geometrySortingOrder"); + + m_SpriteAssetProp = serializedObject.FindProperty("m_spriteAsset"); + + m_MarginProp = serializedObject.FindProperty("m_margin"); + + m_HasFontAssetChangedProp = serializedObject.FindProperty("m_hasFontAssetChanged"); + + m_ColorModeProp = serializedObject.FindProperty("m_colorMode"); + + m_TextComponent = (TMP_Text)target; + m_RectTransform = m_TextComponent.rectTransform; + + // Create new Material Editor if one does not exists + m_TargetMaterial = m_TextComponent.fontSharedMaterial; + + // Set material inspector visibility + if (m_TargetMaterial != null) + UnityEditorInternal.InternalEditorUtility.SetIsInspectorExpanded(m_TargetMaterial, Foldout.materialInspector); + + // Find all Material Presets matching the current Font Asset Material + m_MaterialPresetNames = GetMaterialPresets(); + + // Initialize the Event Listener for Undo Events. + Undo.undoRedoPerformed += OnUndoRedo; + } + + protected virtual void OnDisable() + { + // Set material inspector visibility + if (m_TargetMaterial != null) + Foldout.materialInspector = UnityEditorInternal.InternalEditorUtility.GetIsInspectorExpanded(m_TargetMaterial); + + if (Undo.undoRedoPerformed != null) + Undo.undoRedoPerformed -= OnUndoRedo; + } + + public override void OnInspectorGUI() + { + // Make sure Multi selection only includes TMP Text objects. + if (IsMixSelectionTypes()) return; + + serializedObject.Update(); + + DrawTextInput(); + + DrawMainSettings(); + + DrawExtraSettings(); + + EditorGUILayout.Space(); + + if (m_HavePropertiesChanged) + { + m_HavePropertiesChanged = false; + m_TextComponent.havePropertiesChanged = true; + m_TextComponent.ComputeMarginSize(); + EditorUtility.SetDirty(target); + } + + serializedObject.ApplyModifiedProperties(); + } + + public void OnSceneGUI() + { + if (IsMixSelectionTypes()) return; + + // Margin Frame & Handles + m_RectTransform.GetWorldCorners(m_RectCorners); + Vector4 marginOffset = m_TextComponent.margin; + Vector3 lossyScale = m_RectTransform.lossyScale; + + m_HandlePoints[0] = m_RectCorners[0] + m_RectTransform.TransformDirection(new Vector3(marginOffset.x * lossyScale.x, marginOffset.w * lossyScale.y, 0)); + m_HandlePoints[1] = m_RectCorners[1] + m_RectTransform.TransformDirection(new Vector3(marginOffset.x * lossyScale.x, -marginOffset.y * lossyScale.y, 0)); + m_HandlePoints[2] = m_RectCorners[2] + m_RectTransform.TransformDirection(new Vector3(-marginOffset.z * lossyScale.x, -marginOffset.y * lossyScale.y, 0)); + m_HandlePoints[3] = m_RectCorners[3] + m_RectTransform.TransformDirection(new Vector3(-marginOffset.z * lossyScale.x, marginOffset.w * lossyScale.y, 0)); + + Handles.DrawSolidRectangleWithOutline(m_HandlePoints, new Color32(255, 255, 255, 0), new Color32(255, 255, 0, 255)); + + // Draw & process FreeMoveHandles + + // LEFT HANDLE + Vector3 oldLeft = (m_HandlePoints[0] + m_HandlePoints[1]) * 0.5f; + Vector3 newLeft = Handles.FreeMoveHandle(oldLeft, Quaternion.identity, HandleUtility.GetHandleSize(m_RectTransform.position) * 0.05f, Vector3.zero, Handles.DotHandleCap); + bool hasChanged = false; + if (oldLeft != newLeft) + { + float delta = oldLeft.x - newLeft.x; + marginOffset.x += -delta / lossyScale.x; + //Debug.Log("Left Margin H0:" + handlePoints[0] + " H1:" + handlePoints[1]); + hasChanged = true; + } + + // TOP HANDLE + Vector3 oldTop = (m_HandlePoints[1] + m_HandlePoints[2]) * 0.5f; + Vector3 newTop = Handles.FreeMoveHandle(oldTop, Quaternion.identity, HandleUtility.GetHandleSize(m_RectTransform.position) * 0.05f, Vector3.zero, Handles.DotHandleCap); + if (oldTop != newTop) + { + float delta = oldTop.y - newTop.y; + marginOffset.y += delta / lossyScale.y; + //Debug.Log("Top Margin H1:" + handlePoints[1] + " H2:" + handlePoints[2]); + hasChanged = true; + } + + // RIGHT HANDLE + Vector3 oldRight = (m_HandlePoints[2] + m_HandlePoints[3]) * 0.5f; + Vector3 newRight = Handles.FreeMoveHandle(oldRight, Quaternion.identity, HandleUtility.GetHandleSize(m_RectTransform.position) * 0.05f, Vector3.zero, Handles.DotHandleCap); + if (oldRight != newRight) + { + float delta = oldRight.x - newRight.x; + marginOffset.z += delta / lossyScale.x; + hasChanged = true; + //Debug.Log("Right Margin H2:" + handlePoints[2] + " H3:" + handlePoints[3]); + } + + // BOTTOM HANDLE + Vector3 oldBottom = (m_HandlePoints[3] + m_HandlePoints[0]) * 0.5f; + Vector3 newBottom = Handles.FreeMoveHandle(oldBottom, Quaternion.identity, HandleUtility.GetHandleSize(m_RectTransform.position) * 0.05f, Vector3.zero, Handles.DotHandleCap); + if (oldBottom != newBottom) + { + float delta = oldBottom.y - newBottom.y; + marginOffset.w += -delta / lossyScale.y; + hasChanged = true; + //Debug.Log("Bottom Margin H0:" + handlePoints[0] + " H3:" + handlePoints[3]); + } + + if (hasChanged) + { + Undo.RecordObjects(new Object[] {m_RectTransform, m_TextComponent }, "Margin Changes"); + m_TextComponent.margin = marginOffset; + EditorUtility.SetDirty(target); + } + } + + protected void DrawTextInput() + { + EditorGUILayout.Space(); + + // If the text component is linked, disable the text input box. + if (m_IsLinkedTextComponentProp.boolValue) + { + EditorGUILayout.HelpBox("The Text Input Box is disabled due to this text component being linked to another.", MessageType.Info); + } + else + { + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(m_TextProp); + + if (EditorGUI.EndChangeCheck() || (m_IsRightToLeftProp.boolValue && string.IsNullOrEmpty(m_RtlText))) + { + m_TextComponent.m_inputSource = TMP_Text.TextInputSources.Text; + m_TextComponent.m_isInputParsingRequired = true; + m_HavePropertiesChanged = true; + + // Handle Left to Right or Right to Left Editor + if (m_IsRightToLeftProp.boolValue) + { + m_RtlText = string.Empty; + string sourceText = m_TextProp.stringValue; + + // Reverse Text displayed in Text Input Box + for (int i = 0; i < sourceText.Length; i++) + { + m_RtlText += sourceText[sourceText.Length - i - 1]; + } + } + } + + // Toggle showing Rich Tags + m_IsRightToLeftProp.boolValue = EditorGUILayout.Toggle(k_RtlToggleLabel, m_IsRightToLeftProp.boolValue); + + if (m_IsRightToLeftProp.boolValue) + { + EditorGUI.BeginChangeCheck(); + m_RtlText = EditorGUILayout.TextArea(m_RtlText, TMP_UIStyleManager.wrappingTextArea, GUILayout.Height(EditorGUI.GetPropertyHeight(m_TextProp) - EditorGUIUtility.singleLineHeight), GUILayout.ExpandWidth(true)); + if (EditorGUI.EndChangeCheck()) + { + // Convert RTL input + string sourceText = string.Empty; + + // Reverse Text displayed in Text Input Box + for (int i = 0; i < m_RtlText.Length; i++) + { + sourceText += m_RtlText[m_RtlText.Length - i - 1]; + } + + m_TextProp.stringValue = sourceText; + } + } + } + } + + protected void DrawMainSettings() + { + // MAIN SETTINGS SECTION + GUILayout.Label(k_MainSettingsLabel, EditorStyles.boldLabel); + + EditorGUI.indentLevel += 1; + + DrawFont(); + + DrawColor(); + + DrawSpacing(); + + DrawAlignment(); + + DrawWrappingOverflow(); + + DrawTextureMapping(); + + EditorGUI.indentLevel -= 1; + } + + void DrawFont() + { + // Update list of material presets if needed. + if (m_IsPresetListDirty) + m_MaterialPresetNames = GetMaterialPresets(); + + // FONT ASSET + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(m_FontAssetProp, k_FontAssetLabel); + if (EditorGUI.EndChangeCheck()) + { + m_HavePropertiesChanged = true; + m_HasFontAssetChangedProp.boolValue = true; + + m_IsPresetListDirty = true; + m_MaterialPresetSelectionIndex = 0; + } + + Rect rect; + + // MATERIAL PRESET + if (m_MaterialPresetNames != null) + { + EditorGUI.BeginChangeCheck(); + rect = EditorGUILayout.GetControlRect(false, 17); + + float oldHeight = EditorStyles.popup.fixedHeight; + EditorStyles.popup.fixedHeight = rect.height; + + int oldSize = EditorStyles.popup.fontSize; + EditorStyles.popup.fontSize = 11; + + m_MaterialPresetSelectionIndex = EditorGUI.Popup(rect, k_MaterialPresetLabel, m_MaterialPresetSelectionIndex, m_MaterialPresetNames); + if (EditorGUI.EndChangeCheck()) + { + m_FontSharedMaterialProp.objectReferenceValue = m_MaterialPresets[m_MaterialPresetSelectionIndex]; + m_HavePropertiesChanged = true; + } + + //Make sure material preset selection index matches the selection + if (m_MaterialPresetSelectionIndex < m_MaterialPresetNames.Length && m_TargetMaterial != m_MaterialPresets[m_MaterialPresetSelectionIndex] && !m_HavePropertiesChanged) + m_IsPresetListDirty = true; + + EditorStyles.popup.fixedHeight = oldHeight; + EditorStyles.popup.fontSize = oldSize; + } + + // FONT STYLE + EditorGUI.BeginChangeCheck(); + + int v1, v2, v3, v4, v5, v6, v7; + + if (EditorGUIUtility.wideMode) + { + rect = EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight + 2f); + + EditorGUI.PrefixLabel(rect, k_FontStyleLabel); + + int styleValue = m_FontStyleProp.intValue; + + rect.x += EditorGUIUtility.labelWidth; + rect.width -= EditorGUIUtility.labelWidth; + + rect.width = Mathf.Max(25f, rect.width / 7f); + + v1 = TMP_EditorUtility.EditorToggle(rect, (styleValue & 1) == 1, k_BoldLabel, TMP_UIStyleManager.alignmentButtonLeft) ? 1 : 0; // Bold + rect.x += rect.width; + v2 = TMP_EditorUtility.EditorToggle(rect, (styleValue & 2) == 2, k_ItalicLabel, TMP_UIStyleManager.alignmentButtonMid) ? 2 : 0; // Italics + rect.x += rect.width; + v3 = TMP_EditorUtility.EditorToggle(rect, (styleValue & 4) == 4, k_UnderlineLabel, TMP_UIStyleManager.alignmentButtonMid) ? 4 : 0; // Underline + rect.x += rect.width; + v7 = TMP_EditorUtility.EditorToggle(rect, (styleValue & 64) == 64, k_StrikethroughLabel, TMP_UIStyleManager.alignmentButtonRight) ? 64 : 0; // Strikethrough + rect.x += rect.width; + + int selected = 0; + + EditorGUI.BeginChangeCheck(); + v4 = TMP_EditorUtility.EditorToggle(rect, (styleValue & 8) == 8, k_LowercaseLabel, TMP_UIStyleManager.alignmentButtonLeft) ? 8 : 0; // Lowercase + if (EditorGUI.EndChangeCheck() && v4 > 0) + { + selected = v4; + } + rect.x += rect.width; + EditorGUI.BeginChangeCheck(); + v5 = TMP_EditorUtility.EditorToggle(rect, (styleValue & 16) == 16, k_UppercaseLabel, TMP_UIStyleManager.alignmentButtonMid) ? 16 : 0; // Uppercase + if (EditorGUI.EndChangeCheck() && v5 > 0) + { + selected = v5; + } + rect.x += rect.width; + EditorGUI.BeginChangeCheck(); + v6 = TMP_EditorUtility.EditorToggle(rect, (styleValue & 32) == 32, k_SmallcapsLabel, TMP_UIStyleManager.alignmentButtonRight) ? 32 : 0; // Smallcaps + if (EditorGUI.EndChangeCheck() && v6 > 0) + { + selected = v6; + } + + if (selected > 0) + { + v4 = selected == 8 ? 8 : 0; + v5 = selected == 16 ? 16 : 0; + v6 = selected == 32 ? 32 : 0; + } + } + else + { + rect = EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight + 2f); + + EditorGUI.PrefixLabel(rect, k_FontStyleLabel); + + int styleValue = m_FontStyleProp.intValue; + + rect.x += EditorGUIUtility.labelWidth; + rect.width -= EditorGUIUtility.labelWidth; + rect.width = Mathf.Max(25f, rect.width / 4f); + + v1 = TMP_EditorUtility.EditorToggle(rect, (styleValue & 1) == 1, k_BoldLabel, TMP_UIStyleManager.alignmentButtonLeft) ? 1 : 0; // Bold + rect.x += rect.width; + v2 = TMP_EditorUtility.EditorToggle(rect, (styleValue & 2) == 2, k_ItalicLabel, TMP_UIStyleManager.alignmentButtonMid) ? 2 : 0; // Italics + rect.x += rect.width; + v3 = TMP_EditorUtility.EditorToggle(rect, (styleValue & 4) == 4, k_UnderlineLabel, TMP_UIStyleManager.alignmentButtonMid) ? 4 : 0; // Underline + rect.x += rect.width; + v7 = TMP_EditorUtility.EditorToggle(rect, (styleValue & 64) == 64, k_StrikethroughLabel, TMP_UIStyleManager.alignmentButtonRight) ? 64 : 0; // Strikethrough + + rect = EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight + 2f); + + rect.x += EditorGUIUtility.labelWidth; + rect.width -= EditorGUIUtility.labelWidth; + + rect.width = Mathf.Max(25f, rect.width / 4f); + + int selected = 0; + + EditorGUI.BeginChangeCheck(); + v4 = TMP_EditorUtility.EditorToggle(rect, (styleValue & 8) == 8, k_LowercaseLabel, TMP_UIStyleManager.alignmentButtonLeft) ? 8 : 0; // Lowercase + if (EditorGUI.EndChangeCheck() && v4 > 0) + { + selected = v4; + } + rect.x += rect.width; + EditorGUI.BeginChangeCheck(); + v5 = TMP_EditorUtility.EditorToggle(rect, (styleValue & 16) == 16, k_UppercaseLabel, TMP_UIStyleManager.alignmentButtonMid) ? 16 : 0; // Uppercase + if (EditorGUI.EndChangeCheck() && v5 > 0) + { + selected = v5; + } + rect.x += rect.width; + EditorGUI.BeginChangeCheck(); + v6 = TMP_EditorUtility.EditorToggle(rect, (styleValue & 32) == 32, k_SmallcapsLabel, TMP_UIStyleManager.alignmentButtonRight) ? 32 : 0; // Smallcaps + if (EditorGUI.EndChangeCheck() && v6 > 0) + { + selected = v6; + } + + if (selected > 0) + { + v4 = selected == 8 ? 8 : 0; + v5 = selected == 16 ? 16 : 0; + v6 = selected == 32 ? 32 : 0; + } + } + + if (EditorGUI.EndChangeCheck()) + { + m_FontStyleProp.intValue = v1 + v2 + v3 + v4 + v5 + v6 + v7; + m_HavePropertiesChanged = true; + } + + // FONT SIZE + EditorGUI.BeginChangeCheck(); + + EditorGUI.BeginDisabledGroup(m_AutoSizingProp.boolValue); + EditorGUILayout.PropertyField(m_FontSizeProp, k_FontSizeLabel, GUILayout.MaxWidth(EditorGUIUtility.labelWidth + 50f)); + EditorGUI.EndDisabledGroup(); + + if (EditorGUI.EndChangeCheck()) + { + m_FontSizeBaseProp.floatValue = m_FontSizeProp.floatValue; + m_HavePropertiesChanged = true; + } + + EditorGUI.indentLevel += 1; + + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(m_AutoSizingProp, k_AutoSizeLabel); + if (EditorGUI.EndChangeCheck()) + { + if (m_AutoSizingProp.boolValue == false) + m_FontSizeProp.floatValue = m_FontSizeBaseProp.floatValue; + + m_HavePropertiesChanged = true; + } + + // Show auto sizing options + if (m_AutoSizingProp.boolValue) + { + rect = EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight); + + EditorGUI.PrefixLabel(rect, k_AutoSizeOptionsLabel); + + int previousIndent = EditorGUI.indentLevel; + + EditorGUI.indentLevel = 0; + + rect.width = (rect.width - EditorGUIUtility.labelWidth) / 4f; + rect.x += EditorGUIUtility.labelWidth; + + EditorGUIUtility.labelWidth = 24; + EditorGUI.BeginChangeCheck(); + EditorGUI.PropertyField(rect, m_FontSizeMinProp, k_MinLabel); + if (EditorGUI.EndChangeCheck()) + { + m_FontSizeMinProp.floatValue = Mathf.Min(m_FontSizeMinProp.floatValue, m_FontSizeMaxProp.floatValue); + m_HavePropertiesChanged = true; + } + rect.x += rect.width; + + EditorGUIUtility.labelWidth = 27; + EditorGUI.BeginChangeCheck(); + EditorGUI.PropertyField(rect, m_FontSizeMaxProp, k_MaxLabel); + if (EditorGUI.EndChangeCheck()) + { + m_FontSizeMaxProp.floatValue = Mathf.Max(m_FontSizeMinProp.floatValue, m_FontSizeMaxProp.floatValue); + m_HavePropertiesChanged = true; + } + rect.x += rect.width; + + EditorGUI.BeginChangeCheck(); + EditorGUIUtility.labelWidth = 36; + EditorGUI.PropertyField(rect, m_CharWidthMaxAdjProp, k_WdLabel); + rect.x += rect.width; + EditorGUIUtility.labelWidth = 28; + EditorGUI.PropertyField(rect, m_LineSpacingMaxProp, k_LineLabel); + + EditorGUIUtility.labelWidth = 0; + + if (EditorGUI.EndChangeCheck()) + { + m_CharWidthMaxAdjProp.floatValue = Mathf.Clamp(m_CharWidthMaxAdjProp.floatValue, 0, 50); + m_LineSpacingMaxProp.floatValue = Mathf.Min(0, m_LineSpacingMaxProp.floatValue); + m_HavePropertiesChanged = true; + } + + EditorGUI.indentLevel = previousIndent; + } + + EditorGUI.indentLevel -= 1; + + + + EditorGUILayout.Space(); + } + + void DrawColor() + { + // FACE VERTEX COLOR + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(m_FontColorProp, k_BaseColorLabel); + + EditorGUILayout.PropertyField(m_EnableVertexGradientProp, k_ColorGradientLabel); + if (EditorGUI.EndChangeCheck()) + { + m_HavePropertiesChanged = true; + } + + EditorGUIUtility.fieldWidth = 0; + + if (m_EnableVertexGradientProp.boolValue) + { + EditorGUI.indentLevel += 1; + + EditorGUI.BeginChangeCheck(); + + EditorGUILayout.PropertyField(m_FontColorGradientPresetProp, k_ColorPresetLabel); + + SerializedObject obj = null; + + SerializedProperty colorMode; + + SerializedProperty topLeft; + SerializedProperty topRight; + SerializedProperty bottomLeft; + SerializedProperty bottomRight; + + if (m_FontColorGradientPresetProp.objectReferenceValue == null) + { + colorMode = m_ColorModeProp; + topLeft = m_FontColorGradientProp.FindPropertyRelative("topLeft"); + topRight = m_FontColorGradientProp.FindPropertyRelative("topRight"); + bottomLeft = m_FontColorGradientProp.FindPropertyRelative("bottomLeft"); + bottomRight = m_FontColorGradientProp.FindPropertyRelative("bottomRight"); + } + else + { + obj = new SerializedObject(m_FontColorGradientPresetProp.objectReferenceValue); + colorMode = obj.FindProperty("colorMode"); + topLeft = obj.FindProperty("topLeft"); + topRight = obj.FindProperty("topRight"); + bottomLeft = obj.FindProperty("bottomLeft"); + bottomRight = obj.FindProperty("bottomRight"); + } + + EditorGUILayout.PropertyField(colorMode, k_ColorModeLabel); + + var rect = EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight * (EditorGUIUtility.wideMode ? 1 : 2)); + + EditorGUI.PrefixLabel(rect, k_CorenerColorsLabel); + + rect.x += EditorGUIUtility.labelWidth; + rect.width = rect.width - EditorGUIUtility.labelWidth; + + switch ((ColorMode)colorMode.enumValueIndex) + { + case ColorMode.Single: + TMP_EditorUtility.DrawColorProperty(rect, topLeft); + + topRight.colorValue = topLeft.colorValue; + bottomLeft.colorValue = topLeft.colorValue; + bottomRight.colorValue = topLeft.colorValue; + break; + case ColorMode.HorizontalGradient: + rect.width /= 2f; + + TMP_EditorUtility.DrawColorProperty(rect, topLeft); + + rect.x += rect.width; + + TMP_EditorUtility.DrawColorProperty(rect, topRight); + + bottomLeft.colorValue = topLeft.colorValue; + bottomRight.colorValue = topRight.colorValue; + break; + case ColorMode.VerticalGradient: + TMP_EditorUtility.DrawColorProperty(rect, topLeft); + + rect = EditorGUILayout.GetControlRect(false, EditorGUIUtility.singleLineHeight * (EditorGUIUtility.wideMode ? 1 : 2)); + rect.x += EditorGUIUtility.labelWidth; + + TMP_EditorUtility.DrawColorProperty(rect, bottomLeft); + + topRight.colorValue = topLeft.colorValue; + bottomRight.colorValue = bottomLeft.colorValue; + break; + case ColorMode.FourCornersGradient: + rect.width /= 2f; + + TMP_EditorUtility.DrawColorProperty(rect, topLeft); + + rect.x += rect.width; + + TMP_EditorUtility.DrawColorProperty(rect, topRight); + + rect = EditorGUILayout.GetControlRect(false, EditorGUIUtility.singleLineHeight * (EditorGUIUtility.wideMode ? 1 : 2)); + rect.x += EditorGUIUtility.labelWidth; + rect.width = (rect.width - EditorGUIUtility.labelWidth) / 2f; + + TMP_EditorUtility.DrawColorProperty(rect, bottomLeft); + + rect.x += rect.width; + + TMP_EditorUtility.DrawColorProperty(rect, bottomRight); + break; + } + + if (EditorGUI.EndChangeCheck()) + { + m_HavePropertiesChanged = true; + if (obj != null) + { + obj.ApplyModifiedProperties(); + TMPro_EventManager.ON_COLOR_GRAIDENT_PROPERTY_CHANGED(m_FontColorGradientPresetProp.objectReferenceValue as TMP_ColorGradient); + } + } + + EditorGUI.indentLevel -= 1; + } + + EditorGUILayout.PropertyField(m_OverrideHtmlColorProp, k_OverrideTagsLabel); + + EditorGUILayout.Space(); + } + + void DrawSpacing() + { + // CHARACTER, LINE & PARAGRAPH SPACING + EditorGUI.BeginChangeCheck(); + + Rect rect = EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight); + + EditorGUI.PrefixLabel(rect, k_SpacingOptionsLabel); + + int oldIndent = EditorGUI.indentLevel; + EditorGUI.indentLevel = 0; + + rect.x += EditorGUIUtility.labelWidth; + rect.width = (rect.width - EditorGUIUtility.labelWidth - 3f) / 2f; + + EditorGUIUtility.labelWidth = Mathf.Min(rect.width * 0.55f, 80f); + + EditorGUI.PropertyField(rect, m_CharacterSpacingProp, k_CharacterSpacingLabel); + rect.x += rect.width + 3f; + EditorGUI.PropertyField(rect, m_WordSpacingProp, k_WordSpacingLabel); + + rect = EditorGUILayout.GetControlRect(false, EditorGUIUtility.singleLineHeight); + EditorGUIUtility.labelWidth = 0; + rect.x += EditorGUIUtility.labelWidth; + rect.width = (rect.width - EditorGUIUtility.labelWidth -3f) / 2f; + EditorGUIUtility.labelWidth = Mathf.Min(rect.width * 0.55f, 80f); + + EditorGUI.PropertyField(rect, m_LineSpacingProp, k_LineSpacingLabel); + rect.x += rect.width + 3f; + EditorGUI.PropertyField(rect, m_ParagraphSpacingProp, k_ParagraphSpacingLabel); + + EditorGUIUtility.labelWidth = 0; + EditorGUI.indentLevel = oldIndent; + + if (EditorGUI.EndChangeCheck()) + { + m_HavePropertiesChanged = true; + } + } + + void DrawAlignment() + { + // TEXT ALIGNMENT + EditorGUI.BeginChangeCheck(); + + EditorGUILayout.PropertyField(m_TextAlignmentProp, k_AlignmentLabel); + + // WRAPPING RATIOS shown if Justified mode is selected. + if (((_HorizontalAlignmentOptions)m_TextAlignmentProp.intValue & _HorizontalAlignmentOptions.Justified) == _HorizontalAlignmentOptions.Justified || ((_HorizontalAlignmentOptions)m_TextAlignmentProp.intValue & _HorizontalAlignmentOptions.Flush) == _HorizontalAlignmentOptions.Flush) + DrawPropertySlider(k_WrapMixLabel, m_WordWrappingRatiosProp); + + if (EditorGUI.EndChangeCheck()) + m_HavePropertiesChanged = true; + + EditorGUILayout.Space(); + } + + void DrawWrappingOverflow() + { + // TEXT WRAPPING + EditorGUI.BeginChangeCheck(); + int wrapSelection = EditorGUILayout.Popup(k_WrappingLabel, m_EnableWordWrappingProp.boolValue ? 1 : 0, k_WrappingOptions); + if (EditorGUI.EndChangeCheck()) + { + m_EnableWordWrappingProp.boolValue = wrapSelection == 1; + m_HavePropertiesChanged = true; + m_TextComponent.m_isInputParsingRequired = true; + } + + // TEXT OVERFLOW + EditorGUI.BeginChangeCheck(); + + // Cache Reference to Linked Text Component + TMP_Text oldLinkedComponent = m_LinkedTextComponentProp.objectReferenceValue as TMP_Text; + + if ((TextOverflowModes)m_TextOverflowModeProp.enumValueIndex == TextOverflowModes.Linked) + { + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.PropertyField(m_TextOverflowModeProp, k_OverflowLabel); + + EditorGUILayout.PropertyField(m_LinkedTextComponentProp, GUIContent.none); + + EditorGUILayout.EndHorizontal(); + + if (GUI.changed) + { + TMP_Text linkedComponent = m_LinkedTextComponentProp.objectReferenceValue as TMP_Text; + + if (linkedComponent) + m_TextComponent.linkedTextComponent = linkedComponent; + + } + } + else if ((TextOverflowModes)m_TextOverflowModeProp.enumValueIndex == TextOverflowModes.Page) + { + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.PropertyField(m_TextOverflowModeProp, k_OverflowLabel); + EditorGUILayout.PropertyField(m_PageToDisplayProp, GUIContent.none); + EditorGUILayout.EndHorizontal(); + + if (oldLinkedComponent) + m_TextComponent.linkedTextComponent = null; + } + else + { + EditorGUILayout.PropertyField(m_TextOverflowModeProp, k_OverflowLabel); + + if (oldLinkedComponent) + m_TextComponent.linkedTextComponent = null; + } + + if (EditorGUI.EndChangeCheck()) + { + m_HavePropertiesChanged = true; + m_TextComponent.m_isInputParsingRequired = true; + } + + EditorGUILayout.Space(); + } + + protected abstract void DrawExtraSettings(); + + protected void DrawMargins() + { + EditorGUI.BeginChangeCheck(); + DrawMarginProperty(m_MarginProp, k_MarginsLabel); + if (EditorGUI.EndChangeCheck()) + { + m_HavePropertiesChanged = true; + } + + EditorGUILayout.Space(); + } + + protected void DrawGeometrySorting() + { + EditorGUI.BeginChangeCheck(); + + EditorGUILayout.PropertyField(m_GeometrySortingOrderProp, k_GeometrySortingLabel); + + if (EditorGUI.EndChangeCheck()) + m_HavePropertiesChanged = true; + + EditorGUILayout.Space(); + } + + protected void DrawRichText() + { + EditorGUI.BeginChangeCheck(); + + EditorGUILayout.PropertyField(m_IsRichTextProp, k_RichTextLabel); + if (EditorGUI.EndChangeCheck()) + m_HavePropertiesChanged = true; + } + + protected void DrawParsing() + { + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(m_EnableEscapeCharacterParsingProp, k_EscapeCharactersLabel); + EditorGUILayout.PropertyField(m_UseMaxVisibleDescenderProp, k_VisibleDescenderLabel); + + EditorGUILayout.Space(); + + EditorGUILayout.PropertyField(m_SpriteAssetProp, k_SpriteAssetLabel, true); + + if (EditorGUI.EndChangeCheck()) + m_HavePropertiesChanged = true; + + EditorGUILayout.Space(); + } + + protected void DrawTextureMapping() + { + // TEXTURE MAPPING OPTIONS + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(m_HorizontalMappingProp, k_HorizontalMappingLabel); + EditorGUILayout.PropertyField(m_VerticalMappingProp, k_VerticalMappingLabel); + if (EditorGUI.EndChangeCheck()) + { + m_HavePropertiesChanged = true; + } + + // UV OPTIONS + if (m_HorizontalMappingProp.enumValueIndex > 0) + { + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(m_UvLineOffsetProp, k_LineOffsetLabel, GUILayout.MinWidth(70f)); + if (EditorGUI.EndChangeCheck()) + { + m_HavePropertiesChanged = true; + } + } + + EditorGUILayout.Space(); + } + + protected void DrawKerning() + { + // KERNING + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(m_EnableKerningProp, k_KerningLabel); + if (EditorGUI.EndChangeCheck()) + { + m_HavePropertiesChanged = true; + } + } + + protected void DrawPadding() + { + // EXTRA PADDING + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(m_EnableExtraPaddingProp, k_PaddingLabel); + if (EditorGUI.EndChangeCheck()) + { + m_HavePropertiesChanged = true; + m_CheckPaddingRequiredProp.boolValue = true; + } + } + + /// + /// Method to retrieve the material presets that match the currently selected font asset. + /// + protected GUIContent[] GetMaterialPresets() + { + TMP_FontAsset fontAsset = m_FontAssetProp.objectReferenceValue as TMP_FontAsset; + if (fontAsset == null) return null; + + m_MaterialPresets = TMP_EditorUtility.FindMaterialReferences(fontAsset); + m_MaterialPresetNames = new GUIContent[m_MaterialPresets.Length]; + + for (int i = 0; i < m_MaterialPresetNames.Length; i++) + { + m_MaterialPresetNames[i] = new GUIContent(m_MaterialPresets[i].name); + + if (m_TargetMaterial.GetInstanceID() == m_MaterialPresets[i].GetInstanceID()) + m_MaterialPresetSelectionIndex = i; + } + + m_IsPresetListDirty = false; + + return m_MaterialPresetNames; + } + + // DRAW MARGIN PROPERTY + protected void DrawMarginProperty(SerializedProperty property, GUIContent label) + { + Rect rect = EditorGUILayout.GetControlRect(false, 2 * 18); + + EditorGUI.BeginProperty(rect, label, property); + + Rect pos0 = new Rect(rect.x + 15, rect.y + 2, rect.width - 15, 18); + + float width = rect.width + 3; + pos0.width = EditorGUIUtility.labelWidth; + GUI.Label(pos0, label); + + var vec = property.vector4Value; + + float widthB = width - EditorGUIUtility.labelWidth; + float fieldWidth = widthB / 4; + pos0.width = Mathf.Max(fieldWidth - 5, 45f); + + // Labels + pos0.x = EditorGUIUtility.labelWidth + 15; + GUI.Label(pos0, k_LeftLabel); + + pos0.x += fieldWidth; + GUI.Label(pos0, k_TopLabel); + + pos0.x += fieldWidth; + GUI.Label(pos0, k_RightLabel); + + pos0.x += fieldWidth; + GUI.Label(pos0, k_BottomLabel); + + pos0.y += 18; + + pos0.x = EditorGUIUtility.labelWidth; + vec.x = EditorGUI.FloatField(pos0, GUIContent.none, vec.x); + + pos0.x += fieldWidth; + vec.y = EditorGUI.FloatField(pos0, GUIContent.none, vec.y); + + pos0.x += fieldWidth; + vec.z = EditorGUI.FloatField(pos0, GUIContent.none, vec.z); + + pos0.x += fieldWidth; + vec.w = EditorGUI.FloatField(pos0, GUIContent.none, vec.w); + + property.vector4Value = vec; + + EditorGUI.EndProperty(); + } + + protected void DrawPropertySlider(GUIContent label, SerializedProperty property) + { + Rect rect = EditorGUILayout.GetControlRect(false, 17); + + GUIContent content = label ?? GUIContent.none; + EditorGUI.Slider(new Rect(rect.x, rect.y, rect.width, rect.height), property, 0.0f, 1.0f, content); + } + + protected abstract bool IsMixSelectionTypes(); + + // Special Handling of Undo / Redo Events. + protected abstract void OnUndoRedo(); + + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_BaseEditorPanel.cs.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_BaseEditorPanel.cs.meta new file mode 100644 index 0000000..d4a89aa --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_BaseEditorPanel.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 91950f78729ab144aa36e94690b28fad +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_BaseShaderGUI.cs b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_BaseShaderGUI.cs new file mode 100644 index 0000000..c27e651 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_BaseShaderGUI.cs @@ -0,0 +1,534 @@ +using UnityEngine; +using UnityEditor; + +namespace TMPro.EditorUtilities +{ + /// Base class for TextMesh Pro shader GUIs. + public abstract class TMP_BaseShaderGUI : ShaderGUI + { + /// Representation of a #pragma shader_feature. + /// It is assumed that the first feature option is for no keyword (underscores). + protected class ShaderFeature + { + public string undoLabel; + + public GUIContent label; + + /// The keyword labels, for display. Include the no-keyword as the first option. + public GUIContent[] keywordLabels; + + /// The shader keywords. Exclude the no-keyword option. + public string[] keywords; + + int m_State; + + public bool Active + { + get { return m_State >= 0; } + } + + public int State + { + get { return m_State; } + } + + public void ReadState(Material material) + { + for (int i = 0; i < keywords.Length; i++) + { + if (material.IsKeywordEnabled(keywords[i])) + { + m_State = i; + return; + } + } + + m_State = -1; + } + + public void SetActive(bool active, Material material) + { + m_State = active ? 0 : -1; + SetStateKeywords(material); + } + + public void DoPopup(MaterialEditor editor, Material material) + { + EditorGUI.BeginChangeCheck(); + int selection = EditorGUILayout.Popup(label, m_State + 1, keywordLabels); + if (EditorGUI.EndChangeCheck()) + { + m_State = selection - 1; + editor.RegisterPropertyChangeUndo(undoLabel); + SetStateKeywords(material); + } + } + + void SetStateKeywords(Material material) + { + for (int i = 0; i < keywords.Length; i++) + { + if (i == m_State) + { + material.EnableKeyword(keywords[i]); + } + else + { + material.DisableKeyword(keywords[i]); + } + } + } + } + + static GUIContent s_TempLabel = new GUIContent(); + + protected static bool s_DebugExtended; + + static int s_UndoRedoCount, s_LastSeenUndoRedoCount; + + static float[][] s_TempFloats = + { + null, new float[1], new float[2], new float[3], new float[4] + }; + + protected static GUIContent[] s_XywhVectorLabels = + { + new GUIContent("X"), + new GUIContent("Y"), + new GUIContent("W", "Width"), + new GUIContent("H", "Height") + }; + + protected static GUIContent[] s_LbrtVectorLabels = + { + new GUIContent("L", "Left"), + new GUIContent("B", "Bottom"), + new GUIContent("R", "Right"), + new GUIContent("T", "Top") + }; + + static TMP_BaseShaderGUI() + { + // Keep track of how many undo/redo events happened. + Undo.undoRedoPerformed += () => s_UndoRedoCount += 1; + } + + bool m_IsNewGUI = true; + + float m_DragAndDropMinY; + + protected MaterialEditor m_Editor; + + protected Material m_Material; + + protected MaterialProperty[] m_Properties; + + void PrepareGUI() + { + m_IsNewGUI = false; + ShaderUtilities.GetShaderPropertyIDs(); + + // New GUI just got constructed. This happens in response to a selection, + // but also after undo/redo events. + if (s_LastSeenUndoRedoCount != s_UndoRedoCount) + { + // There's been at least one undo/redo since the last time this GUI got constructed. + // Maybe the undo/redo was for this material? Assume that is was. + TMPro_EventManager.ON_MATERIAL_PROPERTY_CHANGED(true, m_Material as Material); + } + + s_LastSeenUndoRedoCount = s_UndoRedoCount; + } + + public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] properties) + { + m_Editor = materialEditor; + m_Material = materialEditor.target as Material; + this.m_Properties = properties; + + if (m_IsNewGUI) + { + PrepareGUI(); + } + + DoDragAndDropBegin(); + EditorGUI.BeginChangeCheck(); + DoGUI(); + if (EditorGUI.EndChangeCheck()) + { + TMPro_EventManager.ON_MATERIAL_PROPERTY_CHANGED(true, m_Material); + } + + DoDragAndDropEnd(); + } + + /// Override this method to create the specific shader GUI. + protected abstract void DoGUI(); + + static string[] s_PanelStateLabel = new string[] { "\t- Click to collapse -", "\t- Click to expand -" }; + + protected bool BeginPanel(string panel, bool expanded) + { + EditorGUILayout.BeginVertical(EditorStyles.helpBox); + + Rect r = EditorGUI.IndentedRect(GUILayoutUtility.GetRect(20, 18)); + r.x += 20; + r.width += 6; + + bool enabled = GUI.enabled; + GUI.enabled = true; + expanded = TMP_EditorUtility.EditorToggle(r, expanded, new GUIContent(panel), TMP_UIStyleManager.panelTitle); + r.width -= 30; + EditorGUI.LabelField(r, new GUIContent(expanded ? s_PanelStateLabel[0] : s_PanelStateLabel[1]), TMP_UIStyleManager.rightLabel); + GUI.enabled = enabled; + + EditorGUI.indentLevel += 1; + EditorGUI.BeginDisabledGroup(false); + + return expanded; + } + + protected bool BeginPanel(string panel, ShaderFeature feature, bool expanded, bool readState = true) + { + if (readState) + { + feature.ReadState(m_Material); + } + + EditorGUI.BeginChangeCheck(); + + EditorGUILayout.BeginVertical(EditorStyles.helpBox); + GUILayout.BeginHorizontal(); + + Rect r = EditorGUI.IndentedRect(GUILayoutUtility.GetRect(20, 20, GUILayout.Width(20f))); + bool active = EditorGUI.Toggle(r, feature.Active); + + if (EditorGUI.EndChangeCheck()) + { + m_Editor.RegisterPropertyChangeUndo(feature.undoLabel); + feature.SetActive(active, m_Material); + } + + r = EditorGUI.IndentedRect(GUILayoutUtility.GetRect(20, 18)); + r.width += 6; + + bool enabled = GUI.enabled; + GUI.enabled = true; + expanded = TMP_EditorUtility.EditorToggle(r, expanded, new GUIContent(panel), TMP_UIStyleManager.panelTitle); + r.width -= 10; + EditorGUI.LabelField(r, new GUIContent(expanded ? s_PanelStateLabel[0] : s_PanelStateLabel[1]), TMP_UIStyleManager.rightLabel); + GUI.enabled = enabled; + + GUILayout.EndHorizontal(); + + EditorGUI.indentLevel += 1; + EditorGUI.BeginDisabledGroup(!active); + + return expanded; + } + + public void EndPanel() + { + EditorGUI.EndDisabledGroup(); + EditorGUI.indentLevel -= 1; + EditorGUILayout.EndVertical(); + } + + MaterialProperty BeginProperty(string name) + { + MaterialProperty property = FindProperty(name, m_Properties); + EditorGUI.BeginChangeCheck(); + EditorGUI.showMixedValue = property.hasMixedValue; + m_Editor.BeginAnimatedCheck(Rect.zero, property); + + return property; + } + + bool EndProperty() + { + m_Editor.EndAnimatedCheck(); + EditorGUI.showMixedValue = false; + return EditorGUI.EndChangeCheck(); + } + + protected void DoPopup(string name, string label, GUIContent[] options) + { + MaterialProperty property = BeginProperty(name); + s_TempLabel.text = label; + int index = EditorGUILayout.Popup(s_TempLabel, (int)property.floatValue, options); + if (EndProperty()) + { + property.floatValue = index; + } + } + + protected void DoCubeMap(string name, string label) + { + DoTexture(name, label, typeof(Cubemap)); + } + + protected void DoTexture2D(string name, string label, bool withTilingOffset = false, string[] speedNames = null) + { + DoTexture(name, label, typeof(Texture2D), withTilingOffset, speedNames); + } + + void DoTexture(string name, string label, System.Type type, bool withTilingOffset = false, string[] speedNames = null) + { + MaterialProperty property = BeginProperty(name); + Rect rect = EditorGUILayout.GetControlRect(true, 60f); + float totalWidth = rect.width; + rect.width = EditorGUIUtility.labelWidth + 60f; + s_TempLabel.text = label; + Object tex = EditorGUI.ObjectField(rect, s_TempLabel, property.textureValue, type, false); + + if (EndProperty()) + { + property.textureValue = tex as Texture; + } + + rect.x += rect.width + 4f; + rect.width = totalWidth - rect.width - 4f; + rect.height = EditorGUIUtility.singleLineHeight; + + if (withTilingOffset) + { + DoTilingOffset(rect, property); + rect.y += (rect.height + 2f) * 2f; + } + + if (speedNames != null) + { + DoUVSpeed(rect, speedNames); + } + } + + void DoTilingOffset(Rect rect, MaterialProperty property) + { + float labelWidth = EditorGUIUtility.labelWidth; + int indentLevel = EditorGUI.indentLevel; + EditorGUI.indentLevel = 0; + EditorGUIUtility.labelWidth = Mathf.Min(40f, rect.width * 0.20f); + + Vector4 vector = property.textureScaleAndOffset; + + bool changed = false; + float[] values = s_TempFloats[2]; + + s_TempLabel.text = "Tiling"; + Rect vectorRect = EditorGUI.PrefixLabel(rect, s_TempLabel); + values[0] = vector.x; + values[1] = vector.y; + EditorGUI.BeginChangeCheck(); + EditorGUI.MultiFloatField(vectorRect, s_XywhVectorLabels, values); + if (EndProperty()) + { + vector.x = values[0]; + vector.y = values[1]; + changed = true; + } + + rect.y += rect.height + 2f; + s_TempLabel.text = "Offset"; + vectorRect = EditorGUI.PrefixLabel(rect, s_TempLabel); + values[0] = vector.z; + values[1] = vector.w; + EditorGUI.BeginChangeCheck(); + EditorGUI.MultiFloatField(vectorRect, s_XywhVectorLabels, values); + if (EndProperty()) + { + vector.z = values[0]; + vector.w = values[1]; + changed = true; + } + + if (changed) + { + property.textureScaleAndOffset = vector; + } + + EditorGUIUtility.labelWidth = labelWidth; + EditorGUI.indentLevel = indentLevel; + } + + protected void DoUVSpeed(Rect rect, string[] names) + { + float labelWidth = EditorGUIUtility.labelWidth; + int indentLevel = EditorGUI.indentLevel; + EditorGUI.indentLevel = 0; + EditorGUIUtility.labelWidth = Mathf.Min(40f, rect.width * 0.20f); + + s_TempLabel.text = "Speed"; + rect = EditorGUI.PrefixLabel(rect, s_TempLabel); + + EditorGUIUtility.labelWidth = 13f; + rect.width = rect.width * 0.5f - 1f; + DoFloat(rect, names[0], "X"); + rect.x += rect.width + 2f; + DoFloat(rect, names[1], "Y"); + EditorGUIUtility.labelWidth = labelWidth; + EditorGUI.indentLevel = indentLevel; + } + + protected void DoToggle(string name, string label) + { + MaterialProperty property = BeginProperty(name); + s_TempLabel.text = label; + bool value = EditorGUILayout.Toggle(s_TempLabel, property.floatValue == 1f); + if (EndProperty()) + { + property.floatValue = value ? 1f : 0f; + } + } + + protected void DoFloat(string name, string label) + { + MaterialProperty property = BeginProperty(name); + Rect rect = EditorGUILayout.GetControlRect(); + rect.width = EditorGUIUtility.labelWidth + 55f; + s_TempLabel.text = label; + float value = EditorGUI.FloatField(rect, s_TempLabel, property.floatValue); + if (EndProperty()) + { + property.floatValue = value; + } + } + + protected void DoColor(string name, string label) + { + MaterialProperty property = BeginProperty(name); + s_TempLabel.text = label; + Color value = EditorGUI.ColorField(EditorGUILayout.GetControlRect(), s_TempLabel, property.colorValue); + if (EndProperty()) + { + property.colorValue = value; + } + } + + void DoFloat(Rect rect, string name, string label) + { + MaterialProperty property = BeginProperty(name); + s_TempLabel.text = label; + float value = EditorGUI.FloatField(rect, s_TempLabel, property.floatValue); + if (EndProperty()) + { + property.floatValue = value; + } + } + + protected void DoSlider(string name, string label) + { + MaterialProperty property = BeginProperty(name); + Vector2 range = property.rangeLimits; + s_TempLabel.text = label; + float value = EditorGUI.Slider( + EditorGUILayout.GetControlRect(), s_TempLabel, property.floatValue, range.x, range.y + ); + if (EndProperty()) + { + property.floatValue = value; + } + } + + protected void DoVector3(string name, string label) + { + MaterialProperty property = BeginProperty(name); + s_TempLabel.text = label; + Vector4 value = EditorGUILayout.Vector3Field(s_TempLabel, property.vectorValue); + if (EndProperty()) + { + property.vectorValue = value; + } + } + + protected void DoVector(string name, string label, GUIContent[] subLabels) + { + MaterialProperty property = BeginProperty(name); + Rect rect = EditorGUILayout.GetControlRect(); + s_TempLabel.text = label; + rect = EditorGUI.PrefixLabel(rect, s_TempLabel); + Vector4 vector = property.vectorValue; + + float[] values = s_TempFloats[subLabels.Length]; + for (int i = 0; i < subLabels.Length; i++) + { + values[i] = vector[i]; + } + + EditorGUI.MultiFloatField(rect, subLabels, values); + if (EndProperty()) + { + for (int i = 0; i < subLabels.Length; i++) + { + vector[i] = values[i]; + } + + property.vectorValue = vector; + } + } + + void DoDragAndDropBegin() + { + m_DragAndDropMinY = GUILayoutUtility.GetRect(0f, 0f, GUILayout.ExpandWidth(true)).y; + } + + void DoDragAndDropEnd() + { + Rect rect = GUILayoutUtility.GetRect(0f, 0f, GUILayout.ExpandWidth(true)); + Event evt = Event.current; + if (evt.type == EventType.DragUpdated) + { + DragAndDrop.visualMode = DragAndDropVisualMode.Generic; + evt.Use(); + } + else if ( + evt.type == EventType.DragPerform && + Rect.MinMaxRect(rect.xMin, m_DragAndDropMinY, rect.xMax, rect.yMax).Contains(evt.mousePosition) + ) + { + DragAndDrop.AcceptDrag(); + evt.Use(); + Material droppedMaterial = DragAndDrop.objectReferences[0] as Material; + if (droppedMaterial && droppedMaterial != m_Material) + { + PerformDrop(droppedMaterial); + } + } + } + + void PerformDrop(Material droppedMaterial) + { + Texture droppedTex = droppedMaterial.GetTexture(ShaderUtilities.ID_MainTex); + if (!droppedTex) + { + return; + } + + Texture currentTex = m_Material.GetTexture(ShaderUtilities.ID_MainTex); + TMP_FontAsset requiredFontAsset = null; + if (droppedTex != currentTex) + { + requiredFontAsset = TMP_EditorUtility.FindMatchingFontAsset(droppedMaterial); + if (!requiredFontAsset) + { + return; + } + } + + foreach (GameObject o in Selection.gameObjects) + { + if (requiredFontAsset) + { + TMP_Text textComponent = o.GetComponent(); + if (textComponent) + { + Undo.RecordObject(textComponent, "Font Asset Change"); + textComponent.font = requiredFontAsset; + } + } + + TMPro_EventManager.ON_DRAG_AND_DROP_MATERIAL_CHANGED(o, m_Material, droppedMaterial); + EditorUtility.SetDirty(o); + } + } + } +} diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_BaseShaderGUI.cs.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_BaseShaderGUI.cs.meta new file mode 100644 index 0000000..0f0cae4 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_BaseShaderGUI.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 438efd46088d408d8a53f707fa68d976 +timeCreated: 1469844810 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_BitmapShaderGUI.cs b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_BitmapShaderGUI.cs new file mode 100644 index 0000000..2380704 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_BitmapShaderGUI.cs @@ -0,0 +1,85 @@ +using UnityEngine; +using UnityEditor; + +namespace TMPro.EditorUtilities +{ + public class TMP_BitmapShaderGUI : TMP_BaseShaderGUI + { + static bool s_Face = true; + + protected override void DoGUI() + { + s_Face = BeginPanel("Face", s_Face); + if (s_Face) + { + DoFacePanel(); + } + + EndPanel(); + + s_DebugExtended = BeginPanel("Debug Settings", s_DebugExtended); + if (s_DebugExtended) + { + DoDebugPanel(); + } + + EndPanel(); + } + + void DoFacePanel() + { + EditorGUI.indentLevel += 1; + if (m_Material.HasProperty(ShaderUtilities.ID_FaceTex)) + { + DoColor("_FaceColor", "Color"); + DoTexture2D("_FaceTex", "Texture", true); + } + else + { + DoColor("_Color", "Color"); + DoSlider("_DiffusePower", "Diffuse Power"); + } + + EditorGUI.indentLevel -= 1; + + EditorGUILayout.Space(); + } + + void DoDebugPanel() + { + EditorGUI.indentLevel += 1; + DoTexture2D("_MainTex", "Font Atlas"); + if (m_Material.HasProperty(ShaderUtilities.ID_VertexOffsetX)) + { + if (m_Material.HasProperty(ShaderUtilities.ID_Padding)) + { + EditorGUILayout.Space(); + DoFloat("_Padding", "Padding"); + } + + EditorGUILayout.Space(); + DoFloat("_VertexOffsetX", "Offset X"); + DoFloat("_VertexOffsetY", "Offset Y"); + } + + if (m_Material.HasProperty(ShaderUtilities.ID_MaskSoftnessX)) + { + EditorGUILayout.Space(); + DoFloat("_MaskSoftnessX", "Softness X"); + DoFloat("_MaskSoftnessY", "Softness Y"); + DoVector("_ClipRect", "Clip Rect", s_LbrtVectorLabels); + } + + if (m_Material.HasProperty(ShaderUtilities.ID_StencilID)) + { + EditorGUILayout.Space(); + DoFloat("_Stencil", "Stencil ID"); + DoFloat("_StencilComp", "Stencil Comp"); + } + + EditorGUI.indentLevel -= 1; + + EditorGUILayout.Space(); + } + } +} diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_BitmapShaderGUI.cs.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_BitmapShaderGUI.cs.meta new file mode 100644 index 0000000..1af014d --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_BitmapShaderGUI.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 806de5a9211448c8b65c8435ebb48dd4 +timeCreated: 1469998850 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_CharacterPropertyDrawer.cs b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_CharacterPropertyDrawer.cs new file mode 100644 index 0000000..8abf4a5 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_CharacterPropertyDrawer.cs @@ -0,0 +1,237 @@ +using UnityEngine; +using UnityEngine.TextCore; +using UnityEngine.TextCore.LowLevel; +using UnityEditor; +using System.Collections; + + +namespace TMPro.EditorUtilities +{ + [CustomPropertyDrawer(typeof(TMP_Character))] + public class TMP_CharacterPropertyDrawer : PropertyDrawer + { + //[SerializeField] + //static Material s_InternalSDFMaterial; + + //[SerializeField] + //static Material s_InternalBitmapMaterial; + + int m_GlyphSelectedForEditing = -1; + + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + SerializedProperty prop_Unicode = property.FindPropertyRelative("m_Unicode"); + SerializedProperty prop_GlyphIndex = property.FindPropertyRelative("m_GlyphIndex"); + SerializedProperty prop_Scale = property.FindPropertyRelative("m_Scale"); + + + GUIStyle style = new GUIStyle(EditorStyles.label); + style.richText = true; + + EditorGUIUtility.labelWidth = 40f; + EditorGUIUtility.fieldWidth = 50; + + Rect rect = new Rect(position.x + 50, position.y, position.width, 49); + + // Display non-editable fields + if (GUI.enabled == false) + { + int unicode = prop_Unicode.intValue; + EditorGUI.LabelField(new Rect(rect.x, rect.y, 120f, 18), new GUIContent("Unicode: 0x" + unicode.ToString("X") + ""), style); + EditorGUI.LabelField(new Rect(rect.x + 115, rect.y, 120f, 18), unicode <= 0xFFFF ? new GUIContent("UTF16: \\u" + unicode.ToString("X4") + "") : new GUIContent("UTF32: \\U" + unicode.ToString("X8") + ""), style); + EditorGUI.LabelField(new Rect(rect.x, rect.y + 18, 120, 18), new GUIContent("Glyph ID: " + prop_GlyphIndex.intValue + ""), style); + EditorGUI.LabelField(new Rect(rect.x, rect.y + 36, 80, 18), new GUIContent("Scale: " + prop_Scale.floatValue + ""), style); + + // Draw Glyph (if exists) + DrawGlyph(position, property); + } + else // Display editable fields + { + EditorGUIUtility.labelWidth = 55f; + GUI.SetNextControlName("Unicode Input"); + EditorGUI.BeginChangeCheck(); + string unicode = EditorGUI.TextField(new Rect(rect.x, rect.y, 120, 18), "Unicode:", prop_Unicode.intValue.ToString("X")); + + if (GUI.GetNameOfFocusedControl() == "Unicode Input") + { + //Filter out unwanted characters. + char chr = Event.current.character; + if ((chr < '0' || chr > '9') && (chr < 'a' || chr > 'f') && (chr < 'A' || chr > 'F')) + { + Event.current.character = '\0'; + } + } + + if (EditorGUI.EndChangeCheck()) + { + // Update Unicode value + prop_Unicode.intValue = TMP_TextUtilities.StringHexToInt(unicode); + } + + // Cache current glyph index in case it needs to be restored if the new glyph index is invalid. + int currentGlyphIndex = prop_GlyphIndex.intValue; + + EditorGUIUtility.labelWidth = 59f; + EditorGUI.BeginChangeCheck(); + EditorGUI.DelayedIntField(new Rect(rect.x, rect.y + 18, 100, 18), prop_GlyphIndex, new GUIContent("Glyph ID:")); + if (EditorGUI.EndChangeCheck()) + { + // Get a reference to the font asset + TMP_FontAsset fontAsset = property.serializedObject.targetObject as TMP_FontAsset; + + // Make sure new glyph index is valid. + int elementIndex = fontAsset.glyphTable.FindIndex(item => item.index == prop_GlyphIndex.intValue); + + if (elementIndex == -1) + prop_GlyphIndex.intValue = currentGlyphIndex; + else + fontAsset.m_IsFontAssetLookupTablesDirty = true; + } + + int glyphIndex = prop_GlyphIndex.intValue; + + // Reset glyph selection if new character has been selected. + if (GUI.enabled && m_GlyphSelectedForEditing != glyphIndex) + m_GlyphSelectedForEditing = -1; + + // Display button to edit the glyph data. + if (GUI.Button(new Rect(rect.x + 120, rect.y + 18, 75, 18), new GUIContent("Edit Glyph"))) + { + if (m_GlyphSelectedForEditing == -1) + m_GlyphSelectedForEditing = glyphIndex; + else + m_GlyphSelectedForEditing = -1; + + // Button clicks should not result in potential change. + GUI.changed = false; + } + + // Show the glyph property drawer if selected + if (glyphIndex == m_GlyphSelectedForEditing && GUI.enabled) + { + // Get a reference to the font asset + TMP_FontAsset fontAsset = property.serializedObject.targetObject as TMP_FontAsset; + + if (fontAsset != null) + { + // Get the index of the glyph in the font asset glyph table. + int elementIndex = fontAsset.glyphTable.FindIndex(item => item.index == glyphIndex); + + if (elementIndex != -1) + { + SerializedProperty prop_GlyphTable = property.serializedObject.FindProperty("m_GlyphTable"); + SerializedProperty prop_Glyph = prop_GlyphTable.GetArrayElementAtIndex(elementIndex); + + SerializedProperty prop_GlyphMetrics = prop_Glyph.FindPropertyRelative("m_Metrics"); + SerializedProperty prop_GlyphRect = prop_Glyph.FindPropertyRelative("m_GlyphRect"); + + Rect newRect = EditorGUILayout.GetControlRect(false, 115); + EditorGUI.DrawRect(new Rect(newRect.x + 52, newRect.y - 20, newRect.width - 52, newRect.height - 5), new Color(0.1f, 0.1f, 0.1f, 0.45f)); + EditorGUI.DrawRect(new Rect(newRect.x + 53, newRect.y - 19, newRect.width - 54, newRect.height - 7), new Color(0.3f, 0.3f, 0.3f, 0.8f)); + + // Display GlyphRect + newRect.x += 55; + newRect.y -= 18; + newRect.width += 5; + EditorGUI.PropertyField(newRect, prop_GlyphRect); + + // Display GlyphMetrics + newRect.y += 45; + EditorGUI.PropertyField(newRect, prop_GlyphMetrics); + + rect.y += 120; + } + } + } + + EditorGUIUtility.labelWidth = 39f; + EditorGUI.PropertyField(new Rect(rect.x, rect.y + 36, 80, 18), prop_Scale, new GUIContent("Scale:")); + + // Draw Glyph (if exists) + DrawGlyph(position, property); + } + } + + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + return 58; + } + + void DrawGlyph(Rect position, SerializedProperty property) + { + // Get a reference to the atlas texture + TMP_FontAsset fontAsset = property.serializedObject.targetObject as TMP_FontAsset; + + if (fontAsset == null) + return; + + // Get a reference to the Glyph Table + SerializedProperty prop_GlyphTable = property.serializedObject.FindProperty("m_GlyphTable"); + int glyphIndex = property.FindPropertyRelative("m_GlyphIndex").intValue; + int elementIndex = fontAsset.glyphTable.FindIndex(item => item.index == glyphIndex); + + // Return if we can't find the glyph + if (elementIndex == -1) + return; + + SerializedProperty prop_Glyph = prop_GlyphTable.GetArrayElementAtIndex(elementIndex); + + // Get reference to atlas texture. + int atlasIndex = prop_Glyph.FindPropertyRelative("m_AtlasIndex").intValue; + Texture2D atlasTexture = fontAsset.atlasTextures.Length > atlasIndex ? fontAsset.atlasTextures[atlasIndex] : null; + + if (atlasTexture == null) + return; + + Material mat; + if (((GlyphRasterModes)fontAsset.atlasRenderMode & GlyphRasterModes.RASTER_MODE_BITMAP) == GlyphRasterModes.RASTER_MODE_BITMAP) + { + mat = TMP_FontAssetEditor.internalBitmapMaterial; + + if (mat == null) + return; + + mat.mainTexture = atlasTexture; + mat.SetColor("_Color", Color.white); + } + else + { + mat = TMP_FontAssetEditor.internalSDFMaterial; + + if (mat == null) + return; + + mat.mainTexture = atlasTexture; + mat.SetFloat(ShaderUtilities.ID_GradientScale, fontAsset.atlasPadding + 1); + } + + // Draw glyph + Rect glyphDrawPosition = new Rect(position.x, position.y, 48, 58); + + SerializedProperty prop_GlyphRect = prop_Glyph.FindPropertyRelative("m_GlyphRect"); + + int glyphOriginX = prop_GlyphRect.FindPropertyRelative("m_X").intValue; + int glyphOriginY = prop_GlyphRect.FindPropertyRelative("m_Y").intValue; + int glyphWidth = prop_GlyphRect.FindPropertyRelative("m_Width").intValue; + int glyphHeight = prop_GlyphRect.FindPropertyRelative("m_Height").intValue; + + float normalizedHeight = fontAsset.faceInfo.ascentLine - fontAsset.faceInfo.descentLine; + float scale = glyphDrawPosition.width / normalizedHeight; + + // Compute the normalized texture coordinates + Rect texCoords = new Rect((float)glyphOriginX / atlasTexture.width, (float)glyphOriginY / atlasTexture.height, (float)glyphWidth / atlasTexture.width, (float)glyphHeight / atlasTexture.height); + + if (Event.current.type == EventType.Repaint) + { + glyphDrawPosition.x += (glyphDrawPosition.width - glyphWidth * scale) / 2; + glyphDrawPosition.y += (glyphDrawPosition.height - glyphHeight * scale) / 2; + glyphDrawPosition.width = glyphWidth * scale; + glyphDrawPosition.height = glyphHeight * scale; + + // Could switch to using the default material of the font asset which would require passing scale to the shader. + Graphics.DrawTexture(glyphDrawPosition, atlasTexture, texCoords, 0, 0, 0, 0, new Color(1f, 1f, 1f), mat); + } + } + + } +} diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_CharacterPropertyDrawer.cs.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_CharacterPropertyDrawer.cs.meta new file mode 100644 index 0000000..24f23b9 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_CharacterPropertyDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 01ada73c4792aba4c937ff5d92cce866 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_ColorGradientAssetMenu.cs b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_ColorGradientAssetMenu.cs new file mode 100644 index 0000000..80272ac --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_ColorGradientAssetMenu.cs @@ -0,0 +1,51 @@ +using UnityEditor; +using UnityEngine; +using System.IO; +using System.Collections; + + + +namespace TMPro.EditorUtilities +{ + + public static class TMP_ColorGradientAssetMenu + { + [MenuItem("Assets/Create/TextMeshPro/Color Gradient", false, 115)] + public static void CreateColorGradient(MenuCommand context) + { + string filePath; + + if (Selection.assetGUIDs.Length == 0) + filePath = "Assets/New TMP Color Gradient.asset"; + else + filePath = AssetDatabase.GUIDToAssetPath(Selection.assetGUIDs[0]); + + if (Directory.Exists(filePath)) + { + filePath += "/New TMP Color Gradient.asset"; + } + else + { + filePath = Path.GetDirectoryName(filePath) + "/New TMP Color Gradient.asset"; + } + + filePath = AssetDatabase.GenerateUniqueAssetPath(filePath); + + // Create new Color Gradient Asset. + TMP_ColorGradient colorGradient = ScriptableObject.CreateInstance(); + + // Create Asset + AssetDatabase.CreateAsset(colorGradient, filePath); + + //EditorUtility.SetDirty(colorGradient); + + AssetDatabase.SaveAssets(); + + AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(colorGradient)); + + EditorUtility.FocusProjectWindow(); + Selection.activeObject = colorGradient; + + } + } +} diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_ColorGradientAssetMenu.cs.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_ColorGradientAssetMenu.cs.meta new file mode 100644 index 0000000..35535ba --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_ColorGradientAssetMenu.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: d9647b571c5e44729b71d756b3d55317 +timeCreated: 1468187791 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_ColorGradientEditor.cs b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_ColorGradientEditor.cs new file mode 100644 index 0000000..a262d51 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_ColorGradientEditor.cs @@ -0,0 +1,146 @@ +using UnityEngine; +using UnityEditor; +using System.Collections; + + +namespace TMPro.EditorUtilities +{ + [CustomEditor(typeof(TMP_ColorGradient))] + public class TMP_ColorGradientEditor : Editor + { + SerializedProperty m_ColorMode; + SerializedProperty m_TopLeftColor; + SerializedProperty m_TopRightColor; + SerializedProperty m_BottomLeftColor; + SerializedProperty m_BottomRightColor; + + void OnEnable() + { + m_ColorMode = serializedObject.FindProperty("colorMode"); + m_TopLeftColor = serializedObject.FindProperty("topLeft"); + m_TopRightColor = serializedObject.FindProperty("topRight"); + m_BottomLeftColor = serializedObject.FindProperty("bottomLeft"); + m_BottomRightColor = serializedObject.FindProperty("bottomRight"); + } + + public override void OnInspectorGUI() + { + serializedObject.Update(); + + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(m_ColorMode, new GUIContent("Color Mode")); + if (EditorGUI.EndChangeCheck()) + { + switch ((ColorMode)m_ColorMode.enumValueIndex) + { + case ColorMode.Single: + m_TopRightColor.colorValue = m_TopLeftColor.colorValue; + m_BottomLeftColor.colorValue = m_TopLeftColor.colorValue; + m_BottomRightColor.colorValue = m_TopLeftColor.colorValue; + break; + case ColorMode.HorizontalGradient: + m_BottomLeftColor.colorValue = m_TopLeftColor.colorValue; + m_BottomRightColor.colorValue = m_TopRightColor.colorValue; + break; + case ColorMode.VerticalGradient: + m_TopRightColor.colorValue = m_TopLeftColor.colorValue; + m_BottomRightColor.colorValue = m_BottomLeftColor.colorValue; + break; + } + } + Rect rect; + switch ((ColorMode)m_ColorMode.enumValueIndex) + { + case ColorMode.Single: + EditorGUI.BeginChangeCheck(); + rect = EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight * (EditorGUIUtility.wideMode ? 1 : 2)); + EditorGUI.PrefixLabel(rect, new GUIContent("Colors")); + rect.x += EditorGUIUtility.labelWidth; + rect.width = (rect.width - EditorGUIUtility.labelWidth) / (EditorGUIUtility.wideMode ? 1f : 2f); + TMP_EditorUtility.DrawColorProperty(rect, m_TopLeftColor); + if (EditorGUI.EndChangeCheck()) + { + m_TopRightColor.colorValue = m_TopLeftColor.colorValue; + m_BottomLeftColor.colorValue = m_TopLeftColor.colorValue; + m_BottomRightColor.colorValue = m_TopLeftColor.colorValue; + } + break; + + case ColorMode.HorizontalGradient: + rect = EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight * (EditorGUIUtility.wideMode ? 1 : 2)); + EditorGUI.PrefixLabel(rect, new GUIContent("Colors")); + rect.x += EditorGUIUtility.labelWidth; + rect.width = (rect.width - EditorGUIUtility.labelWidth) / 2f; + + EditorGUI.BeginChangeCheck(); + TMP_EditorUtility.DrawColorProperty(rect, m_TopLeftColor); + if (EditorGUI.EndChangeCheck()) + { + m_BottomLeftColor.colorValue = m_TopLeftColor.colorValue; + } + + rect.x += rect.width; + + EditorGUI.BeginChangeCheck(); + TMP_EditorUtility.DrawColorProperty(rect, m_TopRightColor); + if (EditorGUI.EndChangeCheck()) + { + m_BottomRightColor.colorValue = m_TopRightColor.colorValue; + } + break; + + case ColorMode.VerticalGradient: + rect = EditorGUILayout.GetControlRect(false, EditorGUIUtility.singleLineHeight * (EditorGUIUtility.wideMode ? 1 : 2)); + EditorGUI.PrefixLabel(rect, new GUIContent("Colors")); + rect.x += EditorGUIUtility.labelWidth; + rect.width = (rect.width - EditorGUIUtility.labelWidth) / (EditorGUIUtility.wideMode ? 1f : 2f); + rect.height = EditorGUIUtility.singleLineHeight * (EditorGUIUtility.wideMode ? 1 : 2); + + EditorGUI.BeginChangeCheck(); + TMP_EditorUtility.DrawColorProperty(rect, m_TopLeftColor); + if (EditorGUI.EndChangeCheck()) + { + m_TopRightColor.colorValue = m_TopLeftColor.colorValue; + } + + rect = EditorGUILayout.GetControlRect(false, EditorGUIUtility.singleLineHeight * (EditorGUIUtility.wideMode ? 1 : 2)); + rect.x += EditorGUIUtility.labelWidth; + rect.width = (rect.width - EditorGUIUtility.labelWidth) / (EditorGUIUtility.wideMode ? 1f : 2f); + rect.height = EditorGUIUtility.singleLineHeight * (EditorGUIUtility.wideMode ? 1 : 2); + + EditorGUI.BeginChangeCheck(); + TMP_EditorUtility.DrawColorProperty(rect, m_BottomLeftColor); + if (EditorGUI.EndChangeCheck()) + { + m_BottomRightColor.colorValue = m_BottomLeftColor.colorValue; + } + break; + + case ColorMode.FourCornersGradient: + rect = EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight * (EditorGUIUtility.wideMode ? 1 : 2)); + EditorGUI.PrefixLabel(rect, new GUIContent("Colors")); + rect.x += EditorGUIUtility.labelWidth; + rect.width = (rect.width - EditorGUIUtility.labelWidth) / 2f; + rect.height = EditorGUIUtility.singleLineHeight * (EditorGUIUtility.wideMode ? 1 : 2); + + TMP_EditorUtility.DrawColorProperty(rect, m_TopLeftColor); + rect.x += rect.width; + TMP_EditorUtility.DrawColorProperty(rect, m_TopRightColor); + + rect = EditorGUILayout.GetControlRect(false, EditorGUIUtility.singleLineHeight * (EditorGUIUtility.wideMode ? 1 : 2)); + rect.x += EditorGUIUtility.labelWidth; + rect.width = (rect.width - EditorGUIUtility.labelWidth) / 2f; + rect.height = EditorGUIUtility.singleLineHeight * (EditorGUIUtility.wideMode ? 1 : 2); + + TMP_EditorUtility.DrawColorProperty(rect, m_BottomLeftColor); + rect.x += rect.width; + TMP_EditorUtility.DrawColorProperty(rect, m_BottomRightColor); + break; + } + + if (serializedObject.ApplyModifiedProperties()) + TMPro_EventManager.ON_COLOR_GRAIDENT_PROPERTY_CHANGED(target as TMP_ColorGradient); + + } + } +} diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_ColorGradientEditor.cs.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_ColorGradientEditor.cs.meta new file mode 100644 index 0000000..6d7849e --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_ColorGradientEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: fcc60c1d6bb544d9b712b652f418ff3a +timeCreated: 1468400050 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_DropdownEditor.cs b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_DropdownEditor.cs new file mode 100644 index 0000000..60406aa --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_DropdownEditor.cs @@ -0,0 +1,51 @@ +using UnityEngine; +using UnityEditor; +using UnityEditor.UI; +using UnityEngine.UI; + +namespace TMPro.EditorUtilities +{ + [CustomEditor(typeof(TMP_Dropdown), true)] + [CanEditMultipleObjects] + public class DropdownEditor : SelectableEditor + { + SerializedProperty m_Template; + SerializedProperty m_CaptionText; + SerializedProperty m_CaptionImage; + SerializedProperty m_ItemText; + SerializedProperty m_ItemImage; + SerializedProperty m_OnSelectionChanged; + SerializedProperty m_Value; + SerializedProperty m_Options; + + protected override void OnEnable() + { + base.OnEnable(); + m_Template = serializedObject.FindProperty("m_Template"); + m_CaptionText = serializedObject.FindProperty("m_CaptionText"); + m_CaptionImage = serializedObject.FindProperty("m_CaptionImage"); + m_ItemText = serializedObject.FindProperty("m_ItemText"); + m_ItemImage = serializedObject.FindProperty("m_ItemImage"); + m_OnSelectionChanged = serializedObject.FindProperty("m_OnValueChanged"); + m_Value = serializedObject.FindProperty("m_Value"); + m_Options = serializedObject.FindProperty("m_Options"); + } + + public override void OnInspectorGUI() + { + base.OnInspectorGUI(); + EditorGUILayout.Space(); + + serializedObject.Update(); + EditorGUILayout.PropertyField(m_Template); + EditorGUILayout.PropertyField(m_CaptionText); + EditorGUILayout.PropertyField(m_CaptionImage); + EditorGUILayout.PropertyField(m_ItemText); + EditorGUILayout.PropertyField(m_ItemImage); + EditorGUILayout.PropertyField(m_Value); + EditorGUILayout.PropertyField(m_Options); + EditorGUILayout.PropertyField(m_OnSelectionChanged); + serializedObject.ApplyModifiedProperties(); + } + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_DropdownEditor.cs.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_DropdownEditor.cs.meta new file mode 100644 index 0000000..fb4ac92 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_DropdownEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 6dbcf248c987476181a37f01a1814975 +timeCreated: 1446377461 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_EditorCoroutine.cs b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_EditorCoroutine.cs new file mode 100644 index 0000000..c40b271 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_EditorCoroutine.cs @@ -0,0 +1,96 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; + + +namespace TMPro.EditorUtilities +{ + /// + /// Simple implementation of coroutine working in the Unity Editor. + /// + public class TMP_EditorCoroutine + { + //private static Dictionary s_ActiveCoroutines; + + readonly IEnumerator coroutine; + + /// + /// Constructor + /// + /// + TMP_EditorCoroutine(IEnumerator routine) + { + this.coroutine = routine; + } + + + /// + /// Starts a new EditorCoroutine. + /// + /// Coroutine + /// new EditorCoroutine + public static TMP_EditorCoroutine StartCoroutine(IEnumerator routine) + { + TMP_EditorCoroutine coroutine = new TMP_EditorCoroutine(routine); + coroutine.Start(); + + // Add coroutine to tracking list + //if (s_ActiveCoroutines == null) + // s_ActiveCoroutines = new Dictionary(); + + // Add new instance of editor coroutine to dictionary. + //s_ActiveCoroutines.Add(coroutine.GetHashCode(), coroutine); + + return coroutine; + } + + + /// + /// Clear delegate list + /// + //public static void StopAllEditorCoroutines() + //{ + // EditorApplication.update = null; + //} + + + /// + /// Register callback for editor updates + /// + void Start() + { + EditorApplication.update += EditorUpdate; + } + + + /// + /// Unregister callback for editor updates. + /// + public void Stop() + { + if (EditorApplication.update != null) + EditorApplication.update -= EditorUpdate; + + //s_ActiveCoroutines.Remove(this.GetHashCode()); + } + + + /// + /// Delegate function called on editor updates. + /// + void EditorUpdate() + { + // Stop editor coroutine if it does not continue. + if (coroutine.MoveNext() == false) + Stop(); + + // Process the different types of EditorCoroutines. + if (coroutine.Current != null) + { + + } + } + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_EditorCoroutine.cs.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_EditorCoroutine.cs.meta new file mode 100644 index 0000000..d2d411a --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_EditorCoroutine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 27a0335dab59ec542aadd6636a5b4ebd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_EditorPanel.cs b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_EditorPanel.cs new file mode 100644 index 0000000..36eb2f8 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_EditorPanel.cs @@ -0,0 +1,153 @@ +using UnityEngine; +using UnityEditor; + +namespace TMPro.EditorUtilities +{ + + [CustomEditor(typeof(TextMeshPro), true), CanEditMultipleObjects] + public class TMP_EditorPanel : TMP_BaseEditorPanel + { + static readonly GUIContent k_SortingLayerLabel = new GUIContent("Sorting Layer", "Name of the Renderer's sorting layer."); + static readonly GUIContent k_OrderInLayerLabel = new GUIContent("Order in Layer", "Renderer's order within a sorting layer."); + static readonly GUIContent k_OrthographicLabel = new GUIContent("Orthographic Mode", "Should be enabled when using an orthographic camera. Instructs the shader to not perform any perspective correction."); + static readonly GUIContent k_VolumetricLabel = new GUIContent("Volumetric Setup", "Use cubes rather than quads to render the text. Allows for volumetric rendering when combined with a compatible shader."); + + SerializedProperty m_IsVolumetricTextProp; + + SerializedProperty m_IsOrthographicProp; + + Renderer m_Renderer; + + protected override void OnEnable() + { + base.OnEnable(); + + m_IsOrthographicProp = serializedObject.FindProperty("m_isOrthographic"); + + m_IsVolumetricTextProp = serializedObject.FindProperty("m_isVolumetricText"); + + m_Renderer = m_TextComponent.GetComponent(); + } + + protected override void DrawExtraSettings() + { + Foldout.extraSettings = EditorGUILayout.Foldout(Foldout.extraSettings, k_ExtraSettingsLabel, true, TMP_UIStyleManager.boldFoldout); + if (Foldout.extraSettings) + { + EditorGUI.indentLevel += 1; + + DrawMargins(); + + DrawSortingLayer(); + + DrawGeometrySorting(); + + DrawOrthographicMode(); + + DrawRichText(); + + DrawParsing(); + + DrawVolumetricSetup(); + + DrawKerning(); + + DrawPadding(); + + EditorGUI.indentLevel -= 1; + } + } + + protected void DrawSortingLayer() + { + Undo.RecordObject(m_Renderer, "Sorting Layer Change"); + + EditorGUI.BeginChangeCheck(); + + // SORTING LAYERS + var sortingLayerNames = SortingLayerHelper.sortingLayerNames; + + var textComponent = (TextMeshPro)m_TextComponent; + + // Look up the layer name using the current layer ID + string oldName = SortingLayerHelper.GetSortingLayerNameFromID(textComponent.sortingLayerID); + + // Use the name to look up our array index into the names list + int oldLayerIndex = System.Array.IndexOf(sortingLayerNames, oldName); + + // Show the pop-up for the names + EditorGUIUtility.fieldWidth = 0f; + int newLayerIndex = EditorGUILayout.Popup(k_SortingLayerLabel, oldLayerIndex, sortingLayerNames); + + // If the index changes, look up the ID for the new index to store as the new ID + if (newLayerIndex != oldLayerIndex) + { + textComponent.sortingLayerID = SortingLayerHelper.GetSortingLayerIDForIndex(newLayerIndex); + } + + // Expose the manual sorting order + int newSortingLayerOrder = EditorGUILayout.IntField(k_OrderInLayerLabel, textComponent.sortingOrder); + if (newSortingLayerOrder != textComponent.sortingOrder) + { + textComponent.sortingOrder = newSortingLayerOrder; + } + + if (EditorGUI.EndChangeCheck()) + m_HavePropertiesChanged = true; + + EditorGUILayout.Space(); + } + + protected void DrawOrthographicMode() + { + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(m_IsOrthographicProp, k_OrthographicLabel); + if (EditorGUI.EndChangeCheck()) + m_HavePropertiesChanged = true; + } + + protected void DrawVolumetricSetup() + { + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(m_IsVolumetricTextProp, k_VolumetricLabel); + if (EditorGUI.EndChangeCheck()) + { + m_HavePropertiesChanged = true; + m_TextComponent.textInfo.ResetVertexLayout(m_IsVolumetricTextProp.boolValue); + } + + EditorGUILayout.Space(); + } + + // Method to handle multi object selection + protected override bool IsMixSelectionTypes() + { + GameObject[] objects = Selection.gameObjects; + if (objects.Length > 1) + { + for (int i = 0; i < objects.Length; i++) + { + if (objects[i].GetComponent() == null) + return true; + } + } + return false; + } + + protected override void OnUndoRedo() + { + int undoEventId = Undo.GetCurrentGroup(); + int lastUndoEventId = s_EventId; + + if (undoEventId != lastUndoEventId) + { + for (int i = 0; i < targets.Length; i++) + { + //Debug.Log("Undo & Redo Performed detected in Editor Panel. Event ID:" + Undo.GetCurrentGroup()); + TMPro_EventManager.ON_TEXTMESHPRO_PROPERTY_CHANGED(true, targets[i] as TextMeshPro); + s_EventId = undoEventId; + } + } + } + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_EditorPanel.cs.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_EditorPanel.cs.meta new file mode 100644 index 0000000..aace189 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_EditorPanel.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 34f6695d37a94370a3697f6b068f5d5e +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_EditorUtility.cs b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_EditorUtility.cs new file mode 100644 index 0000000..9c8e630 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_EditorUtility.cs @@ -0,0 +1,450 @@ +using UnityEngine; +using UnityEditor; +using System.Text; +using System.IO; +using System.Collections; +using System.Collections.Generic; + + +namespace TMPro.EditorUtilities +{ + + public static class TMP_EditorUtility + { + /// + /// Returns the relative path of the package. + /// + public static string packageRelativePath + { + get + { + if (string.IsNullOrEmpty(m_PackagePath)) + m_PackagePath = GetPackageRelativePath(); + + return m_PackagePath; + } + } + [SerializeField] + private static string m_PackagePath; + + /// + /// Returns the fully qualified path of the package. + /// + public static string packageFullPath + { + get + { + if (string.IsNullOrEmpty(m_PackageFullPath)) + m_PackageFullPath = GetPackageFullPath(); + + return m_PackageFullPath; + } + } + [SerializeField] + private static string m_PackageFullPath; + + + // Static Fields Related to locating the TextMesh Pro Asset + private static string folderPath = "Not Found"; + + private static EditorWindow Gameview; + private static bool isInitialized = false; + + private static void GetGameview() + { + System.Reflection.Assembly assembly = typeof(UnityEditor.EditorWindow).Assembly; + System.Type type = assembly.GetType("UnityEditor.GameView"); + Gameview = EditorWindow.GetWindow(type); + } + + + public static void RepaintAll() + { + if (isInitialized == false) + { + GetGameview(); + isInitialized = true; + } + + SceneView.RepaintAll(); + Gameview.Repaint(); + } + + + /// + /// Create and return a new asset in a smart location based on the current selection and then select it. + /// + /// + /// Name of the new asset. Do not include the .asset extension. + /// + /// + /// The new asset. + /// + public static T CreateAsset(string name) where T : ScriptableObject + { + string path = AssetDatabase.GetAssetPath(Selection.activeObject); + if (path.Length == 0) + { + // no asset selected, place in asset root + path = "Assets/" + name + ".asset"; + } + else if (Directory.Exists(path)) + { + // place in currently selected directory + path += "/" + name + ".asset"; + } + else { + // place in current selection's containing directory + path = Path.GetDirectoryName(path) + "/" + name + ".asset"; + } + T asset = ScriptableObject.CreateInstance(); + AssetDatabase.CreateAsset(asset, AssetDatabase.GenerateUniqueAssetPath(path)); + EditorUtility.FocusProjectWindow(); + Selection.activeObject = asset; + return asset; + } + + + + // Function used to find all materials which reference a font atlas so we can update all their references. + public static Material[] FindMaterialReferences(TMP_FontAsset fontAsset) + { + List refs = new List(); + Material mat = fontAsset.material; + refs.Add(mat); + + // Get materials matching the search pattern. + string searchPattern = "t:Material" + " " + fontAsset.name.Split(new char[] { ' ' })[0]; + string[] materialAssetGUIDs = AssetDatabase.FindAssets(searchPattern); + + for (int i = 0; i < materialAssetGUIDs.Length; i++) + { + string materialPath = AssetDatabase.GUIDToAssetPath(materialAssetGUIDs[i]); + Material targetMaterial = AssetDatabase.LoadAssetAtPath(materialPath); + + if (targetMaterial.HasProperty(ShaderUtilities.ID_MainTex) && targetMaterial.GetTexture(ShaderUtilities.ID_MainTex) != null && mat.GetTexture(ShaderUtilities.ID_MainTex) != null && targetMaterial.GetTexture(ShaderUtilities.ID_MainTex).GetInstanceID() == mat.GetTexture(ShaderUtilities.ID_MainTex).GetInstanceID()) + { + if (!refs.Contains(targetMaterial)) + refs.Add(targetMaterial); + } + else + { + // TODO: Find a more efficient method to unload resources. + //Resources.UnloadAsset(targetMaterial.GetTexture(ShaderUtilities.ID_MainTex)); + } + } + + return refs.ToArray(); + } + + + // Function used to find the Font Asset which matches the given Material Preset and Font Atlas Texture. + public static TMP_FontAsset FindMatchingFontAsset(Material mat) + { + if (mat.GetTexture(ShaderUtilities.ID_MainTex) == null) return null; + + // Find the dependent assets of this material. + string[] dependentAssets = AssetDatabase.GetDependencies(AssetDatabase.GetAssetPath(mat), false); + + for (int i = 0; i < dependentAssets.Length; i++) + { + TMP_FontAsset fontAsset = AssetDatabase.LoadAssetAtPath(dependentAssets[i]); + if (fontAsset != null) + return fontAsset; + } + + return null; + } + + + private static string GetPackageRelativePath() + { + // Check for potential UPM package + string packagePath = Path.GetFullPath("Packages/com.unity.textmeshpro"); + if (Directory.Exists(packagePath)) + { + return "Packages/com.unity.textmeshpro"; + } + + packagePath = Path.GetFullPath("Assets/.."); + if (Directory.Exists(packagePath)) + { + // Search default location for development package + if (Directory.Exists(packagePath + "/Assets/Packages/com.unity.TextMeshPro/Editor Resources")) + { + return "Assets/Packages/com.unity.TextMeshPro"; + } + + // Search for default location of normal TextMesh Pro AssetStore package + if (Directory.Exists(packagePath + "/Assets/TextMesh Pro/Editor Resources")) + { + return "Assets/TextMesh Pro"; + } + + // Search for potential alternative locations in the user project + string[] matchingPaths = Directory.GetDirectories(packagePath, "TextMesh Pro", SearchOption.AllDirectories); + packagePath = ValidateLocation(matchingPaths, packagePath); + if (packagePath != null) return packagePath; + } + + return null; + } + + private static string GetPackageFullPath() + { + // Check for potential UPM package + string packagePath = Path.GetFullPath("Packages/com.unity.textmeshpro"); + if (Directory.Exists(packagePath)) + { + return packagePath; + } + + packagePath = Path.GetFullPath("Assets/.."); + if (Directory.Exists(packagePath)) + { + // Search default location for development package + if (Directory.Exists(packagePath + "/Assets/Packages/com.unity.TextMeshPro/Editor Resources")) + { + return packagePath + "/Assets/Packages/com.unity.TextMeshPro"; + } + + // Search for default location of normal TextMesh Pro AssetStore package + if (Directory.Exists(packagePath + "/Assets/TextMesh Pro/Editor Resources")) + { + return packagePath + "/Assets/TextMesh Pro"; + } + + // Search for potential alternative locations in the user project + string[] matchingPaths = Directory.GetDirectories(packagePath, "TextMesh Pro", SearchOption.AllDirectories); + string path = ValidateLocation(matchingPaths, packagePath); + if (path != null) return packagePath + path; + } + + return null; + } + + + /// + /// Method to validate the location of the asset folder by making sure the GUISkins folder exists. + /// + /// + /// + private static string ValidateLocation(string[] paths, string projectPath) + { + for (int i = 0; i < paths.Length; i++) + { + // Check if any of the matching directories contain a GUISkins directory. + if (Directory.Exists(paths[i] + "/Editor Resources")) + { + folderPath = paths[i].Replace(projectPath, ""); + folderPath = folderPath.TrimStart('\\', '/'); + return folderPath; + } + } + + return null; + } + + + /// + /// Function which returns a string containing a sequence of Decimal character ranges. + /// + /// + /// + public static string GetDecimalCharacterSequence(int[] characterSet) + { + if (characterSet == null || characterSet.Length == 0) + return string.Empty; + + string characterSequence = string.Empty; + int count = characterSet.Length; + int first = characterSet[0]; + int last = first; + + for (int i = 1; i < count; i++) + { + if (characterSet[i - 1] + 1 == characterSet[i]) + { + last = characterSet[i]; + } + else + { + if (first == last) + characterSequence += first + ","; + else + characterSequence += first + "-" + last + ","; + + first = last = characterSet[i]; + } + + } + + // handle the final group + if (first == last) + characterSequence += first; + else + characterSequence += first + "-" + last; + + return characterSequence; + } + + + /// + /// Function which returns a string containing a sequence of Unicode (Hex) character ranges. + /// + /// + /// + public static string GetUnicodeCharacterSequence(int[] characterSet) + { + if (characterSet == null || characterSet.Length == 0) + return string.Empty; + + string characterSequence = string.Empty; + int count = characterSet.Length; + int first = characterSet[0]; + int last = first; + + for (int i = 1; i < count; i++) + { + if (characterSet[i - 1] + 1 == characterSet[i]) + { + last = characterSet[i]; + } + else + { + if (first == last) + characterSequence += first.ToString("X2") + ","; + else + characterSequence += first.ToString("X2") + "-" + last.ToString("X2") + ","; + + first = last = characterSet[i]; + } + + } + + // handle the final group + if (first == last) + characterSequence += first.ToString("X2"); + else + characterSequence += first.ToString("X2") + "-" + last.ToString("X2"); + + return characterSequence; + } + + + /// + /// + /// + /// + /// + /// + public static void DrawBox(Rect rect, float thickness, Color color) + { + EditorGUI.DrawRect(new Rect(rect.x - thickness, rect.y + thickness, rect.width + thickness * 2, thickness), color); + EditorGUI.DrawRect(new Rect(rect.x - thickness, rect.y + thickness, thickness, rect.height - thickness * 2), color); + EditorGUI.DrawRect(new Rect(rect.x - thickness, rect.y + rect.height - thickness * 2, rect.width + thickness * 2, thickness), color); + EditorGUI.DrawRect(new Rect(rect.x + rect.width, rect.y + thickness, thickness, rect.height - thickness * 2), color); + } + + + /// + /// Function to return the horizontal alignment grid value. + /// + /// + /// + public static int GetHorizontalAlignmentGridValue(int value) + { + if ((value & 0x1) == 0x1) + return 0; + else if ((value & 0x2) == 0x2) + return 1; + else if ((value & 0x4) == 0x4) + return 2; + else if ((value & 0x8) == 0x8) + return 3; + else if ((value & 0x10) == 0x10) + return 4; + else if ((value & 0x20) == 0x20) + return 5; + + return 0; + } + + /// + /// Function to return the vertical alignment grid value. + /// + /// + /// + public static int GetVerticalAlignmentGridValue(int value) + { + if ((value & 0x100) == 0x100) + return 0; + if ((value & 0x200) == 0x200) + return 1; + if ((value & 0x400) == 0x400) + return 2; + if ((value & 0x800) == 0x800) + return 3; + if ((value & 0x1000) == 0x1000) + return 4; + if ((value & 0x2000) == 0x2000) + return 5; + + return 0; + } + + public static void DrawColorProperty(Rect rect, SerializedProperty property) + { + int oldIndent = EditorGUI.indentLevel; + EditorGUI.indentLevel = 0; + if (EditorGUIUtility.wideMode) + { + EditorGUI.PropertyField(new Rect(rect.x, rect.y, 50f, rect.height), property, GUIContent.none); + rect.x += 50f; + rect.width = Mathf.Min(100f, rect.width - 55f); + } + else + { + rect.height /= 2f; + rect.width = Mathf.Min(100f, rect.width - 5f); + EditorGUI.PropertyField(rect, property, GUIContent.none); + rect.y += rect.height; + } + + EditorGUI.BeginChangeCheck(); + string colorString = EditorGUI.TextField(rect, string.Format("#{0}", ColorUtility.ToHtmlStringRGBA(property.colorValue))); + if (EditorGUI.EndChangeCheck()) + { + if (ColorUtility.TryParseHtmlString(colorString, out Color color)) + { + property.colorValue = color; + } + } + EditorGUI.indentLevel = oldIndent; + } + + public static bool EditorToggle(Rect position, bool value, GUIContent content, GUIStyle style) + { + var id = GUIUtility.GetControlID(content, FocusType.Keyboard, position); + var evt = Event.current; + + // Toggle selected toggle on space or return key + if (GUIUtility.keyboardControl == id && evt.type == EventType.KeyDown && (evt.keyCode == KeyCode.Space || evt.keyCode == KeyCode.Return || evt.keyCode == KeyCode.KeypadEnter)) + { + value = !value; + evt.Use(); + GUI.changed = true; + } + + if (evt.type == EventType.MouseDown && position.Contains(Event.current.mousePosition)) + { + GUIUtility.keyboardControl = id; + EditorGUIUtility.editingTextField = false; + HandleUtility.Repaint(); + } + + return GUI.Toggle(position, id, value, content, style); + } + + } +} diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_EditorUtility.cs.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_EditorUtility.cs.meta new file mode 100644 index 0000000..c462f87 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_EditorUtility.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 2300e75732d74890b38a8ff257a3ae15 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_FontAssetEditor.cs b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_FontAssetEditor.cs new file mode 100644 index 0000000..e352814 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_FontAssetEditor.cs @@ -0,0 +1,1711 @@ +using UnityEngine; +using UnityEditor; +using UnityEditorInternal; +using System.Collections; +using System.Collections.Generic; +using UnityEngine.TextCore; +using UnityEngine.TextCore.LowLevel; + + +namespace TMPro.EditorUtilities +{ + + [CustomPropertyDrawer(typeof(TMP_FontWeightPair))] + public class FontWeightDrawer : PropertyDrawer + { + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + SerializedProperty prop_regular = property.FindPropertyRelative("regularTypeface"); + SerializedProperty prop_italic = property.FindPropertyRelative("italicTypeface"); + + float width = position.width; + + position.width = EditorGUIUtility.labelWidth; + EditorGUI.LabelField(position, label); + + int oldIndent = EditorGUI.indentLevel; + EditorGUI.indentLevel = 0; + + // NORMAL TYPEFACE + if (label.text[0] == '4') GUI.enabled = false; + position.x += position.width; position.width = (width - position.width) / 2; + EditorGUI.PropertyField(position, prop_regular, GUIContent.none); + + // ITALIC TYPEFACE + GUI.enabled = true; + position.x += position.width; + EditorGUI.PropertyField(position, prop_italic, GUIContent.none); + + EditorGUI.indentLevel = oldIndent; + } + } + + [CustomEditor(typeof(TMP_FontAsset))] + public class TMP_FontAssetEditor : Editor + { + private struct UI_PanelState + { + public static bool faceInfoPanel = true; + public static bool generationSettingsPanel = true; + public static bool fontAtlasInfoPanel = true; + public static bool fontWeightPanel = true; + public static bool fallbackFontAssetPanel = true; + public static bool glyphTablePanel = false; + public static bool characterTablePanel = false; + public static bool fontFeatureTablePanel = false; + } + + private struct AtlasSettings + { + public GlyphRenderMode glyphRenderMode; + public int pointSize; + public int padding; + public int atlasWidth; + public int atlasHeight; + } + + /// + /// Material used to display SDF glyphs in the Character and Glyph tables. + /// + internal static Material internalSDFMaterial + { + get + { + if (s_InternalSDFMaterial == null) + { + Shader shader = Shader.Find("Hidden/TextMeshPro/Internal/Distance Field SSD"); + + if (shader != null) + s_InternalSDFMaterial = new Material(shader); + } + + return s_InternalSDFMaterial; + } + } + static Material s_InternalSDFMaterial; + + /// + /// Material used to display Bitmap glyphs in the Character and Glyph tables. + /// + internal static Material internalBitmapMaterial + { + get + { + if (s_InternalBitmapMaterial == null) + { + Shader shader = Shader.Find("Hidden/Internal-GUITextureClipText"); + + if (shader != null) + s_InternalBitmapMaterial = new Material(shader); + } + + return s_InternalBitmapMaterial; + } + } + static Material s_InternalBitmapMaterial; + + private static string[] s_UiStateLabel = new string[] { "(Click to collapse) ", "(Click to expand) " }; + private GUIContent[] m_AtlasResolutionLabels = { new GUIContent("8"), new GUIContent("16"), new GUIContent("32"), new GUIContent("64"), new GUIContent("128"), new GUIContent("256"), new GUIContent("512"), new GUIContent("1024"), new GUIContent("2048"), new GUIContent("4096"), new GUIContent("8192") }; + private int[] m_AtlasResolutions = { 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192 }; + + private struct Warning + { + public bool isEnabled; + public double expirationTime; + } + + private int m_CurrentGlyphPage = 0; + private int m_CurrentCharacterPage = 0; + private int m_CurrentKerningPage = 0; + + private int m_SelectedGlyphRecord = -1; + private int m_SelectedCharacterRecord = -1; + private int m_SelectedAdjustmentRecord = -1; + + private string m_dstGlyphID; + private string m_dstUnicode; + private const string k_placeholderUnicodeHex = "New Unicode (Hex)"; + private string m_unicodeHexLabel = k_placeholderUnicodeHex; + private const string k_placeholderGlyphID = "New Glyph ID"; + private string m_GlyphIDLabel = k_placeholderGlyphID; + + private Warning m_AddGlyphWarning; + private Warning m_AddCharacterWarning; + private bool m_DisplayDestructiveChangeWarning; + private AtlasSettings m_AtlasSettings; + private bool m_MaterialPresetsRequireUpdate; + + private string m_GlyphSearchPattern; + private List m_GlyphSearchList; + + private string m_CharacterSearchPattern; + private List m_CharacterSearchList; + + private string m_KerningTableSearchPattern; + private List m_KerningTableSearchList; + + private bool m_isSearchDirty; + + private const string k_UndoRedo = "UndoRedoPerformed"; + + private SerializedProperty m_AtlasPopulationMode_prop; + private SerializedProperty font_atlas_prop; + private SerializedProperty font_material_prop; + + private SerializedProperty m_AtlasRenderMode_prop; + private SerializedProperty m_SamplingPointSize_prop; + private SerializedProperty m_AtlasPadding_prop; + private SerializedProperty m_AtlasWidth_prop; + private SerializedProperty m_AtlasHeight_prop; + + private SerializedProperty fontWeights_prop; + + //private SerializedProperty fallbackFontAssets_prop; + private ReorderableList m_list; + + private SerializedProperty font_normalStyle_prop; + private SerializedProperty font_normalSpacing_prop; + + private SerializedProperty font_boldStyle_prop; + private SerializedProperty font_boldSpacing_prop; + + private SerializedProperty font_italicStyle_prop; + private SerializedProperty font_tabSize_prop; + + private SerializedProperty m_FaceInfo_prop; + private SerializedProperty m_GlyphTable_prop; + private SerializedProperty m_CharacterTable_prop; + + private TMP_FontFeatureTable m_FontFeatureTable; + private SerializedProperty m_FontFeatureTable_prop; + private SerializedProperty m_GlyphPairAdjustmentRecords_prop; + + private TMP_SerializedPropertyHolder m_SerializedPropertyHolder; + private SerializedProperty m_EmptyGlyphPairAdjustmentRecord_prop; + + private TMP_FontAsset m_fontAsset; + + private Material[] m_materialPresets; + + private bool isAssetDirty = false; + + private int errorCode; + + private System.DateTime timeStamp; + + + public void OnEnable() + { + m_FaceInfo_prop = serializedObject.FindProperty("m_FaceInfo"); + + font_atlas_prop = serializedObject.FindProperty("m_AtlasTextures").GetArrayElementAtIndex(0); + font_material_prop = serializedObject.FindProperty("material"); + + m_AtlasPopulationMode_prop = serializedObject.FindProperty("m_AtlasPopulationMode"); + m_AtlasRenderMode_prop = serializedObject.FindProperty("m_AtlasRenderMode"); + m_SamplingPointSize_prop = m_FaceInfo_prop.FindPropertyRelative("m_PointSize"); + m_AtlasPadding_prop = serializedObject.FindProperty("m_AtlasPadding"); + m_AtlasWidth_prop = serializedObject.FindProperty("m_AtlasWidth"); + m_AtlasHeight_prop = serializedObject.FindProperty("m_AtlasHeight"); + + fontWeights_prop = serializedObject.FindProperty("m_FontWeightTable"); + + m_list = new ReorderableList(serializedObject, serializedObject.FindProperty("m_FallbackFontAssetTable"), true, true, true, true); + + m_list.drawElementCallback = (Rect rect, int index, bool isActive, bool isFocused) => + { + var element = m_list.serializedProperty.GetArrayElementAtIndex(index); + rect.y += 2; + EditorGUI.PropertyField(new Rect(rect.x, rect.y, rect.width, EditorGUIUtility.singleLineHeight), element, GUIContent.none); + }; + + m_list.drawHeaderCallback = rect => + { + EditorGUI.LabelField(rect, "Fallback List"); + }; + + // Clean up fallback list in the event if contains null elements. + CleanFallbackFontAssetTable(); + + font_normalStyle_prop = serializedObject.FindProperty("normalStyle"); + font_normalSpacing_prop = serializedObject.FindProperty("normalSpacingOffset"); + + font_boldStyle_prop = serializedObject.FindProperty("boldStyle"); + font_boldSpacing_prop = serializedObject.FindProperty("boldSpacing"); + + font_italicStyle_prop = serializedObject.FindProperty("italicStyle"); + font_tabSize_prop = serializedObject.FindProperty("tabSize"); + + m_CharacterTable_prop = serializedObject.FindProperty("m_CharacterTable"); + m_GlyphTable_prop = serializedObject.FindProperty("m_GlyphTable"); + + m_FontFeatureTable_prop = serializedObject.FindProperty("m_FontFeatureTable"); + m_GlyphPairAdjustmentRecords_prop = m_FontFeatureTable_prop.FindPropertyRelative("m_GlyphPairAdjustmentRecords"); + + m_fontAsset = target as TMP_FontAsset; + m_FontFeatureTable = m_fontAsset.fontFeatureTable; + + // Upgrade Font Feature Table if necessary + if (m_fontAsset.m_KerningTable != null && m_fontAsset.m_KerningTable.kerningPairs != null && m_fontAsset.m_KerningTable.kerningPairs.Count > 0) + m_fontAsset.ReadFontAssetDefinition(); + + // Create serialized object to allow us to use a serialized property of an empty kerning pair. + m_SerializedPropertyHolder = CreateInstance(); + m_SerializedPropertyHolder.fontAsset = m_fontAsset; + SerializedObject internalSerializedObject = new SerializedObject(m_SerializedPropertyHolder); + m_EmptyGlyphPairAdjustmentRecord_prop = internalSerializedObject.FindProperty("glyphPairAdjustmentRecord"); + + m_materialPresets = TMP_EditorUtility.FindMaterialReferences(m_fontAsset); + + m_GlyphSearchList = new List(); + m_KerningTableSearchList = new List(); + } + + + public void OnDisable() + { + // Revert changes if user closes or changes selection without having made a choice. + if (m_DisplayDestructiveChangeWarning) + { + m_DisplayDestructiveChangeWarning = false; + RestoreAtlasGenerationSettings(); + GUIUtility.keyboardControl = 0; + + serializedObject.ApplyModifiedProperties(); + } + } + + + public override void OnInspectorGUI() + { + //Debug.Log("OnInspectorGUI Called."); + + Event currentEvent = Event.current; + + serializedObject.Update(); + + Rect rect = EditorGUILayout.GetControlRect(false, 24); + float labelWidth = EditorGUIUtility.labelWidth; + float fieldWidth = EditorGUIUtility.fieldWidth; + + // FACE INFO PANEL + #region Face info + GUI.Label(rect, new GUIContent("Face Info - v" + m_fontAsset.version), TMP_UIStyleManager.sectionHeader); + + rect.x += rect.width - 132f; + rect.y += 2; + rect.width = 130f; + rect.height = 18f; + if (GUI.Button(rect, new GUIContent("Update Atlas Texture"))) + { + TMPro_FontAssetCreatorWindow.ShowFontAtlasCreatorWindow(target as TMP_FontAsset); + } + + EditorGUI.indentLevel = 1; + GUI.enabled = false; // Lock UI + + // TODO : Consider creating a property drawer for these. + EditorGUILayout.PropertyField(m_FaceInfo_prop.FindPropertyRelative("m_FamilyName")); + EditorGUILayout.PropertyField(m_FaceInfo_prop.FindPropertyRelative("m_StyleName")); + EditorGUILayout.PropertyField(m_FaceInfo_prop.FindPropertyRelative("m_PointSize")); + + GUI.enabled = true; + + EditorGUILayout.PropertyField(m_FaceInfo_prop.FindPropertyRelative("m_Scale")); + EditorGUILayout.PropertyField(m_FaceInfo_prop.FindPropertyRelative("m_LineHeight")); + + EditorGUILayout.PropertyField(m_FaceInfo_prop.FindPropertyRelative("m_AscentLine")); + EditorGUILayout.PropertyField(m_FaceInfo_prop.FindPropertyRelative("m_CapLine")); + EditorGUILayout.PropertyField(m_FaceInfo_prop.FindPropertyRelative("m_MeanLine")); + EditorGUILayout.PropertyField(m_FaceInfo_prop.FindPropertyRelative("m_Baseline")); + EditorGUILayout.PropertyField(m_FaceInfo_prop.FindPropertyRelative("m_DescentLine")); + EditorGUILayout.PropertyField(m_FaceInfo_prop.FindPropertyRelative("m_UnderlineOffset")); + EditorGUILayout.PropertyField(m_FaceInfo_prop.FindPropertyRelative("m_UnderlineThickness")); + EditorGUILayout.PropertyField(m_FaceInfo_prop.FindPropertyRelative("m_StrikethroughOffset")); + //EditorGUILayout.PropertyField(m_FaceInfo_prop.FindPropertyRelative("strikethroughThickness")); + EditorGUILayout.PropertyField(m_FaceInfo_prop.FindPropertyRelative("m_SuperscriptOffset")); + EditorGUILayout.PropertyField(m_FaceInfo_prop.FindPropertyRelative("m_SuperscriptSize")); + EditorGUILayout.PropertyField(m_FaceInfo_prop.FindPropertyRelative("m_SubscriptOffset")); + EditorGUILayout.PropertyField(m_FaceInfo_prop.FindPropertyRelative("m_SubscriptSize")); + EditorGUILayout.PropertyField(m_FaceInfo_prop.FindPropertyRelative("m_TabWidth")); + // TODO : Add clamping for some of these values. + //subSize_prop.floatValue = Mathf.Clamp(subSize_prop.floatValue, 0.25f, 1f); + + EditorGUILayout.Space(); + #endregion + + // GENERATION SETTINGS + #region Generation Settings + rect = EditorGUILayout.GetControlRect(false, 24); + + if (GUI.Button(rect, new GUIContent("Generation Settings"), TMP_UIStyleManager.sectionHeader)) + UI_PanelState.generationSettingsPanel = !UI_PanelState.generationSettingsPanel; + + GUI.Label(rect, (UI_PanelState.generationSettingsPanel ? "" : s_UiStateLabel[1]), TMP_UIStyleManager.rightLabel); + + if (UI_PanelState.generationSettingsPanel) + { + EditorGUI.indentLevel = 1; + + EditorGUI.BeginChangeCheck(); + Font sourceFont = (Font)EditorGUILayout.ObjectField("Source Font File", m_fontAsset.m_SourceFontFile_EditorRef, typeof(Font), false); + if (EditorGUI.EndChangeCheck()) + { + string guid = AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(sourceFont)); + m_fontAsset.m_SourceFontFileGUID = guid; + m_fontAsset.m_SourceFontFile_EditorRef = sourceFont; + } + + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(m_AtlasPopulationMode_prop, new GUIContent("Atlas Population Mode")); + if (EditorGUI.EndChangeCheck()) + { + serializedObject.ApplyModifiedProperties(); + + bool isDatabaseRefreshRequired = false; + + if (m_AtlasPopulationMode_prop.intValue == 0) + { + m_fontAsset.sourceFontFile = null; + + // Set atlas textures to non readable. + //for (int i = 0; i < m_fontAsset.atlasTextures.Length; i++) + //{ + // Texture2D tex = m_fontAsset.atlasTextures[i]; + + // if (tex != null && tex.isReadable) + // { + // string texPath = AssetDatabase.GetAssetPath(tex); + // var texImporter = AssetImporter.GetAtPath(texPath) as TextureImporter; + // if (texImporter != null) + // { + // texImporter.isReadable = false; + // AssetDatabase.ImportAsset(texPath); + // isDatabaseRefreshRequired = true; + // } + // } + //} + + Debug.Log("Atlas Population mode set to [Static]."); + } + else if (m_AtlasPopulationMode_prop.intValue == 1) + { + if (m_fontAsset.m_SourceFontFile_EditorRef.dynamic == false) + { + Debug.LogWarning("Please set the [" + m_fontAsset.name + "] font to dynamic mode as this is required for Dynamic SDF support.", m_fontAsset.m_SourceFontFile_EditorRef); + m_AtlasPopulationMode_prop.intValue = 0; + + serializedObject.ApplyModifiedProperties(); + } + else + { + m_fontAsset.sourceFontFile = m_fontAsset.m_SourceFontFile_EditorRef; + + /* + // Set atlas textures to non readable. + for (int i = 0; i < m_fontAsset.atlasTextures.Length; i++) + { + Texture2D tex = m_fontAsset.atlasTextures[i]; + + if (tex != null && tex.isReadable == false) + { + string texPath = AssetDatabase.GetAssetPath(tex.GetInstanceID()); + Object[] paths = AssetDatabase.LoadAllAssetsAtPath(texPath); + var texImporter = AssetImporter.GetAtPath(texPath) as TextureImporter; + if (texImporter != null) + { + texImporter.isReadable = true; + AssetDatabase.ImportAsset(texPath); + isDatabaseRefreshRequired = true; + } + } + } + */ + Debug.Log("Atlas Population mode set to [Dynamic]."); + } + } + + if (isDatabaseRefreshRequired) + AssetDatabase.Refresh(); + + serializedObject.Update(); + isAssetDirty = true; + } + + GUI.enabled = true; + // Save state of atlas settings + if (m_DisplayDestructiveChangeWarning == false) + { + SavedAtlasGenerationSettings(); + //Undo.RegisterCompleteObjectUndo(m_fontAsset, "Font Asset Changes"); + } + + EditorGUI.BeginChangeCheck(); + // TODO: Switch shaders depending on GlyphRenderMode. + EditorGUILayout.PropertyField(m_AtlasRenderMode_prop); + EditorGUILayout.PropertyField(m_SamplingPointSize_prop, new GUIContent("Sampling Point Size")); + if (EditorGUI.EndChangeCheck()) + { + m_DisplayDestructiveChangeWarning = true; + } + + // Changes to these properties require updating Material Presets for this font asset. + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(m_AtlasPadding_prop, new GUIContent("Padding")); + EditorGUILayout.IntPopup(m_AtlasWidth_prop, m_AtlasResolutionLabels, m_AtlasResolutions, new GUIContent("Atlas Width")); + EditorGUILayout.IntPopup(m_AtlasHeight_prop, m_AtlasResolutionLabels, m_AtlasResolutions, new GUIContent("Atlas Height")); + if (EditorGUI.EndChangeCheck()) + { + m_MaterialPresetsRequireUpdate = true; + m_DisplayDestructiveChangeWarning = true; + } + + if (m_DisplayDestructiveChangeWarning) + { + // These changes are destructive on the font asset + rect = EditorGUILayout.GetControlRect(false, 60); + rect.x += 15; + rect.width -= 15; + EditorGUI.HelpBox(rect, "Changing these settings will clear the font asset's character, glyph and texture data.", MessageType.Warning); + + if (GUI.Button(new Rect(rect.width - 140, rect.y + 36, 80, 18), new GUIContent("Apply"))) + { + m_DisplayDestructiveChangeWarning = false; + + // Update face info is sampling point size was changed. + if (m_AtlasSettings.pointSize != m_SamplingPointSize_prop.intValue) + { + FontEngine.LoadFontFace(m_fontAsset.sourceFontFile, m_SamplingPointSize_prop.intValue); + m_fontAsset.faceInfo = FontEngine.GetFaceInfo(); + } + + // Update material + m_fontAsset.material.SetFloat(ShaderUtilities.ID_TextureWidth, m_AtlasWidth_prop.intValue); + m_fontAsset.material.SetFloat(ShaderUtilities.ID_TextureHeight, m_AtlasHeight_prop.intValue); + m_fontAsset.material.SetFloat(ShaderUtilities.ID_GradientScale, m_AtlasPadding_prop.intValue + 1); + + // Update material presets if any of the relevant properties have been changed. + if (m_MaterialPresetsRequireUpdate) + { + m_MaterialPresetsRequireUpdate = false; + + Material[] materialPresets = TMP_EditorUtility.FindMaterialReferences(m_fontAsset); + for (int i = 0; i < materialPresets.Length; i++) + { + Material mat = materialPresets[i]; + + mat.SetFloat(ShaderUtilities.ID_TextureWidth, m_AtlasWidth_prop.intValue); + mat.SetFloat(ShaderUtilities.ID_TextureHeight, m_AtlasHeight_prop.intValue); + mat.SetFloat(ShaderUtilities.ID_GradientScale, m_AtlasPadding_prop.intValue + 1); + } + } + + m_fontAsset.ClearFontAssetData(); + GUIUtility.keyboardControl = 0; + isAssetDirty = true; + + // Update Font Asset Creation Settings to reflect new changes. + UpdateFontAssetCreationSettings(); + + // TODO: Clear undo buffers. + //Undo.ClearUndo(m_fontAsset); + } + + if (GUI.Button(new Rect(rect.width - 56, rect.y + 36, 80, 18), new GUIContent("Revert"))) + { + m_DisplayDestructiveChangeWarning = false; + RestoreAtlasGenerationSettings(); + GUIUtility.keyboardControl = 0; + + // TODO: Clear undo buffers. + //Undo.ClearUndo(m_fontAsset); + } + } + EditorGUILayout.Space(); + } + #endregion + + // ATLAS & MATERIAL PANEL + #region Atlas & Material + rect = EditorGUILayout.GetControlRect(false, 24); + + if (GUI.Button(rect, new GUIContent("Atlas & Material"), TMP_UIStyleManager.sectionHeader)) + UI_PanelState.fontAtlasInfoPanel = !UI_PanelState.fontAtlasInfoPanel; + + GUI.Label(rect, (UI_PanelState.fontAtlasInfoPanel ? "" : s_UiStateLabel[1]), TMP_UIStyleManager.rightLabel); + + if (UI_PanelState.fontAtlasInfoPanel) + { + EditorGUI.indentLevel = 1; + + GUI.enabled = false; + EditorGUILayout.PropertyField(font_atlas_prop, new GUIContent("Font Atlas")); + EditorGUILayout.PropertyField(font_material_prop, new GUIContent("Font Material")); + GUI.enabled = true; + EditorGUILayout.Space(); + } + #endregion + + string evt_cmd = Event.current.commandName; // Get Current Event CommandName to check for Undo Events + + // FONT WEIGHT PANEL + #region Font Weights + rect = EditorGUILayout.GetControlRect(false, 24); + + if (GUI.Button(rect, new GUIContent("Font Weights", "The Font Assets that will be used for different font weights and the settings used to simulate a typeface when no asset is available."), TMP_UIStyleManager.sectionHeader)) + UI_PanelState.fontWeightPanel = !UI_PanelState.fontWeightPanel; + + GUI.Label(rect, (UI_PanelState.fontWeightPanel ? "" : s_UiStateLabel[1]), TMP_UIStyleManager.rightLabel); + + if (UI_PanelState.fontWeightPanel) + { + EditorGUIUtility.labelWidth *= 0.75f; + EditorGUIUtility.fieldWidth *= 0.25f; + + EditorGUILayout.BeginVertical(); + EditorGUI.indentLevel = 1; + rect = EditorGUILayout.GetControlRect(true); + rect.x += EditorGUIUtility.labelWidth; + rect.width = (rect.width - EditorGUIUtility.labelWidth) / 2f; + GUI.Label(rect, "Regular Tyepface", EditorStyles.label); + rect.x += rect.width; + GUI.Label(rect, "Italic Typeface", EditorStyles.label); + + EditorGUI.indentLevel = 1; + + EditorGUILayout.PropertyField(fontWeights_prop.GetArrayElementAtIndex(1), new GUIContent("100 - Thin")); + EditorGUILayout.PropertyField(fontWeights_prop.GetArrayElementAtIndex(2), new GUIContent("200 - Extra-Light")); + EditorGUILayout.PropertyField(fontWeights_prop.GetArrayElementAtIndex(3), new GUIContent("300 - Light")); + EditorGUILayout.PropertyField(fontWeights_prop.GetArrayElementAtIndex(4), new GUIContent("400 - Regular")); + EditorGUILayout.PropertyField(fontWeights_prop.GetArrayElementAtIndex(5), new GUIContent("500 - Medium")); + EditorGUILayout.PropertyField(fontWeights_prop.GetArrayElementAtIndex(6), new GUIContent("600 - Semi-Bold")); + EditorGUILayout.PropertyField(fontWeights_prop.GetArrayElementAtIndex(7), new GUIContent("700 - Bold")); + EditorGUILayout.PropertyField(fontWeights_prop.GetArrayElementAtIndex(8), new GUIContent("800 - Heavy")); + EditorGUILayout.PropertyField(fontWeights_prop.GetArrayElementAtIndex(9), new GUIContent("900 - Black")); + + EditorGUILayout.EndVertical(); + + EditorGUILayout.Space(); + + EditorGUILayout.BeginVertical(); + + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.PropertyField(font_normalStyle_prop, new GUIContent("Normal Weight")); + font_normalStyle_prop.floatValue = Mathf.Clamp(font_normalStyle_prop.floatValue, -3.0f, 3.0f); + if (GUI.changed || evt_cmd == k_UndoRedo) + { + GUI.changed = false; + + // Modify the material property on matching material presets. + for (int i = 0; i < m_materialPresets.Length; i++) + m_materialPresets[i].SetFloat("_WeightNormal", font_normalStyle_prop.floatValue); + } + + EditorGUILayout.PropertyField(font_boldStyle_prop, new GUIContent("Bold Weight")); + font_boldStyle_prop.floatValue = Mathf.Clamp(font_boldStyle_prop.floatValue, -3.0f, 3.0f); + if (GUI.changed || evt_cmd == k_UndoRedo) + { + GUI.changed = false; + + // Modify the material property on matching material presets. + for (int i = 0; i < m_materialPresets.Length; i++) + m_materialPresets[i].SetFloat("_WeightBold", font_boldStyle_prop.floatValue); + } + EditorGUILayout.EndHorizontal(); + + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.PropertyField(font_normalSpacing_prop, new GUIContent("Spacing Offset")); + font_normalSpacing_prop.floatValue = Mathf.Clamp(font_normalSpacing_prop.floatValue, -100, 100); + if (GUI.changed || evt_cmd == k_UndoRedo) + { + GUI.changed = false; + } + + EditorGUILayout.PropertyField(font_boldSpacing_prop, new GUIContent("Bold Spacing")); + font_boldSpacing_prop.floatValue = Mathf.Clamp(font_boldSpacing_prop.floatValue, 0, 100); + if (GUI.changed || evt_cmd == k_UndoRedo) + { + GUI.changed = false; + } + EditorGUILayout.EndHorizontal(); + + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.PropertyField(font_italicStyle_prop, new GUIContent("Italic Style")); + font_italicStyle_prop.intValue = Mathf.Clamp(font_italicStyle_prop.intValue, 15, 60); + + EditorGUILayout.PropertyField(font_tabSize_prop, new GUIContent("Tab Multiple")); + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + EditorGUILayout.Space(); + } + + EditorGUIUtility.labelWidth = 0; + EditorGUIUtility.fieldWidth = 0; + #endregion + + // FALLBACK FONT ASSETS + #region Fallback Font Asset + rect = EditorGUILayout.GetControlRect(false, 24); + EditorGUI.indentLevel = 0; + if (GUI.Button(rect, new GUIContent("Fallback Font Assets", "Select the Font Assets that will be searched and used as fallback when characters are missing from this font asset."), TMP_UIStyleManager.sectionHeader)) + UI_PanelState.fallbackFontAssetPanel = !UI_PanelState.fallbackFontAssetPanel; + + GUI.Label(rect, (UI_PanelState.fallbackFontAssetPanel ? "" : s_UiStateLabel[1]), TMP_UIStyleManager.rightLabel); + + if (UI_PanelState.fallbackFontAssetPanel) + { + EditorGUIUtility.labelWidth = 120; + EditorGUI.indentLevel = 0; + + m_list.DoLayoutList(); + EditorGUILayout.Space(); + } + #endregion + + // CHARACTER TABLE TABLE + #region Character Table + EditorGUIUtility.labelWidth = labelWidth; + EditorGUIUtility.fieldWidth = fieldWidth; + EditorGUI.indentLevel = 0; + rect = EditorGUILayout.GetControlRect(false, 24); + + if (GUI.Button(rect, new GUIContent("Character Table", "List of characters contained in this font asset."), TMP_UIStyleManager.sectionHeader)) + UI_PanelState.characterTablePanel = !UI_PanelState.characterTablePanel; + + GUI.Label(rect, (UI_PanelState.characterTablePanel ? "" : s_UiStateLabel[1]), TMP_UIStyleManager.rightLabel); + + if (UI_PanelState.characterTablePanel) + { + int arraySize = m_CharacterTable_prop.arraySize; + int itemsPerPage = 15; + + // Display Glyph Management Tools + EditorGUILayout.BeginVertical(EditorStyles.helpBox); + { + // Search Bar implementation + #region DISPLAY SEARCH BAR + EditorGUILayout.BeginHorizontal(); + { + EditorGUIUtility.labelWidth = 130f; + EditorGUI.BeginChangeCheck(); + string searchPattern = EditorGUILayout.TextField("Character Search", m_CharacterSearchPattern, "SearchTextField"); + if (EditorGUI.EndChangeCheck() || m_isSearchDirty) + { + if (string.IsNullOrEmpty(searchPattern) == false) + { + m_CharacterSearchPattern = searchPattern; + + // Search Character Table for potential matches + SearchCharacterTable (m_CharacterSearchPattern, ref m_CharacterSearchList); + } + else + m_CharacterSearchPattern = null; + + m_isSearchDirty = false; + } + + string styleName = string.IsNullOrEmpty(m_CharacterSearchPattern) ? "SearchCancelButtonEmpty" : "SearchCancelButton"; + if (GUILayout.Button(GUIContent.none, styleName)) + { + GUIUtility.keyboardControl = 0; + m_CharacterSearchPattern = string.Empty; + } + } + EditorGUILayout.EndHorizontal(); + #endregion + + // Display Page Navigation + if (!string.IsNullOrEmpty(m_CharacterSearchPattern)) + arraySize = m_CharacterSearchList.Count; + + DisplayPageNavigation(ref m_CurrentCharacterPage, arraySize, itemsPerPage); + } + EditorGUILayout.EndVertical(); + + // Display Character Table Elements + if (arraySize > 0) + { + // Display each character entry using the CharacterPropertyDrawer. + for (int i = itemsPerPage * m_CurrentCharacterPage; i < arraySize && i < itemsPerPage * (m_CurrentCharacterPage + 1); i++) + { + // Define the start of the selection region of the element. + Rect elementStartRegion = GUILayoutUtility.GetRect(0f, 0f, GUILayout.ExpandWidth(true)); + + int elementIndex = i; + if (!string.IsNullOrEmpty(m_CharacterSearchPattern)) + elementIndex = m_CharacterSearchList[i]; + + SerializedProperty characterProperty = m_CharacterTable_prop.GetArrayElementAtIndex(elementIndex); + + EditorGUILayout.BeginVertical(EditorStyles.helpBox); + + EditorGUI.BeginDisabledGroup(i != m_SelectedCharacterRecord); + { + EditorGUILayout.PropertyField(characterProperty); + } + EditorGUI.EndDisabledGroup(); + + EditorGUILayout.EndVertical(); + + // Define the end of the selection region of the element. + Rect elementEndRegion = GUILayoutUtility.GetRect(0f, 0f, GUILayout.ExpandWidth(true)); + + // Check for Item selection + Rect selectionArea = new Rect(elementStartRegion.x, elementStartRegion.y, elementEndRegion.width, elementEndRegion.y - elementStartRegion.y); + if (DoSelectionCheck(selectionArea)) + { + if (m_SelectedCharacterRecord == i) + m_SelectedCharacterRecord = -1; + else + { + m_SelectedCharacterRecord = i; + m_AddCharacterWarning.isEnabled = false; + m_unicodeHexLabel = k_placeholderUnicodeHex; + GUIUtility.keyboardControl = 0; + } + } + + // Draw Selection Highlight and Glyph Options + if (m_SelectedCharacterRecord == i) + { + TMP_EditorUtility.DrawBox(selectionArea, 2f, new Color32(40, 192, 255, 255)); + + // Draw Glyph management options + Rect controlRect = EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight * 1f); + float optionAreaWidth = controlRect.width * 0.6f; + float btnWidth = optionAreaWidth / 3; + + Rect position = new Rect(controlRect.x + controlRect.width * .4f, controlRect.y, btnWidth, controlRect.height); + + // Copy Selected Glyph to Target Glyph ID + GUI.enabled = !string.IsNullOrEmpty(m_dstUnicode); + if (GUI.Button(position, new GUIContent("Copy to"))) + { + GUIUtility.keyboardControl = 0; + + // Convert Hex Value to Decimal + int dstGlyphID = TMP_TextUtilities.StringHexToInt(m_dstUnicode); + + //Add new glyph at target Unicode hex id. + if (!AddNewCharacter(elementIndex, dstGlyphID)) + { + m_AddCharacterWarning.isEnabled = true; + m_AddCharacterWarning.expirationTime = EditorApplication.timeSinceStartup + 1; + } + + m_dstUnicode = string.Empty; + m_isSearchDirty = true; + + TMPro_EventManager.ON_FONT_PROPERTY_CHANGED(true, m_fontAsset); + } + + // Target Glyph ID + GUI.enabled = true; + position.x += btnWidth; + + GUI.SetNextControlName("CharacterID_Input"); + m_dstUnicode = EditorGUI.TextField(position, m_dstUnicode); + + // Placeholder text + EditorGUI.LabelField(position, new GUIContent(m_unicodeHexLabel, "The Unicode (Hex) ID of the duplicated Character"), TMP_UIStyleManager.label); + + // Only filter the input when the destination glyph ID text field has focus. + if (GUI.GetNameOfFocusedControl() == "CharacterID_Input") + { + m_unicodeHexLabel = string.Empty; + + //Filter out unwanted characters. + char chr = Event.current.character; + if ((chr < '0' || chr > '9') && (chr < 'a' || chr > 'f') && (chr < 'A' || chr > 'F')) + { + Event.current.character = '\0'; + } + } + else + { + m_unicodeHexLabel = k_placeholderUnicodeHex; + //m_dstUnicode = string.Empty; + } + + + // Remove Glyph + position.x += btnWidth; + if (GUI.Button(position, "Remove")) + { + GUIUtility.keyboardControl = 0; + + RemoveCharacterFromList(elementIndex); + + isAssetDirty = true; + m_SelectedCharacterRecord = -1; + m_isSearchDirty = true; + break; + } + + if (m_AddCharacterWarning.isEnabled && EditorApplication.timeSinceStartup < m_AddCharacterWarning.expirationTime) + { + EditorGUILayout.HelpBox("The Destination Character ID already exists", MessageType.Warning); + } + + } + } + } + + DisplayPageNavigation(ref m_CurrentCharacterPage, arraySize, itemsPerPage); + + EditorGUILayout.Space(); + } + #endregion + + // GLYPH TABLE + #region Glyph Table + EditorGUIUtility.labelWidth = labelWidth; + EditorGUIUtility.fieldWidth = fieldWidth; + EditorGUI.indentLevel = 0; + rect = EditorGUILayout.GetControlRect(false, 24); + + GUIStyle glyphPanelStyle = new GUIStyle(EditorStyles.helpBox); + + if (GUI.Button(rect, new GUIContent("Glyph Table", "List of glyphs contained in this font asset."), TMP_UIStyleManager.sectionHeader)) + UI_PanelState.glyphTablePanel = !UI_PanelState.glyphTablePanel; + + GUI.Label(rect, (UI_PanelState.glyphTablePanel ? "" : s_UiStateLabel[1]), TMP_UIStyleManager.rightLabel); + + if (UI_PanelState.glyphTablePanel) + { + int arraySize = m_GlyphTable_prop.arraySize; + int itemsPerPage = 15; + + // Display Glyph Management Tools + EditorGUILayout.BeginVertical(EditorStyles.helpBox); + { + // Search Bar implementation + #region DISPLAY SEARCH BAR + EditorGUILayout.BeginHorizontal(); + { + EditorGUIUtility.labelWidth = 130f; + EditorGUI.BeginChangeCheck(); + string searchPattern = EditorGUILayout.TextField("Glyph Search", m_GlyphSearchPattern, "SearchTextField"); + if (EditorGUI.EndChangeCheck() || m_isSearchDirty) + { + if (string.IsNullOrEmpty(searchPattern) == false) + { + m_GlyphSearchPattern = searchPattern; + + // Search Glyph Table for potential matches + SearchGlyphTable(m_GlyphSearchPattern, ref m_GlyphSearchList); + } + else + m_GlyphSearchPattern = null; + + m_isSearchDirty = false; + } + + string styleName = string.IsNullOrEmpty(m_GlyphSearchPattern) ? "SearchCancelButtonEmpty" : "SearchCancelButton"; + if (GUILayout.Button(GUIContent.none, styleName)) + { + GUIUtility.keyboardControl = 0; + m_GlyphSearchPattern = string.Empty; + } + } + EditorGUILayout.EndHorizontal(); + #endregion + + // Display Page Navigation + if (!string.IsNullOrEmpty(m_GlyphSearchPattern)) + arraySize = m_GlyphSearchList.Count; + + DisplayPageNavigation(ref m_CurrentGlyphPage, arraySize, itemsPerPage); + } + EditorGUILayout.EndVertical(); + + // Display Glyph Table Elements + + if (arraySize > 0) + { + // Display each GlyphInfo entry using the GlyphInfo property drawer. + for (int i = itemsPerPage * m_CurrentGlyphPage; i < arraySize && i < itemsPerPage * (m_CurrentGlyphPage + 1); i++) + { + // Define the start of the selection region of the element. + Rect elementStartRegion = GUILayoutUtility.GetRect(0f, 0f, GUILayout.ExpandWidth(true)); + + int elementIndex = i; + if (!string.IsNullOrEmpty(m_GlyphSearchPattern)) + elementIndex = m_GlyphSearchList[i]; + + SerializedProperty glyphProperty = m_GlyphTable_prop.GetArrayElementAtIndex(elementIndex); + + EditorGUILayout.BeginVertical(glyphPanelStyle); + + using (new EditorGUI.DisabledScope(i != m_SelectedGlyphRecord)) + { + EditorGUILayout.PropertyField(glyphProperty); + } + + EditorGUILayout.EndVertical(); + + // Define the end of the selection region of the element. + Rect elementEndRegion = GUILayoutUtility.GetRect(0f, 0f, GUILayout.ExpandWidth(true)); + + // Check for Item selection + Rect selectionArea = new Rect(elementStartRegion.x, elementStartRegion.y, elementEndRegion.width, elementEndRegion.y - elementStartRegion.y); + if (DoSelectionCheck(selectionArea)) + { + if (m_SelectedGlyphRecord == i) + m_SelectedGlyphRecord = -1; + else + { + m_SelectedGlyphRecord = i; + m_AddGlyphWarning.isEnabled = false; + m_unicodeHexLabel = k_placeholderUnicodeHex; + GUIUtility.keyboardControl = 0; + } + } + + // Draw Selection Highlight and Glyph Options + if (m_SelectedGlyphRecord == i) + { + TMP_EditorUtility.DrawBox(selectionArea, 2f, new Color32(40, 192, 255, 255)); + + // Draw Glyph management options + Rect controlRect = EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight * 1f); + float optionAreaWidth = controlRect.width * 0.6f; + float btnWidth = optionAreaWidth / 3; + + Rect position = new Rect(controlRect.x + controlRect.width * .4f, controlRect.y, btnWidth, controlRect.height); + + // Copy Selected Glyph to Target Glyph ID + GUI.enabled = !string.IsNullOrEmpty(m_dstGlyphID); + if (GUI.Button(position, new GUIContent("Copy to"))) + { + GUIUtility.keyboardControl = 0; + + // Convert Hex Value to Decimal + int.TryParse(m_dstGlyphID, out int dstGlyphID); + + //Add new glyph at target Unicode hex id. + if (!AddNewGlyph(elementIndex, dstGlyphID)) + { + m_AddGlyphWarning.isEnabled = true; + m_AddGlyphWarning.expirationTime = EditorApplication.timeSinceStartup + 1; + } + + m_dstGlyphID = string.Empty; + m_isSearchDirty = true; + + TMPro_EventManager.ON_FONT_PROPERTY_CHANGED(true, m_fontAsset); + } + + // Target Glyph ID + GUI.enabled = true; + position.x += btnWidth; + + GUI.SetNextControlName("GlyphID_Input"); + m_dstGlyphID = EditorGUI.TextField(position, m_dstGlyphID); + + // Placeholder text + EditorGUI.LabelField(position, new GUIContent(m_GlyphIDLabel, "The Glyph ID of the duplicated Glyph"), TMP_UIStyleManager.label); + + // Only filter the input when the destination glyph ID text field has focus. + if (GUI.GetNameOfFocusedControl() == "GlyphID_Input") + { + m_GlyphIDLabel = string.Empty; + + //Filter out unwanted characters. + char chr = Event.current.character; + if ((chr < '0' || chr > '9')) + { + Event.current.character = '\0'; + } + } + else + { + m_GlyphIDLabel = k_placeholderGlyphID; + //m_dstGlyphID = string.Empty; + } + + // Remove Glyph + position.x += btnWidth; + if (GUI.Button(position, "Remove")) + { + GUIUtility.keyboardControl = 0; + + RemoveGlyphFromList(elementIndex); + + isAssetDirty = true; + m_SelectedGlyphRecord = -1; + m_isSearchDirty = true; + break; + } + + if (m_AddGlyphWarning.isEnabled && EditorApplication.timeSinceStartup < m_AddGlyphWarning.expirationTime) + { + EditorGUILayout.HelpBox("The Destination Glyph ID already exists", MessageType.Warning); + } + + } + } + } + + DisplayPageNavigation(ref m_CurrentGlyphPage, arraySize, itemsPerPage); + + EditorGUILayout.Space(); + } + #endregion + + // FONT FEATURE TABLE + #region Font Feature Table + EditorGUIUtility.labelWidth = labelWidth; + EditorGUIUtility.fieldWidth = fieldWidth; + EditorGUI.indentLevel = 0; + rect = EditorGUILayout.GetControlRect(false, 24); + + if (GUI.Button(rect, new GUIContent("Glyph Adjustment Table", "List of glyph adjustment / advanced kerning pairs."), TMP_UIStyleManager.sectionHeader)) + UI_PanelState.fontFeatureTablePanel = !UI_PanelState.fontFeatureTablePanel; + + GUI.Label(rect, (UI_PanelState.fontFeatureTablePanel ? "" : s_UiStateLabel[1]), TMP_UIStyleManager.rightLabel); + + if (UI_PanelState.fontFeatureTablePanel) + { + int arraySize = m_GlyphPairAdjustmentRecords_prop.arraySize; + int itemsPerPage = 20; + + // Display Kerning Pair Management Tools + EditorGUILayout.BeginVertical(EditorStyles.helpBox); + { + // Search Bar implementation + #region DISPLAY SEARCH BAR + EditorGUILayout.BeginHorizontal(); + { + EditorGUIUtility.labelWidth = 150f; + EditorGUI.BeginChangeCheck(); + string searchPattern = EditorGUILayout.TextField("Adjustment Pair Search", m_KerningTableSearchPattern, "SearchTextField"); + if (EditorGUI.EndChangeCheck() || m_isSearchDirty) + { + if (string.IsNullOrEmpty(searchPattern) == false) + { + m_KerningTableSearchPattern = searchPattern; + + // Search Glyph Table for potential matches + SearchKerningTable(m_KerningTableSearchPattern, ref m_KerningTableSearchList); + } + else + m_KerningTableSearchPattern = null; + + m_isSearchDirty = false; + } + + string styleName = string.IsNullOrEmpty(m_KerningTableSearchPattern) ? "SearchCancelButtonEmpty" : "SearchCancelButton"; + if (GUILayout.Button(GUIContent.none, styleName)) + { + GUIUtility.keyboardControl = 0; + m_KerningTableSearchPattern = string.Empty; + } + } + EditorGUILayout.EndHorizontal(); + #endregion + + // Display Page Navigation + if (!string.IsNullOrEmpty(m_KerningTableSearchPattern)) + arraySize = m_KerningTableSearchList.Count; + + DisplayPageNavigation(ref m_CurrentKerningPage, arraySize, itemsPerPage); + } + EditorGUILayout.EndVertical(); + + if (arraySize > 0) + { + // Display each GlyphInfo entry using the GlyphInfo property drawer. + for (int i = itemsPerPage * m_CurrentKerningPage; i < arraySize && i < itemsPerPage * (m_CurrentKerningPage + 1); i++) + { + // Define the start of the selection region of the element. + Rect elementStartRegion = GUILayoutUtility.GetRect(0f, 0f, GUILayout.ExpandWidth(true)); + + int elementIndex = i; + if (!string.IsNullOrEmpty(m_KerningTableSearchPattern)) + elementIndex = m_KerningTableSearchList[i]; + + SerializedProperty pairAdjustmentRecordProperty = m_GlyphPairAdjustmentRecords_prop.GetArrayElementAtIndex(elementIndex); + + EditorGUILayout.BeginVertical(EditorStyles.helpBox); + + using (new EditorGUI.DisabledScope(i != m_SelectedAdjustmentRecord)) + { + EditorGUILayout.PropertyField(pairAdjustmentRecordProperty, new GUIContent("Selectable")); + } + + EditorGUILayout.EndVertical(); + + // Define the end of the selection region of the element. + Rect elementEndRegion = GUILayoutUtility.GetRect(0f, 0f, GUILayout.ExpandWidth(true)); + + // Check for Item selection + Rect selectionArea = new Rect(elementStartRegion.x, elementStartRegion.y, elementEndRegion.width, elementEndRegion.y - elementStartRegion.y); + if (DoSelectionCheck(selectionArea)) + { + if (m_SelectedAdjustmentRecord == i) + { + m_SelectedAdjustmentRecord = -1; + } + else + { + m_SelectedAdjustmentRecord = i; + GUIUtility.keyboardControl = 0; + } + } + + // Draw Selection Highlight and Kerning Pair Options + if (m_SelectedAdjustmentRecord == i) + { + TMP_EditorUtility.DrawBox(selectionArea, 2f, new Color32(40, 192, 255, 255)); + + // Draw Glyph management options + Rect controlRect = EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight * 1f); + float optionAreaWidth = controlRect.width; + float btnWidth = optionAreaWidth / 4; + + Rect position = new Rect(controlRect.x + controlRect.width - btnWidth, controlRect.y, btnWidth, controlRect.height); + + // Remove Kerning pair + GUI.enabled = true; + if (GUI.Button(position, "Remove")) + { + GUIUtility.keyboardControl = 0; + + RemoveAdjustmentPairFromList(i); + + isAssetDirty = true; + m_SelectedAdjustmentRecord = -1; + m_isSearchDirty = true; + break; + } + } + } + } + + DisplayPageNavigation(ref m_CurrentKerningPage, arraySize, itemsPerPage); + + GUILayout.Space(5); + + // Add new kerning pair + EditorGUILayout.BeginVertical(EditorStyles.helpBox); + { + EditorGUILayout.PropertyField(m_EmptyGlyphPairAdjustmentRecord_prop); + } + EditorGUILayout.EndVertical(); + + if (GUILayout.Button("Add New Glyph Adjustment Record")) + { + SerializedProperty firstAdjustmentRecordProperty = m_EmptyGlyphPairAdjustmentRecord_prop.FindPropertyRelative("m_FirstAdjustmentRecord"); + SerializedProperty secondAdjustmentRecordProperty = m_EmptyGlyphPairAdjustmentRecord_prop.FindPropertyRelative("m_SecondAdjustmentRecord"); + + uint firstGlyphIndex = (uint)firstAdjustmentRecordProperty.FindPropertyRelative("m_GlyphIndex").intValue; + uint secondGlyphIndex = (uint)secondAdjustmentRecordProperty.FindPropertyRelative("m_GlyphIndex").intValue; + + TMP_GlyphValueRecord firstValueRecord = GetValueRecord(firstAdjustmentRecordProperty.FindPropertyRelative("m_GlyphValueRecord")); + TMP_GlyphValueRecord secondValueRecord = GetValueRecord(secondAdjustmentRecordProperty.FindPropertyRelative("m_GlyphValueRecord")); + + errorCode = -1; + long pairKey = (long)secondGlyphIndex << 32 | firstGlyphIndex; + if (m_FontFeatureTable.m_GlyphPairAdjustmentRecordLookupDictionary.ContainsKey(pairKey) == false) + { + TMP_GlyphPairAdjustmentRecord adjustmentRecord = new TMP_GlyphPairAdjustmentRecord(new TMP_GlyphAdjustmentRecord(firstGlyphIndex, firstValueRecord), new TMP_GlyphAdjustmentRecord(secondGlyphIndex, secondValueRecord)); + m_FontFeatureTable.m_GlyphPairAdjustmentRecords.Add(adjustmentRecord); + m_FontFeatureTable.m_GlyphPairAdjustmentRecordLookupDictionary.Add(pairKey, adjustmentRecord); + errorCode = 0; + } + + // Add glyphs and characters + uint firstCharacter = m_SerializedPropertyHolder.firstCharacter; + if (!m_fontAsset.characterLookupTable.ContainsKey(firstCharacter)) + m_fontAsset.TryAddCharacterInternal(firstCharacter, out TMP_Character character); + + uint secondCharacter = m_SerializedPropertyHolder.secondCharacter; + if (!m_fontAsset.characterLookupTable.ContainsKey(secondCharacter)) + m_fontAsset.TryAddCharacterInternal(secondCharacter, out TMP_Character character); + + // Sort Kerning Pairs & Reload Font Asset if new kerning pair was added. + if (errorCode != -1) + { + m_FontFeatureTable.SortGlyphPairAdjustmentRecords(); + serializedObject.ApplyModifiedProperties(); + isAssetDirty = true; + m_isSearchDirty = true; + } + else + { + timeStamp = System.DateTime.Now.AddSeconds(5); + } + + // Clear Add Kerning Pair Panel + // TODO + } + + if (errorCode == -1) + { + GUILayout.BeginHorizontal(); + GUILayout.FlexibleSpace(); + GUILayout.Label("Kerning Pair already exists!", TMP_UIStyleManager.label); + GUILayout.FlexibleSpace(); + GUILayout.EndHorizontal(); + + if (System.DateTime.Now > timeStamp) + errorCode = 0; + } + } + #endregion + + if (serializedObject.ApplyModifiedProperties() || evt_cmd == k_UndoRedo || isAssetDirty) + { + // Delay callback until user has decided to Apply or Revert the changes. + if (m_DisplayDestructiveChangeWarning == false) + TMPro_EventManager.ON_FONT_PROPERTY_CHANGED(true, m_fontAsset); + + if (m_fontAsset.m_IsFontAssetLookupTablesDirty || evt_cmd == k_UndoRedo) + m_fontAsset.ReadFontAssetDefinition(); + + isAssetDirty = false; + EditorUtility.SetDirty(target); + } + + + // Clear selection if mouse event was not consumed. + GUI.enabled = true; + if (currentEvent.type == EventType.MouseDown && currentEvent.button == 0) + m_SelectedAdjustmentRecord = -1; + + } + + void CleanFallbackFontAssetTable() + { + SerializedProperty m_FallbackFontAsseTable = serializedObject.FindProperty("m_FallbackFontAssetTable"); + + bool isListDirty = false; + + int elementCount = m_FallbackFontAsseTable.arraySize; + + for (int i = 0; i < elementCount; i++) + { + SerializedProperty element = m_FallbackFontAsseTable.GetArrayElementAtIndex(i); + if (element.objectReferenceValue == null) + { + m_FallbackFontAsseTable.DeleteArrayElementAtIndex(i); + elementCount -= 1; + i -= 1; + + isListDirty = true; + } + } + + if (isListDirty) + { + serializedObject.ApplyModifiedProperties(); + serializedObject.Update(); + } + } + + void SavedAtlasGenerationSettings() + { + m_AtlasSettings.glyphRenderMode = (GlyphRenderMode)m_AtlasRenderMode_prop.intValue; + m_AtlasSettings.pointSize = m_SamplingPointSize_prop.intValue; + m_AtlasSettings.padding = m_AtlasPadding_prop.intValue; + m_AtlasSettings.atlasWidth = m_AtlasWidth_prop.intValue; + m_AtlasSettings.atlasHeight = m_AtlasHeight_prop.intValue; + } + + void RestoreAtlasGenerationSettings() + { + m_AtlasRenderMode_prop.intValue = (int)m_AtlasSettings.glyphRenderMode; + m_SamplingPointSize_prop.intValue = m_AtlasSettings.pointSize; + m_AtlasPadding_prop.intValue = m_AtlasSettings.padding; + m_AtlasWidth_prop.intValue = m_AtlasSettings.atlasWidth; + m_AtlasHeight_prop.intValue = m_AtlasSettings.atlasHeight; + } + + + void UpdateFontAssetCreationSettings() + { + m_fontAsset.m_CreationSettings.pointSize = m_SamplingPointSize_prop.intValue; + m_fontAsset.m_CreationSettings.renderMode = m_AtlasRenderMode_prop.intValue; + m_fontAsset.m_CreationSettings.padding = m_AtlasPadding_prop.intValue; + m_fontAsset.m_CreationSettings.atlasWidth = m_AtlasWidth_prop.intValue; + m_fontAsset.m_CreationSettings.atlasHeight = m_AtlasHeight_prop.intValue; + } + + + void UpdateCharacterData(SerializedProperty property, int index) + { + TMP_Character character = m_fontAsset.characterTable[index]; + + character.unicode = (uint)property.FindPropertyRelative("m_Unicode").intValue; + character.scale = property.FindPropertyRelative("m_Scale").floatValue; + + SerializedProperty glyphProperty = property.FindPropertyRelative("m_Glyph"); + character.glyph.index = (uint)glyphProperty.FindPropertyRelative("m_Index").intValue; + + SerializedProperty glyphRectProperty = glyphProperty.FindPropertyRelative("m_GlyphRect"); + character.glyph.glyphRect = new GlyphRect(glyphRectProperty.FindPropertyRelative("m_X").intValue, glyphRectProperty.FindPropertyRelative("m_Y").intValue, glyphRectProperty.FindPropertyRelative("m_Width").intValue, glyphRectProperty.FindPropertyRelative("m_Height").intValue); + + SerializedProperty glyphMetricsProperty = glyphProperty.FindPropertyRelative("m_Metrics"); + character.glyph.metrics = new GlyphMetrics(glyphMetricsProperty.FindPropertyRelative("m_Width").floatValue, glyphMetricsProperty.FindPropertyRelative("m_Height").floatValue, glyphMetricsProperty.FindPropertyRelative("m_HorizontalBearingX").floatValue, glyphMetricsProperty.FindPropertyRelative("m_HorizontalBearingY").floatValue, glyphMetricsProperty.FindPropertyRelative("m_HorizontalAdvance").floatValue); + + character.glyph.scale = glyphProperty.FindPropertyRelative("m_Scale").floatValue; + + character.glyph.atlasIndex = glyphProperty.FindPropertyRelative("m_AtlasIndex").intValue; + } + + + void UpdateGlyphData(SerializedProperty property, int index) + { + Glyph glyph = m_fontAsset.glyphTable[index]; + + glyph.index = (uint)property.FindPropertyRelative("m_Index").intValue; + + SerializedProperty glyphRect = property.FindPropertyRelative("m_GlyphRect"); + glyph.glyphRect = new GlyphRect(glyphRect.FindPropertyRelative("m_X").intValue, glyphRect.FindPropertyRelative("m_Y").intValue, glyphRect.FindPropertyRelative("m_Width").intValue, glyphRect.FindPropertyRelative("m_Height").intValue); + + SerializedProperty glyphMetrics = property.FindPropertyRelative("m_Metrics"); + glyph.metrics = new GlyphMetrics(glyphMetrics.FindPropertyRelative("m_Width").floatValue, glyphMetrics.FindPropertyRelative("m_Height").floatValue, glyphMetrics.FindPropertyRelative("m_HorizontalBearingX").floatValue, glyphMetrics.FindPropertyRelative("m_HorizontalBearingY").floatValue, glyphMetrics.FindPropertyRelative("m_HorizontalAdvance").floatValue); + + glyph.scale = property.FindPropertyRelative("m_Scale").floatValue; + } + + + void DisplayPageNavigation(ref int currentPage, int arraySize, int itemsPerPage) + { + Rect pagePos = EditorGUILayout.GetControlRect(false, 20); + pagePos.width /= 3; + + int shiftMultiplier = Event.current.shift ? 10 : 1; // Page + Shift goes 10 page forward + + // Previous Page + GUI.enabled = currentPage > 0; + + if (GUI.Button(pagePos, "Previous Page")) + currentPage -= 1 * shiftMultiplier; + + + // Page Counter + GUI.enabled = true; + pagePos.x += pagePos.width; + int totalPages = (int)(arraySize / (float)itemsPerPage + 0.999f); + GUI.Label(pagePos, "Page " + (currentPage + 1) + " / " + totalPages, TMP_UIStyleManager.centeredLabel); + + // Next Page + pagePos.x += pagePos.width; + GUI.enabled = itemsPerPage * (currentPage + 1) < arraySize; + + if (GUI.Button(pagePos, "Next Page")) + currentPage += 1 * shiftMultiplier; + + // Clamp page range + currentPage = Mathf.Clamp(currentPage, 0, arraySize / itemsPerPage); + + GUI.enabled = true; + } + + + /// + /// + /// + /// + /// + bool AddNewGlyph(int srcIndex, int dstGlyphID) + { + // Make sure Destination Glyph ID doesn't already contain a Glyph + if (m_fontAsset.glyphLookupTable.ContainsKey((uint)dstGlyphID)) + return false; + + // Add new element to glyph list. + m_GlyphTable_prop.arraySize += 1; + + // Get a reference to the source glyph. + SerializedProperty sourceGlyph = m_GlyphTable_prop.GetArrayElementAtIndex(srcIndex); + + int dstIndex = m_GlyphTable_prop.arraySize - 1; + + // Get a reference to the target / destination glyph. + SerializedProperty targetGlyph = m_GlyphTable_prop.GetArrayElementAtIndex(dstIndex); + + CopyGlyphSerializedProperty(sourceGlyph, ref targetGlyph); + + // Update the ID of the glyph + targetGlyph.FindPropertyRelative("m_Index").intValue = dstGlyphID; + + serializedObject.ApplyModifiedProperties(); + + m_fontAsset.SortGlyphTable(); + + m_fontAsset.ReadFontAssetDefinition(); + + return true; + } + + /// + /// + /// + /// + void RemoveGlyphFromList(int index) + { + if (index > m_GlyphTable_prop.arraySize) + return; + + int targetGlyphIndex = m_GlyphTable_prop.GetArrayElementAtIndex(index).FindPropertyRelative("m_Index").intValue; + + m_GlyphTable_prop.DeleteArrayElementAtIndex(index); + + // Remove all characters referencing this glyph. + for (int i = 0; i < m_CharacterTable_prop.arraySize; i++) + { + int glyphIndex = m_CharacterTable_prop.GetArrayElementAtIndex(i).FindPropertyRelative("m_GlyphIndex").intValue; + + if (glyphIndex == targetGlyphIndex) + { + // Remove character + m_CharacterTable_prop.DeleteArrayElementAtIndex(i); + } + } + + serializedObject.ApplyModifiedProperties(); + + m_fontAsset.ReadFontAssetDefinition(); + } + + bool AddNewCharacter(int srcIndex, int dstGlyphID) + { + // Make sure Destination Glyph ID doesn't already contain a Glyph + if (m_fontAsset.characterLookupTable.ContainsKey((uint)dstGlyphID)) + return false; + + // Add new element to glyph list. + m_CharacterTable_prop.arraySize += 1; + + // Get a reference to the source glyph. + SerializedProperty sourceCharacter = m_CharacterTable_prop.GetArrayElementAtIndex(srcIndex); + + int dstIndex = m_CharacterTable_prop.arraySize - 1; + + // Get a reference to the target / destination glyph. + SerializedProperty targetCharacter = m_CharacterTable_prop.GetArrayElementAtIndex(dstIndex); + + CopyCharacterSerializedProperty(sourceCharacter, ref targetCharacter); + + // Update the ID of the glyph + targetCharacter.FindPropertyRelative("m_Unicode").intValue = dstGlyphID; + + serializedObject.ApplyModifiedProperties(); + + m_fontAsset.SortCharacterTable(); + + m_fontAsset.ReadFontAssetDefinition(); + + return true; + } + + void RemoveCharacterFromList(int index) + { + if (index > m_CharacterTable_prop.arraySize) + return; + + m_CharacterTable_prop.DeleteArrayElementAtIndex(index); + + serializedObject.ApplyModifiedProperties(); + + m_fontAsset.ReadFontAssetDefinition(); + } + + + // Check if any of the Style elements were clicked on. + private bool DoSelectionCheck(Rect selectionArea) + { + Event currentEvent = Event.current; + + switch (currentEvent.type) + { + case EventType.MouseDown: + if (selectionArea.Contains(currentEvent.mousePosition) && currentEvent.button == 0) + { + currentEvent.Use(); + return true; + } + + break; + } + + return false; + } + + TMP_GlyphValueRecord GetValueRecord(SerializedProperty property) + { + TMP_GlyphValueRecord record = new TMP_GlyphValueRecord(); + record.xPlacement = property.FindPropertyRelative("m_XPlacement").floatValue; + record.yPlacement = property.FindPropertyRelative("m_YPlacement").floatValue; + record.xAdvance = property.FindPropertyRelative("m_XAdvance").floatValue; + record.yAdvance = property.FindPropertyRelative("m_YAdvance").floatValue; + + return record; + } + + void RemoveAdjustmentPairFromList(int index) + { + if (index > m_GlyphPairAdjustmentRecords_prop.arraySize) + return; + + m_GlyphPairAdjustmentRecords_prop.DeleteArrayElementAtIndex(index); + + serializedObject.ApplyModifiedProperties(); + + m_fontAsset.ReadFontAssetDefinition(); + } + + /// + /// + /// + /// + /// + void CopyGlyphSerializedProperty(SerializedProperty srcGlyph, ref SerializedProperty dstGlyph) + { + // TODO : Should make a generic function which copies each of the properties. + dstGlyph.FindPropertyRelative("m_Index").intValue = srcGlyph.FindPropertyRelative("m_Index").intValue; + + // Glyph -> GlyphMetrics + SerializedProperty srcGlyphMetrics = srcGlyph.FindPropertyRelative("m_Metrics"); + SerializedProperty dstGlyphMetrics = dstGlyph.FindPropertyRelative("m_Metrics"); + + dstGlyphMetrics.FindPropertyRelative("m_Width").floatValue = srcGlyphMetrics.FindPropertyRelative("m_Width").floatValue; + dstGlyphMetrics.FindPropertyRelative("m_Height").floatValue = srcGlyphMetrics.FindPropertyRelative("m_Height").floatValue; + dstGlyphMetrics.FindPropertyRelative("m_HorizontalBearingX").floatValue = srcGlyphMetrics.FindPropertyRelative("m_HorizontalBearingX").floatValue; + dstGlyphMetrics.FindPropertyRelative("m_HorizontalBearingY").floatValue = srcGlyphMetrics.FindPropertyRelative("m_HorizontalBearingY").floatValue; + dstGlyphMetrics.FindPropertyRelative("m_HorizontalAdvance").floatValue = srcGlyphMetrics.FindPropertyRelative("m_HorizontalAdvance").floatValue; + + // Glyph -> GlyphRect + SerializedProperty srcGlyphRect = srcGlyph.FindPropertyRelative("m_GlyphRect"); + SerializedProperty dstGlyphRect = dstGlyph.FindPropertyRelative("m_GlyphRect"); + + dstGlyphRect.FindPropertyRelative("m_X").intValue = srcGlyphRect.FindPropertyRelative("m_X").intValue; + dstGlyphRect.FindPropertyRelative("m_Y").intValue = srcGlyphRect.FindPropertyRelative("m_Y").intValue; + dstGlyphRect.FindPropertyRelative("m_Width").intValue = srcGlyphRect.FindPropertyRelative("m_Width").intValue; + dstGlyphRect.FindPropertyRelative("m_Height").intValue = srcGlyphRect.FindPropertyRelative("m_Height").intValue; + + dstGlyph.FindPropertyRelative("m_Scale").floatValue = srcGlyph.FindPropertyRelative("m_Scale").floatValue; + dstGlyph.FindPropertyRelative("m_AtlasIndex").intValue = srcGlyph.FindPropertyRelative("m_AtlasIndex").intValue; + } + + + void CopyCharacterSerializedProperty(SerializedProperty source, ref SerializedProperty target) + { + // TODO : Should make a generic function which copies each of the properties. + int unicode = source.FindPropertyRelative("m_Unicode").intValue; + target.FindPropertyRelative("m_Unicode").intValue = unicode; + + int srcGlyphIndex = source.FindPropertyRelative("m_GlyphIndex").intValue; + target.FindPropertyRelative("m_GlyphIndex").intValue = srcGlyphIndex; + + target.FindPropertyRelative("m_Scale").floatValue = source.FindPropertyRelative("m_Scale").floatValue; + } + + + /// + /// + /// + /// + /// + void SearchGlyphTable (string searchPattern, ref List searchResults) + { + if (searchResults == null) searchResults = new List(); + + searchResults.Clear(); + + int arraySize = m_GlyphTable_prop.arraySize; + + for (int i = 0; i < arraySize; i++) + { + SerializedProperty sourceGlyph = m_GlyphTable_prop.GetArrayElementAtIndex(i); + + int id = sourceGlyph.FindPropertyRelative("m_Index").intValue; + + // Check for potential match against a character. + //if (searchPattern.Length == 1 && id == searchPattern[0]) + // searchResults.Add(i); + + // Check for potential match against decimal id + if (id.ToString().Contains(searchPattern)) + searchResults.Add(i); + + //if (id.ToString("x").Contains(searchPattern)) + // searchResults.Add(i); + + //if (id.ToString("X").Contains(searchPattern)) + // searchResults.Add(i); + } + } + + + void SearchCharacterTable(string searchPattern, ref List searchResults) + { + if (searchResults == null) searchResults = new List(); + + searchResults.Clear(); + + int arraySize = m_CharacterTable_prop.arraySize; + + for (int i = 0; i < arraySize; i++) + { + SerializedProperty sourceCharacter = m_CharacterTable_prop.GetArrayElementAtIndex(i); + + int id = sourceCharacter.FindPropertyRelative("m_Unicode").intValue; + + // Check for potential match against a character. + if (searchPattern.Length == 1 && id == searchPattern[0]) + searchResults.Add(i); + else if (id.ToString("x").Contains(searchPattern)) + searchResults.Add(i); + else if (id.ToString("X").Contains(searchPattern)) + searchResults.Add(i); + + // Check for potential match against decimal id + //if (id.ToString().Contains(searchPattern)) + // searchResults.Add(i); + } + } + + + void SearchKerningTable(string searchPattern, ref List searchResults) + { + if (searchResults == null) searchResults = new List(); + + searchResults.Clear(); + + // Lookup glyph index of potential characters contained in the search pattern. + uint firstGlyphIndex = 0; + if (searchPattern.Length > 0 && m_fontAsset.characterLookupTable.TryGetValue(searchPattern[0], out TMP_Character firstCharacterSearch)) + firstGlyphIndex = firstCharacterSearch.glyphIndex; + + uint secondGlyphIndex = 0; + if (searchPattern.Length > 1 && m_fontAsset.characterLookupTable.TryGetValue(searchPattern[1], out TMP_Character secondCharacterSearch)) + secondGlyphIndex = secondCharacterSearch.glyphIndex; + + int arraySize = m_GlyphPairAdjustmentRecords_prop.arraySize; + + for (int i = 0; i < arraySize; i++) + { + SerializedProperty record = m_GlyphPairAdjustmentRecords_prop.GetArrayElementAtIndex(i); + + SerializedProperty firstAdjustmentRecord = record.FindPropertyRelative("m_FirstAdjustmentRecord"); + SerializedProperty secondAdjustmentRecord = record.FindPropertyRelative("m_SecondAdjustmentRecord"); + + int firstGlyph = firstAdjustmentRecord.FindPropertyRelative("m_GlyphIndex").intValue; + int secondGlyph = secondAdjustmentRecord.FindPropertyRelative("m_GlyphIndex").intValue; + + if (firstGlyphIndex == firstGlyph && secondGlyphIndex == secondGlyph) + searchResults.Add(i); + else if (searchPattern.Length == 1 && (firstGlyphIndex == firstGlyph || firstGlyphIndex == secondGlyph)) + searchResults.Add(i); + else if (firstGlyph.ToString().Contains(searchPattern)) + searchResults.Add(i); + else if (secondGlyph.ToString().Contains(searchPattern)) + searchResults.Add(i); + } + } + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_FontAssetEditor.cs.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_FontAssetEditor.cs.meta new file mode 100644 index 0000000..b243777 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_FontAssetEditor.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 96b44f7d98314b139324a8a87eb66067 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_FontAsset_CreationMenu.cs b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_FontAsset_CreationMenu.cs new file mode 100644 index 0000000..dca6d14 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_FontAsset_CreationMenu.cs @@ -0,0 +1,190 @@ +using UnityEngine; +using UnityEditor; +using System.Linq; +using System.IO; +using System.Collections; +using System.Collections.Generic; +using UnityEngine.TextCore; +using UnityEngine.TextCore.LowLevel; +using TMPro; + + +namespace TMPro +{ + public static class TMP_FontAsset_CreationMenu + { + /* + [MenuItem("Assets/Create/TextMeshPro/Font Asset Fallback", false, 105)] + public static void CreateFallbackFontAsset() + { + Object target = Selection.activeObject; + + // Make sure the selection is a font file + if (target == null || target.GetType() != typeof(TMP_FontAsset)) + { + Debug.LogWarning("A Font file must first be selected in order to create a Font Asset."); + return; + } + + TMP_FontAsset sourceFontAsset = (TMP_FontAsset)target; + + string sourceFontFilePath = AssetDatabase.GetAssetPath(target); + + string folderPath = Path.GetDirectoryName(sourceFontFilePath); + string assetName = Path.GetFileNameWithoutExtension(sourceFontFilePath); + + string newAssetFilePathWithName = AssetDatabase.GenerateUniqueAssetPath(folderPath + "/" + assetName + " - Fallback.asset"); + + //// Create new TM Font Asset. + TMP_FontAsset fontAsset = ScriptableObject.CreateInstance(); + AssetDatabase.CreateAsset(fontAsset, newAssetFilePathWithName); + + fontAsset.version = "1.1.0"; + + fontAsset.faceInfo = sourceFontAsset.faceInfo; + + fontAsset.m_SourceFontFileGUID = sourceFontAsset.m_SourceFontFileGUID; + fontAsset.m_SourceFontFile_EditorRef = sourceFontAsset.m_SourceFontFile_EditorRef; + fontAsset.atlasPopulationMode = TMP_FontAsset.AtlasPopulationMode.Dynamic; + + int atlasWidth = fontAsset.atlasWidth = sourceFontAsset.atlasWidth; + int atlasHeight = fontAsset.atlasHeight = sourceFontAsset.atlasHeight; + int atlasPadding = fontAsset.atlasPadding = sourceFontAsset.atlasPadding; + fontAsset.atlasRenderMode = sourceFontAsset.atlasRenderMode; + + // Initialize array for the font atlas textures. + fontAsset.atlasTextures = new Texture2D[1]; + + // Create and add font atlas texture + Texture2D texture = new Texture2D(atlasWidth, atlasHeight, TextureFormat.Alpha8, false); + Color32[] colors = new Color32[atlasWidth * atlasHeight]; + texture.SetPixels32(colors); + + texture.name = assetName + " Atlas"; + fontAsset.atlasTextures[0] = texture; + AssetDatabase.AddObjectToAsset(texture, fontAsset); + + // Add free rectangle of the size of the texture. + int packingModifier = ((GlyphRasterModes)fontAsset.atlasRenderMode & GlyphRasterModes.RASTER_MODE_BITMAP) == GlyphRasterModes.RASTER_MODE_BITMAP ? 0 : 1; + fontAsset.m_FreeGlyphRects = new List() { new GlyphRect(0, 0, atlasWidth - packingModifier, atlasHeight - packingModifier) }; + fontAsset.m_UsedGlyphRects = new List(); + + // Create new Material and Add it as Sub-Asset + Material tmp_material = new Material(sourceFontAsset.material); + + tmp_material.name = texture.name + " Material"; + tmp_material.SetTexture(ShaderUtilities.ID_MainTex, texture); + tmp_material.SetFloat(ShaderUtilities.ID_TextureWidth, atlasWidth); + tmp_material.SetFloat(ShaderUtilities.ID_TextureHeight, atlasHeight); + + tmp_material.SetFloat(ShaderUtilities.ID_GradientScale, atlasPadding + packingModifier); + + tmp_material.SetFloat(ShaderUtilities.ID_WeightNormal, fontAsset.normalStyle); + tmp_material.SetFloat(ShaderUtilities.ID_WeightBold, fontAsset.boldStyle); + + fontAsset.material = tmp_material; + + AssetDatabase.AddObjectToAsset(tmp_material, fontAsset); + + // Add Font Asset Creation Settings + // TODO + + // Not sure if this is still necessary in newer versions of Unity. + EditorUtility.SetDirty(fontAsset); + + AssetDatabase.SaveAssets(); + } + */ + + //[MenuItem("Assets/Create/TextMeshPro/Font Asset #%F12", true)] + //public static bool CreateFontAssetMenuValidation() + //{ + // return false; + //} + + [MenuItem("Assets/Create/TextMeshPro/Font Asset #%F12", false, 100)] + public static void CreateFontAsset() + { + Object target = Selection.activeObject; + + // Make sure the selection is a font file + if (target == null || target.GetType() != typeof(Font)) + { + Debug.LogWarning("A Font file must first be selected in order to create a Font Asset."); + return; + } + + Font sourceFont = (Font)target; + + string sourceFontFilePath = AssetDatabase.GetAssetPath(target); + + string folderPath = Path.GetDirectoryName(sourceFontFilePath); + string assetName = Path.GetFileNameWithoutExtension(sourceFontFilePath); + + string newAssetFilePathWithName = AssetDatabase.GenerateUniqueAssetPath(folderPath + "/" + assetName + " SDF.asset"); + + //// Create new TM Font Asset. + TMP_FontAsset fontAsset = ScriptableObject.CreateInstance(); + AssetDatabase.CreateAsset(fontAsset, newAssetFilePathWithName); + + fontAsset.version = "1.1.0"; + + // Set face information + FontEngine.InitializeFontEngine(); + FontEngine.LoadFontFace(sourceFont, 90); + fontAsset.faceInfo = FontEngine.GetFaceInfo(); + + // Set font reference and GUID + fontAsset.m_SourceFontFileGUID = AssetDatabase.AssetPathToGUID(sourceFontFilePath); + fontAsset.m_SourceFontFile_EditorRef = sourceFont; + fontAsset.atlasPopulationMode = AtlasPopulationMode.Dynamic; + + // Default atlas resolution is 1024 x 1024. + int atlasWidth = fontAsset.atlasWidth = 1024; + int atlasHeight = fontAsset.atlasHeight = 1024; + int atlasPadding = fontAsset.atlasPadding = 9; + fontAsset.atlasRenderMode = GlyphRenderMode.SDFAA; + + // Initialize array for the font atlas textures. + fontAsset.atlasTextures = new Texture2D[1]; + + // Create atlas texture of size zero. + Texture2D texture = new Texture2D(0, 0, TextureFormat.Alpha8, false); + + texture.name = assetName + " Atlas"; + fontAsset.atlasTextures[0] = texture; + AssetDatabase.AddObjectToAsset(texture, fontAsset); + + // Add free rectangle of the size of the texture. + int packingModifier = ((GlyphRasterModes)fontAsset.atlasRenderMode & GlyphRasterModes.RASTER_MODE_BITMAP) == GlyphRasterModes.RASTER_MODE_BITMAP ? 0 : 1; + fontAsset.freeGlyphRects = new List() { new GlyphRect(0, 0, atlasWidth - packingModifier, atlasHeight - packingModifier) }; + fontAsset.usedGlyphRects = new List(); + + // Create new Material and Add it as Sub-Asset + Shader default_Shader = Shader.Find("TextMeshPro/Distance Field"); + Material tmp_material = new Material(default_Shader); + + tmp_material.name = texture.name + " Material"; + tmp_material.SetTexture(ShaderUtilities.ID_MainTex, texture); + tmp_material.SetFloat(ShaderUtilities.ID_TextureWidth, atlasWidth); + tmp_material.SetFloat(ShaderUtilities.ID_TextureHeight, atlasHeight); + + tmp_material.SetFloat(ShaderUtilities.ID_GradientScale, atlasPadding + packingModifier); + + tmp_material.SetFloat(ShaderUtilities.ID_WeightNormal, fontAsset.normalStyle); + tmp_material.SetFloat(ShaderUtilities.ID_WeightBold, fontAsset.boldStyle); + + fontAsset.material = tmp_material; + + AssetDatabase.AddObjectToAsset(tmp_material, fontAsset); + + // Add Font Asset Creation Settings + fontAsset.creationSettings = new FontAssetCreationSettings(fontAsset.m_SourceFontFileGUID, fontAsset.faceInfo.pointSize, 0, atlasPadding, 0, 1024, 1024, 7, string.Empty, (int)GlyphRenderMode.SDFAA); + + // Not sure if this is still necessary in newer versions of Unity. + EditorUtility.SetDirty(fontAsset); + + AssetDatabase.SaveAssets(); + } + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_FontAsset_CreationMenu.cs.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_FontAsset_CreationMenu.cs.meta new file mode 100644 index 0000000..ade7a84 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_FontAsset_CreationMenu.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7496af95dfe67cf429ac65edaaf99106 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_GlyphPairAdjustmentRecordPropertyDrawer.cs b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_GlyphPairAdjustmentRecordPropertyDrawer.cs new file mode 100644 index 0000000..1ea8e80 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_GlyphPairAdjustmentRecordPropertyDrawer.cs @@ -0,0 +1,382 @@ +using UnityEngine; +using UnityEngine.TextCore; +using UnityEngine.TextCore.LowLevel; +using UnityEditor; +using System.Collections; +using System.Text.RegularExpressions; + + +namespace TMPro.EditorUtilities +{ + + [CustomPropertyDrawer(typeof(TMP_GlyphPairAdjustmentRecord))] + public class TMP_GlyphPairAdjustmentRecordPropertyDrawer : PropertyDrawer + { + private bool isEditingEnabled = false; + private bool isSelectable = false; + + private string m_FirstCharacter = string.Empty; + private string m_SecondCharacter = string.Empty; + private string m_PreviousInput; + + static GUIContent s_CharacterTextFieldLabel = new GUIContent("Char:", "Enter the character or its UTF16 or UTF32 Unicode character escape sequence. For UTF16 use \"\\uFF00\" and for UTF32 use \"\\UFF00FF00\" representation."); + + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + SerializedProperty prop_FirstAdjustmentRecord = property.FindPropertyRelative("m_FirstAdjustmentRecord"); + SerializedProperty prop_SecondAdjustmentRecord = property.FindPropertyRelative("m_SecondAdjustmentRecord"); + + SerializedProperty prop_FirstGlyphIndex = prop_FirstAdjustmentRecord.FindPropertyRelative("m_GlyphIndex"); + SerializedProperty prop_FirstGlyphValueRecord = prop_FirstAdjustmentRecord.FindPropertyRelative("m_GlyphValueRecord"); + + SerializedProperty prop_SecondGlyphIndex = prop_SecondAdjustmentRecord.FindPropertyRelative("m_GlyphIndex"); + SerializedProperty prop_SecondGlyphValueRecord = prop_SecondAdjustmentRecord.FindPropertyRelative("m_GlyphValueRecord"); + + SerializedProperty prop_FontFeatureLookupFlags = property.FindPropertyRelative("m_FeatureLookupFlags"); + + position.yMin += 2; + + float width = position.width / 2; + float padding = 5.0f; + + Rect rect; + + isEditingEnabled = GUI.enabled; + isSelectable = label.text == "Selectable" ? true : false; + + if (isSelectable) + GUILayoutUtility.GetRect(position.width, 75); + else + GUILayoutUtility.GetRect(position.width, 55); + + GUIStyle style = new GUIStyle(EditorStyles.label); + style.richText = true; + + // First Glyph + GUI.enabled = isEditingEnabled; + if (isSelectable) + { + rect = new Rect(position.x + 70, position.y, position.width, 49); + + float labelWidth = GUI.skin.label.CalcSize(new GUIContent("ID: " + prop_FirstGlyphIndex.intValue)).x; + EditorGUI.LabelField(new Rect(position.x + (64 - labelWidth) / 2, position.y + 60, 64f, 18f), new GUIContent("ID: " + prop_FirstGlyphIndex.intValue + ""), style); + + GUI.enabled = isEditingEnabled; + EditorGUIUtility.labelWidth = 30f; + + rect = new Rect(position.x + 70, position.y + 10, (width - 70) - padding, 18); + EditorGUI.PropertyField(rect, prop_FirstGlyphValueRecord.FindPropertyRelative("m_XPlacement"), new GUIContent("OX:")); + + rect.y += 20; + EditorGUI.PropertyField(rect, prop_FirstGlyphValueRecord.FindPropertyRelative("m_YPlacement"), new GUIContent("OY:")); + + rect.y += 20; + EditorGUI.PropertyField(rect, prop_FirstGlyphValueRecord.FindPropertyRelative("m_XAdvance"), new GUIContent("AX:")); + + //rect.y += 20; + //EditorGUI.PropertyField(rect, prop_FirstGlyphValueRecord.FindPropertyRelative("m_YAdvance"), new GUIContent("AY:")); + + DrawGlyph((uint)prop_FirstGlyphIndex.intValue, new Rect(position.x, position.y, position.width, position.height), property); + } + else + { + rect = new Rect(position.x, position.y, width / 2 * 0.8f - padding, 18); + EditorGUIUtility.labelWidth = 40f; + + // First Character Lookup + GUI.SetNextControlName("FirstCharacterField"); + EditorGUI.BeginChangeCheck(); + string firstCharacter = EditorGUI.TextField(rect, s_CharacterTextFieldLabel, m_FirstCharacter); + + if (GUI.GetNameOfFocusedControl() == "FirstCharacterField") + { + if (ValidateInput(firstCharacter)) + { + //Debug.Log("1st Unicode value: [" + firstCharacter + "]"); + + uint unicode = GetUnicodeCharacter(firstCharacter); + + // Lookup glyph index + TMP_SerializedPropertyHolder propertyHolder = property.serializedObject.targetObject as TMP_SerializedPropertyHolder; + TMP_FontAsset fontAsset = propertyHolder.fontAsset; + if (fontAsset != null) + { + prop_FirstGlyphIndex.intValue = (int)fontAsset.GetGlyphIndex(unicode); + propertyHolder.firstCharacter = unicode; + } + } + } + + if (EditorGUI.EndChangeCheck()) + m_FirstCharacter = firstCharacter; + + // First Glyph Index + rect.x += width / 2 * 0.8f; + + EditorGUIUtility.labelWidth = 25f; + EditorGUI.BeginChangeCheck(); + EditorGUI.PropertyField(rect, prop_FirstGlyphIndex, new GUIContent("ID:")); + if (EditorGUI.EndChangeCheck()) + { + + } + + GUI.enabled = isEditingEnabled; + EditorGUIUtility.labelWidth = 25f; + + rect = new Rect(position.x, position.y + 20, width * 0.5f - padding, 18); + EditorGUI.PropertyField(rect, prop_FirstGlyphValueRecord.FindPropertyRelative("m_XPlacement"), new GUIContent("OX")); + + rect.x += width * 0.5f; + EditorGUI.PropertyField(rect, prop_FirstGlyphValueRecord.FindPropertyRelative("m_YPlacement"), new GUIContent("OY")); + + rect.x = position.x; + rect.y += 20; + EditorGUI.PropertyField(rect, prop_FirstGlyphValueRecord.FindPropertyRelative("m_XAdvance"), new GUIContent("AX")); + + //rect.x += width * 0.5f; + //EditorGUI.PropertyField(rect, prop_FirstGlyphAdjustment.FindPropertyRelative("m_YAdvance"), new GUIContent("AY")); + + } + + + // Second Glyph + GUI.enabled = isEditingEnabled; + if (isSelectable) + { + float labelWidth = GUI.skin.label.CalcSize(new GUIContent("ID: " + prop_SecondGlyphIndex.intValue)).x; + EditorGUI.LabelField(new Rect(position.width / 2 + 20 + (64 - labelWidth) / 2, position.y + 60, 64f, 18f), new GUIContent("ID: " + prop_SecondGlyphIndex.intValue + ""), style); + + GUI.enabled = isEditingEnabled; + EditorGUIUtility.labelWidth = 30f; + + rect = new Rect(position.width / 2 + 20 + 70, position.y + 10, (width - 70) - padding, 18); + EditorGUI.PropertyField(rect, prop_SecondGlyphValueRecord.FindPropertyRelative("m_XPlacement"), new GUIContent("OX:")); + + rect.y += 20; + EditorGUI.PropertyField(rect, prop_SecondGlyphValueRecord.FindPropertyRelative("m_YPlacement"), new GUIContent("OY:")); + + rect.y += 20; + EditorGUI.PropertyField(rect, prop_SecondGlyphValueRecord.FindPropertyRelative("m_XAdvance"), new GUIContent("AX:")); + + //rect.y += 20; + //EditorGUI.PropertyField(rect, prop_SecondGlyphAdjustment.FindPropertyRelative("m_YAdvance"), new GUIContent("AY")); + + DrawGlyph((uint)prop_SecondGlyphIndex.intValue, new Rect(position.width / 2 + 20, position.y, position.width, position.height), property); + } + else + { + rect = new Rect(position.width / 2 + 20, position.y, width / 2 * 0.8f - padding, 18); + EditorGUIUtility.labelWidth = 40f; + + // Second Character Lookup + GUI.SetNextControlName("SecondCharacterField"); + EditorGUI.BeginChangeCheck(); + string secondCharacter = EditorGUI.TextField(rect, s_CharacterTextFieldLabel, m_SecondCharacter); + + if (GUI.GetNameOfFocusedControl() == "SecondCharacterField") + { + if (ValidateInput(secondCharacter)) + { + //Debug.Log("2nd Unicode value: [" + secondCharacter + "]"); + + uint unicode = GetUnicodeCharacter(secondCharacter); + + // Lookup glyph index + TMP_SerializedPropertyHolder propertyHolder = property.serializedObject.targetObject as TMP_SerializedPropertyHolder; + TMP_FontAsset fontAsset = propertyHolder.fontAsset; + if (fontAsset != null) + { + prop_SecondGlyphIndex.intValue = (int)fontAsset.GetGlyphIndex(unicode); + propertyHolder.secondCharacter = unicode; + } + } + } + + if (EditorGUI.EndChangeCheck()) + m_SecondCharacter = secondCharacter; + + // Second Glyph Index + rect.x += width / 2 * 0.8f; + + EditorGUIUtility.labelWidth = 25f; + EditorGUI.BeginChangeCheck(); + EditorGUI.PropertyField(rect, prop_SecondGlyphIndex, new GUIContent("ID:")); + if (EditorGUI.EndChangeCheck()) + { + + } + + GUI.enabled = isEditingEnabled; + EditorGUIUtility.labelWidth = 25f; + + rect = new Rect(position.width / 2 + 20, position.y + 20, width * 0.5f - padding, 18); + EditorGUI.PropertyField(rect, prop_SecondGlyphValueRecord.FindPropertyRelative("m_XPlacement"), new GUIContent("OX")); + + rect.x += width * 0.5f; + EditorGUI.PropertyField(rect, prop_SecondGlyphValueRecord.FindPropertyRelative("m_YPlacement"), new GUIContent("OY")); + + rect.x = position.width / 2 + 20; + rect.y += 20; + EditorGUI.PropertyField(rect, prop_SecondGlyphValueRecord.FindPropertyRelative("m_XAdvance"), new GUIContent("AX")); + + //rect.x += width * 0.5f; + //EditorGUI.PropertyField(rect, prop_SecondGlyphAdjustment.FindPropertyRelative("m_YAdvance"), new GUIContent("AY")); + } + + // Font Feature Lookup Flags + if (isSelectable) + { + EditorGUIUtility.labelWidth = 55f; + + rect.x = position.width - 255; + rect.y += 23; + rect.width = 270; // width - 70 - padding; + + FontFeatureLookupFlags flags = (FontFeatureLookupFlags)prop_FontFeatureLookupFlags.intValue; + + EditorGUI.BeginChangeCheck(); + flags = (FontFeatureLookupFlags)EditorGUI.EnumFlagsField(rect, new GUIContent("Options:"), flags); + if (EditorGUI.EndChangeCheck()) + { + prop_FontFeatureLookupFlags.intValue = (int)flags; + } + } + + } + + bool ValidateInput(string source) + { + int length = string.IsNullOrEmpty(source) ? 0 : source.Length; + + ////Filter out unwanted characters. + Event evt = Event.current; + + char c = evt.character; + + if (c != '\0') + { + switch (length) + { + case 0: + break; + case 1: + if (source != m_PreviousInput) + return true; + + if ((source[0] == '\\' && (c == 'u' || c == 'U')) == false) + evt.character = '\0'; + + break; + case 2: + case 3: + case 4: + case 5: + if ((c < '0' || c > '9') && (c < 'a' || c > 'f') && (c < 'A' || c > 'F')) + evt.character = '\0'; + break; + case 6: + case 7: + case 8: + case 9: + if (source[1] == 'u' || (c < '0' || c > '9') && (c < 'a' || c > 'f') && (c < 'A' || c > 'F')) + evt.character = '\0'; + + // Validate input + if (length == 6 && source[1] == 'u' && source != m_PreviousInput) + return true; + break; + case 10: + if (source != m_PreviousInput) + return true; + + evt.character = '\0'; + break; + } + } + + m_PreviousInput = source; + + return false; + } + + uint GetUnicodeCharacter (string source) + { + uint unicode; + + if (source.Length == 1) + unicode = source[0]; + else if (source.Length == 6) + unicode = (uint)TMP_TextUtilities.StringHexToInt(source.Replace("\\u", "")); + else + unicode = (uint)TMP_TextUtilities.StringHexToInt(source.Replace("\\U", "")); + + return unicode; + } + + void DrawGlyph(uint glyphIndex, Rect position, SerializedProperty property) + { + // Get a reference to the sprite texture + TMP_FontAsset fontAsset = property.serializedObject.targetObject as TMP_FontAsset; + + if (fontAsset == null) + return; + + // Check if glyph currently exists in the atlas texture. + if (!fontAsset.glyphLookupTable.TryGetValue(glyphIndex, out Glyph glyph)) + return; + + // Get reference to atlas texture. + int atlasIndex = fontAsset.m_AtlasTextureIndex; + Texture2D atlasTexture = fontAsset.atlasTextures.Length > atlasIndex ? fontAsset.atlasTextures[atlasIndex] : null; + + if (atlasTexture == null) + return; + + Material mat; + if (((GlyphRasterModes)fontAsset.atlasRenderMode & GlyphRasterModes.RASTER_MODE_BITMAP) == GlyphRasterModes.RASTER_MODE_BITMAP) + { + mat = TMP_FontAssetEditor.internalBitmapMaterial; + + if (mat == null) + return; + + mat.mainTexture = atlasTexture; + } + else + { + mat = TMP_FontAssetEditor.internalSDFMaterial; + + if (mat == null) + return; + + mat.mainTexture = atlasTexture; + mat.SetFloat(ShaderUtilities.ID_GradientScale, fontAsset.atlasPadding + 1); + } + + // Draw glyph from atlas texture. + Rect glyphDrawPosition = new Rect(position.x, position.y + 2, 64, 60); + + GlyphRect glyphRect = glyph.glyphRect; + + float normalizedHeight = fontAsset.faceInfo.ascentLine - fontAsset.faceInfo.descentLine; + float scale = glyphDrawPosition.width / normalizedHeight; + + // Compute the normalized texture coordinates + Rect texCoords = new Rect((float)glyphRect.x / atlasTexture.width, (float)glyphRect.y / atlasTexture.height, (float)glyphRect.width / atlasTexture.width, (float)glyphRect.height / atlasTexture.height); + + if (Event.current.type == EventType.Repaint) + { + glyphDrawPosition.x += (glyphDrawPosition.width - glyphRect.width * scale) / 2; + glyphDrawPosition.y += (glyphDrawPosition.height - glyphRect.height * scale) / 2; + glyphDrawPosition.width = glyphRect.width * scale; + glyphDrawPosition.height = glyphRect.height * scale; + + // Could switch to using the default material of the font asset which would require passing scale to the shader. + Graphics.DrawTexture(glyphDrawPosition, atlasTexture, texCoords, 0, 0, 0, 0, new Color(1f, 1f, 1f), mat); + } + } + + + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_GlyphPairAdjustmentRecordPropertyDrawer.cs.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_GlyphPairAdjustmentRecordPropertyDrawer.cs.meta new file mode 100644 index 0000000..d79c389 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_GlyphPairAdjustmentRecordPropertyDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d256fa541faf5d4409992c631adb98a1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_GlyphPropertyDrawer.cs b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_GlyphPropertyDrawer.cs new file mode 100644 index 0000000..c4d0dcf --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_GlyphPropertyDrawer.cs @@ -0,0 +1,118 @@ + using UnityEngine; +using UnityEngine.TextCore; +using UnityEngine.TextCore.LowLevel; +using UnityEditor; +using System.Collections; + + +namespace TMPro.EditorUtilities +{ + + [CustomPropertyDrawer(typeof(Glyph))] + public class TMP_GlyphPropertyDrawer : PropertyDrawer + { + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + SerializedProperty prop_GlyphIndex = property.FindPropertyRelative("m_Index"); + SerializedProperty prop_GlyphMetrics = property.FindPropertyRelative("m_Metrics"); + SerializedProperty prop_GlyphRect = property.FindPropertyRelative("m_GlyphRect"); + SerializedProperty prop_Scale = property.FindPropertyRelative("m_Scale"); + SerializedProperty prop_AtlasIndex = property.FindPropertyRelative("m_AtlasIndex"); + + GUIStyle style = new GUIStyle(EditorStyles.label); + style.richText = true; + + Rect rect = new Rect(position.x + 70, position.y, position.width, 49); + + float labelWidth = GUI.skin.label.CalcSize(new GUIContent("ID: " + prop_GlyphIndex.intValue)).x; + EditorGUI.LabelField(new Rect(position.x + (64 - labelWidth) / 2, position.y + 85, 64f, 18f), new GUIContent("ID: " + prop_GlyphIndex.intValue + ""), style); + //EditorGUIUtility.labelWidth = 22f; + //EditorGUI.DelayedIntField(new Rect(position.x + (64 - labelWidth) / 2, position.y + 89, 58f, 18f), prop_GlyphIndex, new GUIContent("ID:")); + + // We get Rect since a valid position may not be provided by the caller. + EditorGUI.PropertyField(new Rect(rect.x, rect.y, position.width, 49), prop_GlyphRect); + + rect.y += 45; + EditorGUI.PropertyField(rect, prop_GlyphMetrics); + + EditorGUIUtility.labelWidth = 40f; + EditorGUI.PropertyField(new Rect(rect.x, rect.y + 65, 75, 18), prop_Scale, new GUIContent("Scale:")); // new GUIContent("Scale: " + prop_Scale.floatValue + ""), style); + + EditorGUIUtility.labelWidth = 74f; + EditorGUI.PropertyField(new Rect(rect.x + 85, rect.y + 65, 95, 18), prop_AtlasIndex, new GUIContent("Atlas Index:")); // new GUIContent("Atlas Index: " + prop_AtlasIndex.intValue + ""), style); + + DrawGlyph(position, property); + } + + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + return 130f; + } + + void DrawGlyph(Rect position, SerializedProperty property) + { + // Get a reference to the sprite texture + TMP_FontAsset fontAsset = property.serializedObject.targetObject as TMP_FontAsset; + + if (fontAsset == null) + return; + + // Get reference to atlas texture. + int atlasIndex = property.FindPropertyRelative("m_AtlasIndex").intValue; + Texture2D atlasTexture = fontAsset.atlasTextures.Length > atlasIndex ? fontAsset.atlasTextures[atlasIndex] : null; + + if (atlasTexture == null) + return; + + Material mat; + if (((GlyphRasterModes)fontAsset.atlasRenderMode & GlyphRasterModes.RASTER_MODE_BITMAP) == GlyphRasterModes.RASTER_MODE_BITMAP) + { + mat = TMP_FontAssetEditor.internalBitmapMaterial; + + if (mat == null) + return; + + mat.mainTexture = atlasTexture; + mat.SetColor("_Color", Color.white); + } + else + { + mat = TMP_FontAssetEditor.internalSDFMaterial; + + if (mat == null) + return; + + mat.mainTexture = atlasTexture; + mat.SetFloat(ShaderUtilities.ID_GradientScale, fontAsset.atlasPadding + 1); + } + + // Draw glyph from atlas texture. + Rect glyphDrawPosition = new Rect(position.x, position.y + 2, 64, 80); + + SerializedProperty prop_GlyphRect = property.FindPropertyRelative("m_GlyphRect"); + + int glyphOriginX = prop_GlyphRect.FindPropertyRelative("m_X").intValue; + int glyphOriginY = prop_GlyphRect.FindPropertyRelative("m_Y").intValue; + int glyphWidth = prop_GlyphRect.FindPropertyRelative("m_Width").intValue; + int glyphHeight = prop_GlyphRect.FindPropertyRelative("m_Height").intValue; + + float normalizedHeight = fontAsset.faceInfo.ascentLine - fontAsset.faceInfo.descentLine; + float scale = glyphDrawPosition.width / normalizedHeight; + + // Compute the normalized texture coordinates + Rect texCoords = new Rect((float)glyphOriginX / atlasTexture.width, (float)glyphOriginY / atlasTexture.height, (float)glyphWidth / atlasTexture.width, (float)glyphHeight / atlasTexture.height); + + if (Event.current.type == EventType.Repaint) + { + glyphDrawPosition.x += (glyphDrawPosition.width - glyphWidth * scale) / 2; + glyphDrawPosition.y += (glyphDrawPosition.height - glyphHeight * scale) / 2; + glyphDrawPosition.width = glyphWidth * scale; + glyphDrawPosition.height = glyphHeight * scale; + + // Could switch to using the default material of the font asset which would require passing scale to the shader. + Graphics.DrawTexture(glyphDrawPosition, atlasTexture, texCoords, 0, 0, 0, 0, new Color(1f, 1f, 1f), mat); + } + } + + } +} diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_GlyphPropertyDrawer.cs.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_GlyphPropertyDrawer.cs.meta new file mode 100644 index 0000000..1b40b11 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_GlyphPropertyDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c4777500b5da6094e956c3d4f04de4db +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_InputFieldEditor.cs b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_InputFieldEditor.cs new file mode 100644 index 0000000..5a7749b --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_InputFieldEditor.cs @@ -0,0 +1,283 @@ +using UnityEngine; +using UnityEngine.UI; +using UnityEditor; +using UnityEditor.UI; +using UnityEditor.AnimatedValues; + + +namespace TMPro.EditorUtilities +{ + [CanEditMultipleObjects] + [CustomEditor(typeof(TMP_InputField), true)] + public class TMP_InputFieldEditor : SelectableEditor + { + private struct m_foldout + { // Track Inspector foldout panel states, globally. + public static bool textInput = true; + public static bool fontSettings = true; + public static bool extraSettings = true; + //public static bool shadowSetting = false; + //public static bool materialEditor = true; + } + + SerializedProperty m_TextViewport; + SerializedProperty m_TextComponent; + SerializedProperty m_Text; + SerializedProperty m_ContentType; + SerializedProperty m_LineType; + SerializedProperty m_LineLimit; + SerializedProperty m_InputType; + SerializedProperty m_CharacterValidation; + SerializedProperty m_InputValidator; + SerializedProperty m_RegexValue; + SerializedProperty m_KeyboardType; + SerializedProperty m_CharacterLimit; + SerializedProperty m_CaretBlinkRate; + SerializedProperty m_CaretWidth; + SerializedProperty m_CaretColor; + SerializedProperty m_CustomCaretColor; + SerializedProperty m_SelectionColor; + SerializedProperty m_HideMobileKeyboard; + SerializedProperty m_HideMobileInput; + SerializedProperty m_Placeholder; + SerializedProperty m_VerticalScrollbar; + SerializedProperty m_ScrollbarScrollSensitivity; + SerializedProperty m_OnValueChanged; + SerializedProperty m_OnEndEdit; + SerializedProperty m_OnSelect; + SerializedProperty m_OnDeselect; + SerializedProperty m_ReadOnly; + SerializedProperty m_RichText; + SerializedProperty m_RichTextEditingAllowed; + SerializedProperty m_ResetOnDeActivation; + SerializedProperty m_RestoreOriginalTextOnEscape; + + SerializedProperty m_OnFocusSelectAll; + SerializedProperty m_GlobalPointSize; + SerializedProperty m_GlobalFontAsset; + + AnimBool m_CustomColor; + + //TMP_InputValidator m_ValidationScript; + + protected override void OnEnable() + { + base.OnEnable(); + + m_TextViewport = serializedObject.FindProperty("m_TextViewport"); + m_TextComponent = serializedObject.FindProperty("m_TextComponent"); + m_Text = serializedObject.FindProperty("m_Text"); + m_ContentType = serializedObject.FindProperty("m_ContentType"); + m_LineType = serializedObject.FindProperty("m_LineType"); + m_LineLimit = serializedObject.FindProperty("m_LineLimit"); + m_InputType = serializedObject.FindProperty("m_InputType"); + m_CharacterValidation = serializedObject.FindProperty("m_CharacterValidation"); + m_InputValidator = serializedObject.FindProperty("m_InputValidator"); + m_RegexValue = serializedObject.FindProperty("m_RegexValue"); + m_KeyboardType = serializedObject.FindProperty("m_KeyboardType"); + m_CharacterLimit = serializedObject.FindProperty("m_CharacterLimit"); + m_CaretBlinkRate = serializedObject.FindProperty("m_CaretBlinkRate"); + m_CaretWidth = serializedObject.FindProperty("m_CaretWidth"); + m_CaretColor = serializedObject.FindProperty("m_CaretColor"); + m_CustomCaretColor = serializedObject.FindProperty("m_CustomCaretColor"); + m_SelectionColor = serializedObject.FindProperty("m_SelectionColor"); + + m_HideMobileKeyboard = serializedObject.FindProperty("m_HideSoftKeyboard"); + m_HideMobileInput = serializedObject.FindProperty("m_HideMobileInput"); + + m_Placeholder = serializedObject.FindProperty("m_Placeholder"); + m_VerticalScrollbar = serializedObject.FindProperty("m_VerticalScrollbar"); + m_ScrollbarScrollSensitivity = serializedObject.FindProperty("m_ScrollSensitivity"); + + m_OnValueChanged = serializedObject.FindProperty("m_OnValueChanged"); + m_OnEndEdit = serializedObject.FindProperty("m_OnEndEdit"); + m_OnSelect = serializedObject.FindProperty("m_OnSelect"); + m_OnDeselect = serializedObject.FindProperty("m_OnDeselect"); + m_ReadOnly = serializedObject.FindProperty("m_ReadOnly"); + m_RichText = serializedObject.FindProperty("m_RichText"); + m_RichTextEditingAllowed = serializedObject.FindProperty("m_isRichTextEditingAllowed"); + m_ResetOnDeActivation = serializedObject.FindProperty("m_ResetOnDeActivation"); + m_RestoreOriginalTextOnEscape = serializedObject.FindProperty("m_RestoreOriginalTextOnEscape"); + + m_OnFocusSelectAll = serializedObject.FindProperty("m_OnFocusSelectAll"); + m_GlobalPointSize = serializedObject.FindProperty("m_GlobalPointSize"); + m_GlobalFontAsset = serializedObject.FindProperty("m_GlobalFontAsset"); + + m_CustomColor = new AnimBool(m_CustomCaretColor.boolValue); + m_CustomColor.valueChanged.AddListener(Repaint); + } + + protected override void OnDisable() + { + base.OnDisable(); + m_CustomColor.valueChanged.RemoveListener(Repaint); + } + + public override void OnInspectorGUI() + { + serializedObject.Update(); + + base.OnInspectorGUI(); + + EditorGUILayout.Space(); + + EditorGUILayout.PropertyField(m_TextViewport); + + EditorGUILayout.PropertyField(m_TextComponent); + + TextMeshProUGUI text = null; + if (m_TextComponent != null && m_TextComponent.objectReferenceValue != null) + { + text = m_TextComponent.objectReferenceValue as TextMeshProUGUI; + //if (text.supportRichText) + //{ + // EditorGUILayout.HelpBox("Using Rich Text with input is unsupported.", MessageType.Warning); + //} + } + + EditorGUI.BeginDisabledGroup(m_TextComponent == null || m_TextComponent.objectReferenceValue == null); + + // TEXT INPUT BOX + EditorGUILayout.PropertyField(m_Text); + + // INPUT FIELD SETTINGS + #region INPUT FIELD SETTINGS + + m_foldout.fontSettings = EditorGUILayout.Foldout(m_foldout.fontSettings, "Input Field Settings", true, TMP_UIStyleManager.boldFoldout); + + if (m_foldout.fontSettings) + { + EditorGUI.indentLevel++; + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(m_GlobalFontAsset, new GUIContent("Font Asset", "Set the Font Asset for both Placeholder and Input Field text object.")); + if (EditorGUI.EndChangeCheck()) + { + TMP_InputField inputField = target as TMP_InputField; + inputField.SetGlobalFontAsset(m_GlobalFontAsset.objectReferenceValue as TMP_FontAsset); + } + + + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(m_GlobalPointSize, new GUIContent("Point Size", "Set the point size of both Placeholder and Input Field text object.")); + if (EditorGUI.EndChangeCheck()) + { + TMP_InputField inputField = target as TMP_InputField; + inputField.SetGlobalPointSize(m_GlobalPointSize.floatValue); + } + + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(m_CharacterLimit); + + EditorGUILayout.Space(); + + EditorGUILayout.PropertyField(m_ContentType); + if (!m_ContentType.hasMultipleDifferentValues) + { + EditorGUI.indentLevel++; + + if (m_ContentType.enumValueIndex == (int)TMP_InputField.ContentType.Standard || + m_ContentType.enumValueIndex == (int)TMP_InputField.ContentType.Autocorrected || + m_ContentType.enumValueIndex == (int)TMP_InputField.ContentType.Custom) + { + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(m_LineType); + if (EditorGUI.EndChangeCheck()) + { + if (text != null) + { + if (m_LineType.enumValueIndex == (int)TMP_InputField.LineType.SingleLine) + text.enableWordWrapping = false; + else + { + text.enableWordWrapping = true; + } + } + } + + if (m_LineType.enumValueIndex != (int)TMP_InputField.LineType.SingleLine) + { + EditorGUILayout.PropertyField(m_LineLimit); + } + } + + if (m_ContentType.enumValueIndex == (int)TMP_InputField.ContentType.Custom) + { + EditorGUILayout.PropertyField(m_InputType); + EditorGUILayout.PropertyField(m_KeyboardType); + EditorGUILayout.PropertyField(m_CharacterValidation); + if (m_CharacterValidation.enumValueIndex == (int)TMP_InputField.CharacterValidation.Regex) + { + EditorGUILayout.PropertyField(m_RegexValue); + } + else if (m_CharacterValidation.enumValueIndex == (int)TMP_InputField.CharacterValidation.CustomValidator) + { + EditorGUILayout.PropertyField(m_InputValidator); + } + } + + EditorGUI.indentLevel--; + } + + EditorGUILayout.Space(); + + EditorGUILayout.PropertyField(m_Placeholder); + EditorGUILayout.PropertyField(m_VerticalScrollbar); + + if (m_VerticalScrollbar.objectReferenceValue != null) + EditorGUILayout.PropertyField(m_ScrollbarScrollSensitivity); + + EditorGUILayout.PropertyField(m_CaretBlinkRate); + EditorGUILayout.PropertyField(m_CaretWidth); + + EditorGUILayout.PropertyField(m_CustomCaretColor); + + m_CustomColor.target = m_CustomCaretColor.boolValue; + + if (EditorGUILayout.BeginFadeGroup(m_CustomColor.faded)) + { + EditorGUILayout.PropertyField(m_CaretColor); + } + EditorGUILayout.EndFadeGroup(); + + EditorGUILayout.PropertyField(m_SelectionColor); + + EditorGUI.indentLevel--; + } + #endregion + + + // CONTROL SETTINGS + #region CONTROL SETTINGS + m_foldout.extraSettings = EditorGUILayout.Foldout(m_foldout.extraSettings, "Control Settings", true, TMP_UIStyleManager.boldFoldout); + + if (m_foldout.extraSettings) + { + EditorGUI.indentLevel++; + + EditorGUILayout.PropertyField(m_OnFocusSelectAll, new GUIContent("OnFocus - Select All", "Should all the text be selected when the Input Field is selected.")); + EditorGUILayout.PropertyField(m_ResetOnDeActivation, new GUIContent("Reset On DeActivation", "Should the Text and Caret position be reset when Input Field is DeActivated.")); + EditorGUILayout.PropertyField(m_RestoreOriginalTextOnEscape, new GUIContent("Restore On ESC Key", "Should the original text be restored when pressing ESC.")); + EditorGUILayout.PropertyField(m_HideMobileKeyboard, new GUIContent("Hide Soft Keyboard", "Controls the visibility of the mobile virtual keyboard.")); + EditorGUILayout.PropertyField(m_HideMobileInput, new GUIContent("Hide Mobile Input", "Controls the visibility of the editable text field above the mobile virtual keyboard. Not supported on all mobile platforms.")); + EditorGUILayout.PropertyField(m_ReadOnly); + EditorGUILayout.PropertyField(m_RichText); + EditorGUILayout.PropertyField(m_RichTextEditingAllowed, new GUIContent("Allow Rich Text Editing")); + + EditorGUI.indentLevel--; + } + #endregion + + + EditorGUILayout.Space(); + + EditorGUILayout.PropertyField(m_OnValueChanged); + EditorGUILayout.PropertyField(m_OnEndEdit); + EditorGUILayout.PropertyField(m_OnSelect); + EditorGUILayout.PropertyField(m_OnDeselect); + + EditorGUI.EndDisabledGroup(); + + serializedObject.ApplyModifiedProperties(); + } + } +} diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_InputFieldEditor.cs.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_InputFieldEditor.cs.meta new file mode 100644 index 0000000..9adf20a --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_InputFieldEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: aa160f27c3fe4052a5850e21108811b6 +timeCreated: 1457861621 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_MeshRendererEditor.cs b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_MeshRendererEditor.cs new file mode 100644 index 0000000..984b8cc --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_MeshRendererEditor.cs @@ -0,0 +1,76 @@ +// When enabled, allows setting the material by dropping a material onto the MeshRenderer inspector component. +// The drawback is that the MeshRenderer inspector will not have properties for light probes, so if you need light probe support, do not enable this. +//#define ALLOW_MESHRENDERER_MATERIAL_DRAG_N_DROP + +using UnityEngine; +using UnityEditor; +using System.Collections; + + +namespace TMPro.EditorUtilities +{ + // Disabled for compatibility reason as lightprobe setup isn't supported due to inability to inherit from MeshRendererEditor class +#if ALLOW_MESHRENDERER_MATERIAL_DRAG_N_DROP + [CanEditMultipleObjects] + [CustomEditor(typeof(MeshRenderer))] + public class TMP_MeshRendererEditor : Editor + { + private SerializedProperty m_Materials; + + void OnEnable() + { + m_Materials = serializedObject.FindProperty("m_Materials"); + } + + + public override void OnInspectorGUI() + { + serializedObject.Update(); + + // Get a reference to the current material. + SerializedProperty material_prop = m_Materials.GetArrayElementAtIndex(0); + Material currentMaterial = material_prop.objectReferenceValue as Material; + + EditorGUI.BeginChangeCheck(); + base.OnInspectorGUI(); + if (EditorGUI.EndChangeCheck()) + { + material_prop = m_Materials.GetArrayElementAtIndex(0); + + TMP_FontAsset newFontAsset = null; + Material newMaterial = null; + + if (material_prop != null) + newMaterial = material_prop.objectReferenceValue as Material; + + // Check if the new material is referencing a different font atlas texture. + if (newMaterial != null && currentMaterial.GetInstanceID() != newMaterial.GetInstanceID()) + { + // Search for the Font Asset matching the new font atlas texture. + newFontAsset = TMP_EditorUtility.FindMatchingFontAsset(newMaterial); + } + + + GameObject[] objects = Selection.gameObjects; + + for (int i = 0; i < objects.Length; i++) + { + // Assign new font asset + if (newFontAsset != null) + { + TMP_Text textComponent = objects[i].GetComponent(); + + if (textComponent != null) + { + Undo.RecordObject(textComponent, "Font Asset Change"); + textComponent.font = newFontAsset; + } + } + + TMPro_EventManager.ON_DRAG_AND_DROP_MATERIAL_CHANGED(objects[i], currentMaterial, newMaterial); + } + } + } + } +#endif +} diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_MeshRendererEditor.cs.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_MeshRendererEditor.cs.meta new file mode 100644 index 0000000..e9b5656 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_MeshRendererEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 6d437b997e074079b4b2f6e395394f4b +timeCreated: 1462864011 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_PackageUtilities.cs b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_PackageUtilities.cs new file mode 100644 index 0000000..dc1beba --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_PackageUtilities.cs @@ -0,0 +1,920 @@ +using UnityEngine; +using UnityEditor; +using System; +using System.IO; +using System.Linq; +using System.Collections; +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; +using TMPro.EditorUtilities; + + +namespace TMPro +{ + /// + /// Data structure containing the target and replacement fileIDs and GUIDs which will require remapping from previous version of TextMesh Pro to the new TextMesh Pro UPM package. + /// + [System.Serializable] + struct AssetConversionRecord + { + public string referencedResource; + public string target; + public string replacement; + } + + + /// + /// Data structure containing a list of target and replacement fileID and GUID requiring remapping from previous versions of TextMesh Pro to the new TextMesh Pro UPM package. + /// This data structure is populated with the data contained in the PackageConversionData.json file included in the package. + /// + [System.Serializable] + class AssetConversionData + { + public List assetRecords; + } + + + public class TMP_ProjectConversionUtility : EditorWindow + { + // Create Sprite Asset Editor Window + [MenuItem("Window/TextMeshPro/Project Files GUID Remapping Tool", false, 2100)] + static void ShowConverterWindow() + { + var window = GetWindow(); + window.titleContent = new GUIContent("Conversion Tool"); + window.Focus(); + } + + private static HashSet m_IgnoreAssetTypes = new HashSet() + { + typeof(AnimatorOverrideController), + typeof(AudioClip), + typeof(AvatarMask), + typeof(ComputeShader), + typeof(Cubemap), + typeof(DefaultAsset), + typeof(Flare), + typeof(Font), + typeof(GUISkin), + typeof(HumanTemplate), + typeof(LightingDataAsset), + typeof(Mesh), + typeof(MonoScript), + typeof(PhysicMaterial), + typeof(PhysicsMaterial2D), + typeof(RenderTexture), + typeof(Shader), + typeof(TerrainData), + typeof(TextAsset), + typeof(Texture2D), + typeof(Texture2DArray), + typeof(Texture3D), + typeof(UnityEditor.Animations.AnimatorController), + typeof(UnityEditorInternal.AssemblyDefinitionAsset), + typeof(UnityEngine.AI.NavMeshData), + typeof(UnityEngine.Tilemaps.Tile), + typeof(UnityEngine.U2D.SpriteAtlas), + typeof(UnityEngine.Video.VideoClip), + }; + + /// + /// + /// + struct AssetModificationRecord + { + public string assetFilePath; + public string assetDataFile; + } + + struct AssetFileRecord + { + public string assetFilePath; + public string assetMetaFilePath; + + public AssetFileRecord(string filePath, string metaFilePath) + { + this.assetFilePath = filePath; + this.assetMetaFilePath = metaFilePath; + } + } + + private static string m_ProjectPath; + private static string m_ProjectFolderToScan; + private static bool m_IsAlreadyScanningProject; + private static bool m_CancelScanProcess; + private static string k_ProjectScanReportDefaultText = "Project Scan Results\n"; + private static string k_ProjectScanLabelPrefix = "Scanning: "; + private static string m_ProjectScanResults = string.Empty; + private static Vector2 m_ProjectScanResultScrollPosition; + private static float m_ProgressPercentage = 0; + + private static int m_ScanningTotalFiles; + private static int m_RemainingFilesToScan; + private static int m_ScanningCurrentFileIndex; + private static string m_ScanningCurrentFileName; + + private static AssetConversionData m_ConversionData; + + private static List m_ModifiedAssetList = new List(); + + + void OnEnable() + { + // Set Editor Window Size + SetEditorWindowSize(); + + m_ProjectScanResults = k_ProjectScanReportDefaultText; + } + + + void OnGUI() + { + GUILayout.BeginVertical(); + { + // Scan project files and resources + GUILayout.BeginVertical(EditorStyles.helpBox); + { + GUILayout.Label("Scan Project Files", EditorStyles.boldLabel); + GUILayout.Label("Press the Scan Project Files button to begin scanning your project for files & resources that were created with a previous version of TextMesh Pro.", TMP_UIStyleManager.label); + GUILayout.Space(10f); + GUILayout.Label("Project folder to be scanned. Example \"Assets/TextMesh Pro\""); + m_ProjectFolderToScan = EditorGUILayout.TextField("Folder Path: Assets/", m_ProjectFolderToScan); + GUILayout.Space(5f); + + GUI.enabled = m_IsAlreadyScanningProject == false ? true : false; + if (GUILayout.Button("Scan Project Files")) + { + m_CancelScanProcess = false; + + // Make sure Asset Serialization mode is set to ForceText and Version Control mode to Visible Meta Files. + if (CheckProjectSerializationAndSourceControlModes() == true) + { + m_ProjectPath = Path.GetFullPath("Assets/.."); + TMP_EditorCoroutine.StartCoroutine(ScanProjectFiles()); + } + else + { + EditorUtility.DisplayDialog("Project Settings Change Required", "In menu options \"Edit - Project Settings - Editor\", please change Asset Serialization Mode to ForceText and Source Control Mode to Visible Meta Files.", "OK", string.Empty); + } + } + GUI.enabled = true; + + // Display progress bar + Rect rect = GUILayoutUtility.GetRect(0f, 20f, GUILayout.ExpandWidth(true)); + EditorGUI.ProgressBar(rect, m_ProgressPercentage, "Scan Progress (" + m_ScanningCurrentFileIndex + "/" + m_ScanningTotalFiles + ")"); + + // Display cancel button and name of file currently being scanned. + if (m_IsAlreadyScanningProject) + { + Rect cancelRect = new Rect(rect.width - 20, rect.y + 2, 20, 16); + if (GUI.Button(cancelRect, "X")) + { + m_CancelScanProcess = true; + } + GUILayout.Label(k_ProjectScanLabelPrefix + m_ScanningCurrentFileName, TMP_UIStyleManager.label); + } + else + GUILayout.Label(string.Empty); + + GUILayout.Space(5); + + // Creation Feedback + GUILayout.BeginVertical(TMP_UIStyleManager.textAreaBoxWindow, GUILayout.ExpandHeight(true)); + { + m_ProjectScanResultScrollPosition = EditorGUILayout.BeginScrollView(m_ProjectScanResultScrollPosition, GUILayout.ExpandHeight(true)); + EditorGUILayout.LabelField(m_ProjectScanResults, TMP_UIStyleManager.label); + EditorGUILayout.EndScrollView(); + } + GUILayout.EndVertical(); + GUILayout.Space(5f); + } + GUILayout.EndVertical(); + + // Scan project files and resources + GUILayout.BeginVertical(EditorStyles.helpBox); + { + GUILayout.Label("Save Modified Project Files", EditorStyles.boldLabel); + GUILayout.Label("Pressing the Save Modified Project Files button will update the files in the Project Scan Results listed above. Please make sure that you have created a backup of your project first as these file modifications are permanent and cannot be undone.", TMP_UIStyleManager.label); + GUILayout.Space(5f); + + GUI.enabled = m_IsAlreadyScanningProject == false && m_ModifiedAssetList.Count > 0 ? true : false; + if (GUILayout.Button("Save Modified Project Files")) + { + UpdateProjectFiles(); + } + GUILayout.Space(10f); + } + GUILayout.EndVertical(); + + } + GUILayout.EndVertical(); + GUILayout.Space(5f); + } + + void OnInspectorUpdate() + { + Repaint(); + } + + + /// + /// Limits the minimum size of the editor window. + /// + void SetEditorWindowSize() + { + EditorWindow editorWindow = this; + + Vector2 currentWindowSize = editorWindow.minSize; + + editorWindow.minSize = new Vector2(Mathf.Max(640, currentWindowSize.x), Mathf.Max(420, currentWindowSize.y)); + } + + + /// + /// + /// + /// + /// + private static bool ShouldIgnoreFile(string filePath) + { + string fileExtension = Path.GetExtension(filePath); + Type fileType = AssetDatabase.GetMainAssetTypeAtPath(filePath); + + if (m_IgnoreAssetTypes.Contains(fileType)) + return true; + + // Exclude FBX + if (fileType == typeof(GameObject) && fileExtension.ToLower() == ".fbx") { return true; } + return false; + } + + + private IEnumerator ScanProjectFiles() + { + m_IsAlreadyScanningProject = true; + string packageFullPath = EditorUtilities.TMP_EditorUtility.packageFullPath; + + // List containing assets that have been modified. + m_ProjectScanResults = k_ProjectScanReportDefaultText; + m_ModifiedAssetList.Clear(); + m_ProgressPercentage = 0; + + // Read Conversion Data from Json file. + if (m_ConversionData == null) + m_ConversionData = JsonUtility.FromJson(File.ReadAllText(packageFullPath + "/PackageConversionData.json")); + + // Get list of GUIDs for assets that might contain references to previous GUIDs that require updating. + string searchFolder = string.IsNullOrEmpty(m_ProjectFolderToScan) ? "Assets" : ("Assets/" + m_ProjectFolderToScan); + string[] guids = AssetDatabase.FindAssets("t:Object", new string[] { searchFolder }).Distinct().ToArray(); + + k_ProjectScanLabelPrefix = "Phase 1 - Filtering: "; + m_ScanningTotalFiles = guids.Length; + m_ScanningCurrentFileIndex = 0; + + List projectFilesToScan = new List(); + + foreach (var guid in guids) + { + if (m_CancelScanProcess) + break; + + string assetFilePath = AssetDatabase.GUIDToAssetPath(guid); + + m_ScanningCurrentFileIndex += 1; + m_ScanningCurrentFileName = assetFilePath; + m_ProgressPercentage = (float)m_ScanningCurrentFileIndex / m_ScanningTotalFiles; + + // Filter out file types we have no interest in searching + if (ShouldIgnoreFile(assetFilePath)) + continue; + + string assetMetaFilePath = AssetDatabase.GetTextMetaFilePathFromAssetPath(assetFilePath); + + projectFilesToScan.Add(new AssetFileRecord(assetFilePath, assetMetaFilePath)); + + yield return null; + } + + m_RemainingFilesToScan = m_ScanningTotalFiles = projectFilesToScan.Count; + + k_ProjectScanLabelPrefix = "Phase 2 - Scanning: "; + + for (int i = 0; i < m_ScanningTotalFiles; i++) + { + if (m_CancelScanProcess) + break; + + AssetFileRecord fileRecord = projectFilesToScan[i]; + + Task.Run(() => + { + ScanProjectFileAsync(fileRecord); + + m_ScanningCurrentFileName = fileRecord.assetFilePath; + + int completedScans = m_ScanningTotalFiles - Interlocked.Decrement(ref m_RemainingFilesToScan); + + m_ScanningCurrentFileIndex = completedScans; + m_ProgressPercentage = (float)completedScans / m_ScanningTotalFiles; + }); + + if (i % 64 == 0) + yield return new WaitForSeconds(2.0f); + + } + + while (m_RemainingFilesToScan > 0 && !m_CancelScanProcess) + yield return null; + + m_IsAlreadyScanningProject = false; + m_ScanningCurrentFileName = string.Empty; + } + + + static void ScanProjectFileAsync(AssetFileRecord fileRecord) + { + if (m_CancelScanProcess) + return; + + // Read the asset data file + string assetDataFile = string.Empty; + bool hasFileChanged = false; + + try + { + assetDataFile = File.ReadAllText(m_ProjectPath + "/" + fileRecord.assetFilePath); + } + catch + { + // Continue to the next asset if we can't read the current one. + return; + } + + // Read the asset meta data file + string assetMetaFile = File.ReadAllText(m_ProjectPath + "/" + fileRecord.assetMetaFilePath); + bool hasMetaFileChanges = false; + + foreach (AssetConversionRecord record in m_ConversionData.assetRecords) + { + if (assetDataFile.Contains(record.target)) + { + hasFileChanged = true; + + assetDataFile = assetDataFile.Replace(record.target, record.replacement); + } + + //// Check meta file + if (assetMetaFile.Contains(record.target)) + { + hasMetaFileChanges = true; + + assetMetaFile = assetMetaFile.Replace(record.target, record.replacement); + } + } + + if (hasFileChanged) + { + AssetModificationRecord modifiedAsset; + modifiedAsset.assetFilePath = fileRecord.assetFilePath; + modifiedAsset.assetDataFile = assetDataFile; + + m_ModifiedAssetList.Add(modifiedAsset); + + m_ProjectScanResults += fileRecord.assetFilePath + "\n"; + } + + if (hasMetaFileChanges) + { + AssetModificationRecord modifiedAsset; + modifiedAsset.assetFilePath = fileRecord.assetMetaFilePath; + modifiedAsset.assetDataFile = assetMetaFile; + + m_ModifiedAssetList.Add(modifiedAsset); + + m_ProjectScanResults += fileRecord.assetMetaFilePath + "\n"; + } + } + + + /// + /// + /// + private static void ResetScanProcess() + { + m_IsAlreadyScanningProject = false; + m_ScanningCurrentFileName = string.Empty; + m_ProgressPercentage = 0; + m_ScanningCurrentFileIndex = 0; + m_ScanningTotalFiles = 0; + } + + + /// + /// + /// + private static void UpdateProjectFiles() + { + // Make sure Asset Serialization mode is set to ForceText with Visible Meta Files. + CheckProjectSerializationAndSourceControlModes(); + + string projectPath = Path.GetFullPath("Assets/.."); + + // Display dialogue to show user a list of project files that will be modified upon their consent. + if (EditorUtility.DisplayDialog("Save Modified Asset(s)?", "Are you sure you want to save all modified assets?", "YES", "NO")) + { + for (int i = 0; i < m_ModifiedAssetList.Count; i++) + { + // Make sure all file streams that might have been opened by Unity are closed. + //AssetDatabase.ReleaseCachedFileHandles(); + + //Debug.Log("Writing asset file [" + m_ModifiedAssetList[i].assetFilePath + "]."); + + File.WriteAllText(projectPath + "/" + m_ModifiedAssetList[i].assetFilePath, m_ModifiedAssetList[i].assetDataFile); + } + } + + AssetDatabase.Refresh(); + + m_ProgressPercentage = 0; + m_ProjectScanResults = k_ProjectScanReportDefaultText; + } + + + /// + /// Check project Asset Serialization and Source Control modes + /// + private static bool CheckProjectSerializationAndSourceControlModes() + { + // Check Project Asset Serialization and Visible Meta Files mode. + if (EditorSettings.serializationMode != SerializationMode.ForceText || EditorSettings.externalVersionControl != "Visible Meta Files") + { + return false; + } + + return true; + } + } + + + + public class TMP_PackageUtilities : Editor + { + + enum SaveAssetDialogueOptions { Unset = 0, Save = 1, SaveAll = 2, DoNotSave = 3 }; + + private static SerializationMode m_ProjectAssetSerializationMode; + private static string m_ProjectExternalVersionControl; + + struct AssetRemappingRecord + { + public string oldGuid; + public string newGuid; + public string assetPath; + } + + struct AssetModificationRecord + { + public string assetFilePath; + public string assetDataFile; + } + + // Create Sprite Asset Editor Window + //[MenuItem("Window/TextMeshPro/Generate New Package GUIDs", false, 1500)] + public static void GenerateNewPackageGUIDs_Menu() + { + GenerateNewPackageGUIDs(); + } + + + /// + /// + /// + [MenuItem("Window/TextMeshPro/Import TMP Essential Resources", false, 2050)] + public static void ImportProjectResourcesMenu() + { + ImportProjectResources(); + } + + + /// + /// + /// + [MenuItem("Window/TextMeshPro/Import TMP Examples and Extras", false, 2051)] + public static void ImportExamplesContentMenu() + { + ImportExtraContent(); + } + + + // Create Sprite Asset Editor Window + //[MenuItem("Window/TextMeshPro/Convert TMP Project Files to UPM", false, 1510)] + public static void ConvertProjectGUIDsMenu() + { + ConvertProjectGUIDsToUPM(); + + //GetVersionInfo(); + } + + + // Create Sprite Asset Editor Window + //[MenuItem("Window/TextMeshPro/Convert GUID (Source to DLL)", false, 2010)] + public static void ConvertGUIDFromSourceToDLLMenu() + { + //ConvertGUIDFromSourceToDLL(); + + //GetVersionInfo(); + } + + + // Create Sprite Asset Editor Window + //[MenuItem("Window/TextMeshPro/Convert GUID (DLL to Source)", false, 2020)] + public static void ConvertGUIDFromDllToSourceMenu() + { + //ConvertGUIDFromDLLToSource(); + + //GetVersionInfo(); + } + + + // Create Sprite Asset Editor Window + //[MenuItem("Window/TextMeshPro/Extract Package GUIDs", false, 1530)] + public static void ExtractPackageGUIDMenu() + { + ExtractPackageGUIDs(); + } + + + private static void GetVersionInfo() + { + string version = TMP_Settings.version; + Debug.Log("The version of this TextMesh Pro UPM package is (" + version + ")."); + } + + + /// + /// + /// + private static void ImportExtraContent() + { + string packageFullPath = EditorUtilities.TMP_EditorUtility.packageFullPath; + + AssetDatabase.ImportPackage(packageFullPath + "/Package Resources/TMP Examples & Extras.unitypackage", true); + } + + + /// + /// + /// + private static void ImportProjectResources() + { + string packageFullPath = EditorUtilities.TMP_EditorUtility.packageFullPath; + + AssetDatabase.ImportPackage(packageFullPath + "/Package Resources/TMP Essential Resources.unitypackage", true); + } + + + /// + /// + /// + private static void GenerateNewPackageGUIDs() + { + // Make sure Asset Serialization mode is set to ForceText with Visible Meta Files. + SetProjectSerializationAndSourceControlModes(); + + string projectPath = Path.GetFullPath("Assets/.."); + + // Clear existing dictionary of AssetRecords + List assetRecords = new List(); + + // Get full list of GUIDs used in the package which including folders. + string[] packageGUIDs = AssetDatabase.FindAssets("t:Object", new string[] { "Assets/Packages/com.unity.TextMeshPro" }); + + for (int i = 0; i < packageGUIDs.Length; i++) + { + // Could add a progress bar for this process (if needed) + + string guid = packageGUIDs[i]; + string assetFilePath = AssetDatabase.GUIDToAssetPath(guid); + string assetMetaFilePath = AssetDatabase.GetTextMetaFilePathFromAssetPath(assetFilePath); + //System.Type assetType = AssetDatabase.GetMainAssetTypeAtPath(assetFilePath); + + AssetRemappingRecord assetRecord; + assetRecord.oldGuid = guid; + assetRecord.assetPath = assetFilePath; + + string newGUID = GenerateUniqueGUID(); + + assetRecord.newGuid = newGUID; + + if (assetRecords.FindIndex(item => item.oldGuid == guid) != -1) + continue; + + assetRecords.Add(assetRecord); + + // Read the meta file for the given asset. + string assetMetaFile = File.ReadAllText(projectPath + "/" + assetMetaFilePath); + + assetMetaFile = assetMetaFile.Replace("guid: " + guid, "guid: " + newGUID); + + File.WriteAllText(projectPath + "/" + assetMetaFilePath, assetMetaFile); + + //Debug.Log("Asset: [" + assetFilePath + "] Type: " + assetType + " Current GUID: [" + guid + "] New GUID: [" + newGUID + "]"); + } + + AssetDatabase.Refresh(); + + // Get list of GUIDs for assets that might need references to previous GUIDs which need to be updated. + packageGUIDs = AssetDatabase.FindAssets("t:Object"); // ("t:Object", new string[] { "Assets/Asset Importer" }); + + for (int i = 0; i < packageGUIDs.Length; i++) + { + // Could add a progress bar for this process + + string guid = packageGUIDs[i]; + string assetFilePath = AssetDatabase.GUIDToAssetPath(guid); + System.Type assetType = AssetDatabase.GetMainAssetTypeAtPath(assetFilePath); + + // Filter out file types we are not interested in + if (assetType == typeof(DefaultAsset) || assetType == typeof(MonoScript) || assetType == typeof(Texture2D) || assetType == typeof(TextAsset) || assetType == typeof(Shader)) + continue; + + // Read the asset data file + string assetDataFile = File.ReadAllText(projectPath + "/" + assetFilePath); + + //Debug.Log("Searching Asset: [" + assetFilePath + "] of type: " + assetType); + + bool hasFileChanged = false; + + foreach (AssetRemappingRecord record in assetRecords) + { + if (assetDataFile.Contains(record.oldGuid)) + { + hasFileChanged = true; + + assetDataFile = assetDataFile.Replace(record.oldGuid, record.newGuid); + + Debug.Log("Replacing old GUID: [" + record.oldGuid + "] by new GUID: [" + record.newGuid + "] in asset file: [" + assetFilePath + "]."); + } + } + + if (hasFileChanged) + { + // Add file to list of changed files + File.WriteAllText(projectPath + "/" + assetFilePath, assetDataFile); + } + + } + + AssetDatabase.Refresh(); + + // Restore project Asset Serialization and Source Control modes. + RestoreProjectSerializationAndSourceControlModes(); + } + + + private static void ExtractPackageGUIDs() + { + // Make sure Asset Serialization mode is set to ForceText with Visible Meta Files. + SetProjectSerializationAndSourceControlModes(); + + string projectPath = Path.GetFullPath("Assets/.."); + + // Create new instance of AssetConversionData file + AssetConversionData data = new AssetConversionData(); + data.assetRecords = new List(); + + // Get full list of GUIDs used in the package which including folders. + string[] packageGUIDs = AssetDatabase.FindAssets("t:Object", new string[] { "Assets/Packages/com.unity.TextMeshPro" }); + + for (int i = 0; i < packageGUIDs.Length; i++) + { + // Could add a progress bar for this process (if needed) + + string guid = packageGUIDs[i]; + string assetFilePath = AssetDatabase.GUIDToAssetPath(guid); + //string assetMetaFilePath = AssetDatabase.GetTextMetaFilePathFromAssetPath(assetFilePath); + + //ObjectIdentifier[] localIdentifider = BundleBuildInterface.GetPlayerObjectIdentifiersInAsset(new GUID(guid), BuildTarget.NoTarget); + //System.Type[] types = BundleBuildInterface.GetTypeForObjects(localIdentifider); + + System.Type assetType = AssetDatabase.GetMainAssetTypeAtPath(assetFilePath); + + // Filter out file types we are not interested in + if (assetType == typeof(DefaultAsset)) + continue; + + string newGuid = GenerateUniqueGUID(); + + AssetConversionRecord record; + record.referencedResource = Path.GetFileName(assetFilePath); + record.target = "fileID: 2108210716, guid: " + newGuid; + + record.replacement = "fileID: 11500000, guid: " + guid; + + //if (m_AssetRecords.FindIndex(item => item.oldGuid == guid) != -1) + // continue; + + data.assetRecords.Add(record); + + // Read the meta file for the given asset. + //string assetMetaFile = File.ReadAllText(projectPath + "/" + assetMetaFilePath); + + //assetMetaFile = assetMetaFile.Replace("guid: " + guid, "guid: " + newGUID); + + //File.WriteAllText(projectPath + "/" + assetMetaFilePath, assetMetaFile); + + Debug.Log("Asset: [" + Path.GetFileName(assetFilePath) + "] Type: " + assetType + " Current GUID: [" + guid + "] New GUID: [" + newGuid + "]"); + } + + // Write new information into JSON file + string dataFile = JsonUtility.ToJson(data, true); + + File.WriteAllText(projectPath + "/Assets/Packages/com.unity.TextMeshPro/PackageConversionData.json", dataFile); + + // Restore project Asset Serialization and Source Control modes. + RestoreProjectSerializationAndSourceControlModes(); + } + + + /// + /// + /// + private static void ConvertProjectGUIDsToUPM() + { + // Make sure Asset Serialization mode is set to ForceText with Visible Meta Files. + SetProjectSerializationAndSourceControlModes(); + + string projectPath = Path.GetFullPath("Assets/.."); + string packageFullPath = EditorUtilities.TMP_EditorUtility.packageFullPath; + + // List containing assets that have been modified. + List modifiedAssetList = new List(); + + // Read Conversion Data from Json file. + AssetConversionData conversionData = JsonUtility.FromJson(File.ReadAllText(packageFullPath + "/PackageConversionData.json")); + + // Get list of GUIDs for assets that might contain references to previous GUIDs that require updating. + string[] projectGUIDs = AssetDatabase.FindAssets("t:Object"); + + for (int i = 0; i < projectGUIDs.Length; i++) + { + // Could add a progress bar for this process + + string guid = projectGUIDs[i]; + string assetFilePath = AssetDatabase.GUIDToAssetPath(guid); + System.Type assetType = AssetDatabase.GetMainAssetTypeAtPath(assetFilePath); + + // Filter out file types we are not interested in + if (assetType == typeof(DefaultAsset) || assetType == typeof(MonoScript) || assetType == typeof(Texture2D) || assetType == typeof(TextAsset) || assetType == typeof(Shader)) + continue; + + // Read the asset data file + string assetDataFile = File.ReadAllText(projectPath + "/" + assetFilePath); + + //Debug.Log("Searching Asset: [" + assetFilePath + "] of type: " + assetType); + + bool hasFileChanged = false; + + foreach (AssetConversionRecord record in conversionData.assetRecords) + { + if (assetDataFile.Contains(record.target)) + { + hasFileChanged = true; + + assetDataFile = assetDataFile.Replace(record.target, record.replacement); + + Debug.Log("Replacing Reference to [" + record.referencedResource + "] using [" + record.target + "] with [" + record.replacement + "] in asset file: [" + assetFilePath + "]."); + } + } + + if (hasFileChanged) + { + Debug.Log("Adding [" + assetFilePath + "] to list of assets to be modified."); + + AssetModificationRecord modifiedAsset; + modifiedAsset.assetFilePath = assetFilePath; + modifiedAsset.assetDataFile = assetDataFile; + + modifiedAssetList.Add(modifiedAsset); + } + + } + + // Scan project meta files to update GUIDs of assets whose GUID has changed. + projectGUIDs = AssetDatabase.FindAssets("t:Object"); + + for (int i = 0; i < projectGUIDs.Length; i++) + { + string guid = projectGUIDs[i]; + string assetFilePath = AssetDatabase.GUIDToAssetPath(guid); + string assetMetaFilePath = AssetDatabase.GetTextMetaFilePathFromAssetPath(assetFilePath); + + // Read the asset meta data file + string assetMetaFile = File.ReadAllText(projectPath + "/" + assetMetaFilePath); + + bool hasFileChanged = false; + + foreach (AssetConversionRecord record in conversionData.assetRecords) + { + if (assetMetaFile.Contains(record.target)) + { + hasFileChanged = true; + + assetMetaFile = assetMetaFile.Replace(record.target, record.replacement); + + Debug.Log("Replacing Reference to [" + record.referencedResource + "] using [" + record.target + "] with [" + record.replacement + "] in asset file: [" + assetMetaFilePath + "]."); + } + } + + if (hasFileChanged) + { + Debug.Log("Adding [" + assetMetaFilePath + "] to list of meta files to be modified."); + + AssetModificationRecord modifiedAsset; + modifiedAsset.assetFilePath = assetMetaFilePath; + modifiedAsset.assetDataFile = assetMetaFile; + + modifiedAssetList.Add(modifiedAsset); + } + } + + // Display dialogue to show user a list of project files that will be modified upon their consent. + if (EditorUtility.DisplayDialog("Save Modified Asset(s)?", "Are you sure you want to save all modified assets?", "YES", "NO")) + { + for (int i = 0; i < modifiedAssetList.Count; i++) + { + // Make sure all file streams that might have been opened by Unity are closed. + //AssetDatabase.ReleaseCachedFileHandles(); + + Debug.Log("Writing asset file [" + modifiedAssetList[i].assetFilePath + "]."); + + //File.WriteAllText(projectPath + "/" + modifiedAssetList[i].assetFilePath, modifiedAssetList[i].assetDataFile); + } + + } + + AssetDatabase.Refresh(); + + // Restore project Asset Serialization and Source Control modes. + RestoreProjectSerializationAndSourceControlModes(); + } + + + /// + /// + /// + /// + private static string GenerateUniqueGUID() + { + string monoGuid = System.Guid.NewGuid().ToString(); + + char[] charGuid = new char[32]; + int index = 0; + for (int i = 0; i < monoGuid.Length; i++) + { + if (monoGuid[i] != '-') + charGuid[index++] = monoGuid[i]; + } + + string guid = new string(charGuid); + + // Make sure new GUID is not already used by some other asset. + if (AssetDatabase.GUIDToAssetPath(guid) != string.Empty) + guid = GenerateUniqueGUID(); + + return guid; + } + + + /// + /// Change project asset serialization mode to ForceText (if necessary) + /// + private static void SetProjectSerializationAndSourceControlModes() + { + // Make sure Asset Serialization mode is set to ForceText with Visible Meta Files. + m_ProjectAssetSerializationMode = EditorSettings.serializationMode; + if (m_ProjectAssetSerializationMode != SerializationMode.ForceText) + UnityEditor.EditorSettings.serializationMode = SerializationMode.ForceText; + + m_ProjectExternalVersionControl = EditorSettings.externalVersionControl; + if (m_ProjectExternalVersionControl != "Visible Meta Files") + UnityEditor.EditorSettings.externalVersionControl = "Visible Meta Files"; + } + + + /// + /// Revert potential change to asset serialization mode (if necessary) + /// + private static void RestoreProjectSerializationAndSourceControlModes() + { + // Make sure Asset Serialization mode is set to ForceText with Visible Meta Files. + if (m_ProjectAssetSerializationMode != EditorSettings.serializationMode) + EditorSettings.serializationMode = m_ProjectAssetSerializationMode; + + if (m_ProjectExternalVersionControl != EditorSettings.externalVersionControl) + EditorSettings.externalVersionControl = m_ProjectExternalVersionControl; + } + + } +} diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_PackageUtilities.cs.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_PackageUtilities.cs.meta new file mode 100644 index 0000000..916d326 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_PackageUtilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 68eedd4e5b33b37429c02c4add0036fe +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_PostBuildProcessHandler.cs b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_PostBuildProcessHandler.cs new file mode 100644 index 0000000..aacab93 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_PostBuildProcessHandler.cs @@ -0,0 +1,63 @@ +using UnityEngine; +using UnityEditor; +using UnityEditor.Callbacks; +using System.IO; + + +namespace TMPro +{ + public class TMP_PostBuildProcessHandler + { + [PostProcessBuildAttribute(10000)] + public static void OnPostprocessBuild(BuildTarget target, string pathToBuiltProject) + { + // Check if TMP Essential Resource are present in user project. + if (target == BuildTarget.iOS && File.Exists(GetEssentialProjectResourcesPath() + "/Resources/TMP Settings.asset") && TMP_Settings.enableEmojiSupport) + { + string file = Path.Combine(pathToBuiltProject, "Classes/UI/Keyboard.mm"); + string content = File.ReadAllText(file); + content = content.Replace("FILTER_EMOJIS_IOS_KEYBOARD 1", "FILTER_EMOJIS_IOS_KEYBOARD 0"); + File.WriteAllText(file, content); + } + } + + + private static string GetEssentialProjectResourcesPath() + { + // Find the potential location of the TextMesh Pro folder in the user project. + string projectPath = Path.GetFullPath("Assets/.."); + if (Directory.Exists(projectPath)) + { + // Search for default location of TMP Essential Resources + if (Directory.Exists(projectPath + "/Assets/TextMesh Pro/Resources")) + { + return "Assets/TextMesh Pro"; + } + + // Search for potential alternative locations in the user project + string[] matchingPaths = Directory.GetDirectories(projectPath, "TextMesh Pro", SearchOption.AllDirectories); + projectPath = ValidateLocation(matchingPaths, projectPath); + if (projectPath != null) return projectPath; + } + + return null; + } + + + private static string ValidateLocation(string[] paths, string projectPath) + { + for (int i = 0; i < paths.Length; i++) + { + // Check if any of the matching directories contain a GUISkins directory. + if (Directory.Exists(paths[i] + "/Resources")) + { + string folderPath = paths[i].Replace(projectPath, ""); + folderPath = folderPath.TrimStart('\\', '/'); + return folderPath; + } + } + + return null; + } + } +} diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_PostBuildProcessHandler.cs.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_PostBuildProcessHandler.cs.meta new file mode 100644 index 0000000..5da0161 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_PostBuildProcessHandler.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 6fdea2af3daa40fe8f88e5e9cfc17abb +timeCreated: 1479886230 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_ProjectTextSettings.cs b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_ProjectTextSettings.cs new file mode 100644 index 0000000..8a3258b --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_ProjectTextSettings.cs @@ -0,0 +1,43 @@ +#if !UNITY_2018_3_OR_NEWER +using UnityEditor; + +namespace TMPro +{ + + public static class TMP_ProjectTextSettings + { + // Open Project Text Settings + [MenuItem("Edit/Project Settings/TextMeshPro Settings", false, 309)] + public static void SelectProjectTextSettings() + { + TMP_Settings textSettings = TMP_Settings.instance; + + if (textSettings) + { + Selection.activeObject = textSettings; + + // TODO: Do we want to ping the Project Text Settings asset in the Project Inspector + EditorUtility.FocusProjectWindow(); + EditorGUIUtility.PingObject(textSettings); + } + else + TMPro_EventManager.RESOURCE_LOAD_EVENT.Add(ON_RESOURCES_LOADED); + } + + + // Event received when TMP resources have been loaded. + static void ON_RESOURCES_LOADED() + { + TMPro_EventManager.RESOURCE_LOAD_EVENT.Remove(ON_RESOURCES_LOADED); + + TMP_Settings textSettings = TMP_Settings.instance; + + Selection.activeObject = textSettings; + + // TODO: Do we want to ping the Project Text Settings asset in the Project Inspector + EditorUtility.FocusProjectWindow(); + EditorGUIUtility.PingObject(textSettings); + } + } +} +#endif \ No newline at end of file diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_ProjectTextSettings.cs.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_ProjectTextSettings.cs.meta new file mode 100644 index 0000000..403b287 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_ProjectTextSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0e751e877ed14d71a6b8e63ac54949cf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_ResourcesLoader.cs b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_ResourcesLoader.cs new file mode 100644 index 0000000..16cbd76 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_ResourcesLoader.cs @@ -0,0 +1,68 @@ +using UnityEditor; +using UnityEngine; +using System.Collections; + +namespace TMPro.EditorUtilities +{ + + //[InitializeOnLoad] + class TMP_ResourcesLoader + { + + /// + /// Function to pre-load the TMP Resources + /// + public static void LoadTextMeshProResources() + { + //TMP_Settings.LoadDefaultSettings(); + //TMP_StyleSheet.LoadDefaultStyleSheet(); + } + + + static TMP_ResourcesLoader() + { + //Debug.Log("Loading TMP Resources..."); + + // Get current targetted platform + + + //string Settings = PlayerSettings.GetScriptingDefineSymbolsForGroup(BuildTargetGroup.Standalone); + //TMPro.TMP_Settings.LoadDefaultSettings(); + //TMPro.TMP_StyleSheet.LoadDefaultStyleSheet(); + } + + + + //[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] + //static void OnBeforeSceneLoaded() + //{ + //Debug.Log("Before scene is loaded."); + + // //TMPro.TMP_Settings.LoadDefaultSettings(); + // //TMPro.TMP_StyleSheet.LoadDefaultStyleSheet(); + + // //ShaderVariantCollection collection = new ShaderVariantCollection(); + // //Shader s0 = Shader.Find("TextMeshPro/Mobile/Distance Field"); + // //ShaderVariantCollection.ShaderVariant tmp_Variant = new ShaderVariantCollection.ShaderVariant(s0, UnityEngine.Rendering.PassType.Normal, string.Empty); + + // //collection.Add(tmp_Variant); + // //collection.WarmUp(); + //} + + } + + //static class TMP_ProjectSettings + //{ + // [InitializeOnLoadMethod] + // static void SetProjectDefineSymbols() + // { + // string currentBuildSettings = PlayerSettings.GetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup); + + // //Check for and inject TMP_INSTALLED + // if (!currentBuildSettings.Contains("TMP_PRESENT")) + // { + // PlayerSettings.SetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup, currentBuildSettings + ";TMP_PRESENT"); + // } + // } + //} +} diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_ResourcesLoader.cs.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_ResourcesLoader.cs.meta new file mode 100644 index 0000000..3fd11fb --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_ResourcesLoader.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 7241c7dc25374fc1a6ab3ef9da79c363 +timeCreated: 1465441092 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SDFShaderGUI.cs b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SDFShaderGUI.cs new file mode 100644 index 0000000..22ba616 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SDFShaderGUI.cs @@ -0,0 +1,442 @@ +using UnityEngine; +using UnityEditor; + +namespace TMPro.EditorUtilities +{ + public class TMP_SDFShaderGUI : TMP_BaseShaderGUI + { + static ShaderFeature s_OutlineFeature, s_UnderlayFeature, s_BevelFeature, s_GlowFeature, s_MaskFeature; + + static bool s_Face = true, s_Outline = true, s_Underlay, s_Lighting, s_Glow, s_Bevel, s_Light, s_Bump, s_Env; + + static string[] + s_FaceUvSpeedNames = { "_FaceUVSpeedX", "_FaceUVSpeedY" }, + s_OutlineUvSpeedNames = { "_OutlineUVSpeedX", "_OutlineUVSpeedY" }; + + static TMP_SDFShaderGUI() + { + s_OutlineFeature = new ShaderFeature() + { + undoLabel = "Outline", + keywords = new[] { "OUTLINE_ON" } + }; + + s_UnderlayFeature = new ShaderFeature() + { + undoLabel = "Underlay", + keywords = new[] { "UNDERLAY_ON", "UNDERLAY_INNER" }, + label = new GUIContent("Underlay Type"), + keywordLabels = new[] + { + new GUIContent("None"), new GUIContent("Normal"), new GUIContent("Inner") + } + }; + + s_BevelFeature = new ShaderFeature() + { + undoLabel = "Bevel", + keywords = new[] { "BEVEL_ON" } + }; + + s_GlowFeature = new ShaderFeature() + { + undoLabel = "Glow", + keywords = new[] { "GLOW_ON" } + }; + + s_MaskFeature = new ShaderFeature() + { + undoLabel = "Mask", + keywords = new[] { "MASK_HARD", "MASK_SOFT" }, + label = new GUIContent("Mask"), + keywordLabels = new[] + { + new GUIContent("Mask Off"), new GUIContent("Mask Hard"), new GUIContent("Mask Soft") + } + }; + } + + protected override void DoGUI() + { + s_Face = BeginPanel("Face", s_Face); + if (s_Face) + { + DoFacePanel(); + } + + EndPanel(); + + s_Outline = m_Material.HasProperty(ShaderUtilities.ID_OutlineTex) ? BeginPanel("Outline", s_Outline) : BeginPanel("Outline", s_OutlineFeature, s_Outline); + if (s_Outline) + { + DoOutlinePanel(); + } + + EndPanel(); + + if (m_Material.HasProperty(ShaderUtilities.ID_UnderlayColor)) + { + s_Underlay = BeginPanel("Underlay", s_UnderlayFeature, s_Underlay); + if (s_Underlay) + { + DoUnderlayPanel(); + } + + EndPanel(); + } + + if (m_Material.HasProperty("_SpecularColor")) + { + s_Lighting = BeginPanel("Lighting", s_BevelFeature, s_Lighting); + if (s_Lighting) + { + s_Bevel = BeginPanel("Bevel", s_Bevel); + if (s_Bevel) + { + DoBevelPanel(); + } + + EndPanel(); + + s_Light = BeginPanel("Local Lighting", s_Light); + if (s_Light) + { + DoLocalLightingPanel(); + } + + EndPanel(); + + s_Bump = BeginPanel("Bump Map", s_Bump); + if (s_Bump) + { + DoBumpMapPanel(); + } + + EndPanel(); + + s_Env = BeginPanel("Environment Map", s_Env); + if (s_Env) + { + DoEnvMapPanel(); + } + + EndPanel(); + } + + EndPanel(); + } + else if (m_Material.HasProperty("_SpecColor")) + { + s_Bevel = BeginPanel("Bevel", s_Bevel); + if (s_Bevel) + { + DoBevelPanel(); + } + + EndPanel(); + + s_Light = BeginPanel("Surface Lighting", s_Light); + if (s_Light) + { + DoSurfaceLightingPanel(); + } + + EndPanel(); + + s_Bump = BeginPanel("Bump Map", s_Bump); + if (s_Bump) + { + DoBumpMapPanel(); + } + + EndPanel(); + + s_Env = BeginPanel("Environment Map", s_Env); + if (s_Env) + { + DoEnvMapPanel(); + } + + EndPanel(); + } + + if (m_Material.HasProperty(ShaderUtilities.ID_GlowColor)) + { + s_Glow = BeginPanel("Glow", s_GlowFeature, s_Glow); + if (s_Glow) + { + DoGlowPanel(); + } + + EndPanel(); + } + + s_DebugExtended = BeginPanel("Debug Settings", s_DebugExtended); + if (s_DebugExtended) + { + DoDebugPanel(); + } + + EndPanel(); + } + + void DoFacePanel() + { + EditorGUI.indentLevel += 1; + DoColor("_FaceColor", "Color"); + if (m_Material.HasProperty(ShaderUtilities.ID_FaceTex)) + { + if (m_Material.HasProperty("_FaceUVSpeedX")) + { + DoTexture2D("_FaceTex", "Texture", true, s_FaceUvSpeedNames); + } + else + { + DoTexture2D("_FaceTex", "Texture", true); + } + } + + DoSlider("_OutlineSoftness", "Softness"); + DoSlider("_FaceDilate", "Dilate"); + if (m_Material.HasProperty(ShaderUtilities.ID_Shininess)) + { + DoSlider("_FaceShininess", "Gloss"); + } + + EditorGUI.indentLevel -= 1; + EditorGUILayout.Space(); + } + + void DoOutlinePanel() + { + EditorGUI.indentLevel += 1; + DoColor("_OutlineColor", "Color"); + if (m_Material.HasProperty(ShaderUtilities.ID_OutlineTex)) + { + if (m_Material.HasProperty("_OutlineUVSpeedX")) + { + DoTexture2D("_OutlineTex", "Texture", true, s_OutlineUvSpeedNames); + } + else + { + DoTexture2D("_OutlineTex", "Texture", true); + } + } + + DoSlider("_OutlineWidth", "Thickness"); + if (m_Material.HasProperty("_OutlineShininess")) + { + DoSlider("_OutlineShininess", "Gloss"); + } + + EditorGUI.indentLevel -= 1; + EditorGUILayout.Space(); + } + + void DoUnderlayPanel() + { + EditorGUI.indentLevel += 1; + s_UnderlayFeature.DoPopup(m_Editor, m_Material); + DoColor("_UnderlayColor", "Color"); + DoSlider("_UnderlayOffsetX", "Offset X"); + DoSlider("_UnderlayOffsetY", "Offset Y"); + DoSlider("_UnderlayDilate", "Dilate"); + DoSlider("_UnderlaySoftness", "Softness"); + EditorGUI.indentLevel -= 1; + EditorGUILayout.Space(); + } + + static GUIContent[] s_BevelTypeLabels = + { + new GUIContent("Outer Bevel"), + new GUIContent("Inner Bevel") + }; + + void DoBevelPanel() + { + EditorGUI.indentLevel += 1; + DoPopup("_ShaderFlags", "Type", s_BevelTypeLabels); + DoSlider("_Bevel", "Amount"); + DoSlider("_BevelOffset", "Offset"); + DoSlider("_BevelWidth", "Width"); + DoSlider("_BevelRoundness", "Roundness"); + DoSlider("_BevelClamp", "Clamp"); + EditorGUI.indentLevel -= 1; + EditorGUILayout.Space(); + } + + void DoLocalLightingPanel() + { + EditorGUI.indentLevel += 1; + DoSlider("_LightAngle", "Light Angle"); + DoColor("_SpecularColor", "Specular Color"); + DoSlider("_SpecularPower", "Specular Power"); + DoSlider("_Reflectivity", "Reflectivity Power"); + DoSlider("_Diffuse", "Diffuse Shadow"); + DoSlider("_Ambient", "Ambient Shadow"); + EditorGUI.indentLevel -= 1; + EditorGUILayout.Space(); + } + + void DoSurfaceLightingPanel() + { + EditorGUI.indentLevel += 1; + DoColor("_SpecColor", "Specular Color"); + EditorGUI.indentLevel -= 1; + EditorGUILayout.Space(); + } + + void DoBumpMapPanel() + { + EditorGUI.indentLevel += 1; + DoTexture2D("_BumpMap", "Texture"); + DoSlider("_BumpFace", "Face"); + DoSlider("_BumpOutline", "Outline"); + EditorGUI.indentLevel -= 1; + EditorGUILayout.Space(); + } + + void DoEnvMapPanel() + { + EditorGUI.indentLevel += 1; + DoColor("_ReflectFaceColor", "Face Color"); + DoColor("_ReflectOutlineColor", "Outline Color"); + DoCubeMap("_Cube", "Texture"); + DoVector3("_EnvMatrixRotation", "Rotation"); + EditorGUI.indentLevel -= 1; + EditorGUILayout.Space(); + } + + void DoGlowPanel() + { + EditorGUI.indentLevel += 1; + DoColor("_GlowColor", "Color"); + DoSlider("_GlowOffset", "Offset"); + DoSlider("_GlowInner", "Inner"); + DoSlider("_GlowOuter", "Outer"); + DoSlider("_GlowPower", "Power"); + EditorGUI.indentLevel -= 1; + EditorGUILayout.Space(); + } + + void DoDebugPanel() + { + EditorGUI.indentLevel += 1; + DoTexture2D("_MainTex", "Font Atlas"); + DoFloat("_GradientScale", "Gradient Scale"); + DoFloat("_TextureWidth", "Texture Width"); + DoFloat("_TextureHeight", "Texture Height"); + EditorGUILayout.Space(); + DoFloat("_ScaleX", "Scale X"); + DoFloat("_ScaleY", "Scale Y"); + + if (m_Material.HasProperty(ShaderUtilities.ID_Sharpness)) + DoSlider("_Sharpness", "Sharpness"); + + DoSlider("_PerspectiveFilter", "Perspective Filter"); + EditorGUILayout.Space(); + DoFloat("_VertexOffsetX", "Offset X"); + DoFloat("_VertexOffsetY", "Offset Y"); + + if (m_Material.HasProperty(ShaderUtilities.ID_MaskCoord)) + { + EditorGUILayout.Space(); + s_MaskFeature.ReadState(m_Material); + s_MaskFeature.DoPopup(m_Editor, m_Material); + if (s_MaskFeature.Active) + { + DoMaskSubgroup(); + } + + EditorGUILayout.Space(); + DoVector("_ClipRect", "Clip Rect", s_LbrtVectorLabels); + } + else if (m_Material.HasProperty("_MaskTex")) + { + DoMaskTexSubgroup(); + } + else if (m_Material.HasProperty(ShaderUtilities.ID_MaskSoftnessX)) + { + EditorGUILayout.Space(); + DoFloat("_MaskSoftnessX", "Softness X"); + DoFloat("_MaskSoftnessY", "Softness Y"); + DoVector("_ClipRect", "Clip Rect", s_LbrtVectorLabels); + } + + if (m_Material.HasProperty(ShaderUtilities.ID_StencilID)) + { + EditorGUILayout.Space(); + DoFloat("_Stencil", "Stencil ID"); + DoFloat("_StencilComp", "Stencil Comp"); + } + + EditorGUILayout.Space(); + + EditorGUI.BeginChangeCheck(); + bool useRatios = EditorGUILayout.Toggle("Use Ratios", !m_Material.IsKeywordEnabled("RATIOS_OFF")); + if (EditorGUI.EndChangeCheck()) + { + m_Editor.RegisterPropertyChangeUndo("Use Ratios"); + if (useRatios) + { + m_Material.DisableKeyword("RATIOS_OFF"); + } + else + { + m_Material.EnableKeyword("RATIOS_OFF"); + } + } + + EditorGUI.BeginDisabledGroup(true); + DoFloat("_ScaleRatioA", "Scale Ratio A"); + DoFloat("_ScaleRatioB", "Scale Ratio B"); + DoFloat("_ScaleRatioC", "Scale Ratio C"); + EditorGUI.EndDisabledGroup(); + EditorGUI.indentLevel -= 1; + EditorGUILayout.Space(); + } + + void DoMaskSubgroup() + { + DoVector("_MaskCoord", "Mask Bounds", s_XywhVectorLabels); + if (Selection.activeGameObject != null) + { + Renderer renderer = Selection.activeGameObject.GetComponent(); + if (renderer != null) + { + Rect rect = EditorGUILayout.GetControlRect(); + rect.x += EditorGUIUtility.labelWidth; + rect.width -= EditorGUIUtility.labelWidth; + if (GUI.Button(rect, "Match Renderer Bounds")) + { + FindProperty("_MaskCoord", m_Properties).vectorValue = new Vector4( + 0, + 0, + Mathf.Round(renderer.bounds.extents.x * 1000) / 1000, + Mathf.Round(renderer.bounds.extents.y * 1000) / 1000 + ); + } + } + } + + if (s_MaskFeature.State == 1) + { + DoFloat("_MaskSoftnessX", "Softness X"); + DoFloat("_MaskSoftnessY", "Softness Y"); + } + } + + void DoMaskTexSubgroup() + { + EditorGUILayout.Space(); + DoTexture2D("_MaskTex", "Mask Texture"); + DoToggle("_MaskInverse", "Inverse Mask"); + DoColor("_MaskEdgeColor", "Edge Color"); + DoSlider("_MaskEdgeSoftness", "Edge Softness"); + DoSlider("_MaskWipeControl", "Wipe Position"); + DoFloat("_MaskSoftnessX", "Softness X"); + DoFloat("_MaskSoftnessY", "Softness Y"); + DoVector("_ClipRect", "Clip Rect", s_LbrtVectorLabels); + } + } +} diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SDFShaderGUI.cs.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SDFShaderGUI.cs.meta new file mode 100644 index 0000000..bad1503 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SDFShaderGUI.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 8413ca0e506d42a1a4bd9769f204ad16 +timeCreated: 1469844718 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SerializedPropertyHolder.cs b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SerializedPropertyHolder.cs new file mode 100644 index 0000000..227ea7c --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SerializedPropertyHolder.cs @@ -0,0 +1,14 @@ +using UnityEngine; +using UnityEditor; + +namespace TMPro +{ + class TMP_SerializedPropertyHolder : ScriptableObject + { + public TMP_FontAsset fontAsset; + public uint firstCharacter; + public uint secondCharacter; + + public TMP_GlyphPairAdjustmentRecord glyphPairAdjustmentRecord = new TMP_GlyphPairAdjustmentRecord(new TMP_GlyphAdjustmentRecord(), new TMP_GlyphAdjustmentRecord()); + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SerializedPropertyHolder.cs.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SerializedPropertyHolder.cs.meta new file mode 100644 index 0000000..5419071 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SerializedPropertyHolder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9c4a050f089abb04ebd4125e419f4548 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SettingsEditor.cs b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SettingsEditor.cs new file mode 100644 index 0000000..78897f1 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SettingsEditor.cs @@ -0,0 +1,341 @@ +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; +using UnityEditorInternal; + +#pragma warning disable 0414 // Disabled a few warnings for not yet implemented features. + +namespace TMPro.EditorUtilities +{ + [CustomEditor(typeof(TMP_Settings))] + public class TMP_SettingsEditor : Editor + { + internal class Styles + { + public static readonly GUIContent defaultFontAssetLabel = new GUIContent("Default Font Asset", "The Font Asset that will be assigned by default to newly created text objects when no Font Asset is specified."); + public static readonly GUIContent defaultFontAssetPathLabel = new GUIContent("Path: Resources/", "The relative path to a Resources folder where the Font Assets and Material Presets are located.\nExample \"Fonts & Materials/\""); + + public static readonly GUIContent fallbackFontAssetsLabel = new GUIContent("Fallback Font Assets", "The Font Assets that will be searched to locate and replace missing characters from a given Font Asset."); + public static readonly GUIContent fallbackFontAssetsListLabel = new GUIContent("Fallback Font Assets List", "The Font Assets that will be searched to locate and replace missing characters from a given Font Asset."); + + public static readonly GUIContent fallbackMaterialSettingsLabel = new GUIContent("Fallback Material Settings"); + public static readonly GUIContent matchMaterialPresetLabel = new GUIContent("Match Material Presets"); + + public static readonly GUIContent containerDefaultSettingsLabel = new GUIContent("Text Container Default Settings"); + + public static readonly GUIContent textMeshProLabel = new GUIContent("TextMeshPro"); + public static readonly GUIContent textMeshProUiLabel = new GUIContent("TextMeshPro UI"); + public static readonly GUIContent enableRaycastTarget = new GUIContent("Enable Raycast Target"); + public static readonly GUIContent autoSizeContainerLabel = new GUIContent("Auto Size Text Container", "Set the size of the text container to match the text."); + + public static readonly GUIContent textComponentDefaultSettingsLabel = new GUIContent("Text Component Default Settings"); + public static readonly GUIContent defaultFontSize = new GUIContent("Default Font Size"); + public static readonly GUIContent autoSizeRatioLabel = new GUIContent("Text Auto Size Ratios"); + public static readonly GUIContent minLabel = new GUIContent("Min"); + public static readonly GUIContent maxLabel = new GUIContent("Max"); + + public static readonly GUIContent wordWrappingLabel = new GUIContent("Word Wrapping"); + public static readonly GUIContent kerningLabel = new GUIContent("Kerning"); + public static readonly GUIContent extraPaddingLabel = new GUIContent("Extra Padding"); + public static readonly GUIContent tintAllSpritesLabel = new GUIContent("Tint All Sprites"); + public static readonly GUIContent parseEscapeCharactersLabel = new GUIContent("Parse Escape Sequence"); + + public static readonly GUIContent dynamicFontSystemSettingsLabel = new GUIContent("Dynamic Font System Settings"); + public static readonly GUIContent getFontFeaturesAtRuntime = new GUIContent("Get Font Features at Runtime", "Determines if Glyph Adjustment Data will be retrieved from font files at runtime when new characters and glyphs are added to font assets."); + + public static readonly GUIContent missingGlyphLabel = new GUIContent("Replacement Character", "The character to be displayed when the requested character is not found in any font asset or fallbacks."); + public static readonly GUIContent disableWarningsLabel = new GUIContent("Disable warnings", "Disable warning messages in the Console."); + + public static readonly GUIContent defaultSpriteAssetLabel = new GUIContent("Default Sprite Asset", "The Sprite Asset that will be assigned by default when using the tag when no Sprite Asset is specified."); + public static readonly GUIContent enableEmojiSupportLabel = new GUIContent("iOS Emoji Support", "Enables Emoji support for Touch Screen Keyboards on target devices."); + public static readonly GUIContent spriteAssetsPathLabel = new GUIContent("Path: Resources/", "The relative path to a Resources folder where the Sprite Assets are located.\nExample \"Sprite Assets/\""); + + public static readonly GUIContent defaultStyleSheetLabel = new GUIContent("Default Style Sheet", "The Style Sheet that will be used for all text objects in this project."); + + public static readonly GUIContent colorGradientPresetsLabel = new GUIContent("Color Gradient Presets", "The relative path to a Resources folder where the Color Gradient Presets are located.\nExample \"Color Gradient Presets/\""); + public static readonly GUIContent colorGradientsPathLabel = new GUIContent("Path: Resources/", "The relative path to a Resources folder where the Color Gradient Presets are located.\nExample \"Color Gradient Presets/\""); + + public static readonly GUIContent lineBreakingLabel = new GUIContent("Line Breaking for Asian languages", "The text assets that contain the Leading and Following characters which define the rules for line breaking with Asian languages."); + } + + SerializedProperty m_PropFontAsset; + SerializedProperty m_PropDefaultFontAssetPath; + SerializedProperty m_PropDefaultFontSize; + SerializedProperty m_PropDefaultAutoSizeMinRatio; + SerializedProperty m_PropDefaultAutoSizeMaxRatio; + SerializedProperty m_PropDefaultTextMeshProTextContainerSize; + SerializedProperty m_PropDefaultTextMeshProUITextContainerSize; + SerializedProperty m_PropAutoSizeTextContainer; + SerializedProperty m_PropEnableRaycastTarget; + + SerializedProperty m_PropSpriteAsset; + SerializedProperty m_PropSpriteAssetPath; + SerializedProperty m_PropEnableEmojiSupport; + SerializedProperty m_PropStyleSheet; + ReorderableList m_List; + + SerializedProperty m_PropColorGradientPresetsPath; + + SerializedProperty m_PropMatchMaterialPreset; + SerializedProperty m_PropWordWrapping; + SerializedProperty m_PropKerning; + SerializedProperty m_PropExtraPadding; + SerializedProperty m_PropTintAllSprites; + SerializedProperty m_PropParseEscapeCharacters; + SerializedProperty m_PropMissingGlyphCharacter; + + SerializedProperty m_GetFontFeaturesAtRuntime; + + SerializedProperty m_PropWarningsDisabled; + + SerializedProperty m_PropLeadingCharacters; + SerializedProperty m_PropFollowingCharacters; + + public void OnEnable() + { + if (target == null) + return; + + m_PropFontAsset = serializedObject.FindProperty("m_defaultFontAsset"); + m_PropDefaultFontAssetPath = serializedObject.FindProperty("m_defaultFontAssetPath"); + m_PropDefaultFontSize = serializedObject.FindProperty("m_defaultFontSize"); + m_PropDefaultAutoSizeMinRatio = serializedObject.FindProperty("m_defaultAutoSizeMinRatio"); + m_PropDefaultAutoSizeMaxRatio = serializedObject.FindProperty("m_defaultAutoSizeMaxRatio"); + m_PropDefaultTextMeshProTextContainerSize = serializedObject.FindProperty("m_defaultTextMeshProTextContainerSize"); + m_PropDefaultTextMeshProUITextContainerSize = serializedObject.FindProperty("m_defaultTextMeshProUITextContainerSize"); + m_PropAutoSizeTextContainer = serializedObject.FindProperty("m_autoSizeTextContainer"); + m_PropEnableRaycastTarget = serializedObject.FindProperty("m_EnableRaycastTarget"); + + m_PropSpriteAsset = serializedObject.FindProperty("m_defaultSpriteAsset"); + m_PropSpriteAssetPath = serializedObject.FindProperty("m_defaultSpriteAssetPath"); + m_PropEnableEmojiSupport = serializedObject.FindProperty("m_enableEmojiSupport"); + m_PropStyleSheet = serializedObject.FindProperty("m_defaultStyleSheet"); + m_PropColorGradientPresetsPath = serializedObject.FindProperty("m_defaultColorGradientPresetsPath"); + + m_List = new ReorderableList(serializedObject, serializedObject.FindProperty("m_fallbackFontAssets"), true, true, true, true); + + m_List.drawElementCallback = (rect, index, isActive, isFocused) => + { + var element = m_List.serializedProperty.GetArrayElementAtIndex(index); + rect.y += 2; + EditorGUI.PropertyField(new Rect(rect.x, rect.y, rect.width, EditorGUIUtility.singleLineHeight), element, GUIContent.none); + }; + + m_List.drawHeaderCallback = rect => + { + EditorGUI.LabelField(rect, Styles.fallbackFontAssetsListLabel); + }; + + m_PropMatchMaterialPreset = serializedObject.FindProperty("m_matchMaterialPreset"); + + m_PropWordWrapping = serializedObject.FindProperty("m_enableWordWrapping"); + m_PropKerning = serializedObject.FindProperty("m_enableKerning"); + m_PropExtraPadding = serializedObject.FindProperty("m_enableExtraPadding"); + m_PropTintAllSprites = serializedObject.FindProperty("m_enableTintAllSprites"); + m_PropParseEscapeCharacters = serializedObject.FindProperty("m_enableParseEscapeCharacters"); + m_PropMissingGlyphCharacter = serializedObject.FindProperty("m_missingGlyphCharacter"); + + m_PropWarningsDisabled = serializedObject.FindProperty("m_warningsDisabled"); + + m_GetFontFeaturesAtRuntime = serializedObject.FindProperty("m_GetFontFeaturesAtRuntime"); + + m_PropLeadingCharacters = serializedObject.FindProperty("m_leadingCharacters"); + m_PropFollowingCharacters = serializedObject.FindProperty("m_followingCharacters"); + } + + public override void OnInspectorGUI() + { + serializedObject.Update(); + + float labelWidth = EditorGUIUtility.labelWidth; + float fieldWidth = EditorGUIUtility.fieldWidth; + + // TextMeshPro Font Info Panel + EditorGUI.indentLevel = 0; + + // FONT ASSET + EditorGUILayout.BeginVertical(EditorStyles.helpBox); + GUILayout.Label(Styles.defaultFontAssetLabel, EditorStyles.boldLabel); + EditorGUI.indentLevel = 1; + EditorGUILayout.PropertyField(m_PropFontAsset, Styles.defaultFontAssetLabel); + EditorGUILayout.PropertyField(m_PropDefaultFontAssetPath, Styles.defaultFontAssetPathLabel); + EditorGUI.indentLevel = 0; + + EditorGUILayout.Space(); + EditorGUILayout.EndVertical(); + + // FALLBACK FONT ASSETs + EditorGUILayout.BeginVertical(EditorStyles.helpBox); + GUILayout.Label(Styles.fallbackFontAssetsLabel, EditorStyles.boldLabel); + m_List.DoLayoutList(); + + GUILayout.Label(Styles.fallbackMaterialSettingsLabel, EditorStyles.boldLabel); + EditorGUI.indentLevel = 1; + EditorGUILayout.PropertyField(m_PropMatchMaterialPreset, Styles.matchMaterialPresetLabel); + EditorGUI.indentLevel = 0; + + EditorGUILayout.Space(); + EditorGUILayout.EndVertical(); + + // MISSING GLYPHS + EditorGUILayout.BeginVertical(EditorStyles.helpBox); + GUILayout.Label(Styles.dynamicFontSystemSettingsLabel, EditorStyles.boldLabel); + EditorGUI.indentLevel = 1; + EditorGUILayout.PropertyField(m_GetFontFeaturesAtRuntime, Styles.getFontFeaturesAtRuntime); + EditorGUILayout.PropertyField(m_PropMissingGlyphCharacter, Styles.missingGlyphLabel); + EditorGUILayout.PropertyField(m_PropWarningsDisabled, Styles.disableWarningsLabel); + EditorGUI.indentLevel = 0; + + EditorGUILayout.Space(); + EditorGUILayout.EndVertical(); + + // TEXT OBJECT DEFAULT PROPERTIES + EditorGUILayout.BeginVertical(EditorStyles.helpBox); + GUILayout.Label(Styles.containerDefaultSettingsLabel, EditorStyles.boldLabel); + EditorGUI.indentLevel = 1; + + EditorGUILayout.PropertyField(m_PropDefaultTextMeshProTextContainerSize, Styles.textMeshProLabel); + EditorGUILayout.PropertyField(m_PropDefaultTextMeshProUITextContainerSize, Styles.textMeshProUiLabel); + EditorGUILayout.PropertyField(m_PropEnableRaycastTarget, Styles.enableRaycastTarget); + EditorGUILayout.PropertyField(m_PropAutoSizeTextContainer, Styles.autoSizeContainerLabel); + EditorGUI.indentLevel = 0; + + EditorGUILayout.Space(); + + GUILayout.Label(Styles.textComponentDefaultSettingsLabel, EditorStyles.boldLabel); + EditorGUI.indentLevel = 1; + EditorGUILayout.PropertyField(m_PropDefaultFontSize, Styles.defaultFontSize); + + EditorGUILayout.BeginHorizontal(); + { + EditorGUILayout.PrefixLabel(Styles.autoSizeRatioLabel); + EditorGUIUtility.labelWidth = 32; + EditorGUIUtility.fieldWidth = 10; + + EditorGUI.indentLevel = 0; + EditorGUILayout.PropertyField(m_PropDefaultAutoSizeMinRatio, Styles.minLabel); + EditorGUILayout.PropertyField(m_PropDefaultAutoSizeMaxRatio, Styles.maxLabel); + EditorGUI.indentLevel = 1; + } + EditorGUILayout.EndHorizontal(); + + EditorGUIUtility.labelWidth = labelWidth; + EditorGUIUtility.fieldWidth = fieldWidth; + + EditorGUILayout.PropertyField(m_PropWordWrapping, Styles.wordWrappingLabel); + EditorGUILayout.PropertyField(m_PropKerning, Styles.kerningLabel); + + EditorGUILayout.PropertyField(m_PropExtraPadding, Styles.extraPaddingLabel); + EditorGUILayout.PropertyField(m_PropTintAllSprites, Styles.tintAllSpritesLabel); + + EditorGUILayout.PropertyField(m_PropParseEscapeCharacters, Styles.parseEscapeCharactersLabel); + + EditorGUI.indentLevel = 0; + + EditorGUILayout.Space(); + EditorGUILayout.EndVertical(); + + // SPRITE ASSET + EditorGUILayout.BeginVertical(EditorStyles.helpBox); + GUILayout.Label(Styles.defaultSpriteAssetLabel, EditorStyles.boldLabel); + EditorGUI.indentLevel = 1; + EditorGUILayout.PropertyField(m_PropSpriteAsset, Styles.defaultSpriteAssetLabel); + EditorGUILayout.PropertyField(m_PropEnableEmojiSupport, Styles.enableEmojiSupportLabel); + EditorGUILayout.PropertyField(m_PropSpriteAssetPath, Styles.spriteAssetsPathLabel); + EditorGUI.indentLevel = 0; + + EditorGUILayout.Space(); + EditorGUILayout.EndVertical(); + + // STYLE SHEET + EditorGUILayout.BeginVertical(EditorStyles.helpBox); + GUILayout.Label(Styles.defaultStyleSheetLabel, EditorStyles.boldLabel); + EditorGUI.indentLevel = 1; + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(m_PropStyleSheet, Styles.defaultStyleSheetLabel); + if (EditorGUI.EndChangeCheck()) + { + serializedObject.ApplyModifiedProperties(); + TMP_StyleSheet.UpdateStyleSheet(); + } + EditorGUI.indentLevel = 0; + + EditorGUILayout.Space(); + EditorGUILayout.EndVertical(); + + // COLOR GRADIENT PRESETS + EditorGUILayout.BeginVertical(EditorStyles.helpBox); + GUILayout.Label(Styles.colorGradientPresetsLabel, EditorStyles.boldLabel); + EditorGUI.indentLevel = 1; + EditorGUILayout.PropertyField(m_PropColorGradientPresetsPath, Styles.colorGradientsPathLabel); + EditorGUI.indentLevel = 0; + + EditorGUILayout.Space(); + EditorGUILayout.EndVertical(); + + // LINE BREAKING RULE + EditorGUILayout.BeginVertical(EditorStyles.helpBox); + GUILayout.Label(Styles.lineBreakingLabel, EditorStyles.boldLabel); + EditorGUI.indentLevel = 1; + EditorGUILayout.PropertyField(m_PropLeadingCharacters); + EditorGUILayout.PropertyField(m_PropFollowingCharacters); + EditorGUI.indentLevel = 0; + + EditorGUILayout.Space(); + EditorGUILayout.EndVertical(); + + if (serializedObject.ApplyModifiedProperties()) + { + EditorUtility.SetDirty(target); + TMPro_EventManager.ON_TMP_SETTINGS_CHANGED(); + } + } + } + +#if UNITY_2018_3_OR_NEWER + class TMP_ResourceImporterProvider : SettingsProvider + { + TMP_PackageResourceImporter m_ResourceImporter; + + public TMP_ResourceImporterProvider() + : base("Project/TextMesh Pro", SettingsScope.Project) + { + } + + public override void OnGUI(string searchContext) + { + // Lazy creation that supports domain reload + if (m_ResourceImporter == null) + m_ResourceImporter = new TMP_PackageResourceImporter(); + + m_ResourceImporter.OnGUI(); + } + + public override void OnDeactivate() + { + if (m_ResourceImporter != null) + m_ResourceImporter.OnDestroy(); + } + + static UnityEngine.Object GetTMPSettings() + { + return Resources.Load("TMP Settings"); + } + + [SettingsProviderGroup] + static SettingsProvider[] CreateTMPSettingsProvider() + { + var providers = new List { new TMP_ResourceImporterProvider() }; + + if (GetTMPSettings() != null) + { + var provider = new AssetSettingsProvider("Project/TextMesh Pro/Settings", GetTMPSettings); + provider.PopulateSearchKeywordsFromGUIContentProperties(); + providers.Add(provider); + } + + return providers.ToArray(); + } + } +#endif +} diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SettingsEditor.cs.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SettingsEditor.cs.meta new file mode 100644 index 0000000..18c399a --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SettingsEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 0386b6eb838c47138cd51d1c1b879a35 +timeCreated: 1436658550 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SpriteAssetEditor.cs b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SpriteAssetEditor.cs new file mode 100644 index 0000000..82d13d7 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SpriteAssetEditor.cs @@ -0,0 +1,896 @@ +using UnityEngine; +using UnityEngine.TextCore; +using UnityEditor; +using UnityEditorInternal; +using System.Collections.Generic; + + + + +namespace TMPro.EditorUtilities +{ + + [CustomEditor(typeof(TMP_SpriteAsset))] + public class TMP_SpriteAssetEditor : Editor + { + struct UI_PanelState + { + public static bool spriteAssetInfoPanel = true; + public static bool fallbackSpriteAssetPanel = true; + public static bool spriteCharacterTablePanel; + public static bool spriteGlyphTablePanel; + } + + private static string[] s_UiStateLabel = new string[] { "(Click to collapse) ", "(Click to expand) " }; + + int m_moveToIndex; + int m_selectedElement = -1; + int m_CurrentCharacterPage; + int m_CurrentGlyphPage; + + const string k_UndoRedo = "UndoRedoPerformed"; + + string m_CharacterSearchPattern; + List m_CharacterSearchList; + bool m_IsCharacterSearchDirty; + + string m_GlyphSearchPattern; + List m_GlyphSearchList; + bool m_IsGlyphSearchDirty; + + SerializedProperty m_spriteAtlas_prop; + SerializedProperty m_material_prop; + SerializedProperty m_SpriteCharacterTableProperty; + SerializedProperty m_SpriteGlyphTableProperty; + ReorderableList m_fallbackSpriteAssetList; + + TMP_SpriteAsset m_SpriteAsset; + + bool isAssetDirty; + + float m_xOffset; + float m_yOffset; + float m_xAdvance; + float m_scale; + + public void OnEnable() + { + m_SpriteAsset = target as TMP_SpriteAsset; + + m_spriteAtlas_prop = serializedObject.FindProperty("spriteSheet"); + m_material_prop = serializedObject.FindProperty("material"); + m_SpriteCharacterTableProperty = serializedObject.FindProperty("m_SpriteCharacterTable"); + m_SpriteGlyphTableProperty = serializedObject.FindProperty("m_SpriteGlyphTable"); + + // Fallback TMP Sprite Asset list + m_fallbackSpriteAssetList = new ReorderableList(serializedObject, serializedObject.FindProperty("fallbackSpriteAssets"), true, true, true, true); + + m_fallbackSpriteAssetList.drawElementCallback = (Rect rect, int index, bool isActive, bool isFocused) => + { + var element = m_fallbackSpriteAssetList.serializedProperty.GetArrayElementAtIndex(index); + rect.y += 2; + EditorGUI.PropertyField(new Rect(rect.x, rect.y, rect.width, EditorGUIUtility.singleLineHeight), element, GUIContent.none); + }; + + m_fallbackSpriteAssetList.drawHeaderCallback = rect => + { + EditorGUI.LabelField(rect, new GUIContent("Fallback Sprite Asset List", "Select the Sprite Assets that will be searched and used as fallback when a given sprite is missing from this sprite asset.")); + }; + } + + + public override void OnInspectorGUI() + { + + //Debug.Log("OnInspectorGUI Called."); + Event currentEvent = Event.current; + string evt_cmd = currentEvent.commandName; // Get Current Event CommandName to check for Undo Events + + serializedObject.Update(); + + Rect rect; + + // TEXTMESHPRO SPRITE INFO PANEL + GUILayout.Label("Sprite Info", EditorStyles.boldLabel); + EditorGUI.indentLevel = 1; + + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(m_spriteAtlas_prop , new GUIContent("Sprite Atlas")); + if (EditorGUI.EndChangeCheck()) + { + // Assign the new sprite atlas texture to the current material + Texture2D tex = m_spriteAtlas_prop.objectReferenceValue as Texture2D; + if (tex != null) + { + Material mat = m_material_prop.objectReferenceValue as Material; + if (mat != null) + mat.mainTexture = tex; + } + } + + EditorGUILayout.PropertyField(m_material_prop, new GUIContent("Default Material")); + + EditorGUILayout.Space(); + + // FALLBACK SPRITE ASSETS + EditorGUI.indentLevel = 0; + UI_PanelState.fallbackSpriteAssetPanel = EditorGUILayout.Foldout(UI_PanelState.fallbackSpriteAssetPanel, new GUIContent("Fallback Sprite Assets", "Select the Sprite Assets that will be searched and used as fallback when a given sprite is missing from this sprite asset."), true, TMP_UIStyleManager.boldFoldout); + + if (UI_PanelState.fallbackSpriteAssetPanel) + { + m_fallbackSpriteAssetList.DoLayoutList(); + } + + // SPRITE CHARACTER TABLE + #region Display Sprite Character Table + EditorGUI.indentLevel = 0; + rect = EditorGUILayout.GetControlRect(false, 24); + + if (GUI.Button(rect, new GUIContent("Sprite Character Table", "List of sprite characters contained in this sprite asset."), TMP_UIStyleManager.sectionHeader)) + UI_PanelState.spriteCharacterTablePanel = !UI_PanelState.spriteCharacterTablePanel; + + GUI.Label(rect, (UI_PanelState.spriteCharacterTablePanel ? "" : s_UiStateLabel[1]), TMP_UIStyleManager.rightLabel); + + if (UI_PanelState.spriteCharacterTablePanel) + { + int arraySize = m_SpriteCharacterTableProperty.arraySize; + int itemsPerPage = 10; + + // Display Glyph Management Tools + EditorGUILayout.BeginVertical(EditorStyles.helpBox, GUILayout.ExpandWidth(true)); + { + // Search Bar implementation + #region DISPLAY SEARCH BAR + EditorGUILayout.BeginHorizontal(); + { + EditorGUIUtility.labelWidth = 110f; + EditorGUI.BeginChangeCheck(); + string searchPattern = EditorGUILayout.TextField("Sprite Search", m_CharacterSearchPattern, "SearchTextField"); + if (EditorGUI.EndChangeCheck() || m_IsCharacterSearchDirty) + { + if (string.IsNullOrEmpty(searchPattern) == false) + { + //GUIUtility.keyboardControl = 0; + m_CharacterSearchPattern = searchPattern.ToLower(System.Globalization.CultureInfo.InvariantCulture).Trim(); + + // Search Glyph Table for potential matches + SearchCharacterTable(m_CharacterSearchPattern, ref m_CharacterSearchList); + } + else + m_CharacterSearchPattern = null; + + m_IsCharacterSearchDirty = false; + } + + string styleName = string.IsNullOrEmpty(m_CharacterSearchPattern) ? "SearchCancelButtonEmpty" : "SearchCancelButton"; + if (GUILayout.Button(GUIContent.none, styleName)) + { + GUIUtility.keyboardControl = 0; + m_CharacterSearchPattern = string.Empty; + } + } + EditorGUILayout.EndHorizontal(); + #endregion + + // Display Page Navigation + if (!string.IsNullOrEmpty(m_CharacterSearchPattern)) + arraySize = m_CharacterSearchList.Count; + + // Display Page Navigation + DisplayPageNavigation(ref m_CurrentCharacterPage, arraySize, itemsPerPage); + } + EditorGUILayout.EndVertical(); + + if (arraySize > 0) + { + // Display each SpriteInfo entry using the SpriteInfo property drawer. + for (int i = itemsPerPage * m_CurrentCharacterPage; i < arraySize && i < itemsPerPage * (m_CurrentCharacterPage + 1); i++) + { + // Define the start of the selection region of the element. + Rect elementStartRegion = GUILayoutUtility.GetRect(0f, 0f, GUILayout.ExpandWidth(true)); + + int elementIndex = i; + if (!string.IsNullOrEmpty(m_CharacterSearchPattern)) + elementIndex = m_CharacterSearchList[i]; + + SerializedProperty spriteCharacterProperty = m_SpriteCharacterTableProperty.GetArrayElementAtIndex(elementIndex); + + EditorGUILayout.BeginVertical(EditorStyles.helpBox); + { + EditorGUI.BeginDisabledGroup(i != m_selectedElement); + { + EditorGUILayout.PropertyField(spriteCharacterProperty); + } + EditorGUI.EndDisabledGroup(); + } + EditorGUILayout.EndVertical(); + + // Define the end of the selection region of the element. + Rect elementEndRegion = GUILayoutUtility.GetRect(0f, 0f, GUILayout.ExpandWidth(true)); + + // Check for Item selection + Rect selectionArea = new Rect(elementStartRegion.x, elementStartRegion.y, elementEndRegion.width, elementEndRegion.y - elementStartRegion.y); + if (DoSelectionCheck(selectionArea)) + { + if (m_selectedElement == i) + { + m_selectedElement = -1; + } + else + { + m_selectedElement = i; + GUIUtility.keyboardControl = 0; + } + } + + // Draw & Handle Section Area + if (m_selectedElement == i) + { + // Draw selection highlight + TMP_EditorUtility.DrawBox(selectionArea, 2f, new Color32(40, 192, 255, 255)); + + // Draw options to MoveUp, MoveDown, Add or Remove Sprites + Rect controlRect = EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight * 1f); + controlRect.width /= 8; + + // Move sprite up. + bool guiEnabled = GUI.enabled; + if (i == 0) { GUI.enabled = false; } + if (GUI.Button(controlRect, "Up")) + { + SwapCharacterElements(i, i - 1); + } + GUI.enabled = guiEnabled; + + // Move sprite down. + controlRect.x += controlRect.width; + if (i == arraySize - 1) { GUI.enabled = false; } + if (GUI.Button(controlRect, "Down")) + { + SwapCharacterElements(i, i + 1); + } + GUI.enabled = guiEnabled; + + // Move sprite to new index + controlRect.x += controlRect.width * 2; + //if (i == arraySize - 1) { GUI.enabled = false; } + m_moveToIndex = EditorGUI.IntField(controlRect, m_moveToIndex); + controlRect.x -= controlRect.width; + if (GUI.Button(controlRect, "Goto")) + { + MoveCharacterToIndex(i, m_moveToIndex); + } + //controlRect.x += controlRect.width; + GUI.enabled = guiEnabled; + + // Add new Sprite + controlRect.x += controlRect.width * 4; + if (GUI.Button(controlRect, "+")) + { + m_SpriteCharacterTableProperty.arraySize += 1; + + int index = m_SpriteCharacterTableProperty.arraySize - 1; + + SerializedProperty spriteInfo_prop = m_SpriteCharacterTableProperty.GetArrayElementAtIndex(index); + + // Copy properties of the selected element + CopyCharacterSerializedProperty(m_SpriteCharacterTableProperty.GetArrayElementAtIndex(elementIndex), ref spriteInfo_prop); + + //spriteInfo_prop.FindPropertyRelative("m_Index").intValue = index; + serializedObject.ApplyModifiedProperties(); + + m_IsCharacterSearchDirty = true; + } + + // Delete selected Sprite + controlRect.x += controlRect.width; + if (m_selectedElement == -1) GUI.enabled = false; + if (GUI.Button(controlRect, "-")) + { + m_SpriteCharacterTableProperty.DeleteArrayElementAtIndex(elementIndex); + + m_selectedElement = -1; + serializedObject.ApplyModifiedProperties(); + + m_IsCharacterSearchDirty = true; + + return; + } + + + } + } + } + + DisplayPageNavigation(ref m_CurrentCharacterPage, arraySize, itemsPerPage); + + EditorGUIUtility.labelWidth = 40f; + EditorGUIUtility.fieldWidth = 20f; + + GUILayout.Space(5f); + + // GLOBAL TOOLS + #region Global Tools + /* + GUI.enabled = true; + EditorGUILayout.BeginVertical(EditorStyles.helpBox); + rect = EditorGUILayout.GetControlRect(false, 40); + + float width = (rect.width - 75f) / 4; + EditorGUI.LabelField(rect, "Global Offsets & Scale", EditorStyles.boldLabel); + + + rect.x += 70; + bool old_ChangedState = GUI.changed; + + GUI.changed = false; + m_xOffset = EditorGUI.FloatField(new Rect(rect.x + 5f + width * 0, rect.y + 20, width - 5f, 18), new GUIContent("OX:"), m_xOffset); + if (GUI.changed) UpdateGlobalProperty("m_HorizontalBearingX", m_xOffset); + + m_yOffset = EditorGUI.FloatField(new Rect(rect.x + 5f + width * 1, rect.y + 20, width - 5f, 18), new GUIContent("OY:"), m_yOffset); + if (GUI.changed) UpdateGlobalProperty("m_HorizontalBearingY", m_yOffset); + + m_xAdvance = EditorGUI.FloatField(new Rect(rect.x + 5f + width * 2, rect.y + 20, width - 5f, 18), new GUIContent("ADV."), m_xAdvance); + if (GUI.changed) UpdateGlobalProperty("m_HorizontalAdvance", m_xAdvance); + + m_scale = EditorGUI.FloatField(new Rect(rect.x + 5f + width * 3, rect.y + 20, width - 5f, 18), new GUIContent("SF."), m_scale); + if (GUI.changed) UpdateGlobalProperty("m_Scale", m_scale); + + EditorGUILayout.EndVertical(); + + GUI.changed = old_ChangedState; + */ + #endregion + + } + #endregion + + + // SPRITE GLYPH TABLE + #region Display Sprite Glyph Table + EditorGUI.indentLevel = 0; + rect = EditorGUILayout.GetControlRect(false, 24); + + if (GUI.Button(rect, new GUIContent("Sprite Glyph Table", "A list of the SpriteGlyphs contained in this sprite asset."), TMP_UIStyleManager.sectionHeader)) + UI_PanelState.spriteGlyphTablePanel = !UI_PanelState.spriteGlyphTablePanel; + + GUI.Label(rect, (UI_PanelState.spriteGlyphTablePanel ? "" : s_UiStateLabel[1]), TMP_UIStyleManager.rightLabel); + + if (UI_PanelState.spriteGlyphTablePanel) + { + int arraySize = m_SpriteGlyphTableProperty.arraySize; + int itemsPerPage = 10; + + // Display Glyph Management Tools + EditorGUILayout.BeginVertical(EditorStyles.helpBox, GUILayout.ExpandWidth(true)); + { + // Search Bar implementation + #region DISPLAY SEARCH BAR + EditorGUILayout.BeginHorizontal(); + { + EditorGUIUtility.labelWidth = 110f; + EditorGUI.BeginChangeCheck(); + string searchPattern = EditorGUILayout.TextField("Sprite Search", m_GlyphSearchPattern, "SearchTextField"); + if (EditorGUI.EndChangeCheck() || m_IsGlyphSearchDirty) + { + if (string.IsNullOrEmpty(searchPattern) == false) + { + //GUIUtility.keyboardControl = 0; + m_GlyphSearchPattern = searchPattern.ToLower(System.Globalization.CultureInfo.InvariantCulture).Trim(); + + // Search Glyph Table for potential matches + SearchCharacterTable(m_GlyphSearchPattern, ref m_GlyphSearchList); + } + else + m_GlyphSearchPattern = null; + + m_IsGlyphSearchDirty = false; + } + + string styleName = string.IsNullOrEmpty(m_GlyphSearchPattern) ? "SearchCancelButtonEmpty" : "SearchCancelButton"; + if (GUILayout.Button(GUIContent.none, styleName)) + { + GUIUtility.keyboardControl = 0; + m_GlyphSearchPattern = string.Empty; + } + } + EditorGUILayout.EndHorizontal(); + #endregion + + // Display Page Navigation + if (!string.IsNullOrEmpty(m_GlyphSearchPattern)) + arraySize = m_GlyphSearchList.Count; + + // Display Page Navigation + DisplayPageNavigation(ref m_CurrentGlyphPage, arraySize, itemsPerPage); + } + EditorGUILayout.EndVertical(); + + if (arraySize > 0) + { + // Display each SpriteInfo entry using the SpriteInfo property drawer. + for (int i = itemsPerPage * m_CurrentGlyphPage; i < arraySize && i < itemsPerPage * (m_CurrentGlyphPage + 1); i++) + { + // Define the start of the selection region of the element. + Rect elementStartRegion = GUILayoutUtility.GetRect(0f, 0f, GUILayout.ExpandWidth(true)); + + int elementIndex = i; + if (!string.IsNullOrEmpty(m_GlyphSearchPattern)) + elementIndex = m_GlyphSearchList[i]; + + SerializedProperty spriteGlyphProperty = m_SpriteGlyphTableProperty.GetArrayElementAtIndex(elementIndex); + + EditorGUILayout.BeginVertical(EditorStyles.helpBox); + { + EditorGUI.BeginDisabledGroup(i != m_selectedElement); + { + EditorGUILayout.PropertyField(spriteGlyphProperty); + } + EditorGUI.EndDisabledGroup(); + } + EditorGUILayout.EndVertical(); + + // Define the end of the selection region of the element. + Rect elementEndRegion = GUILayoutUtility.GetRect(0f, 0f, GUILayout.ExpandWidth(true)); + + // Check for Item selection + Rect selectionArea = new Rect(elementStartRegion.x, elementStartRegion.y, elementEndRegion.width, elementEndRegion.y - elementStartRegion.y); + if (DoSelectionCheck(selectionArea)) + { + if (m_selectedElement == i) + { + m_selectedElement = -1; + } + else + { + m_selectedElement = i; + GUIUtility.keyboardControl = 0; + } + } + + // Draw & Handle Section Area + if (m_selectedElement == i) + { + // Draw selection highlight + TMP_EditorUtility.DrawBox(selectionArea, 2f, new Color32(40, 192, 255, 255)); + + // Draw options to MoveUp, MoveDown, Add or Remove Sprites + Rect controlRect = EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight * 1f); + controlRect.width /= 8; + + // Move sprite up. + bool guiEnabled = GUI.enabled; + if (i == 0) { GUI.enabled = false; } + if (GUI.Button(controlRect, "Up")) + { + SwapGlyphElements(i, i - 1); + } + GUI.enabled = guiEnabled; + + // Move sprite down. + controlRect.x += controlRect.width; + if (i == arraySize - 1) { GUI.enabled = false; } + if (GUI.Button(controlRect, "Down")) + { + SwapGlyphElements(i, i + 1); + } + GUI.enabled = guiEnabled; + + // Move sprite to new index + controlRect.x += controlRect.width * 2; + //if (i == arraySize - 1) { GUI.enabled = false; } + m_moveToIndex = EditorGUI.IntField(controlRect, m_moveToIndex); + controlRect.x -= controlRect.width; + if (GUI.Button(controlRect, "Goto")) + { + MoveGlyphToIndex(i, m_moveToIndex); + } + //controlRect.x += controlRect.width; + GUI.enabled = guiEnabled; + + // Add new Sprite + controlRect.x += controlRect.width * 4; + if (GUI.Button(controlRect, "+")) + { + m_SpriteGlyphTableProperty.arraySize += 1; + + int index = m_SpriteGlyphTableProperty.arraySize - 1; + + SerializedProperty newSpriteGlyphProperty = m_SpriteGlyphTableProperty.GetArrayElementAtIndex(index); + + // Copy properties of the selected element + CopyGlyphSerializedProperty(m_SpriteGlyphTableProperty.GetArrayElementAtIndex(elementIndex), ref newSpriteGlyphProperty); + + newSpriteGlyphProperty.FindPropertyRelative("m_Index").intValue = index; + + serializedObject.ApplyModifiedProperties(); + + m_IsGlyphSearchDirty = true; + + //m_SpriteAsset.UpdateLookupTables(); + } + + // Delete selected Sprite + controlRect.x += controlRect.width; + if (m_selectedElement == -1) GUI.enabled = false; + if (GUI.Button(controlRect, "-")) + { + SerializedProperty selectedSpriteGlyphProperty = m_SpriteGlyphTableProperty.GetArrayElementAtIndex(elementIndex); + + int selectedGlyphIndex = selectedSpriteGlyphProperty.FindPropertyRelative("m_Index").intValue; + + m_SpriteGlyphTableProperty.DeleteArrayElementAtIndex(elementIndex); + + // Remove all Sprite Characters referencing this glyph. + for (int j = 0; j < m_SpriteCharacterTableProperty.arraySize; j++) + { + int glyphIndex = m_SpriteCharacterTableProperty.GetArrayElementAtIndex(j).FindPropertyRelative("m_GlyphIndex").intValue; + + if (glyphIndex == selectedGlyphIndex) + { + // Remove character + m_SpriteCharacterTableProperty.DeleteArrayElementAtIndex(j); + } + } + + m_selectedElement = -1; + serializedObject.ApplyModifiedProperties(); + + m_IsGlyphSearchDirty = true; + + //m_SpriteAsset.UpdateLookupTables(); + + return; + } + + + } + } + } + + DisplayPageNavigation(ref m_CurrentGlyphPage, arraySize, itemsPerPage); + + EditorGUIUtility.labelWidth = 40f; + EditorGUIUtility.fieldWidth = 20f; + + GUILayout.Space(5f); + + // GLOBAL TOOLS + #region Global Tools + GUI.enabled = true; + EditorGUILayout.BeginVertical(EditorStyles.helpBox); + rect = EditorGUILayout.GetControlRect(false, 40); + + float width = (rect.width - 75f) / 4; + EditorGUI.LabelField(rect, "Global Offsets & Scale", EditorStyles.boldLabel); + + + rect.x += 70; + bool old_ChangedState = GUI.changed; + + GUI.changed = false; + m_xOffset = EditorGUI.FloatField(new Rect(rect.x + 5f + width * 0, rect.y + 20, width - 5f, 18), new GUIContent("OX:"), m_xOffset); + if (GUI.changed) UpdateGlobalProperty("m_HorizontalBearingX", m_xOffset); + + m_yOffset = EditorGUI.FloatField(new Rect(rect.x + 5f + width * 1, rect.y + 20, width - 5f, 18), new GUIContent("OY:"), m_yOffset); + if (GUI.changed) UpdateGlobalProperty("m_HorizontalBearingY", m_yOffset); + + m_xAdvance = EditorGUI.FloatField(new Rect(rect.x + 5f + width * 2, rect.y + 20, width - 5f, 18), new GUIContent("ADV."), m_xAdvance); + if (GUI.changed) UpdateGlobalProperty("m_HorizontalAdvance", m_xAdvance); + + m_scale = EditorGUI.FloatField(new Rect(rect.x + 5f + width * 3, rect.y + 20, width - 5f, 18), new GUIContent("SF."), m_scale); + if (GUI.changed) UpdateGlobalProperty("m_Scale", m_scale); + + EditorGUILayout.EndVertical(); + #endregion + + GUI.changed = old_ChangedState; + + } + #endregion + + + if (serializedObject.ApplyModifiedProperties() || evt_cmd == k_UndoRedo || isAssetDirty) + { + if (m_SpriteAsset.m_IsSpriteAssetLookupTablesDirty || evt_cmd == k_UndoRedo) + m_SpriteAsset.UpdateLookupTables(); + + TMPro_EventManager.ON_SPRITE_ASSET_PROPERTY_CHANGED(true, m_SpriteAsset); + + isAssetDirty = false; + EditorUtility.SetDirty(target); + } + + // Clear selection if mouse event was not consumed. + GUI.enabled = true; + if (currentEvent.type == EventType.MouseDown && currentEvent.button == 0) + m_selectedElement = -1; + + } + + + /// + /// + /// + /// + /// + void DisplayPageNavigation(ref int currentPage, int arraySize, int itemsPerPage) + { + Rect pagePos = EditorGUILayout.GetControlRect(false, 20); + pagePos.width /= 3; + + int shiftMultiplier = Event.current.shift ? 10 : 1; // Page + Shift goes 10 page forward + + // Previous Page + GUI.enabled = currentPage > 0; + + if (GUI.Button(pagePos, "Previous Page")) + { + currentPage -= 1 * shiftMultiplier; + //m_isNewPage = true; + } + + // Page Counter + GUI.enabled = true; + pagePos.x += pagePos.width; + int totalPages = (int)(arraySize / (float)itemsPerPage + 0.999f); + GUI.Label(pagePos, "Page " + (currentPage + 1) + " / " + totalPages, TMP_UIStyleManager.centeredLabel); + + // Next Page + pagePos.x += pagePos.width; + GUI.enabled = itemsPerPage * (currentPage + 1) < arraySize; + + if (GUI.Button(pagePos, "Next Page")) + { + currentPage += 1 * shiftMultiplier; + //m_isNewPage = true; + } + + // Clamp page range + currentPage = Mathf.Clamp(currentPage, 0, arraySize / itemsPerPage); + + GUI.enabled = true; + } + + + /// + /// Method to update the properties of all sprites + /// + /// + /// + void UpdateGlobalProperty(string property, float value) + { + int arraySize = m_SpriteGlyphTableProperty.arraySize; + + for (int i = 0; i < arraySize; i++) + { + // Get a reference to the sprite glyph. + SerializedProperty spriteGlyphProperty = m_SpriteGlyphTableProperty.GetArrayElementAtIndex(i); + + if (property == "m_Scale") + { + spriteGlyphProperty.FindPropertyRelative(property).floatValue = value; + } + else + { + SerializedProperty glyphMetricsProperty = spriteGlyphProperty.FindPropertyRelative("m_Metrics"); + glyphMetricsProperty.FindPropertyRelative(property).floatValue = value; + } + } + + GUI.changed = false; + } + + // Check if any of the Style elements were clicked on. + private bool DoSelectionCheck(Rect selectionArea) + { + Event currentEvent = Event.current; + + switch (currentEvent.type) + { + case EventType.MouseDown: + if (selectionArea.Contains(currentEvent.mousePosition) && currentEvent.button == 0) + { + currentEvent.Use(); + return true; + } + break; + } + + return false; + } + + + /// + /// Swap the sprite item at the currently selected array index to another index. + /// + /// Selected index. + /// New index. + void SwapCharacterElements(int selectedIndex, int newIndex) + { + m_SpriteCharacterTableProperty.MoveArrayElement(selectedIndex, newIndex); + m_selectedElement = newIndex; + m_IsCharacterSearchDirty = true; + m_SpriteAsset.m_IsSpriteAssetLookupTablesDirty = true; + } + + /// + /// Move Sprite Element at selected index to another index and reorder sprite list. + /// + /// + /// + void MoveCharacterToIndex(int selectedIndex, int newIndex) + { + int arraySize = m_SpriteCharacterTableProperty.arraySize; + + if (newIndex >= arraySize) + newIndex = arraySize - 1; + + m_SpriteCharacterTableProperty.MoveArrayElement(selectedIndex, newIndex); + + m_selectedElement = newIndex; + m_IsCharacterSearchDirty = true; + m_SpriteAsset.m_IsSpriteAssetLookupTablesDirty = true; + + // TODO: Need to handle switching pages if the character or glyph is moved to a different page. + } + + /// + /// + /// + /// + /// + void SwapGlyphElements(int selectedIndex, int newIndex) + { + m_SpriteGlyphTableProperty.MoveArrayElement(selectedIndex, newIndex); + m_selectedElement = newIndex; + m_IsGlyphSearchDirty = true; + m_SpriteAsset.m_IsSpriteAssetLookupTablesDirty = true; + } + + /// + /// Move Sprite Element at selected index to another index and reorder sprite list. + /// + /// + /// + void MoveGlyphToIndex(int selectedIndex, int newIndex) + { + int arraySize = m_SpriteGlyphTableProperty.arraySize; + + if (newIndex >= arraySize) + newIndex = arraySize - 1; + + m_SpriteGlyphTableProperty.MoveArrayElement(selectedIndex, newIndex); + + m_selectedElement = newIndex; + m_IsGlyphSearchDirty = true; + m_SpriteAsset.m_IsSpriteAssetLookupTablesDirty = true; + + // TODO: Need to handle switching pages if the character or glyph is moved to a different page. + } + + + /// + /// + /// + /// + /// + void CopyCharacterSerializedProperty(SerializedProperty source, ref SerializedProperty target) + { + target.FindPropertyRelative("m_Name").stringValue = source.FindPropertyRelative("m_Name").stringValue; + target.FindPropertyRelative("m_HashCode").intValue = source.FindPropertyRelative("m_HashCode").intValue; + target.FindPropertyRelative("m_Unicode").intValue = source.FindPropertyRelative("m_Unicode").intValue; + target.FindPropertyRelative("m_GlyphIndex").intValue = source.FindPropertyRelative("m_GlyphIndex").intValue; + target.FindPropertyRelative("m_Scale").floatValue = source.FindPropertyRelative("m_Scale").floatValue; + } + + void CopyGlyphSerializedProperty(SerializedProperty srcGlyph, ref SerializedProperty dstGlyph) + { + // TODO : Should make a generic function which copies each of the properties. + + // Index + dstGlyph.FindPropertyRelative("m_Index").intValue = srcGlyph.FindPropertyRelative("m_Index").intValue; + + // GlyphMetrics + SerializedProperty srcGlyphMetrics = srcGlyph.FindPropertyRelative("m_Metrics"); + SerializedProperty dstGlyphMetrics = dstGlyph.FindPropertyRelative("m_Metrics"); + + dstGlyphMetrics.FindPropertyRelative("m_Width").floatValue = srcGlyphMetrics.FindPropertyRelative("m_Width").floatValue; + dstGlyphMetrics.FindPropertyRelative("m_Height").floatValue = srcGlyphMetrics.FindPropertyRelative("m_Height").floatValue; + dstGlyphMetrics.FindPropertyRelative("m_HorizontalBearingX").floatValue = srcGlyphMetrics.FindPropertyRelative("m_HorizontalBearingX").floatValue; + dstGlyphMetrics.FindPropertyRelative("m_HorizontalBearingY").floatValue = srcGlyphMetrics.FindPropertyRelative("m_HorizontalBearingY").floatValue; + dstGlyphMetrics.FindPropertyRelative("m_HorizontalAdvance").floatValue = srcGlyphMetrics.FindPropertyRelative("m_HorizontalAdvance").floatValue; + + // GlyphRect + SerializedProperty srcGlyphRect = srcGlyph.FindPropertyRelative("m_GlyphRect"); + SerializedProperty dstGlyphRect = dstGlyph.FindPropertyRelative("m_GlyphRect"); + + dstGlyphRect.FindPropertyRelative("m_X").intValue = srcGlyphRect.FindPropertyRelative("m_X").intValue; + dstGlyphRect.FindPropertyRelative("m_Y").intValue = srcGlyphRect.FindPropertyRelative("m_Y").intValue; + dstGlyphRect.FindPropertyRelative("m_Width").intValue = srcGlyphRect.FindPropertyRelative("m_Width").intValue; + dstGlyphRect.FindPropertyRelative("m_Height").intValue = srcGlyphRect.FindPropertyRelative("m_Height").intValue; + + dstGlyph.FindPropertyRelative("m_Scale").floatValue = srcGlyph.FindPropertyRelative("m_Scale").floatValue; + dstGlyph.FindPropertyRelative("m_AtlasIndex").intValue = srcGlyph.FindPropertyRelative("m_AtlasIndex").intValue; + } + + + /// + /// + /// + /// + /// + void SearchCharacterTable(string searchPattern, ref List searchResults) + { + if (searchResults == null) searchResults = new List(); + searchResults.Clear(); + + int arraySize = m_SpriteCharacterTableProperty.arraySize; + + for (int i = 0; i < arraySize; i++) + { + SerializedProperty sourceSprite = m_SpriteCharacterTableProperty.GetArrayElementAtIndex(i); + + // Check for potential match against array index + if (i.ToString().Contains(searchPattern)) + { + searchResults.Add(i); + continue; + } + + // Check for potential match against decimal id + int id = sourceSprite.FindPropertyRelative("m_GlyphIndex").intValue; + if (id.ToString().Contains(searchPattern)) + { + searchResults.Add(i); + continue; + } + + // Check for potential match against name + string name = sourceSprite.FindPropertyRelative("m_Name").stringValue.ToLower(System.Globalization.CultureInfo.InvariantCulture).Trim(); + if (name.Contains(searchPattern)) + { + searchResults.Add(i); + continue; + } + } + } + + void SearchGlyphTable(string searchPattern, ref List searchResults) + { + if (searchResults == null) searchResults = new List(); + searchResults.Clear(); + + int arraySize = m_SpriteGlyphTableProperty.arraySize; + + for (int i = 0; i < arraySize; i++) + { + SerializedProperty sourceSprite = m_SpriteGlyphTableProperty.GetArrayElementAtIndex(i); + + // Check for potential match against array index + if (i.ToString().Contains(searchPattern)) + { + searchResults.Add(i); + continue; + } + + // Check for potential match against decimal id + int id = sourceSprite.FindPropertyRelative("m_GlyphIndex").intValue; + if (id.ToString().Contains(searchPattern)) + { + searchResults.Add(i); + continue; + } + + // Check for potential match against name + string name = sourceSprite.FindPropertyRelative("m_Name").stringValue.ToLower(System.Globalization.CultureInfo.InvariantCulture).Trim(); + if (name.Contains(searchPattern)) + { + searchResults.Add(i); + continue; + } + } + } + + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SpriteAssetEditor.cs.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SpriteAssetEditor.cs.meta new file mode 100644 index 0000000..20605ad --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SpriteAssetEditor.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: b09be1f217d34247af54863a2f5587e1 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SpriteAssetImporter.cs b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SpriteAssetImporter.cs new file mode 100644 index 0000000..a4b0739 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SpriteAssetImporter.cs @@ -0,0 +1,232 @@ +using UnityEngine; +using UnityEditor; +using System.IO; +using System.Collections.Generic; +using TMPro.EditorUtilities; +using TMPro.SpriteAssetUtilities; + +namespace TMPro +{ + public class TMP_SpriteAssetImporter : EditorWindow + { + // Create Sprite Asset Editor Window + [MenuItem("Window/TextMeshPro/Sprite Importer", false, 2026)] + public static void ShowFontAtlasCreatorWindow() + { + var window = GetWindow(); + window.titleContent = new GUIContent("Sprite Importer"); + window.Focus(); + } + + Texture2D m_SpriteAtlas; + SpriteAssetImportFormats m_SpriteDataFormat = SpriteAssetImportFormats.TexturePacker; + TextAsset m_JsonFile; + + string m_CreationFeedback; + + TMP_SpriteAsset m_SpriteAsset; + List m_SpriteInfoList = new List(); + + + void OnEnable() + { + // Set Editor Window Size + SetEditorWindowSize(); + } + + public void OnGUI() + { + DrawEditorPanel(); + } + + + void DrawEditorPanel() + { + // label + GUILayout.Label("Import Settings", EditorStyles.boldLabel); + + EditorGUI.BeginChangeCheck(); + + // Sprite Texture Selection + m_JsonFile = EditorGUILayout.ObjectField("Sprite Data Source", m_JsonFile, typeof(TextAsset), false) as TextAsset; + + m_SpriteDataFormat = (SpriteAssetImportFormats)EditorGUILayout.EnumPopup("Import Format", m_SpriteDataFormat); + + // Sprite Texture Selection + m_SpriteAtlas = EditorGUILayout.ObjectField("Sprite Texture Atlas", m_SpriteAtlas, typeof(Texture2D), false) as Texture2D; + + if (EditorGUI.EndChangeCheck()) + { + m_CreationFeedback = string.Empty; + } + + GUILayout.Space(10); + + GUI.enabled = m_JsonFile != null && m_SpriteAtlas != null && m_SpriteDataFormat == SpriteAssetImportFormats.TexturePacker; + + // Create Sprite Asset + if (GUILayout.Button("Create Sprite Asset")) + { + m_CreationFeedback = string.Empty; + + // Read json data file + if (m_JsonFile != null && m_SpriteDataFormat == SpriteAssetImportFormats.TexturePacker) + { + TexturePacker.SpriteDataObject sprites = JsonUtility.FromJson(m_JsonFile.text); + + if (sprites != null && sprites.frames != null && sprites.frames.Count > 0) + { + int spriteCount = sprites.frames.Count; + + // Update import results + m_CreationFeedback = "Import Results\n--------------------\n"; + m_CreationFeedback += "" + spriteCount + " Sprites were imported from file."; + + // Create sprite info list + m_SpriteInfoList = CreateSpriteInfoList(sprites); + } + } + + } + + GUI.enabled = true; + + // Creation Feedback + GUILayout.Space(5); + GUILayout.BeginVertical(EditorStyles.helpBox, GUILayout.Height(60)); + { + EditorGUILayout.LabelField(m_CreationFeedback, TMP_UIStyleManager.label); + } + GUILayout.EndVertical(); + + GUILayout.Space(5); + GUI.enabled = m_JsonFile != null && m_SpriteAtlas && m_SpriteInfoList != null && m_SpriteInfoList.Count > 0; // Enable Save Button if font_Atlas is not Null. + if (GUILayout.Button("Save Sprite Asset") && m_JsonFile != null) + { + string filePath = EditorUtility.SaveFilePanel("Save Sprite Asset File", new FileInfo(AssetDatabase.GetAssetPath(m_JsonFile)).DirectoryName, m_JsonFile.name, "asset"); + + if (filePath.Length == 0) + return; + + SaveSpriteAsset(filePath); + } + GUI.enabled = true; + } + + + /// + /// + /// + List CreateSpriteInfoList(TexturePacker.SpriteDataObject spriteDataObject) + { + List importedSprites = spriteDataObject.frames; + + List spriteInfoList = new List(); + + for (int i = 0; i < importedSprites.Count; i++) + { + TMP_Sprite sprite = new TMP_Sprite(); + + sprite.id = i; + sprite.name = Path.GetFileNameWithoutExtension(importedSprites[i].filename) ?? ""; + sprite.hashCode = TMP_TextUtilities.GetSimpleHashCode(sprite.name); + + // Attempt to extract Unicode value from name + int unicode; + int indexOfSeperator = sprite.name.IndexOf('-'); + if (indexOfSeperator != -1) + unicode = TMP_TextUtilities.StringHexToInt(sprite.name.Substring(indexOfSeperator + 1)); + else + unicode = TMP_TextUtilities.StringHexToInt(sprite.name); + + sprite.unicode = unicode; + + sprite.x = importedSprites[i].frame.x; + sprite.y = m_SpriteAtlas.height - (importedSprites[i].frame.y + importedSprites[i].frame.h); + sprite.width = importedSprites[i].frame.w; + sprite.height = importedSprites[i].frame.h; + + //Calculate sprite pivot position + sprite.pivot = importedSprites[i].pivot; + + // Properties the can be modified + sprite.xAdvance = sprite.width; + sprite.scale = 1.0f; + sprite.xOffset = 0 - (sprite.width * sprite.pivot.x); + sprite.yOffset = sprite.height - (sprite.height * sprite.pivot.y); + + spriteInfoList.Add(sprite); + } + + return spriteInfoList; + } + + + /// + /// + /// + /// + void SaveSpriteAsset(string filePath) + { + filePath = filePath.Substring(0, filePath.Length - 6); // Trim file extension from filePath. + + string dataPath = Application.dataPath; + + if (filePath.IndexOf(dataPath, System.StringComparison.InvariantCultureIgnoreCase) == -1) + { + Debug.LogError("You're saving the font asset in a directory outside of this project folder. This is not supported. Please select a directory under \"" + dataPath + "\""); + return; + } + + string relativeAssetPath = filePath.Substring(dataPath.Length - 6); + string dirName = Path.GetDirectoryName(relativeAssetPath); + string fileName = Path.GetFileNameWithoutExtension(relativeAssetPath); + string pathNoExt = dirName + "/" + fileName; + + + // Create new Sprite Asset using this texture + m_SpriteAsset = CreateInstance(); + AssetDatabase.CreateAsset(m_SpriteAsset, pathNoExt + ".asset"); + + // Compute the hash code for the sprite asset. + m_SpriteAsset.hashCode = TMP_TextUtilities.GetSimpleHashCode(m_SpriteAsset.name); + + // Assign new Sprite Sheet texture to the Sprite Asset. + m_SpriteAsset.spriteSheet = m_SpriteAtlas; + m_SpriteAsset.spriteInfoList = m_SpriteInfoList; + + // Add new default material for sprite asset. + AddDefaultMaterial(m_SpriteAsset); + } + + + /// + /// Create and add new default material to sprite asset. + /// + /// + static void AddDefaultMaterial(TMP_SpriteAsset spriteAsset) + { + Shader shader = Shader.Find("TextMeshPro/Sprite"); + Material material = new Material(shader); + material.SetTexture(ShaderUtilities.ID_MainTex, spriteAsset.spriteSheet); + + spriteAsset.material = material; + material.hideFlags = HideFlags.HideInHierarchy; + AssetDatabase.AddObjectToAsset(material, spriteAsset); + } + + + /// + /// Limits the minimum size of the editor window. + /// + void SetEditorWindowSize() + { + EditorWindow editorWindow = this; + + Vector2 currentWindowSize = editorWindow.minSize; + + editorWindow.minSize = new Vector2(Mathf.Max(230, currentWindowSize.x), Mathf.Max(300, currentWindowSize.y)); + } + + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SpriteAssetImporter.cs.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SpriteAssetImporter.cs.meta new file mode 100644 index 0000000..6aa809c --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SpriteAssetImporter.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f1ea944dcf8849ebab391e461b99ccb7 +timeCreated: 1480023525 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SpriteAssetMenu.cs b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SpriteAssetMenu.cs new file mode 100644 index 0000000..34dff5d --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SpriteAssetMenu.cs @@ -0,0 +1,329 @@ +using UnityEngine; +using UnityEngine.TextCore; +using UnityEditor; +using System.Linq; +using System.IO; +using System.Collections; +using System.Collections.Generic; + + +namespace TMPro.EditorUtilities +{ + + public static class TMP_SpriteAssetMenu + { + // Add a Context Menu to the Sprite Asset Editor Panel to Create and Add a Default Material. + [MenuItem("CONTEXT/TMP_SpriteAsset/Add Default Material", false, 2200)] + static void CopyTexture(MenuCommand command) + { + TMP_SpriteAsset spriteAsset = (TMP_SpriteAsset)command.context; + + // Make sure the sprite asset already contains a default material + if (spriteAsset != null && spriteAsset.material == null) + { + // Add new default material for sprite asset. + AddDefaultMaterial(spriteAsset); + } + } + + // Add a Context Menu to the Sprite Asset Editor Panel to update existing sprite assets. + [MenuItem("CONTEXT/TMP_SpriteAsset/Update Sprite Asset", false, 2100)] + static void UpdateSpriteAsset(MenuCommand command) + { + TMP_SpriteAsset spriteAsset = (TMP_SpriteAsset)command.context; + + if (spriteAsset == null) + return; + + // Get a list of all the sprites contained in the texture referenced by the sprite asset. + // This only works if the texture is set to sprite mode. + string filePath = AssetDatabase.GetAssetPath(spriteAsset.spriteSheet); + + if (string.IsNullOrEmpty(filePath)) + return; + + // Get all the Sprites sorted Left to Right / Top to Bottom + Sprite[] sprites = AssetDatabase.LoadAllAssetsAtPath(filePath).Select(x => x as Sprite).Where(x => x != null).OrderByDescending(x => x.rect.y).ThenBy(x => x.rect.x).ToArray(); + + List spriteGlyphTable = spriteAsset.spriteGlyphTable; + + // Finding available glyph indexes to insert new glyphs into. + var tempGlyphTable = spriteGlyphTable.OrderBy(glyph => glyph.index).ToList(); + List availableGlyphIndexes = new List(); + + int elementIndex = 0; + for (uint i = 0; i < tempGlyphTable[tempGlyphTable.Count - 1].index; i++) + { + uint currentElementIndex = tempGlyphTable[elementIndex].index; + + if (i == currentElementIndex) + elementIndex += 1; + else + availableGlyphIndexes.Add(i); + } + + // Iterate over each of the sprites in the texture to try to match them to existing sprites in the sprite asset. + for (int i = 0; i < sprites.Length; i++) + { + int id = sprites[i].GetInstanceID(); + + int glyphIndex = spriteGlyphTable.FindIndex(item => item.sprite.GetInstanceID() == id); + + if (glyphIndex == -1) + { + // Add new Sprite Glyph to the table + Sprite sprite = sprites[i]; + + TMP_SpriteGlyph spriteGlyph = new TMP_SpriteGlyph(); + + // Get available glyph index + if (availableGlyphIndexes.Count > 0) + { + spriteGlyph.index = availableGlyphIndexes[0]; + availableGlyphIndexes.RemoveAt(0); + } + else + spriteGlyph.index = (uint)spriteGlyphTable.Count; + + spriteGlyph.metrics = new GlyphMetrics(sprite.rect.width, sprite.rect.height, -sprite.pivot.x, sprite.rect.height - sprite.pivot.y, sprite.rect.width); + spriteGlyph.glyphRect = new GlyphRect(sprite.rect); + spriteGlyph.scale = 1.0f; + spriteGlyph.sprite = sprite; + + spriteGlyphTable.Add(spriteGlyph); + + TMP_SpriteCharacter spriteCharacter = new TMP_SpriteCharacter(0, spriteGlyph); + spriteCharacter.name = sprite.name; + spriteCharacter.scale = 1.0f; + + spriteAsset.spriteCharacterTable.Add(spriteCharacter); + } + else + { + // Look for changes in existing Sprite Glyph + Sprite sprite = sprites[i]; + + TMP_SpriteGlyph spriteGlyph = spriteGlyphTable[glyphIndex]; + + // We only update changes to the sprite position / glyph rect. + if (spriteGlyph.glyphRect.x != sprite.rect.x || spriteGlyph.glyphRect.y != sprite.rect.y || spriteGlyph.glyphRect.width != sprite.rect.width || spriteGlyph.glyphRect.height != sprite.rect.height) + spriteGlyph.glyphRect = new GlyphRect(sprite.rect); + } + } + + // Sort glyph table by glyph index + spriteAsset.SortGlyphTable(); + spriteAsset.UpdateLookupTables(); + TMPro_EventManager.ON_SPRITE_ASSET_PROPERTY_CHANGED(true, spriteAsset); + } + + + [MenuItem("Assets/Create/TextMeshPro/Sprite Asset", false, 110)] + public static void CreateSpriteAsset() + { + Object target = Selection.activeObject; + + // Make sure the selection is a texture. + if (target == null || target.GetType() != typeof(Texture2D)) + { + Debug.LogWarning("A texture which contains sprites must first be selected in order to create a TextMesh Pro Sprite Asset."); + return; + } + + Texture2D sourceTex = target as Texture2D; + + // Get the path to the selected texture. + string filePathWithName = AssetDatabase.GetAssetPath(sourceTex); + string fileNameWithExtension = Path.GetFileName(filePathWithName); + string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(filePathWithName); + string filePath = filePathWithName.Replace(fileNameWithExtension, ""); + + // Check if Sprite Asset already exists + TMP_SpriteAsset spriteAsset = AssetDatabase.LoadAssetAtPath(filePath + fileNameWithoutExtension + ".asset", typeof(TMP_SpriteAsset)) as TMP_SpriteAsset; + bool isNewAsset = spriteAsset == null ? true : false; + + if (isNewAsset) + { + // Create new Sprite Asset using this texture + spriteAsset = ScriptableObject.CreateInstance(); + AssetDatabase.CreateAsset(spriteAsset, filePath + fileNameWithoutExtension + ".asset"); + + spriteAsset.version = "1.1.0"; + + // Compute the hash code for the sprite asset. + spriteAsset.hashCode = TMP_TextUtilities.GetSimpleHashCode(spriteAsset.name); + + // Assign new Sprite Sheet texture to the Sprite Asset. + spriteAsset.spriteSheet = sourceTex; + + List spriteGlyphTable = new List(); + List spriteCharacterTable = new List(); + + PopulateSpriteTables(sourceTex, ref spriteCharacterTable, ref spriteGlyphTable); + + spriteAsset.spriteCharacterTable = spriteCharacterTable; + spriteAsset.spriteGlyphTable = spriteGlyphTable; + + // Add new default material for sprite asset. + AddDefaultMaterial(spriteAsset); + } + //else + //{ + // spriteAsset.spriteInfoList = UpdateSpriteInfo(spriteAsset); + + // // Make sure the sprite asset already contains a default material + // if (spriteAsset.material == null) + // { + // // Add new default material for sprite asset. + // AddDefaultMaterial(spriteAsset); + // } + + //} + + // Update Lookup tables. + spriteAsset.UpdateLookupTables(); + + // Get the Sprites contained in the Sprite Sheet + EditorUtility.SetDirty(spriteAsset); + + //spriteAsset.sprites = sprites; + + // Set source texture back to Not Readable. + //texImporter.isReadable = false; + + + AssetDatabase.SaveAssets(); + + AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(spriteAsset)); // Re-import font asset to get the new updated version. + + //AssetDatabase.Refresh(); + } + + + private static void PopulateSpriteTables(Texture source, ref List spriteCharacterTable, ref List spriteGlyphTable) + { + //Debug.Log("Creating new Sprite Asset."); + + string filePath = AssetDatabase.GetAssetPath(source); + + // Get all the Sprites sorted by Index + Sprite[] sprites = AssetDatabase.LoadAllAssetsAtPath(filePath).Select(x => x as Sprite).Where(x => x != null).OrderByDescending(x => x.rect.y).ThenBy(x => x.rect.x).ToArray(); + + for (int i = 0; i < sprites.Length; i++) + { + Sprite sprite = sprites[i]; + + TMP_SpriteGlyph spriteGlyph = new TMP_SpriteGlyph(); + spriteGlyph.index = (uint)i; + spriteGlyph.metrics = new GlyphMetrics(sprite.rect.width, sprite.rect.height, -sprite.pivot.x, sprite.rect.height - sprite.pivot.y, sprite.rect.width); + spriteGlyph.glyphRect = new GlyphRect(sprite.rect); + spriteGlyph.scale = 1.0f; + spriteGlyph.sprite = sprite; + + spriteGlyphTable.Add(spriteGlyph); + + TMP_SpriteCharacter spriteCharacter = new TMP_SpriteCharacter(0, spriteGlyph); + spriteCharacter.name = sprite.name; + spriteCharacter.scale = 1.0f; + + spriteCharacterTable.Add(spriteCharacter); + } + } + + + /// + /// Create and add new default material to sprite asset. + /// + /// + private static void AddDefaultMaterial(TMP_SpriteAsset spriteAsset) + { + Shader shader = Shader.Find("TextMeshPro/Sprite"); + Material material = new Material(shader); + material.SetTexture(ShaderUtilities.ID_MainTex, spriteAsset.spriteSheet); + + spriteAsset.material = material; + material.hideFlags = HideFlags.HideInHierarchy; + AssetDatabase.AddObjectToAsset(material, spriteAsset); + } + + + // Update existing SpriteInfo + private static List UpdateSpriteInfo(TMP_SpriteAsset spriteAsset) + { + //Debug.Log("Updating Sprite Asset."); + + string filePath = AssetDatabase.GetAssetPath(spriteAsset.spriteSheet); + + // Get all the Sprites sorted Left to Right / Top to Bottom + Sprite[] sprites = AssetDatabase.LoadAllAssetsAtPath(filePath).Select(x => x as Sprite).Where(x => x != null).OrderByDescending(x => x.rect.y).ThenBy(x => x.rect.x).ToArray(); + + for (int i = 0; i < sprites.Length; i++) + { + Sprite sprite = sprites[i]; + + // Check if the sprite is already contained in the SpriteInfoList + int index = -1; + if (spriteAsset.spriteInfoList.Count > i && spriteAsset.spriteInfoList[i].sprite != null) + index = spriteAsset.spriteInfoList.FindIndex(item => item.sprite.GetInstanceID() == sprite.GetInstanceID()); + + // Use existing SpriteInfo if it already exists + TMP_Sprite spriteInfo = index == -1 ? new TMP_Sprite() : spriteAsset.spriteInfoList[index]; + + Rect spriteRect = sprite.rect; + spriteInfo.x = spriteRect.x; + spriteInfo.y = spriteRect.y; + spriteInfo.width = spriteRect.width; + spriteInfo.height = spriteRect.height; + + // Get Sprite Pivot + Vector2 pivot = new Vector2(0 - (sprite.bounds.min.x) / (sprite.bounds.extents.x * 2), 0 - (sprite.bounds.min.y) / (sprite.bounds.extents.y * 2)); + + // The position of the pivot influences the Offset position. + spriteInfo.pivot = new Vector2(0 - pivot.x * spriteRect.width, spriteRect.height - pivot.y * spriteRect.height); + + if (index == -1) + { + // Find the next available index for this Sprite + int[] ids = spriteAsset.spriteInfoList.Select(item => item.id).ToArray(); + + int id = 0; + for (int j = 0; j < ids.Length; j++ ) + { + if (ids[0] != 0) break; + + if (j > 0 && (ids[j] - ids[j - 1]) > 1) + { + id = ids[j - 1] + 1; + break; + } + + id = j + 1; + } + + spriteInfo.sprite = sprite; + spriteInfo.name = sprite.name; + spriteInfo.hashCode = TMP_TextUtilities.GetSimpleHashCode(spriteInfo.name); + spriteInfo.id = id; + spriteInfo.xAdvance = spriteRect.width; + spriteInfo.scale = 1.0f; + + spriteInfo.xOffset = spriteInfo.pivot.x; + spriteInfo.yOffset = spriteInfo.pivot.y; + + spriteAsset.spriteInfoList.Add(spriteInfo); + + // Sort the Sprites by ID + spriteAsset.spriteInfoList = spriteAsset.spriteInfoList.OrderBy(s => s.id).ToList(); + } + else + { + spriteAsset.spriteInfoList[index] = spriteInfo; + } + } + + return spriteAsset.spriteInfoList; + } + + + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SpriteAssetMenu.cs.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SpriteAssetMenu.cs.meta new file mode 100644 index 0000000..87ee603 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SpriteAssetMenu.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 1048a87135154606808bf2030da32d18 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SpriteCharacterPropertyDrawer.cs b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SpriteCharacterPropertyDrawer.cs new file mode 100644 index 0000000..506b49b --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SpriteCharacterPropertyDrawer.cs @@ -0,0 +1,225 @@ +using UnityEngine; +using UnityEngine.TextCore; +using UnityEditor; +using System.Collections; + + +namespace TMPro.EditorUtilities +{ + + [CustomPropertyDrawer(typeof(TMP_SpriteCharacter))] + public class TMP_SpriteCharacterPropertyDrawer : PropertyDrawer + { + int m_GlyphSelectedForEditing = -1; + + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + SerializedProperty prop_SpriteName = property.FindPropertyRelative("m_Name"); + SerializedProperty prop_SpriteNameHashCode = property.FindPropertyRelative("m_HashCode"); + SerializedProperty prop_SpriteUnicode = property.FindPropertyRelative("m_Unicode"); + SerializedProperty prop_SpriteGlyphIndex = property.FindPropertyRelative("m_GlyphIndex"); + SerializedProperty prop_SpriteScale = property.FindPropertyRelative("m_Scale"); + + + GUIStyle style = new GUIStyle(EditorStyles.label); + style.richText = true; + + EditorGUIUtility.labelWidth = 40f; + EditorGUIUtility.fieldWidth = 50; + + Rect rect = new Rect(position.x + 60, position.y, position.width, 49); + + // Display non-editable fields + if (GUI.enabled == false) + { + // Sprite Character Index + int.TryParse(property.displayName.Split(' ')[1], out int spriteCharacterIndex); + EditorGUI.LabelField(new Rect(rect.x, rect.y, 75f, 18), new GUIContent("Index: " + spriteCharacterIndex + ""), style); + + EditorGUI.LabelField(new Rect(rect.x + 75f, rect.y, 120f, 18), new GUIContent("Unicode: 0x" + prop_SpriteUnicode.intValue.ToString("X") + ""), style); + EditorGUI.LabelField(new Rect(rect.x + 195f, rect.y, rect.width - 255, 18), new GUIContent("Name: " + prop_SpriteName.stringValue + ""), style); + + EditorGUI.LabelField(new Rect(rect.x, rect.y + 18, 120, 18), new GUIContent("Glyph ID: " + prop_SpriteGlyphIndex.intValue + ""), style); + + // Draw Sprite Glyph (if exists) + DrawSpriteGlyph(position, property); + + EditorGUI.LabelField(new Rect(rect.x, rect.y + 36, 80, 18), new GUIContent("Scale: " + prop_SpriteScale.floatValue + ""), style); + } + else // Display editable fields + { + // Get a reference to the underlying Sprite Asset + TMP_SpriteAsset spriteAsset = property.serializedObject.targetObject as TMP_SpriteAsset; + + // Sprite Character Index + int.TryParse(property.displayName.Split(' ')[1], out int spriteCharacterIndex); + + EditorGUI.LabelField(new Rect(rect.x, rect.y, 75f, 18), new GUIContent("Index: " + spriteCharacterIndex + ""), style); + + EditorGUIUtility.labelWidth = 55f; + GUI.SetNextControlName("Unicode Input"); + EditorGUI.BeginChangeCheck(); + string unicode = EditorGUI.DelayedTextField(new Rect(rect.x + 75f, rect.y, 120, 18), "Unicode:", prop_SpriteUnicode.intValue.ToString("X")); + + if (GUI.GetNameOfFocusedControl() == "Unicode Input") + { + //Filter out unwanted characters. + char chr = Event.current.character; + if ((chr < '0' || chr > '9') && (chr < 'a' || chr > 'f') && (chr < 'A' || chr > 'F')) + { + Event.current.character = '\0'; + } + } + + if (EditorGUI.EndChangeCheck()) + { + // Update Unicode value + prop_SpriteUnicode.intValue = TMP_TextUtilities.StringHexToInt(unicode); + spriteAsset.m_IsSpriteAssetLookupTablesDirty = true; + } + + EditorGUIUtility.labelWidth = 41f; + EditorGUI.BeginChangeCheck(); + EditorGUI.DelayedTextField(new Rect(rect.x + 195f, rect.y, rect.width - 255, 18), prop_SpriteName, new GUIContent("Name:")); + if (EditorGUI.EndChangeCheck()) + { + // Recompute hashCode for new name + prop_SpriteNameHashCode.intValue = TMP_TextUtilities.GetSimpleHashCode(prop_SpriteName.stringValue); + spriteAsset.m_IsSpriteAssetLookupTablesDirty = true; + } + + EditorGUIUtility.labelWidth = 59f; + EditorGUI.BeginChangeCheck(); + EditorGUI.DelayedIntField(new Rect(rect.x, rect.y + 18, 100, 18), prop_SpriteGlyphIndex, new GUIContent("Glyph ID:")); + if (EditorGUI.EndChangeCheck()) + { + spriteAsset.m_IsSpriteAssetLookupTablesDirty = true; + } + + // Draw Sprite Glyph (if exists) + DrawSpriteGlyph(position, property); + + int glyphIndex = prop_SpriteGlyphIndex.intValue; + + // Reset glyph selection if new character has been selected. + if (GUI.enabled && m_GlyphSelectedForEditing != glyphIndex) + m_GlyphSelectedForEditing = -1; + + // Display button to edit the glyph data. + if (GUI.Button(new Rect(rect.x + 120, rect.y + 18, 75, 18), new GUIContent("Edit Glyph"))) + { + if (m_GlyphSelectedForEditing == -1) + m_GlyphSelectedForEditing = glyphIndex; + else + m_GlyphSelectedForEditing = -1; + + // Button clicks should not result in potential change. + GUI.changed = false; + } + + // Show the glyph property drawer if selected + if (glyphIndex == m_GlyphSelectedForEditing && GUI.enabled) + { + if (spriteAsset != null) + { + // Lookup glyph and draw glyph (if available) + int elementIndex = spriteAsset.spriteGlyphTable.FindIndex(item => item.index == glyphIndex); + + if (elementIndex != -1) + { + // Get a reference to the Sprite Glyph Table + SerializedProperty prop_SpriteGlyphTable = property.serializedObject.FindProperty("m_SpriteGlyphTable"); + + SerializedProperty prop_SpriteGlyph = prop_SpriteGlyphTable.GetArrayElementAtIndex(elementIndex); + SerializedProperty prop_GlyphMetrics = prop_SpriteGlyph.FindPropertyRelative("m_Metrics"); + SerializedProperty prop_GlyphRect = prop_SpriteGlyph.FindPropertyRelative("m_GlyphRect"); + + Rect newRect = EditorGUILayout.GetControlRect(false, 115); + EditorGUI.DrawRect(new Rect(newRect.x + 62, newRect.y - 20, newRect.width - 62, newRect.height - 5), new Color(0.1f, 0.1f, 0.1f, 0.45f)); + EditorGUI.DrawRect(new Rect(newRect.x + 63, newRect.y - 19, newRect.width - 64, newRect.height - 7), new Color(0.3f, 0.3f, 0.3f, 0.8f)); + + // Display GlyphRect + newRect.x += 65; + newRect.y -= 18; + newRect.width += 5; + EditorGUI.PropertyField(newRect, prop_GlyphRect); + + // Display GlyphMetrics + newRect.y += 45; + EditorGUI.PropertyField(newRect, prop_GlyphMetrics); + + rect.y += 120; + } + } + } + + EditorGUIUtility.labelWidth = 39f; + EditorGUI.PropertyField(new Rect(rect.x, rect.y + 36, 80, 18), prop_SpriteScale, new GUIContent("Scale:")); + } + } + + + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + return 58; + } + + + void DrawSpriteGlyph(Rect position, SerializedProperty property) + { + // Get a reference to the sprite glyph table + TMP_SpriteAsset spriteAsset = property.serializedObject.targetObject as TMP_SpriteAsset; + + if (spriteAsset == null) + return; + + int glyphIndex = property.FindPropertyRelative("m_GlyphIndex").intValue; + + // Lookup glyph and draw glyph (if available) + int elementIndex = spriteAsset.spriteGlyphTable.FindIndex(item => item.index == glyphIndex); + + if (elementIndex != -1) + { + // Get a reference to the Sprite Glyph Table + SerializedProperty prop_SpriteGlyphTable = property.serializedObject.FindProperty("m_SpriteGlyphTable"); + SerializedProperty prop_SpriteGlyph = prop_SpriteGlyphTable.GetArrayElementAtIndex(elementIndex); + SerializedProperty prop_GlyphRect = prop_SpriteGlyph.FindPropertyRelative("m_GlyphRect"); + + // Get a reference to the sprite texture + Texture tex = spriteAsset.spriteSheet; + + // Return if we don't have a texture assigned to the sprite asset. + if (tex == null) + { + Debug.LogWarning("Please assign a valid Sprite Atlas texture to the [" + spriteAsset.name + "] Sprite Asset.", spriteAsset); + return; + } + + Vector2 spriteTexPosition = new Vector2(position.x, position.y); + Vector2 spriteSize = new Vector2(48, 48); + Vector2 alignmentOffset = new Vector2((58 - spriteSize.x) / 2, (58 - spriteSize.y) / 2); + + float x = prop_GlyphRect.FindPropertyRelative("m_X").intValue; + float y = prop_GlyphRect.FindPropertyRelative("m_Y").intValue; + float spriteWidth = prop_GlyphRect.FindPropertyRelative("m_Width").intValue; + float spriteHeight = prop_GlyphRect.FindPropertyRelative("m_Height").intValue; + + if (spriteWidth >= spriteHeight) + { + spriteSize.y = spriteHeight * spriteSize.x / spriteWidth; + spriteTexPosition.y += (spriteSize.x - spriteSize.y) / 2; + } + else + { + spriteSize.x = spriteWidth * spriteSize.y / spriteHeight; + spriteTexPosition.x += (spriteSize.y - spriteSize.x) / 2; + } + + // Compute the normalized texture coordinates + Rect texCoords = new Rect(x / tex.width, y / tex.height, spriteWidth / tex.width, spriteHeight / tex.height); + GUI.DrawTextureWithTexCoords(new Rect(spriteTexPosition.x + alignmentOffset.x, spriteTexPosition.y + alignmentOffset.y, spriteSize.x, spriteSize.y), tex, texCoords, true); + } + } + + } +} diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SpriteCharacterPropertyDrawer.cs.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SpriteCharacterPropertyDrawer.cs.meta new file mode 100644 index 0000000..636acc8 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SpriteCharacterPropertyDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 37cff9f5a86ae494c8cb04423580480d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SpriteGlyphPropertyDrawer.cs b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SpriteGlyphPropertyDrawer.cs new file mode 100644 index 0000000..d218701 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SpriteGlyphPropertyDrawer.cs @@ -0,0 +1,93 @@ +using UnityEngine; +using UnityEngine.TextCore; +using UnityEditor; +using System.Collections; + + +namespace TMPro.EditorUtilities +{ + + [CustomPropertyDrawer(typeof(TMP_SpriteGlyph))] + public class TMP_SpriteGlyphPropertyDrawer : PropertyDrawer + { + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + SerializedProperty prop_GlyphIndex = property.FindPropertyRelative("m_Index"); + SerializedProperty prop_GlyphMetrics = property.FindPropertyRelative("m_Metrics"); + SerializedProperty prop_GlyphRect = property.FindPropertyRelative("m_GlyphRect"); + SerializedProperty prop_Scale = property.FindPropertyRelative("m_Scale"); + SerializedProperty prop_AtlasIndex = property.FindPropertyRelative("m_AtlasIndex"); + + GUIStyle style = new GUIStyle(EditorStyles.label); + style.richText = true; + + Rect rect = new Rect(position.x + 70, position.y, position.width, 49); + + // Draw GlyphRect + EditorGUI.PropertyField(rect, prop_GlyphRect); + + // Draw GlyphMetrics + rect.y += 45; + EditorGUI.PropertyField(rect, prop_GlyphMetrics); + + EditorGUIUtility.labelWidth = 40f; + EditorGUI.PropertyField(new Rect(rect.x, rect.y + 65, 75, 18), prop_Scale, new GUIContent("Scale:")); + + EditorGUIUtility.labelWidth = 74f; + EditorGUI.PropertyField(new Rect(rect.x + 85, rect.y + 65, 95, 18), prop_AtlasIndex, new GUIContent("Atlas Index:")); + + DrawGlyph(position, property); + + int.TryParse(property.displayName.Split(' ')[1], out int spriteCharacterIndex); + float labelWidthIndex = GUI.skin.label.CalcSize(new GUIContent("#" + spriteCharacterIndex)).x; + EditorGUI.LabelField(new Rect(position.x, position.y + 5, 64f, 18f), new GUIContent("#" + spriteCharacterIndex), style); + + float labelWidthID = GUI.skin.label.CalcSize(new GUIContent("ID: " + prop_GlyphIndex.intValue)).x; + EditorGUI.LabelField(new Rect(position.x + (64 - labelWidthID) / 2, position.y + 110, 64f, 18f), new GUIContent("ID: " + prop_GlyphIndex.intValue + ""), style); + } + + void DrawGlyph(Rect position, SerializedProperty property) + { + // Get a reference to the sprite texture + Texture tex = (property.serializedObject.targetObject as TMP_SpriteAsset).spriteSheet; + + // Return if we don't have a texture assigned to the sprite asset. + if (tex == null) + { + Debug.LogWarning("Please assign a valid Sprite Atlas texture to the [" + property.serializedObject.targetObject.name + "] Sprite Asset.", property.serializedObject.targetObject); + return; + } + + Vector2 spriteTexPosition = new Vector2(position.x, position.y); + Vector2 spriteSize = new Vector2(65, 65); + + SerializedProperty prop_GlyphRect = property.FindPropertyRelative("m_GlyphRect"); + + int spriteImageX = prop_GlyphRect.FindPropertyRelative("m_X").intValue; + int spriteImageY = prop_GlyphRect.FindPropertyRelative("m_Y").intValue; + int spriteImageWidth = prop_GlyphRect.FindPropertyRelative("m_Width").intValue; + int spriteImageHeight = prop_GlyphRect.FindPropertyRelative("m_Height").intValue; + + if (spriteImageWidth >= spriteImageHeight) + { + spriteSize.y = spriteImageHeight * spriteSize.x / spriteImageWidth; + spriteTexPosition.y += (spriteSize.x - spriteSize.y) / 2; + } + else + { + spriteSize.x = spriteImageWidth * spriteSize.y / spriteImageHeight; + spriteTexPosition.x += (spriteSize.y - spriteSize.x) / 2; + } + + // Compute the normalized texture coordinates + Rect texCoords = new Rect((float)spriteImageX / tex.width, (float)spriteImageY / tex.height, (float)spriteImageWidth / tex.width, (float)spriteImageHeight / tex.height); + GUI.DrawTextureWithTexCoords(new Rect(spriteTexPosition.x + 5, spriteTexPosition.y + 32f, spriteSize.x, spriteSize.y), tex, texCoords, true); + } + + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + return 130f; + } + + } +} diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SpriteGlyphPropertyDrawer.cs.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SpriteGlyphPropertyDrawer.cs.meta new file mode 100644 index 0000000..eb0a221 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SpriteGlyphPropertyDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 056819c66570ca54cadb72330a354050 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_StyleAssetMenu.cs b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_StyleAssetMenu.cs new file mode 100644 index 0000000..db42bb4 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_StyleAssetMenu.cs @@ -0,0 +1,49 @@ +using UnityEngine; +using UnityEditor; +using System.IO; +using System.Collections; + + +namespace TMPro.EditorUtilities +{ + + public static class TMP_StyleAssetMenu + { + + [MenuItem("Assets/Create/TextMeshPro/Style Sheet", false, 120)] + public static void CreateTextMeshProObjectPerform() + { + string filePath; + if (Selection.assetGUIDs.Length == 0) + { + // No asset selected. + filePath = "Assets"; + } + else + { + // Get the path of the selected folder or asset. + filePath = AssetDatabase.GUIDToAssetPath(Selection.assetGUIDs[0]); + + // Get the file extension of the selected asset as it might need to be removed. + string fileExtension = Path.GetExtension(filePath); + if (fileExtension != "") + { + filePath = Path.GetDirectoryName(filePath); + } + } + + + string filePathWithName = AssetDatabase.GenerateUniqueAssetPath(filePath + "/TMP StyleSheet.asset"); + + //// Create new Style Sheet Asset. + TMP_StyleSheet styleSheet = ScriptableObject.CreateInstance(); + + AssetDatabase.CreateAsset(styleSheet, filePathWithName); + + EditorUtility.SetDirty(styleSheet); + + AssetDatabase.SaveAssets(); + } + } + +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_StyleAssetMenu.cs.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_StyleAssetMenu.cs.meta new file mode 100644 index 0000000..94e5b17 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_StyleAssetMenu.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 23a562f2cac6401f9f91251c68a1a794 +timeCreated: 1432690168 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_StyleSheetEditor.cs b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_StyleSheetEditor.cs new file mode 100644 index 0000000..e28df06 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_StyleSheetEditor.cs @@ -0,0 +1,278 @@ +using UnityEngine; +using UnityEditor; + + +namespace TMPro.EditorUtilities +{ + + [CustomPropertyDrawer(typeof(TMP_Style))] + public class StyleDrawer : PropertyDrawer + { + public static readonly float height = 95f; + + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + return height; + } + + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + SerializedProperty nameProperty = property.FindPropertyRelative("m_Name"); + SerializedProperty hashCodeProperty = property.FindPropertyRelative("m_HashCode"); + SerializedProperty openingDefinitionProperty = property.FindPropertyRelative("m_OpeningDefinition"); + SerializedProperty closingDefinitionProperty = property.FindPropertyRelative("m_ClosingDefinition"); + SerializedProperty openingDefinitionArray = property.FindPropertyRelative("m_OpeningTagArray"); + SerializedProperty closingDefinitionArray = property.FindPropertyRelative("m_ClosingTagArray"); + + + EditorGUIUtility.labelWidth = 90; + position.height = EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; + float labelHeight = position.height + 2f; + + EditorGUI.BeginChangeCheck(); + Rect rect0 = new Rect(position.x, position.y, (position.width) / 2 + 5, position.height); + EditorGUI.PropertyField(rect0, nameProperty); + if (EditorGUI.EndChangeCheck()) + { + // Recompute HashCode if name has changed. + hashCodeProperty.intValue = TMP_TextUtilities.GetSimpleHashCode(nameProperty.stringValue); + + property.serializedObject.ApplyModifiedProperties(); + // Dictionary needs to be updated since HashCode has changed. + TMP_StyleSheet.RefreshStyles(); + } + + // HashCode + Rect rect1 = new Rect(rect0.x + rect0.width + 5, position.y, 65, position.height); + GUI.Label(rect1, "HashCode"); + GUI.enabled = false; + rect1.x += 65; + rect1.width = position.width / 2 - 75; + EditorGUI.PropertyField(rect1, hashCodeProperty, GUIContent.none); + + GUI.enabled = true; + + // Text Tags + EditorGUI.BeginChangeCheck(); + + // Opening Tags + position.y += labelHeight; + GUI.Label(position, "Opening Tags"); + Rect textRect1 = new Rect(108, position.y, position.width - 86, 35); + openingDefinitionProperty.stringValue = EditorGUI.TextArea(textRect1, openingDefinitionProperty.stringValue); + if (EditorGUI.EndChangeCheck()) + { + // If any properties have changed, we need to update the Opening and Closing Arrays. + int size = openingDefinitionProperty.stringValue.Length; + + // Adjust array size to match new string length. + if (openingDefinitionArray.arraySize != size) openingDefinitionArray.arraySize = size; + + for (int i = 0; i < size; i++) + { + SerializedProperty element = openingDefinitionArray.GetArrayElementAtIndex(i); + element.intValue = openingDefinitionProperty.stringValue[i]; + } + } + + EditorGUI.BeginChangeCheck(); + + // Closing Tags + position.y += 38; + GUI.Label(position, "Closing Tags"); + Rect textRect2 = new Rect(108, position.y, position.width - 86, 35); + closingDefinitionProperty.stringValue = EditorGUI.TextArea(textRect2, closingDefinitionProperty.stringValue); + + if (EditorGUI.EndChangeCheck()) + { + // If any properties have changed, we need to update the Opening and Closing Arrays. + int size = closingDefinitionProperty.stringValue.Length; + + // Adjust array size to match new string length. + if (closingDefinitionArray.arraySize != size) closingDefinitionArray.arraySize = size; + + for (int i = 0; i < size; i++) + { + SerializedProperty element = closingDefinitionArray.GetArrayElementAtIndex(i); + element.intValue = closingDefinitionProperty.stringValue[i]; + } + } + + } + } + + + + [CustomEditor(typeof(TMP_StyleSheet)), CanEditMultipleObjects] + public class TMP_StyleEditor : Editor + { + + SerializedProperty m_StyleListProp; + + int m_SelectedElement = -1; + + //private Event m_CurrentEvent; + int m_Page; + + + + void OnEnable() + { + m_StyleListProp = serializedObject.FindProperty("m_StyleList"); + } + + + public override void OnInspectorGUI() + { + Event currentEvent = Event.current; + + serializedObject.Update(); + + int arraySize = m_StyleListProp.arraySize; + int itemsPerPage = (Screen.height - 178) / 111; + + if (arraySize > 0) + { + // Display each Style entry using the StyleDrawer PropertyDrawer. + for (int i = itemsPerPage * m_Page; i < arraySize && i < itemsPerPage * (m_Page + 1); i++) + { + + // Define the start of the selection region of the element. + Rect elementStartRegion = GUILayoutUtility.GetRect(0f, 0f, GUILayout.ExpandWidth(true)); + + EditorGUILayout.BeginVertical(EditorStyles.helpBox); + + SerializedProperty spriteInfo = m_StyleListProp.GetArrayElementAtIndex(i); + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(spriteInfo); + EditorGUILayout.EndVertical(); + if (EditorGUI.EndChangeCheck()) + { + // + } + + // Define the end of the selection region of the element. + Rect elementEndRegion = GUILayoutUtility.GetRect(0f, 0f, GUILayout.ExpandWidth(true)); + + // Check for Item selection + Rect selectionArea = new Rect(elementStartRegion.x, elementStartRegion.y, elementEndRegion.width, elementEndRegion.y - elementStartRegion.y); + if (DoSelectionCheck(selectionArea)) + { + if (m_SelectedElement == i) + { + m_SelectedElement = -1; + } + else + { + m_SelectedElement = i; + GUIUtility.keyboardControl = 0; + } + } + + // Handle Selection Highlighting + if (m_SelectedElement == i) + { + TMP_EditorUtility.DrawBox(selectionArea, 2f, new Color32(40, 192, 255, 255)); + } + } + } + + int shiftMultiplier = currentEvent.shift ? 10 : 1; // Page + Shift goes 10 page forward + + GUILayout.Space(-3f); + + Rect pagePos = EditorGUILayout.GetControlRect(false, 20); + pagePos.width /= 6; + + // Return if we can't display any items. + if (itemsPerPage == 0) return; + + + // Add new style. + pagePos.x += pagePos.width * 4; + if (GUI.Button(pagePos, "+")) + { + m_StyleListProp.arraySize += 1; + serializedObject.ApplyModifiedProperties(); + TMP_StyleSheet.RefreshStyles(); + } + + + // Delete selected style. + pagePos.x += pagePos.width; + if (m_SelectedElement == -1) GUI.enabled = false; + if (GUI.Button(pagePos, "-")) + { + if (m_SelectedElement != -1) + m_StyleListProp.DeleteArrayElementAtIndex(m_SelectedElement); + + m_SelectedElement = -1; + serializedObject.ApplyModifiedProperties(); + TMP_StyleSheet.RefreshStyles(); + } + + GUILayout.Space(5f); + + pagePos = EditorGUILayout.GetControlRect(false, 20); + pagePos.width /= 3; + + + // Previous Page + if (m_Page > 0) GUI.enabled = true; + else GUI.enabled = false; + + if (GUI.Button(pagePos, "Previous")) + m_Page -= 1 * shiftMultiplier; + + // PAGE COUNTER + GUI.enabled = true; + pagePos.x += pagePos.width; + int totalPages = (int)(arraySize / (float)itemsPerPage + 0.999f); + GUI.Label(pagePos, "Page " + (m_Page + 1) + " / " + totalPages, TMP_UIStyleManager.centeredLabel); + + // Next Page + pagePos.x += pagePos.width; + if (itemsPerPage * (m_Page + 1) < arraySize) GUI.enabled = true; + else GUI.enabled = false; + + if (GUI.Button(pagePos, "Next")) + m_Page += 1 * shiftMultiplier; + + // Clamp page range + m_Page = Mathf.Clamp(m_Page, 0, arraySize / itemsPerPage); + + + if (serializedObject.ApplyModifiedProperties()) + TMPro_EventManager.ON_TEXT_STYLE_PROPERTY_CHANGED(true); + + // Clear selection if mouse event was not consumed. + GUI.enabled = true; + if (currentEvent.type == EventType.MouseDown && currentEvent.button == 0) + m_SelectedElement = -1; + + + } + + + // Check if any of the Style elements were clicked on. + static bool DoSelectionCheck(Rect selectionArea) + { + Event currentEvent = Event.current; + + switch (currentEvent.type) + { + case EventType.MouseDown: + if (selectionArea.Contains(currentEvent.mousePosition) && currentEvent.button == 0) + { + currentEvent.Use(); + return true; + } + break; + } + + return false; + } + + } + +} diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_StyleSheetEditor.cs.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_StyleSheetEditor.cs.meta new file mode 100644 index 0000000..0da7754 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_StyleSheetEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 34e2c9b9d9e44953933afe37461f44e6 +timeCreated: 1432683777 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SubMeshUI_Editor.cs b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SubMeshUI_Editor.cs new file mode 100644 index 0000000..74bcccc --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SubMeshUI_Editor.cs @@ -0,0 +1,98 @@ +using UnityEngine; +using UnityEditor; +using System.Collections; + +namespace TMPro.EditorUtilities +{ + [CustomEditor(typeof(TMP_SubMeshUI)), CanEditMultipleObjects] + public class TMP_SubMeshUI_Editor : Editor + { + private struct m_foldout + { // Track Inspector foldout panel states, globally. + //public static bool textInput = true; + public static bool fontSettings = true; + //public static bool extraSettings = false; + //public static bool shadowSetting = false; + //public static bool materialEditor = true; + } + + private SerializedProperty fontAsset_prop; + private SerializedProperty spriteAsset_prop; + + private TMP_SubMeshUI m_SubMeshComponent; + + private CanvasRenderer m_canvasRenderer; + private Editor m_materialEditor; + private Material m_targetMaterial; + + + public void OnEnable() + { + fontAsset_prop = serializedObject.FindProperty("m_fontAsset"); + spriteAsset_prop = serializedObject.FindProperty("m_spriteAsset"); + + m_SubMeshComponent = target as TMP_SubMeshUI; + //m_rectTransform = m_SubMeshComponent.rectTransform; + m_canvasRenderer = m_SubMeshComponent.canvasRenderer; + + + // Create new Material Editor if one does not exists + if (m_canvasRenderer != null && m_canvasRenderer.GetMaterial() != null) + { + m_materialEditor = Editor.CreateEditor(m_canvasRenderer.GetMaterial()); + m_targetMaterial = m_canvasRenderer.GetMaterial(); + } + } + + + public void OnDisable() + { + // Destroy material editor if one exists + if (m_materialEditor != null) + { + //Debug.Log("Destroying Inline Material Editor."); + DestroyImmediate(m_materialEditor); + } + } + + + + public override void OnInspectorGUI() + { + GUI.enabled = false; + EditorGUILayout.PropertyField(fontAsset_prop); + EditorGUILayout.PropertyField(spriteAsset_prop); + GUI.enabled = true; + + EditorGUILayout.Space(); + + // If a Custom Material Editor exists, we use it. + if (m_canvasRenderer != null && m_canvasRenderer.GetMaterial() != null) + { + Material mat = m_canvasRenderer.GetMaterial(); + + //Debug.Log(mat + " " + m_targetMaterial); + + if (mat != m_targetMaterial) + { + // Destroy previous Material Instance + //Debug.Log("New Material has been assigned."); + m_targetMaterial = mat; + DestroyImmediate(m_materialEditor); + } + + + if (m_materialEditor == null) + { + m_materialEditor = Editor.CreateEditor(mat); + } + + m_materialEditor.DrawHeader(); + + + m_materialEditor.OnInspectorGUI(); + } + } + + } +} diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SubMeshUI_Editor.cs.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SubMeshUI_Editor.cs.meta new file mode 100644 index 0000000..963ea3c --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SubMeshUI_Editor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 6b01141ed8f74d198965c86f25eb7040 +timeCreated: 1452757501 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SubMesh_Editor.cs b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SubMesh_Editor.cs new file mode 100644 index 0000000..7597311 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SubMesh_Editor.cs @@ -0,0 +1,76 @@ +using UnityEngine; +using UnityEditor; +using System.Collections; + +namespace TMPro.EditorUtilities +{ + [CustomEditor(typeof(TMP_SubMesh)), CanEditMultipleObjects] + public class TMP_SubMesh_Editor : Editor + { + private struct m_foldout + { // Track Inspector foldout panel states, globally. + //public static bool textInput = true; + public static bool fontSettings = true; + //public static bool extraSettings = false; + //public static bool shadowSetting = false; + //public static bool materialEditor = true; + } + + private SerializedProperty fontAsset_prop; + private SerializedProperty spriteAsset_prop; + + private TMP_SubMesh m_SubMeshComponent; + private Renderer m_Renderer; + + public void OnEnable() + { + fontAsset_prop = serializedObject.FindProperty("m_fontAsset"); + spriteAsset_prop = serializedObject.FindProperty("m_spriteAsset"); + + m_SubMeshComponent = target as TMP_SubMesh; + + m_Renderer = m_SubMeshComponent.renderer; + } + + + public override void OnInspectorGUI() + { + EditorGUI.indentLevel = 0; + + GUI.enabled = false; + EditorGUILayout.PropertyField(fontAsset_prop); + EditorGUILayout.PropertyField(spriteAsset_prop); + GUI.enabled = true; + + EditorGUI.BeginChangeCheck(); + + // SORTING LAYERS + var sortingLayerNames = SortingLayerHelper.sortingLayerNames; + + // Look up the layer name using the current layer ID + string oldName = SortingLayerHelper.GetSortingLayerNameFromID(m_Renderer.sortingLayerID); + + // Use the name to look up our array index into the names list + int oldLayerIndex = System.Array.IndexOf(sortingLayerNames, oldName); + + // Show the pop-up for the names + int newLayerIndex = EditorGUILayout.Popup("Sorting Layer", oldLayerIndex, sortingLayerNames); + + // If the index changes, look up the ID for the new index to store as the new ID + if (newLayerIndex != oldLayerIndex) + { + //Undo.RecordObject(renderer, "Edit Sorting Layer"); + m_Renderer.sortingLayerID = SortingLayerHelper.GetSortingLayerIDForIndex(newLayerIndex); + //EditorUtility.SetDirty(renderer); + } + + // Expose the manual sorting order + int newSortingLayerOrder = EditorGUILayout.IntField("Order in Layer", m_Renderer.sortingOrder); + if (newSortingLayerOrder != m_Renderer.sortingOrder) + { + //Undo.RecordObject(renderer, "Edit Sorting Order"); + m_Renderer.sortingOrder = newSortingLayerOrder; + } + } + } +} diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SubMesh_Editor.cs.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SubMesh_Editor.cs.meta new file mode 100644 index 0000000..6ab0a94 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SubMesh_Editor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: dd2fe74169b54bf58fca17288513ef38 +timeCreated: 1456189048 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_TextAlignmentDrawer.cs b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_TextAlignmentDrawer.cs new file mode 100644 index 0000000..cd96573 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_TextAlignmentDrawer.cs @@ -0,0 +1,119 @@ +using UnityEngine; +using UnityEditor; + +namespace TMPro.EditorUtilities +{ + + [CustomPropertyDrawer(typeof(TextAlignmentOptions))] + public class TMP_TextAlignmentDrawer : PropertyDrawer + { + const int k_AlignmentButtonWidth = 24; + const int k_AlignmentButtonHeight = 20; + const int k_WideViewWidth = 504; + const int k_ControlsSpacing = 6; + const int k_GroupWidth = k_AlignmentButtonWidth * 6; + static readonly int k_TextAlignmentHash = "DoTextAligmentControl".GetHashCode(); + + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + return EditorGUIUtility.currentViewWidth > k_WideViewWidth ? k_AlignmentButtonHeight : k_AlignmentButtonHeight * 2 + 3; + } + + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + var id = GUIUtility.GetControlID(k_TextAlignmentHash, FocusType.Keyboard, position); + + EditorGUI.BeginProperty(position, label, property); + { + var controlArea = EditorGUI.PrefixLabel(position, id, label); + + var horizontalAligment = new Rect(controlArea.x, controlArea.y, k_GroupWidth, k_AlignmentButtonHeight); + var verticalAligment = new Rect(!(EditorGUIUtility.currentViewWidth > k_WideViewWidth) ? controlArea.x : horizontalAligment.xMax + k_ControlsSpacing, !(EditorGUIUtility.currentViewWidth > k_WideViewWidth) ? controlArea.y + k_AlignmentButtonHeight + 3 : controlArea.y, k_GroupWidth, k_AlignmentButtonHeight); + + EditorGUI.BeginChangeCheck(); + + var selectedHorizontal = DoHorizontalAligmentControl(horizontalAligment, property); + var selectedVertical = DoVerticalAligmentControl(verticalAligment, property); + + if (EditorGUI.EndChangeCheck()) + { + var value = (0x1 << selectedHorizontal) | (0x100 << selectedVertical); + property.intValue = value; + } + } + EditorGUI.EndProperty(); + } + + static int DoHorizontalAligmentControl(Rect position, SerializedProperty alignment) + { + var selected = TMP_EditorUtility.GetHorizontalAlignmentGridValue(alignment.intValue); + + var values = new bool[6]; + + values[selected] = true; + + if (alignment.hasMultipleDifferentValues) + { + foreach (var obj in alignment.serializedObject.targetObjects) + { + var text = obj as TMP_Text; + if (text != null) + { + values[TMP_EditorUtility.GetHorizontalAlignmentGridValue((int)text.alignment)] = true; + } + } + } + + position.width = k_AlignmentButtonWidth; + + for (var i = 0; i < values.Length; i++) + { + var oldValue = values[i]; + var newValue = TMP_EditorUtility.EditorToggle(position, oldValue, TMP_UIStyleManager.alignContentA[i], i == 0 ? TMP_UIStyleManager.alignmentButtonLeft : (i == 5 ? TMP_UIStyleManager.alignmentButtonRight : TMP_UIStyleManager.alignmentButtonMid)); + if (newValue != oldValue) + { + selected = i; + } + position.x += position.width; + } + + return selected; + } + + static int DoVerticalAligmentControl(Rect position, SerializedProperty alignment) + { + var selected = TMP_EditorUtility.GetVerticalAlignmentGridValue(alignment.intValue); + + var values = new bool[6]; + + values[selected] = true; + + if (alignment.hasMultipleDifferentValues) + { + foreach (var obj in alignment.serializedObject.targetObjects) + { + var text = obj as TMP_Text; + if (text != null) + { + values[TMP_EditorUtility.GetVerticalAlignmentGridValue((int)text.alignment)] = true; + } + } + } + + position.width = k_AlignmentButtonWidth; + + for (var i = 0; i < values.Length; i++) + { + var oldValue = values[i]; + var newValue = TMP_EditorUtility.EditorToggle(position, oldValue, TMP_UIStyleManager.alignContentB[i], i == 0 ? TMP_UIStyleManager.alignmentButtonLeft : (i == 5 ? TMP_UIStyleManager.alignmentButtonRight : TMP_UIStyleManager.alignmentButtonMid)); + if (newValue != oldValue) + { + selected = i; + } + position.x += position.width; + } + + return selected; + } + } +} diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_TextAlignmentDrawer.cs.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_TextAlignmentDrawer.cs.meta new file mode 100644 index 0000000..eda4bd8 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_TextAlignmentDrawer.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: c55a64c7570474f47a94abe39ebfef04 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_UIStyleManager.cs b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_UIStyleManager.cs new file mode 100644 index 0000000..ae8bb44 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_UIStyleManager.cs @@ -0,0 +1,134 @@ +using UnityEngine; +using UnityEditor; +using System.Collections; + + +namespace TMPro.EditorUtilities +{ + + public static class TMP_UIStyleManager + { + public static GUIStyle label; + public static GUIStyle textAreaBoxWindow; + public static GUIStyle boldFoldout; + public static GUIStyle panelTitle; + public static GUIStyle sectionHeader; + public static GUIStyle centeredLabel; + public static GUIStyle rightLabel; + public static GUIStyle wrappingTextArea; + + public static GUIStyle alignmentButtonLeft; + public static GUIStyle alignmentButtonMid; + public static GUIStyle alignmentButtonRight; + + // Alignment Button Textures + public static Texture2D alignLeft; + public static Texture2D alignCenter; + public static Texture2D alignRight; + public static Texture2D alignJustified; + public static Texture2D alignFlush; + public static Texture2D alignGeoCenter; + public static Texture2D alignTop; + public static Texture2D alignMiddle; + public static Texture2D alignBottom; + public static Texture2D alignBaseline; + public static Texture2D alignMidline; + public static Texture2D alignCapline; + public static Texture2D sectionHeaderTexture; + + public static GUIContent[] alignContentA; + public static GUIContent[] alignContentB; + + static TMP_UIStyleManager() + { + // Find to location of the TextMesh Pro Asset Folder (as users may have moved it) + var tmproAssetFolderPath = TMP_EditorUtility.packageRelativePath; + + if (EditorGUIUtility.isProSkin) + { + alignLeft = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignLeft.psd", typeof(Texture2D)) as Texture2D; + alignCenter = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignCenter.psd", typeof(Texture2D)) as Texture2D; + alignRight = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignRight.psd", typeof(Texture2D)) as Texture2D; + alignJustified = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignJustified.psd", typeof(Texture2D)) as Texture2D; + alignFlush = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignFlush.psd", typeof(Texture2D)) as Texture2D; + alignGeoCenter = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignCenterGeo.psd", typeof(Texture2D)) as Texture2D; + alignTop = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignTop.psd", typeof(Texture2D)) as Texture2D; + alignMiddle = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignMiddle.psd", typeof(Texture2D)) as Texture2D; + alignBottom = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignBottom.psd", typeof(Texture2D)) as Texture2D; + alignBaseline = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignBaseLine.psd", typeof(Texture2D)) as Texture2D; + alignMidline = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignMidLine.psd", typeof(Texture2D)) as Texture2D; + alignCapline = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignCapLine.psd", typeof(Texture2D)) as Texture2D; + sectionHeaderTexture = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/SectionHeader_Dark.psd", typeof(Texture2D)) as Texture2D; + } + else + { + alignLeft = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignLeft_Light.psd", typeof(Texture2D)) as Texture2D; + alignCenter = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignCenter_Light.psd", typeof(Texture2D)) as Texture2D; + alignRight = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignRight_Light.psd", typeof(Texture2D)) as Texture2D; + alignJustified = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignJustified_Light.psd", typeof(Texture2D)) as Texture2D; + alignFlush = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignFlush_Light.psd", typeof(Texture2D)) as Texture2D; + alignGeoCenter = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignCenterGeo_Light.psd", typeof(Texture2D)) as Texture2D; + alignTop = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignTop_Light.psd", typeof(Texture2D)) as Texture2D; + alignMiddle = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignMiddle_Light.psd", typeof(Texture2D)) as Texture2D; + alignBottom = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignBottom_Light.psd", typeof(Texture2D)) as Texture2D; + alignBaseline = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignBaseLine_Light.psd", typeof(Texture2D)) as Texture2D; + alignMidline = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignMidLine_Light.psd", typeof(Texture2D)) as Texture2D; + alignCapline = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignCapLine_Light.psd", typeof(Texture2D)) as Texture2D; + sectionHeaderTexture = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/SectionHeader_Light.psd", typeof(Texture2D)) as Texture2D; + } + + label = new GUIStyle(EditorStyles.label) { richText = true, wordWrap = true, stretchWidth = true }; + textAreaBoxWindow = new GUIStyle(EditorStyles.textArea) { richText = true }; + boldFoldout = new GUIStyle(EditorStyles.foldout) { fontStyle = FontStyle.Bold }; + panelTitle = new GUIStyle(EditorStyles.label) { fontStyle = FontStyle.Bold }; + + sectionHeader = new GUIStyle(EditorStyles.label) { fixedHeight = 22, richText = true, border = new RectOffset(9, 9, 0, 0), overflow = new RectOffset(9, 0, 0, 0), padding = new RectOffset(0, 0, 4, 0) }; + sectionHeader.normal.background = sectionHeaderTexture; + + centeredLabel = new GUIStyle(EditorStyles.label) { alignment = TextAnchor.MiddleCenter}; + rightLabel = new GUIStyle(EditorStyles.label) { alignment = TextAnchor.MiddleRight, richText = true }; + + + alignmentButtonLeft = new GUIStyle(EditorStyles.miniButtonLeft); + alignmentButtonLeft.padding.left = 4; + alignmentButtonLeft.padding.right = 4; + alignmentButtonLeft.padding.top = 2; + alignmentButtonLeft.padding.bottom = 2; + + alignmentButtonMid = new GUIStyle(EditorStyles.miniButtonMid); + alignmentButtonMid.padding.left = 4; + alignmentButtonMid.padding.right = 4; + alignmentButtonLeft.padding.top = 2; + alignmentButtonLeft.padding.bottom = 2; + + alignmentButtonRight = new GUIStyle(EditorStyles.miniButtonRight); + alignmentButtonRight.padding.left = 4; + alignmentButtonRight.padding.right = 4; + alignmentButtonLeft.padding.top = 2; + alignmentButtonLeft.padding.bottom = 2; + + wrappingTextArea = new GUIStyle(EditorStyles.textArea); + wrappingTextArea.wordWrap = true; + + alignContentA = new [] + { + new GUIContent(alignLeft, "Left"), + new GUIContent(alignCenter, "Center"), + new GUIContent(alignRight, "Right"), + new GUIContent(alignJustified, "Justified"), + new GUIContent(alignFlush, "Flush"), + new GUIContent(alignGeoCenter, "Geometry Center") + }; + + alignContentB = new [] + { + new GUIContent(alignTop, "Top"), + new GUIContent(alignMiddle, "Middle"), + new GUIContent(alignBottom, "Bottom"), + new GUIContent(alignBaseline, "Baseline"), + new GUIContent(alignMidline, "Midline"), + new GUIContent(alignCapline, "Capline") + }; + } + } +} diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_UIStyleManager.cs.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_UIStyleManager.cs.meta new file mode 100644 index 0000000..f2178f4 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_UIStyleManager.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 30a939dce2fd4073955f2f20e659d506 +timeCreated: 1426454127 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_UiEditorPanel.cs b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_UiEditorPanel.cs new file mode 100644 index 0000000..d44999e --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_UiEditorPanel.cs @@ -0,0 +1,91 @@ +using UnityEngine; +using UnityEngine.UI; +using UnityEditor; + +namespace TMPro.EditorUtilities +{ + + [CustomEditor(typeof(TextMeshProUGUI), true), CanEditMultipleObjects] + public class TMP_UiEditorPanel : TMP_BaseEditorPanel + { + static readonly GUIContent k_RaycastTargetLabel = new GUIContent("Raycast Target", "Whether the text blocks raycasts from the Graphic Raycaster."); + + SerializedProperty m_RaycastTargetProp; + + protected override void OnEnable() + { + base.OnEnable(); + m_RaycastTargetProp = serializedObject.FindProperty("m_RaycastTarget"); + } + + protected override void DrawExtraSettings() + { + Foldout.extraSettings = EditorGUILayout.Foldout(Foldout.extraSettings, k_ExtraSettingsLabel, true, TMP_UIStyleManager.boldFoldout); + if (Foldout.extraSettings) + { + EditorGUI.indentLevel += 1; + + DrawMargins(); + + DrawGeometrySorting(); + + DrawRichText(); + + DrawRaycastTarget(); + + DrawParsing(); + + DrawKerning(); + + DrawPadding(); + + EditorGUI.indentLevel -= 1; + } + } + + protected void DrawRaycastTarget() + { + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(m_RaycastTargetProp, k_RaycastTargetLabel); + if (EditorGUI.EndChangeCheck()) + { + // Change needs to propagate to the child sub objects. + Graphic[] graphicComponents = m_TextComponent.GetComponentsInChildren(); + for (int i = 1; i < graphicComponents.Length; i++) + graphicComponents[i].raycastTarget = m_RaycastTargetProp.boolValue; + + m_HavePropertiesChanged = true; + } + } + + // Method to handle multi object selection + protected override bool IsMixSelectionTypes() + { + GameObject[] objects = Selection.gameObjects; + if (objects.Length > 1) + { + for (int i = 0; i < objects.Length; i++) + { + if (objects[i].GetComponent() == null) + return true; + } + } + return false; + } + protected override void OnUndoRedo() + { + int undoEventId = Undo.GetCurrentGroup(); + int lastUndoEventId = s_EventId; + + if (undoEventId != lastUndoEventId) + { + for (int i = 0; i < targets.Length; i++) + { + //Debug.Log("Undo & Redo Performed detected in Editor Panel. Event ID:" + Undo.GetCurrentGroup()); + TMPro_EventManager.ON_TEXTMESHPRO_UGUI_PROPERTY_CHANGED(true, targets[i] as TextMeshProUGUI); + s_EventId = undoEventId; + } + } + } + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_UiEditorPanel.cs.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_UiEditorPanel.cs.meta new file mode 100644 index 0000000..fa7958a --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_UiEditorPanel.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 21c0044a7f964773be90d197a78e4703 +timeCreated: 1443571501 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_ContextMenus.cs b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_ContextMenus.cs new file mode 100644 index 0000000..b1e9533 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_ContextMenus.cs @@ -0,0 +1,341 @@ +using UnityEngine; +using UnityEditor; +using System.IO; +using System.Collections; + + +namespace TMPro.EditorUtilities +{ + + public class TMP_ContextMenus : Editor + { + + private static Texture m_copiedTexture; + + private static Material m_copiedProperties; + private static Material m_copiedAtlasProperties; + + + // Add a Context Menu to the Texture Editor Panel to allow Copy / Paste of Texture. + [MenuItem("CONTEXT/Texture/Copy", false, 2000)] + static void CopyTexture(MenuCommand command) + { + m_copiedTexture = command.context as Texture; + } + + + // Select the currently assigned material or material preset. + [MenuItem("CONTEXT/Material/Select Material", false, 500)] + static void SelectMaterial(MenuCommand command) + { + Material mat = command.context as Material; + + // Select current material + EditorUtility.FocusProjectWindow(); + EditorGUIUtility.PingObject(mat); + } + + + // Add a Context Menu to allow easy duplication of the Material. + [MenuItem("CONTEXT/Material/Create Material Preset", false)] + static void DuplicateMaterial(MenuCommand command) + { + // Get the type of text object + // If material is not a base material, we get material leaks... + + Material source_Mat = (Material)command.context; + if (!EditorUtility.IsPersistent(source_Mat)) + { + Debug.LogWarning("Material is an instance and cannot be converted into a permanent asset."); + return; + } + + + string assetPath = AssetDatabase.GetAssetPath(source_Mat).Split('.')[0]; + + Material duplicate = new Material(source_Mat); + + // Need to manually copy the shader keywords + duplicate.shaderKeywords = source_Mat.shaderKeywords; + + AssetDatabase.CreateAsset(duplicate, AssetDatabase.GenerateUniqueAssetPath(assetPath + ".mat")); + + // Assign duplicate Material to selected object (if one is) + if (Selection.activeGameObject != null) + { + TMP_Text textObject = Selection.activeGameObject.GetComponent(); + if (textObject != null) + { + textObject.fontSharedMaterial = duplicate; + } + else + { + TMP_SubMesh subMeshObject = Selection.activeGameObject.GetComponent(); + + if (subMeshObject != null) + subMeshObject.sharedMaterial = duplicate; + else + { + TMP_SubMeshUI subMeshUIObject = Selection.activeGameObject.GetComponent(); + + if (subMeshUIObject != null) + subMeshUIObject.sharedMaterial = duplicate; + } + } + } + + // Ping newly created Material Preset. + EditorUtility.FocusProjectWindow(); + EditorGUIUtility.PingObject(duplicate); + } + + + //[MenuItem("CONTEXT/MaterialComponent/Copy Material Properties", false)] + [MenuItem("CONTEXT/Material/Copy Material Properties", false)] + static void CopyMaterialProperties(MenuCommand command) + { + Material mat = null; + if (command.context.GetType() == typeof(Material)) + mat = (Material)command.context; + else + { + mat = Selection.activeGameObject.GetComponent().GetMaterial(); + } + + m_copiedProperties = new Material(mat); + + m_copiedProperties.shaderKeywords = mat.shaderKeywords; + + m_copiedProperties.hideFlags = HideFlags.DontSave; + } + + + // PASTE MATERIAL + //[MenuItem("CONTEXT/MaterialComponent/Paste Material Properties", false)] + [MenuItem("CONTEXT/Material/Paste Material Properties", false)] + static void PasteMaterialProperties(MenuCommand command) + { + + if (m_copiedProperties == null) + { + Debug.LogWarning("No Material Properties to Paste. Use Copy Material Properties first."); + return; + } + + Material mat = null; + if (command.context.GetType() == typeof(Material)) + mat = (Material)command.context; + else + { + mat = Selection.activeGameObject.GetComponent().GetMaterial(); + } + + Undo.RecordObject(mat, "Paste Material"); + + ShaderUtilities.GetShaderPropertyIDs(); // Make sure we have valid Property IDs + if (mat.HasProperty(ShaderUtilities.ID_GradientScale)) + { + // Preserve unique SDF properties from destination material. + m_copiedProperties.SetTexture(ShaderUtilities.ID_MainTex, mat.GetTexture(ShaderUtilities.ID_MainTex)); + m_copiedProperties.SetFloat(ShaderUtilities.ID_GradientScale, mat.GetFloat(ShaderUtilities.ID_GradientScale)); + m_copiedProperties.SetFloat(ShaderUtilities.ID_TextureWidth, mat.GetFloat(ShaderUtilities.ID_TextureWidth)); + m_copiedProperties.SetFloat(ShaderUtilities.ID_TextureHeight, mat.GetFloat(ShaderUtilities.ID_TextureHeight)); + } + + EditorShaderUtilities.CopyMaterialProperties(m_copiedProperties, mat); + + // Copy ShaderKeywords from one material to the other. + mat.shaderKeywords = m_copiedProperties.shaderKeywords; + + // Let TextMeshPro Objects that this mat has changed. + TMPro_EventManager.ON_MATERIAL_PROPERTY_CHANGED(true, mat); + } + + + // Enable Resetting of Material properties without losing unique properties of the font atlas. + [MenuItem("CONTEXT/Material/Reset", false, 2100)] + static void ResetSettings(MenuCommand command) + { + + Material mat = null; + if (command.context.GetType() == typeof(Material)) + mat = (Material)command.context; + else + { + mat = Selection.activeGameObject.GetComponent().GetMaterial(); + } + + Undo.RecordObject(mat, "Reset Material"); + + ShaderUtilities.GetShaderPropertyIDs(); // Make sure we have valid Property IDs + if (mat.HasProperty(ShaderUtilities.ID_GradientScale)) + { + // Copy unique properties of the SDF Material + var texture = mat.GetTexture(ShaderUtilities.ID_MainTex); + var gradientScale = mat.GetFloat(ShaderUtilities.ID_GradientScale); + var texWidth = mat.GetFloat(ShaderUtilities.ID_TextureWidth); + var texHeight = mat.GetFloat(ShaderUtilities.ID_TextureHeight); + + var stencilId = 0.0f; + var stencilComp = 0.0f; + + if (mat.HasProperty(ShaderUtilities.ID_StencilID)) + { + stencilId = mat.GetFloat(ShaderUtilities.ID_StencilID); + stencilComp = mat.GetFloat(ShaderUtilities.ID_StencilComp); + } + + var normalWeight = mat.GetFloat(ShaderUtilities.ID_WeightNormal); + var boldWeight = mat.GetFloat(ShaderUtilities.ID_WeightBold); + + // Reset the material + Unsupported.SmartReset(mat); + + // Reset ShaderKeywords + mat.shaderKeywords = new string[0]; // { "BEVEL_OFF", "GLOW_OFF", "UNDERLAY_OFF" }; + + // Copy unique material properties back to the material. + mat.SetTexture(ShaderUtilities.ID_MainTex, texture); + mat.SetFloat(ShaderUtilities.ID_GradientScale, gradientScale); + mat.SetFloat(ShaderUtilities.ID_TextureWidth, texWidth); + mat.SetFloat(ShaderUtilities.ID_TextureHeight, texHeight); + + if (mat.HasProperty(ShaderUtilities.ID_StencilID)) + { + mat.SetFloat(ShaderUtilities.ID_StencilID, stencilId); + mat.SetFloat(ShaderUtilities.ID_StencilComp, stencilComp); + } + + mat.SetFloat(ShaderUtilities.ID_WeightNormal, normalWeight); + mat.SetFloat(ShaderUtilities.ID_WeightBold, boldWeight); + } + else + { + Unsupported.SmartReset(mat); + } + + TMPro_EventManager.ON_MATERIAL_PROPERTY_CHANGED(true, mat); + } + + + + //This function is used for debugging and fixing potentially broken font atlas links. + [MenuItem("CONTEXT/Material/Copy Atlas", false, 2000)] + static void CopyAtlas(MenuCommand command) + { + Material mat = command.context as Material; + + m_copiedAtlasProperties = new Material(mat); + m_copiedAtlasProperties.hideFlags = HideFlags.DontSave; + } + + + // This function is used for debugging and fixing potentially broken font atlas links + [MenuItem("CONTEXT/Material/Paste Atlas", false, 2001)] + static void PasteAtlas(MenuCommand command) + { + Material mat = command.context as Material; + + if (m_copiedAtlasProperties != null) + { + Undo.RecordObject(mat, "Paste Texture"); + + ShaderUtilities.GetShaderPropertyIDs(); // Make sure we have valid Property IDs + mat.SetTexture(ShaderUtilities.ID_MainTex, m_copiedAtlasProperties.GetTexture(ShaderUtilities.ID_MainTex)); + mat.SetFloat(ShaderUtilities.ID_GradientScale, m_copiedAtlasProperties.GetFloat(ShaderUtilities.ID_GradientScale)); + mat.SetFloat(ShaderUtilities.ID_TextureWidth, m_copiedAtlasProperties.GetFloat(ShaderUtilities.ID_TextureWidth)); + mat.SetFloat(ShaderUtilities.ID_TextureHeight, m_copiedAtlasProperties.GetFloat(ShaderUtilities.ID_TextureHeight)); + } + else if (m_copiedTexture != null) + { + Undo.RecordObject(mat, "Paste Texture"); + + mat.SetTexture(ShaderUtilities.ID_MainTex, m_copiedTexture); + } + + //DestroyImmediate(m_copiedAtlasProperties); + } + + + // Context Menus for TMPro Font Assets + //This function is used for debugging and fixing potentially broken font atlas links. + [MenuItem("CONTEXT/TMP_FontAsset/Extract Atlas", false, 2100)] + static void ExtractAtlas(MenuCommand command) + { + TMP_FontAsset font = command.context as TMP_FontAsset; + + string fontPath = AssetDatabase.GetAssetPath(font); + string texPath = Path.GetDirectoryName(fontPath) + "/" + Path.GetFileNameWithoutExtension(fontPath) + " Atlas.png"; + + // Create a Serialized Object of the texture to allow us to make it readable. + SerializedObject texprop = new SerializedObject(font.material.GetTexture(ShaderUtilities.ID_MainTex)); + texprop.FindProperty("m_IsReadable").boolValue = true; + texprop.ApplyModifiedProperties(); + + // Create a copy of the texture. + Texture2D tex = Instantiate(font.material.GetTexture(ShaderUtilities.ID_MainTex)) as Texture2D; + + // Set the texture to not readable again. + texprop.FindProperty("m_IsReadable").boolValue = false; + texprop.ApplyModifiedProperties(); + + Debug.Log(texPath); + // Saving File for Debug + var pngData = tex.EncodeToPNG(); + File.WriteAllBytes(texPath, pngData); + + AssetDatabase.Refresh(); + DestroyImmediate(tex); + } + + /// + /// + /// + /// + [MenuItem("CONTEXT/TMP_FontAsset/Update Atlas Texture...", false, 2000)] + static void RegenerateFontAsset(MenuCommand command) + { + TMP_FontAsset fontAsset = command.context as TMP_FontAsset; + + if (fontAsset != null) + { + TMPro_FontAssetCreatorWindow.ShowFontAtlasCreatorWindow(fontAsset); + } + } + + + /// + /// Clear Font Asset Data + /// + /// + [MenuItem("CONTEXT/TMP_FontAsset/Reset", false, 100)] + static void ClearFontAssetData(MenuCommand command) + { + TMP_FontAsset fontAsset = command.context as TMP_FontAsset; + + if (fontAsset != null && Selection.activeObject != fontAsset) + { + Selection.activeObject = fontAsset; + } + + fontAsset.ClearFontAssetData(true); + + TMPro_EventManager.ON_FONT_PROPERTY_CHANGED(true, fontAsset); + } + + + [MenuItem("CONTEXT/TrueTypeFontImporter/Create TMP Font Asset...", false, 200)] + static void CreateFontAsset(MenuCommand command) + { + TrueTypeFontImporter importer = command.context as TrueTypeFontImporter; + + if (importer != null) + { + Font sourceFontFile = AssetDatabase.LoadAssetAtPath(importer.assetPath); + + if (sourceFontFile) + TMPro_FontAssetCreatorWindow.ShowFontAtlasCreatorWindow(sourceFontFile); + } + } + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_ContextMenus.cs.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_ContextMenus.cs.meta new file mode 100644 index 0000000..594965a --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_ContextMenus.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 44e1d646473a40178712cb2150f54cec +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_CreateObjectMenu.cs b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_CreateObjectMenu.cs new file mode 100644 index 0000000..19810ab --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_CreateObjectMenu.cs @@ -0,0 +1,311 @@ +using UnityEngine; +using UnityEditor; +using UnityEditor.SceneManagement; +using UnityEditor.Experimental.SceneManagement; +using UnityEngine.SceneManagement; +using UnityEngine.UI; +using UnityEngine.EventSystems; + + +namespace TMPro.EditorUtilities +{ + public static class TMPro_CreateObjectMenu + { + + /// + /// Create a TextMeshPro object that works with the Mesh Renderer + /// + /// + [MenuItem("GameObject/3D Object/Text - TextMeshPro", false, 30)] + static void CreateTextMeshProObjectPerform(MenuCommand command) + { + GameObject go = new GameObject("Text (TMP)"); + + // Add support for new prefab mode + StageUtility.PlaceGameObjectInCurrentStage(go); + + TextMeshPro textMeshPro = go.AddComponent(); + textMeshPro.text = "Sample text"; + textMeshPro.alignment = TextAlignmentOptions.TopLeft; + + Undo.RegisterCreatedObjectUndo((Object)go, "Create " + go.name); + + GameObject contextObject = command.context as GameObject; + if (contextObject != null) + { + GameObjectUtility.SetParentAndAlign(go, contextObject); + Undo.SetTransformParent(go.transform, contextObject.transform, "Parent " + go.name); + } + + Selection.activeGameObject = go; + } + + + /// + /// Create a TextMeshPro object that works with the CanvasRenderer + /// + /// + [MenuItem("GameObject/UI/Text - TextMeshPro", false, 2001)] + static void CreateTextMeshProGuiObjectPerform(MenuCommand menuCommand) + { + GameObject go = TMP_DefaultControls.CreateText(GetStandardResources()); + + // Override text color and font size + TMP_Text textComponent = go.GetComponent(); + textComponent.color = Color.white; + if (textComponent.m_isWaitingOnResourceLoad == false) + textComponent.fontSize = TMP_Settings.defaultFontSize; + + PlaceUIElementRoot(go, menuCommand); + } + + [MenuItem("GameObject/UI/Button - TextMeshPro", false, 2031)] + static public void AddButton(MenuCommand menuCommand) + { + GameObject go = TMP_DefaultControls.CreateButton(GetStandardResources()); + + // Override font size + TMP_Text textComponent = go.GetComponentInChildren(); + textComponent.fontSize = 24; + + PlaceUIElementRoot(go, menuCommand); + } + + + + [MenuItem("GameObject/UI/Input Field - TextMeshPro", false, 2037)] + static void AddTextMeshProInputField(MenuCommand menuCommand) + { + GameObject go = TMP_DefaultControls.CreateInputField(GetStandardResources()); + PlaceUIElementRoot(go, menuCommand); + } + + + [MenuItem("GameObject/UI/Dropdown - TextMeshPro", false, 2036)] + static public void AddDropdown(MenuCommand menuCommand) + { + GameObject go = TMP_DefaultControls.CreateDropdown(GetStandardResources()); + PlaceUIElementRoot(go, menuCommand); + } + + + private const string kUILayerName = "UI"; + + private const string kStandardSpritePath = "UI/Skin/UISprite.psd"; + private const string kBackgroundSpritePath = "UI/Skin/Background.psd"; + private const string kInputFieldBackgroundPath = "UI/Skin/InputFieldBackground.psd"; + private const string kKnobPath = "UI/Skin/Knob.psd"; + private const string kCheckmarkPath = "UI/Skin/Checkmark.psd"; + private const string kDropdownArrowPath = "UI/Skin/DropdownArrow.psd"; + private const string kMaskPath = "UI/Skin/UIMask.psd"; + + static private TMP_DefaultControls.Resources s_StandardResources; + + + static private TMP_DefaultControls.Resources GetStandardResources() + { + if (s_StandardResources.standard == null) + { + s_StandardResources.standard = AssetDatabase.GetBuiltinExtraResource(kStandardSpritePath); + s_StandardResources.background = AssetDatabase.GetBuiltinExtraResource(kBackgroundSpritePath); + s_StandardResources.inputField = AssetDatabase.GetBuiltinExtraResource(kInputFieldBackgroundPath); + s_StandardResources.knob = AssetDatabase.GetBuiltinExtraResource(kKnobPath); + s_StandardResources.checkmark = AssetDatabase.GetBuiltinExtraResource(kCheckmarkPath); + s_StandardResources.dropdown = AssetDatabase.GetBuiltinExtraResource(kDropdownArrowPath); + s_StandardResources.mask = AssetDatabase.GetBuiltinExtraResource(kMaskPath); + } + return s_StandardResources; + } + + + private static void SetPositionVisibleinSceneView(RectTransform canvasRTransform, RectTransform itemTransform) + { + // Find the best scene view + SceneView sceneView = SceneView.lastActiveSceneView; + if (sceneView == null && SceneView.sceneViews.Count > 0) + sceneView = SceneView.sceneViews[0] as SceneView; + + // Couldn't find a SceneView. Don't set position. + if (sceneView == null || sceneView.camera == null) + return; + + // Create world space Plane from canvas position. + Camera camera = sceneView.camera; + Vector3 position = Vector3.zero; + if (RectTransformUtility.ScreenPointToLocalPointInRectangle(canvasRTransform, new Vector2(camera.pixelWidth / 2, camera.pixelHeight / 2), camera, out Vector2 localPlanePosition)) + { + // Adjust for canvas pivot + localPlanePosition.x = localPlanePosition.x + canvasRTransform.sizeDelta.x * canvasRTransform.pivot.x; + localPlanePosition.y = localPlanePosition.y + canvasRTransform.sizeDelta.y * canvasRTransform.pivot.y; + + localPlanePosition.x = Mathf.Clamp(localPlanePosition.x, 0, canvasRTransform.sizeDelta.x); + localPlanePosition.y = Mathf.Clamp(localPlanePosition.y, 0, canvasRTransform.sizeDelta.y); + + // Adjust for anchoring + position.x = localPlanePosition.x - canvasRTransform.sizeDelta.x * itemTransform.anchorMin.x; + position.y = localPlanePosition.y - canvasRTransform.sizeDelta.y * itemTransform.anchorMin.y; + + Vector3 minLocalPosition; + minLocalPosition.x = canvasRTransform.sizeDelta.x * (0 - canvasRTransform.pivot.x) + itemTransform.sizeDelta.x * itemTransform.pivot.x; + minLocalPosition.y = canvasRTransform.sizeDelta.y * (0 - canvasRTransform.pivot.y) + itemTransform.sizeDelta.y * itemTransform.pivot.y; + + Vector3 maxLocalPosition; + maxLocalPosition.x = canvasRTransform.sizeDelta.x * (1 - canvasRTransform.pivot.x) - itemTransform.sizeDelta.x * itemTransform.pivot.x; + maxLocalPosition.y = canvasRTransform.sizeDelta.y * (1 - canvasRTransform.pivot.y) - itemTransform.sizeDelta.y * itemTransform.pivot.y; + + position.x = Mathf.Clamp(position.x, minLocalPosition.x, maxLocalPosition.x); + position.y = Mathf.Clamp(position.y, minLocalPosition.y, maxLocalPosition.y); + } + + itemTransform.anchoredPosition = position; + itemTransform.localRotation = Quaternion.identity; + itemTransform.localScale = Vector3.one; + } + + + private static void PlaceUIElementRoot(GameObject element, MenuCommand menuCommand) + { + GameObject parent = menuCommand.context as GameObject; + bool explicitParentChoice = true; + if (parent == null) + { + parent = GetOrCreateCanvasGameObject(); + explicitParentChoice = false; + + // If in Prefab Mode, Canvas has to be part of Prefab contents, + // otherwise use Prefab root instead. + PrefabStage prefabStage = PrefabStageUtility.GetCurrentPrefabStage(); + if (prefabStage != null && !prefabStage.IsPartOfPrefabContents(parent)) + parent = prefabStage.prefabContentsRoot; + } + if (parent.GetComponentInParent() == null) + { + // Create canvas under context GameObject, + // and make that be the parent which UI element is added under. + GameObject canvas = CreateNewUI(); + canvas.transform.SetParent(parent.transform, false); + parent = canvas; + } + + // Setting the element to be a child of an element already in the scene should + // be sufficient to also move the element to that scene. + // However, it seems the element needs to be already in its destination scene when the + // RegisterCreatedObjectUndo is performed; otherwise the scene it was created in is dirtied. + SceneManager.MoveGameObjectToScene(element, parent.scene); + + if (element.transform.parent == null) + { + Undo.SetTransformParent(element.transform, parent.transform, "Parent " + element.name); + } + + GameObjectUtility.EnsureUniqueNameForSibling(element); + + // We have to fix up the undo name since the name of the object was only known after reparenting it. + Undo.SetCurrentGroupName("Create " + element.name); + + GameObjectUtility.SetParentAndAlign(element, parent); + if (!explicitParentChoice) // not a context click, so center in sceneview + SetPositionVisibleinSceneView(parent.GetComponent(), element.GetComponent()); + + Undo.RegisterCreatedObjectUndo(element, "Create " + element.name); + + Selection.activeGameObject = element; + } + + + static public GameObject CreateNewUI() + { + // Root for the UI + var root = new GameObject("Canvas"); + root.layer = LayerMask.NameToLayer(kUILayerName); + Canvas canvas = root.AddComponent(); + canvas.renderMode = RenderMode.ScreenSpaceOverlay; + root.AddComponent(); + root.AddComponent(); + + // Works for all stages. + StageUtility.PlaceGameObjectInCurrentStage(root); + bool customScene = false; + PrefabStage prefabStage = PrefabStageUtility.GetCurrentPrefabStage(); + if (prefabStage != null) + { + root.transform.SetParent(prefabStage.prefabContentsRoot.transform, false); + customScene = true; + } + + Undo.RegisterCreatedObjectUndo(root, "Create " + root.name); + + // If there is no event system add one... + // No need to place event system in custom scene as these are temporary anyway. + // It can be argued for or against placing it in the user scenes, + // but let's not modify scene user is not currently looking at. + if (!customScene) + CreateEventSystem(false); + return root; + } + + + private static void CreateEventSystem(bool select) + { + CreateEventSystem(select, null); + } + + + private static void CreateEventSystem(bool select, GameObject parent) + { + var esys = Object.FindObjectOfType(); + if (esys == null) + { + var eventSystem = new GameObject("EventSystem"); + GameObjectUtility.SetParentAndAlign(eventSystem, parent); + esys = eventSystem.AddComponent(); + eventSystem.AddComponent(); + + Undo.RegisterCreatedObjectUndo(eventSystem, "Create " + eventSystem.name); + } + + if (select && esys != null) + { + Selection.activeGameObject = esys.gameObject; + } + } + + + // Helper function that returns a Canvas GameObject; preferably a parent of the selection, or other existing Canvas. + static public GameObject GetOrCreateCanvasGameObject() + { + GameObject selectedGo = Selection.activeGameObject; + + // Try to find a gameobject that is the selected GO or one if its parents. + Canvas canvas = (selectedGo != null) ? selectedGo.GetComponentInParent() : null; + if (IsValidCanvas(canvas)) + return canvas.gameObject; + + // No canvas in selection or its parents? Then use any valid canvas. + // We have to find all loaded Canvases, not just the ones in main scenes. + Canvas[] canvasArray = StageUtility.GetCurrentStageHandle().FindComponentsOfType(); + for (int i = 0; i < canvasArray.Length; i++) + if (IsValidCanvas(canvasArray[i])) + return canvasArray[i].gameObject; + + // No canvas in the scene at all? Then create a new one. + return CreateNewUI(); + } + + static bool IsValidCanvas(Canvas canvas) + { + if (canvas == null || !canvas.gameObject.activeInHierarchy) + return false; + + // It's important that the non-editable canvas from a prefab scene won't be rejected, + // but canvases not visible in the Hierarchy at all do. Don't check for HideAndDontSave. + if (EditorUtility.IsPersistent(canvas) || (canvas.hideFlags & HideFlags.HideInHierarchy) != 0) + return false; + + if (StageUtility.GetStageHandle(canvas.gameObject) != StageUtility.GetCurrentStageHandle()) + return false; + + return true; + } + } +} diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_CreateObjectMenu.cs.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_CreateObjectMenu.cs.meta new file mode 100644 index 0000000..6ea901d --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_CreateObjectMenu.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 7065397ff8184621aa3ca4f854491259 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_EditorShaderUtilities.cs b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_EditorShaderUtilities.cs new file mode 100644 index 0000000..1633a68 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_EditorShaderUtilities.cs @@ -0,0 +1,53 @@ +using UnityEngine; +using UnityEditor; +using System.Linq; +using System.Collections; + + +namespace TMPro.EditorUtilities +{ + + public static class EditorShaderUtilities + { + + /// + /// Copy Shader properties from source to destination material. + /// + /// + /// + public static void CopyMaterialProperties(Material source, Material destination) + { + MaterialProperty[] source_prop = MaterialEditor.GetMaterialProperties(new Material[] { source }); + + for (int i = 0; i < source_prop.Length; i++) + { + int property_ID = Shader.PropertyToID(source_prop[i].name); + if (destination.HasProperty(property_ID)) + { + //Debug.Log(source_prop[i].name + " Type:" + ShaderUtil.GetPropertyType(source.shader, i)); + switch (ShaderUtil.GetPropertyType(source.shader, i)) + { + case ShaderUtil.ShaderPropertyType.Color: + destination.SetColor(property_ID, source.GetColor(property_ID)); + break; + case ShaderUtil.ShaderPropertyType.Float: + destination.SetFloat(property_ID, source.GetFloat(property_ID)); + break; + case ShaderUtil.ShaderPropertyType.Range: + destination.SetFloat(property_ID, source.GetFloat(property_ID)); + break; + case ShaderUtil.ShaderPropertyType.TexEnv: + destination.SetTexture(property_ID, source.GetTexture(property_ID)); + break; + case ShaderUtil.ShaderPropertyType.Vector: + destination.SetVector(property_ID, source.GetVector(property_ID)); + break; + } + } + } + + } + + } + +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_EditorShaderUtilities.cs.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_EditorShaderUtilities.cs.meta new file mode 100644 index 0000000..9a24d61 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_EditorShaderUtilities.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: aa76955fe5bb44f7915d91db8c7043c4 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_FontAssetCreatorWindow.cs b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_FontAssetCreatorWindow.cs new file mode 100644 index 0000000..21b17d6 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_FontAssetCreatorWindow.cs @@ -0,0 +1,1736 @@ +using System; +using UnityEngine; +using UnityEditor; +using System.Collections.Generic; +using System.Globalization; +using System.Threading; +using System.IO; +using System.Text.RegularExpressions; +using UnityEngine.TextCore; +using UnityEngine.TextCore.LowLevel; +using Object = UnityEngine.Object; + +namespace TMPro.EditorUtilities +{ + public class TMPro_FontAssetCreatorWindow : EditorWindow + { + [MenuItem("Window/TextMeshPro/Font Asset Creator", false, 2025)] + public static void ShowFontAtlasCreatorWindow() + { + var window = GetWindow(); + window.titleContent = new GUIContent("Font Asset Creator"); + window.Focus(); + + // Make sure TMP Essential Resources have been imported. + window.CheckEssentialResources(); + } + + + public static void ShowFontAtlasCreatorWindow(Font sourceFontFile) + { + var window = GetWindow(); + + window.titleContent = new GUIContent("Font Asset Creator"); + window.Focus(); + + window.ClearGeneratedData(); + window.m_LegacyFontAsset = null; + window.m_SelectedFontAsset = null; + + // Override selected font asset + window.m_SourceFontFile = sourceFontFile; + + // Make sure TMP Essential Resources have been imported. + window.CheckEssentialResources(); + } + + + public static void ShowFontAtlasCreatorWindow(TMP_FontAsset fontAsset) + { + var window = GetWindow(); + + window.titleContent = new GUIContent("Font Asset Creator"); + window.Focus(); + + // Clear any previously generated data + window.ClearGeneratedData(); + window.m_LegacyFontAsset = null; + + // Load font asset creation settings if we have valid settings + if (string.IsNullOrEmpty(fontAsset.creationSettings.sourceFontFileGUID) == false) + { + window.LoadFontCreationSettings(fontAsset.creationSettings); + + // Override settings to inject character list from font asset + window.m_CharacterSetSelectionMode = 6; + window.m_CharacterSequence = TMP_EditorUtility.GetUnicodeCharacterSequence(TMP_FontAsset.GetCharactersArray(fontAsset)); + + + window.m_ReferencedFontAsset = fontAsset; + window.m_SavedFontAtlas = fontAsset.atlasTexture; + } + else + { + window.m_WarningMessage = "Font Asset [" + fontAsset.name + "] does not contain any previous \"Font Asset Creation Settings\". This usually means [" + fontAsset.name + "] was created before this new functionality was added."; + window.m_SourceFontFile = null; + window.m_LegacyFontAsset = fontAsset; + } + + // Even if we don't have any saved generation settings, we still want to pre-select the source font file. + window.m_SelectedFontAsset = fontAsset; + + // Make sure TMP Essential Resources have been imported. + window.CheckEssentialResources(); + } + + [System.Serializable] + class FontAssetCreationSettingsContainer + { + public List fontAssetCreationSettings; + } + + FontAssetCreationSettingsContainer m_FontAssetCreationSettingsContainer; + + //static readonly string[] m_FontCreationPresets = new string[] { "Recent 1", "Recent 2", "Recent 3", "Recent 4" }; + int m_FontAssetCreationSettingsCurrentIndex = 0; + + const string k_FontAssetCreationSettingsContainerKey = "TextMeshPro.FontAssetCreator.RecentFontAssetCreationSettings.Container"; + const string k_FontAssetCreationSettingsCurrentIndexKey = "TextMeshPro.FontAssetCreator.RecentFontAssetCreationSettings.CurrentIndex"; + const float k_TwoColumnControlsWidth = 335f; + + // Diagnostics + System.Diagnostics.Stopwatch m_StopWatch; + double m_GlyphPackingGenerationTime; + double m_GlyphRenderingGenerationTime; + + string[] m_FontSizingOptions = { "Auto Sizing", "Custom Size" }; + int m_PointSizeSamplingMode; + string[] m_FontResolutionLabels = { "8", "16","32", "64", "128", "256", "512", "1024", "2048", "4096", "8192" }; + int[] m_FontAtlasResolutions = { 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192 }; + string[] m_FontCharacterSets = { "ASCII", "Extended ASCII", "ASCII Lowercase", "ASCII Uppercase", "Numbers + Symbols", "Custom Range", "Unicode Range (Hex)", "Custom Characters", "Characters from File" }; + enum FontPackingModes { Fast = 0, Optimum = 4 }; + FontPackingModes m_PackingMode = FontPackingModes.Fast; + + int m_CharacterSetSelectionMode; + + string m_CharacterSequence = ""; + string m_OutputFeedback = ""; + string m_WarningMessage; + int m_CharacterCount; + Vector2 m_ScrollPosition; + Vector2 m_OutputScrollPosition; + + bool m_IsRepaintNeeded; + + float m_AtlasGenerationProgress; + string m_AtlasGenerationProgressLabel = string.Empty; + float m_RenderingProgress; + bool m_IsRenderingDone; + bool m_IsProcessing; + bool m_IsGenerationDisabled; + bool m_IsGenerationCancelled; + + bool m_IsFontAtlasInvalid; + Object m_SourceFontFile; + TMP_FontAsset m_SelectedFontAsset; + TMP_FontAsset m_LegacyFontAsset; + TMP_FontAsset m_ReferencedFontAsset; + + TextAsset m_CharactersFromFile; + int m_PointSize; + int m_Padding = 5; + //FaceStyles m_FontStyle = FaceStyles.Normal; + //float m_FontStyleValue = 2; + + GlyphRenderMode m_GlyphRenderMode = GlyphRenderMode.SDFAA; + int m_AtlasWidth = 512; + int m_AtlasHeight = 512; + byte[] m_AtlasTextureBuffer; + Texture2D m_FontAtlasTexture; + Texture2D m_SavedFontAtlas; + + // + List m_FontGlyphTable = new List(); + List m_FontCharacterTable = new List(); + + Dictionary m_CharacterLookupMap = new Dictionary(); + Dictionary> m_GlyphLookupMap = new Dictionary>(); + + List m_GlyphsToPack = new List(); + List m_GlyphsPacked = new List(); + List m_FreeGlyphRects = new List(); + List m_UsedGlyphRects = new List(); + List m_GlyphsToRender = new List(); + List m_AvailableGlyphsToAdd = new List(); + List m_MissingCharacters = new List(); + List m_ExcludedCharacters = new List(); + + private FaceInfo m_FaceInfo; + + bool m_IncludeFontFeatures; + + + public void OnEnable() + { + // Used for Diagnostics + m_StopWatch = new System.Diagnostics.Stopwatch(); + + // Set Editor window size. + minSize = new Vector2(315, minSize.y); + + // Initialize & Get shader property IDs. + ShaderUtilities.GetShaderPropertyIDs(); + + // Load last selected preset if we are not already in the process of regenerating an existing font asset (via the Context menu) + if (EditorPrefs.HasKey(k_FontAssetCreationSettingsContainerKey)) + { + if (m_FontAssetCreationSettingsContainer == null) + m_FontAssetCreationSettingsContainer = JsonUtility.FromJson(EditorPrefs.GetString(k_FontAssetCreationSettingsContainerKey)); + + if (m_FontAssetCreationSettingsContainer.fontAssetCreationSettings != null && m_FontAssetCreationSettingsContainer.fontAssetCreationSettings.Count > 0) + { + // Load Font Asset Creation Settings preset. + if (EditorPrefs.HasKey(k_FontAssetCreationSettingsCurrentIndexKey)) + m_FontAssetCreationSettingsCurrentIndex = EditorPrefs.GetInt(k_FontAssetCreationSettingsCurrentIndexKey); + + LoadFontCreationSettings(m_FontAssetCreationSettingsContainer.fontAssetCreationSettings[m_FontAssetCreationSettingsCurrentIndex]); + } + } + + ClearGeneratedData(); + } + + + public void OnDisable() + { + //Debug.Log("TextMeshPro Editor Window has been disabled."); + + // Destroy Engine only if it has been initialized already + FontEngine.DestroyFontEngine(); + + ClearGeneratedData(); + + // Remove Glyph Report if one was created. + if (File.Exists("Assets/TextMesh Pro/Glyph Report.txt")) + { + File.Delete("Assets/TextMesh Pro/Glyph Report.txt"); + File.Delete("Assets/TextMesh Pro/Glyph Report.txt.meta"); + + AssetDatabase.Refresh(); + } + + // Save Font Asset Creation Settings Index + SaveCreationSettingsToEditorPrefs(SaveFontCreationSettings()); + EditorPrefs.SetInt(k_FontAssetCreationSettingsCurrentIndexKey, m_FontAssetCreationSettingsCurrentIndex); + + // Unregister to event + TMPro_EventManager.RESOURCE_LOAD_EVENT.Remove(ON_RESOURCES_LOADED); + + Resources.UnloadUnusedAssets(); + } + + + // Event received when TMP resources have been loaded. + void ON_RESOURCES_LOADED() + { + TMPro_EventManager.RESOURCE_LOAD_EVENT.Remove(ON_RESOURCES_LOADED); + + m_IsGenerationDisabled = false; + } + + // Make sure TMP Essential Resources have been imported. + void CheckEssentialResources() + { + if (TMP_Settings.instance == null) + { + if (m_IsGenerationDisabled == false) + TMPro_EventManager.RESOURCE_LOAD_EVENT.Add(ON_RESOURCES_LOADED); + + m_IsGenerationDisabled = true; + } + } + + + public void OnGUI() + { + GUILayout.BeginHorizontal(); + DrawControls(); + if (position.width > position.height && position.width > k_TwoColumnControlsWidth) + { + DrawPreview(); + } + GUILayout.EndHorizontal(); + } + + + public void Update() + { + if (m_IsRepaintNeeded) + { + //Debug.Log("Repainting..."); + m_IsRepaintNeeded = false; + Repaint(); + } + + // Update Progress bar is we are Rendering a Font. + if (m_IsProcessing) + { + m_AtlasGenerationProgress = FontEngine.generationProgress; + + m_IsRepaintNeeded = true; + } + + // Update Feedback Window & Create Font Texture once Rendering is done. + if (m_IsRenderingDone) + { + m_IsProcessing = false; + m_IsRenderingDone = false; + + if (m_IsGenerationCancelled == false) + { + m_AtlasGenerationProgressLabel = "Generation completed in: " + (m_GlyphPackingGenerationTime + m_GlyphRenderingGenerationTime).ToString("0.00 ms."); + + UpdateRenderFeedbackWindow(); + CreateFontAtlasTexture(); + + // If dynamic make readable ... + m_FontAtlasTexture.Apply(false, false); + } + Repaint(); + } + } + + + /// + /// Method which returns the character corresponding to a decimal value. + /// + /// + /// + static uint[] ParseNumberSequence(string sequence) + { + List unicodeList = new List(); + string[] sequences = sequence.Split(','); + + foreach (string seq in sequences) + { + string[] s1 = seq.Split('-'); + + if (s1.Length == 1) + try + { + unicodeList.Add(uint.Parse(s1[0])); + } + catch + { + Debug.Log("No characters selected or invalid format."); + } + else + { + for (uint j = uint.Parse(s1[0]); j < uint.Parse(s1[1]) + 1; j++) + { + unicodeList.Add(j); + } + } + } + + return unicodeList.ToArray(); + } + + + /// + /// Method which returns the character (decimal value) from a hex sequence. + /// + /// + /// + static uint[] ParseHexNumberSequence(string sequence) + { + List unicodeList = new List(); + string[] sequences = sequence.Split(','); + + foreach (string seq in sequences) + { + string[] s1 = seq.Split('-'); + + if (s1.Length == 1) + try + { + unicodeList.Add(uint.Parse(s1[0], NumberStyles.AllowHexSpecifier)); + } + catch + { + Debug.Log("No characters selected or invalid format."); + } + else + { + for (uint j = uint.Parse(s1[0], NumberStyles.AllowHexSpecifier); j < uint.Parse(s1[1], NumberStyles.AllowHexSpecifier) + 1; j++) + { + unicodeList.Add(j); + } + } + } + + return unicodeList.ToArray(); + } + + + void DrawControls() + { + GUILayout.Space(5f); + + if (position.width > position.height && position.width > k_TwoColumnControlsWidth) + { + m_ScrollPosition = EditorGUILayout.BeginScrollView(m_ScrollPosition, GUILayout.Width(315)); + } + else + { + m_ScrollPosition = EditorGUILayout.BeginScrollView(m_ScrollPosition); + } + + GUILayout.Space(5f); + + GUILayout.Label(m_SelectedFontAsset != null ? string.Format("Font Settings [{0}]", m_SelectedFontAsset.name) : "Font Settings", EditorStyles.boldLabel); + + EditorGUILayout.BeginVertical(EditorStyles.helpBox); + + EditorGUIUtility.labelWidth = 125f; + EditorGUIUtility.fieldWidth = 5f; + + // Disable Options if already generating a font atlas texture. + EditorGUI.BeginDisabledGroup(m_IsProcessing); + { + // FONT TTF SELECTION + EditorGUI.BeginChangeCheck(); + m_SourceFontFile = EditorGUILayout.ObjectField("Source Font File", m_SourceFontFile, typeof(Font), false) as Font; + if (EditorGUI.EndChangeCheck()) + { + m_SelectedFontAsset = null; + m_IsFontAtlasInvalid = true; + } + + // FONT SIZING + EditorGUI.BeginChangeCheck(); + if (m_PointSizeSamplingMode == 0) + { + m_PointSizeSamplingMode = EditorGUILayout.Popup("Sampling Point Size", m_PointSizeSamplingMode, m_FontSizingOptions); + } + else + { + GUILayout.BeginHorizontal(); + m_PointSizeSamplingMode = EditorGUILayout.Popup("Sampling Point Size", m_PointSizeSamplingMode, m_FontSizingOptions, GUILayout.Width(225)); + m_PointSize = EditorGUILayout.IntField(m_PointSize); + GUILayout.EndHorizontal(); + } + if (EditorGUI.EndChangeCheck()) + { + m_IsFontAtlasInvalid = true; + } + + // FONT PADDING + EditorGUI.BeginChangeCheck(); + m_Padding = EditorGUILayout.IntField("Padding", m_Padding); + m_Padding = (int)Mathf.Clamp(m_Padding, 0f, 64f); + if (EditorGUI.EndChangeCheck()) + { + m_IsFontAtlasInvalid = true; + } + + // FONT PACKING METHOD SELECTION + EditorGUI.BeginChangeCheck(); + m_PackingMode = (FontPackingModes)EditorGUILayout.EnumPopup("Packing Method", m_PackingMode); + if (EditorGUI.EndChangeCheck()) + { + m_IsFontAtlasInvalid = true; + } + + // FONT ATLAS RESOLUTION SELECTION + GUILayout.BeginHorizontal(); + GUI.changed = false; + + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PrefixLabel("Atlas Resolution"); + m_AtlasWidth = EditorGUILayout.IntPopup(m_AtlasWidth, m_FontResolutionLabels, m_FontAtlasResolutions); + m_AtlasHeight = EditorGUILayout.IntPopup(m_AtlasHeight, m_FontResolutionLabels, m_FontAtlasResolutions); + if (EditorGUI.EndChangeCheck()) + { + m_IsFontAtlasInvalid = true; + } + + GUILayout.EndHorizontal(); + + + // FONT CHARACTER SET SELECTION + EditorGUI.BeginChangeCheck(); + bool hasSelectionChanged = false; + m_CharacterSetSelectionMode = EditorGUILayout.Popup("Character Set", m_CharacterSetSelectionMode, m_FontCharacterSets); + if (EditorGUI.EndChangeCheck()) + { + m_CharacterSequence = ""; + hasSelectionChanged = true; + m_IsFontAtlasInvalid = true; + } + + switch (m_CharacterSetSelectionMode) + { + case 0: // ASCII + //characterSequence = "32 - 126, 130, 132 - 135, 139, 145 - 151, 153, 155, 161, 166 - 167, 169 - 174, 176, 181 - 183, 186 - 187, 191, 8210 - 8226, 8230, 8240, 8242 - 8244, 8249 - 8250, 8252 - 8254, 8260, 8286"; + m_CharacterSequence = "32 - 126, 160, 8203, 8230, 9633"; + break; + + case 1: // EXTENDED ASCII + m_CharacterSequence = "32 - 126, 160 - 255, 8192 - 8303, 8364, 8482, 9633"; + // Could add 9632 for missing glyph + break; + + case 2: // Lowercase + m_CharacterSequence = "32 - 64, 91 - 126, 160"; + break; + + case 3: // Uppercase + m_CharacterSequence = "32 - 96, 123 - 126, 160"; + break; + + case 4: // Numbers & Symbols + m_CharacterSequence = "32 - 64, 91 - 96, 123 - 126, 160"; + break; + + case 5: // Custom Range + EditorGUILayout.BeginVertical(EditorStyles.helpBox); + GUILayout.Label("Enter a sequence of decimal values to define the characters to be included in the font asset or retrieve one from another font asset.", TMP_UIStyleManager.label); + GUILayout.Space(10f); + + EditorGUI.BeginChangeCheck(); + m_ReferencedFontAsset = EditorGUILayout.ObjectField("Select Font Asset", m_ReferencedFontAsset, typeof(TMP_FontAsset), false) as TMP_FontAsset; + if (EditorGUI.EndChangeCheck() || hasSelectionChanged) + { + if (m_ReferencedFontAsset != null) + m_CharacterSequence = TMP_EditorUtility.GetDecimalCharacterSequence(TMP_FontAsset.GetCharactersArray(m_ReferencedFontAsset)); + + m_IsFontAtlasInvalid = true; + } + + // Filter out unwanted characters. + char chr = Event.current.character; + if ((chr < '0' || chr > '9') && (chr < ',' || chr > '-')) + { + Event.current.character = '\0'; + } + GUILayout.Label("Character Sequence (Decimal)", EditorStyles.boldLabel); + EditorGUI.BeginChangeCheck(); + m_CharacterSequence = EditorGUILayout.TextArea(m_CharacterSequence, TMP_UIStyleManager.textAreaBoxWindow, GUILayout.Height(120), GUILayout.ExpandWidth(true)); + if (EditorGUI.EndChangeCheck()) + { + m_IsFontAtlasInvalid = true; + } + + EditorGUILayout.EndVertical(); + break; + + case 6: // Unicode HEX Range + EditorGUILayout.BeginVertical(EditorStyles.helpBox); + GUILayout.Label("Enter a sequence of Unicode (hex) values to define the characters to be included in the font asset or retrieve one from another font asset.", TMP_UIStyleManager.label); + GUILayout.Space(10f); + + EditorGUI.BeginChangeCheck(); + m_ReferencedFontAsset = EditorGUILayout.ObjectField("Select Font Asset", m_ReferencedFontAsset, typeof(TMP_FontAsset), false) as TMP_FontAsset; + if (EditorGUI.EndChangeCheck() || hasSelectionChanged) + { + if (m_ReferencedFontAsset != null) + m_CharacterSequence = TMP_EditorUtility.GetUnicodeCharacterSequence(TMP_FontAsset.GetCharactersArray(m_ReferencedFontAsset)); + + m_IsFontAtlasInvalid = true; + } + + // Filter out unwanted characters. + chr = Event.current.character; + if ((chr < '0' || chr > '9') && (chr < 'a' || chr > 'f') && (chr < 'A' || chr > 'F') && (chr < ',' || chr > '-')) + { + Event.current.character = '\0'; + } + GUILayout.Label("Character Sequence (Hex)", EditorStyles.boldLabel); + EditorGUI.BeginChangeCheck(); + m_CharacterSequence = EditorGUILayout.TextArea(m_CharacterSequence, TMP_UIStyleManager.textAreaBoxWindow, GUILayout.Height(120), GUILayout.ExpandWidth(true)); + if (EditorGUI.EndChangeCheck()) + { + m_IsFontAtlasInvalid = true; + } + + EditorGUILayout.EndVertical(); + break; + + case 7: // Characters from Font Asset + EditorGUILayout.BeginVertical(EditorStyles.helpBox); + GUILayout.Label("Type the characters to be included in the font asset or retrieve them from another font asset.", TMP_UIStyleManager.label); + GUILayout.Space(10f); + + EditorGUI.BeginChangeCheck(); + m_ReferencedFontAsset = EditorGUILayout.ObjectField("Select Font Asset", m_ReferencedFontAsset, typeof(TMP_FontAsset), false) as TMP_FontAsset; + if (EditorGUI.EndChangeCheck() || hasSelectionChanged) + { + if (m_ReferencedFontAsset != null) + m_CharacterSequence = TMP_FontAsset.GetCharacters(m_ReferencedFontAsset); + + m_IsFontAtlasInvalid = true; + } + + EditorGUI.indentLevel = 0; + + GUILayout.Label("Custom Character List", EditorStyles.boldLabel); + EditorGUI.BeginChangeCheck(); + m_CharacterSequence = EditorGUILayout.TextArea(m_CharacterSequence, TMP_UIStyleManager.textAreaBoxWindow, GUILayout.Height(120), GUILayout.ExpandWidth(true)); + if (EditorGUI.EndChangeCheck()) + { + m_IsFontAtlasInvalid = true; + } + EditorGUILayout.EndVertical(); + break; + + case 8: // Character List from File + EditorGUI.BeginChangeCheck(); + m_CharactersFromFile = EditorGUILayout.ObjectField("Character File", m_CharactersFromFile, typeof(TextAsset), false) as TextAsset; + if (EditorGUI.EndChangeCheck()) + { + m_IsFontAtlasInvalid = true; + } + + if (m_CharactersFromFile != null) + { + Regex rx = new Regex(@"(? + { + if (match.Value.StartsWith("\\U")) + return char.ConvertFromUtf32(int.Parse(match.Value.Replace("\\U", ""), NumberStyles.HexNumber)); + + return char.ConvertFromUtf32(int.Parse(match.Value.Replace("\\u", ""), NumberStyles.HexNumber)); + }); + } + break; + } + + // FONT STYLE SELECTION + //GUILayout.BeginHorizontal(); + //EditorGUI.BeginChangeCheck(); + ////m_FontStyle = (FaceStyles)EditorGUILayout.EnumPopup("Font Style", m_FontStyle, GUILayout.Width(225)); + ////m_FontStyleValue = EditorGUILayout.IntField((int)m_FontStyleValue); + //if (EditorGUI.EndChangeCheck()) + //{ + // m_IsFontAtlasInvalid = true; + //} + //GUILayout.EndHorizontal(); + + // Render Mode Selection + CheckForLegacyGlyphRenderMode(); + + EditorGUI.BeginChangeCheck(); + m_GlyphRenderMode = (GlyphRenderMode)EditorGUILayout.EnumPopup("Render Mode", m_GlyphRenderMode); + if (EditorGUI.EndChangeCheck()) + { + m_IsFontAtlasInvalid = true; + } + + m_IncludeFontFeatures = EditorGUILayout.Toggle("Get Kerning Pairs", m_IncludeFontFeatures); + + EditorGUILayout.Space(); + } + + EditorGUI.EndDisabledGroup(); + + if (!string.IsNullOrEmpty(m_WarningMessage)) + { + EditorGUILayout.HelpBox(m_WarningMessage, MessageType.Warning); + } + + GUI.enabled = m_SourceFontFile != null && !m_IsProcessing && !m_IsGenerationDisabled; // Enable Preview if we are not already rendering a font. + if (GUILayout.Button("Generate Font Atlas") && GUI.enabled) + { + if (!m_IsProcessing && m_SourceFontFile != null) + { + DestroyImmediate(m_FontAtlasTexture); + m_FontAtlasTexture = null; + m_SavedFontAtlas = null; + + // Initialize font engine + FontEngineError errorCode = FontEngine.InitializeFontEngine(); + if (errorCode != FontEngineError.Success) + { + Debug.Log("Font Asset Creator - Error [" + errorCode + "] has occurred while Initializing the FreeType Library."); + } + + // Get file path of the source font file. + string fontPath = AssetDatabase.GetAssetPath(m_SourceFontFile); + + if (errorCode == FontEngineError.Success) + { + errorCode = FontEngine.LoadFontFace(fontPath); + + if (errorCode != FontEngineError.Success) + { + Debug.Log("Font Asset Creator - Error Code [" + errorCode + "] has occurred trying to load the [" + m_SourceFontFile.name + "] font file. This typically results from the use of an incompatible or corrupted font file."); + } + } + + + // Define an array containing the characters we will render. + if (errorCode == FontEngineError.Success) + { + uint[] characterSet = null; + + // Get list of characters that need to be packed and rendered to the atlas texture. + if (m_CharacterSetSelectionMode == 7 || m_CharacterSetSelectionMode == 8) + { + List char_List = new List(); + + for (int i = 0; i < m_CharacterSequence.Length; i++) + { + uint unicode = m_CharacterSequence[i]; + + // Handle surrogate pairs + if (i < m_CharacterSequence.Length - 1 && char.IsHighSurrogate((char)unicode) && char.IsLowSurrogate(m_CharacterSequence[i + 1])) + { + unicode = (uint)char.ConvertToUtf32(m_CharacterSequence[i], m_CharacterSequence[i + 1]); + i += 1; + } + + // Check to make sure we don't include duplicates + if (char_List.FindIndex(item => item == unicode) == -1) + char_List.Add(unicode); + } + + characterSet = char_List.ToArray(); + } + else if (m_CharacterSetSelectionMode == 6) + { + characterSet = ParseHexNumberSequence(m_CharacterSequence); + } + else + { + characterSet = ParseNumberSequence(m_CharacterSequence); + } + + m_CharacterCount = characterSet.Length; + + m_AtlasGenerationProgress = 0; + m_IsProcessing = true; + m_IsGenerationCancelled = false; + + GlyphLoadFlags glyphLoadFlags = ((GlyphRasterModes)m_GlyphRenderMode & GlyphRasterModes.RASTER_MODE_HINTED) == GlyphRasterModes.RASTER_MODE_HINTED ? GlyphLoadFlags.LOAD_RENDER : GlyphLoadFlags.LOAD_RENDER | GlyphLoadFlags.LOAD_NO_HINTING; + + // + AutoResetEvent autoEvent = new AutoResetEvent(false); + + // Worker thread to pack glyphs in the given texture space. + ThreadPool.QueueUserWorkItem(PackGlyphs => + { + // Start Stop Watch + m_StopWatch = System.Diagnostics.Stopwatch.StartNew(); + + // Clear the various lists used in the generation process. + m_AvailableGlyphsToAdd.Clear(); + m_MissingCharacters.Clear(); + m_ExcludedCharacters.Clear(); + m_CharacterLookupMap.Clear(); + m_GlyphLookupMap.Clear(); + m_GlyphsToPack.Clear(); + m_GlyphsPacked.Clear(); + + // Check if requested characters are available in the source font file. + for (int i = 0; i < characterSet.Length; i++) + { + uint unicode = characterSet[i]; + + if (FontEngine.TryGetGlyphIndex(unicode, out uint glyphIndex)) + { + // Skip over potential duplicate characters. + if (m_CharacterLookupMap.ContainsKey(unicode)) + continue; + + // Add character to character lookup map. + m_CharacterLookupMap.Add(unicode, glyphIndex); + + // Skip over potential duplicate glyph references. + if (m_GlyphLookupMap.ContainsKey(glyphIndex)) + { + // Add additional glyph reference for this character. + m_GlyphLookupMap[glyphIndex].Add(unicode); + continue; + } + + // Add glyph reference to glyph lookup map. + m_GlyphLookupMap.Add(glyphIndex, new List() { unicode }); + + // Add glyph index to list of glyphs to add to texture. + m_AvailableGlyphsToAdd.Add(glyphIndex); + } + else + { + // Add Unicode to list of missing characters. + m_MissingCharacters.Add(unicode); + } + } + + // Pack available glyphs in the provided texture space. + if (m_AvailableGlyphsToAdd.Count > 0) + { + int packingModifier = ((GlyphRasterModes)m_GlyphRenderMode & GlyphRasterModes.RASTER_MODE_BITMAP) == GlyphRasterModes.RASTER_MODE_BITMAP ? 0 : 1; + + if (m_PointSizeSamplingMode == 0) // Auto-Sizing Point Size Mode + { + // Estimate min / max range for auto sizing of point size. + int minPointSize = 0; + int maxPointSize = (int)Mathf.Sqrt((m_AtlasWidth * m_AtlasHeight) / m_AvailableGlyphsToAdd.Count) * 3; + + m_PointSize = (maxPointSize + minPointSize) / 2; + + bool optimumPointSizeFound = false; + for (int iteration = 0; iteration < 15 && optimumPointSizeFound == false; iteration++) + { + m_AtlasGenerationProgressLabel = "Packing glyphs - Pass (" + iteration + ")"; + + FontEngine.SetFaceSize(m_PointSize); + + m_GlyphsToPack.Clear(); + m_GlyphsPacked.Clear(); + + m_FreeGlyphRects.Clear(); + m_FreeGlyphRects.Add(new GlyphRect(0, 0, m_AtlasWidth - packingModifier, m_AtlasHeight - packingModifier)); + m_UsedGlyphRects.Clear(); + + for (int i = 0; i < m_AvailableGlyphsToAdd.Count; i++) + { + uint glyphIndex = m_AvailableGlyphsToAdd[i]; + + if (FontEngine.TryGetGlyphWithIndexValue(glyphIndex, glyphLoadFlags, out Glyph glyph)) + { + if (glyph.glyphRect.width > 0 && glyph.glyphRect.height > 0) + { + m_GlyphsToPack.Add(glyph); + } + else + { + m_GlyphsPacked.Add(glyph); + } + } + } + + FontEngine.TryPackGlyphsInAtlas(m_GlyphsToPack, m_GlyphsPacked, m_Padding, (GlyphPackingMode)m_PackingMode, m_GlyphRenderMode, m_AtlasWidth, m_AtlasHeight, m_FreeGlyphRects, m_UsedGlyphRects); + + if (m_IsGenerationCancelled) + { + DestroyImmediate(m_FontAtlasTexture); + m_FontAtlasTexture = null; + return; + } + + //Debug.Log("Glyphs remaining to add [" + m_GlyphsToAdd.Count + "]. Glyphs added [" + m_GlyphsAdded.Count + "]."); + + if (m_GlyphsToPack.Count > 0) + { + if (m_PointSize > minPointSize) + { + maxPointSize = m_PointSize; + m_PointSize = (m_PointSize + minPointSize) / 2; + + //Debug.Log("Decreasing point size from [" + maxPointSize + "] to [" + m_PointSize + "]."); + } + } + else + { + if (maxPointSize - minPointSize > 1 && m_PointSize < maxPointSize) + { + minPointSize = m_PointSize; + m_PointSize = (m_PointSize + maxPointSize) / 2; + + //Debug.Log("Increasing point size from [" + minPointSize + "] to [" + m_PointSize + "]."); + } + else + { + //Debug.Log("[" + iteration + "] iterations to find the optimum point size of : [" + m_PointSize + "]."); + optimumPointSizeFound = true; + } + } + } + } + else // Custom Point Size Mode + { + m_AtlasGenerationProgressLabel = "Packing glyphs..."; + + // Set point size + FontEngine.SetFaceSize(m_PointSize); + + m_GlyphsToPack.Clear(); + m_GlyphsPacked.Clear(); + + m_FreeGlyphRects.Clear(); + m_FreeGlyphRects.Add(new GlyphRect(0, 0, m_AtlasWidth - packingModifier, m_AtlasHeight - packingModifier)); + m_UsedGlyphRects.Clear(); + + for (int i = 0; i < m_AvailableGlyphsToAdd.Count; i++) + { + uint glyphIndex = m_AvailableGlyphsToAdd[i]; + + if (FontEngine.TryGetGlyphWithIndexValue(glyphIndex, glyphLoadFlags, out Glyph glyph)) + { + if (glyph.glyphRect.width > 0 && glyph.glyphRect.height > 0) + { + m_GlyphsToPack.Add(glyph); + } + else + { + m_GlyphsPacked.Add(glyph); + } + } + } + + FontEngine.TryPackGlyphsInAtlas(m_GlyphsToPack, m_GlyphsPacked, m_Padding, (GlyphPackingMode)m_PackingMode, m_GlyphRenderMode, m_AtlasWidth, m_AtlasHeight, m_FreeGlyphRects, m_UsedGlyphRects); + + if (m_IsGenerationCancelled) + { + DestroyImmediate(m_FontAtlasTexture); + m_FontAtlasTexture = null; + return; + } + //Debug.Log("Glyphs remaining to add [" + m_GlyphsToAdd.Count + "]. Glyphs added [" + m_GlyphsAdded.Count + "]."); + } + + } + else + { + int packingModifier = ((GlyphRasterModes)m_GlyphRenderMode & GlyphRasterModes.RASTER_MODE_BITMAP) == GlyphRasterModes.RASTER_MODE_BITMAP ? 0 : 1; + + FontEngine.SetFaceSize(m_PointSize); + + m_GlyphsToPack.Clear(); + m_GlyphsPacked.Clear(); + + m_FreeGlyphRects.Clear(); + m_FreeGlyphRects.Add(new GlyphRect(0, 0, m_AtlasWidth - packingModifier, m_AtlasHeight - packingModifier)); + m_UsedGlyphRects.Clear(); + } + + //Stop StopWatch + m_StopWatch.Stop(); + m_GlyphPackingGenerationTime = m_StopWatch.Elapsed.TotalMilliseconds; + Debug.Log("Glyph packing completed in: " + m_GlyphPackingGenerationTime.ToString("0.000 ms.")); + m_StopWatch.Reset(); + + m_FontCharacterTable.Clear(); + m_FontGlyphTable.Clear(); + m_GlyphsToRender.Clear(); + + // Add glyphs and characters successfully added to texture to their respective font tables. + foreach (Glyph glyph in m_GlyphsPacked) + { + uint glyphIndex = glyph.index; + + m_FontGlyphTable.Add(glyph); + + // Add glyphs to list of glyphs that need to be rendered. + if (glyph.glyphRect.width > 0 && glyph.glyphRect.height > 0) + m_GlyphsToRender.Add(glyph); + + foreach (uint unicode in m_GlyphLookupMap[glyphIndex]) + { + // Create new Character + m_FontCharacterTable.Add(new TMP_Character(unicode, glyph)); + } + } + + // + foreach (Glyph glyph in m_GlyphsToPack) + { + foreach (uint unicode in m_GlyphLookupMap[glyph.index]) + { + m_ExcludedCharacters.Add(unicode); + } + } + + // Get the face info for the current sampling point size. + m_FaceInfo = FontEngine.GetFaceInfo(); + + autoEvent.Set(); + }); + + // Worker thread to render glyphs in texture buffer. + ThreadPool.QueueUserWorkItem(RenderGlyphs => + { + autoEvent.WaitOne(); + + // Start Stop Watch + m_StopWatch = System.Diagnostics.Stopwatch.StartNew(); + + m_IsRenderingDone = false; + + // Allocate texture data + m_AtlasTextureBuffer = new byte[m_AtlasWidth * m_AtlasHeight]; + + m_AtlasGenerationProgressLabel = "Rendering glyphs..."; + + // Render and add glyphs to the given atlas texture. + if (m_GlyphsToRender.Count > 0) + { + FontEngine.RenderGlyphsToTexture(m_GlyphsToRender, m_Padding, m_GlyphRenderMode, m_AtlasTextureBuffer, m_AtlasWidth, m_AtlasHeight); + } + + m_IsRenderingDone = true; + + // Stop StopWatch + m_StopWatch.Stop(); + m_GlyphRenderingGenerationTime = m_StopWatch.Elapsed.TotalMilliseconds; + Debug.Log("Font Atlas generation completed in: " + m_GlyphRenderingGenerationTime.ToString("0.000 ms.")); + m_StopWatch.Reset(); + }); + } + + SaveCreationSettingsToEditorPrefs(SaveFontCreationSettings()); + } + } + + // FONT RENDERING PROGRESS BAR + GUILayout.Space(1); + Rect progressRect = EditorGUILayout.GetControlRect(false, 20); + + GUI.enabled = true; + progressRect.width -= 22; + EditorGUI.ProgressBar(progressRect, Mathf.Max(0.01f, m_AtlasGenerationProgress), m_AtlasGenerationProgressLabel); + progressRect.x = progressRect.x + progressRect.width + 2; + progressRect.y -= 1; + progressRect.width = 20; + progressRect.height = 20; + + GUI.enabled = m_IsProcessing; + if (GUI.Button(progressRect, "X")) + { + FontEngine.SendCancellationRequest(); + m_AtlasGenerationProgress = 0; + m_IsProcessing = false; + m_IsGenerationCancelled = true; + } + GUILayout.Space(5); + + // FONT STATUS & INFORMATION + GUI.enabled = true; + + GUILayout.BeginVertical(EditorStyles.helpBox, GUILayout.Height(200)); + m_OutputScrollPosition = EditorGUILayout.BeginScrollView(m_OutputScrollPosition); + EditorGUILayout.LabelField(m_OutputFeedback, TMP_UIStyleManager.label); + EditorGUILayout.EndScrollView(); + GUILayout.EndVertical(); + + // SAVE TEXTURE & CREATE and SAVE FONT XML FILE + GUI.enabled = m_FontAtlasTexture != null && !m_IsProcessing; // Enable Save Button if font_Atlas is not Null. + + EditorGUILayout.BeginHorizontal(); + + if (GUILayout.Button("Save") && GUI.enabled) + { + if (m_SelectedFontAsset == null) + { + if (m_LegacyFontAsset != null) + SaveNewFontAssetWithSameName(m_LegacyFontAsset); + else + SaveNewFontAsset(m_SourceFontFile); + } + else + { + // Save over exiting Font Asset + string filePath = Path.GetFullPath(AssetDatabase.GetAssetPath(m_SelectedFontAsset)).Replace('\\', '/'); + + if (((GlyphRasterModes)m_GlyphRenderMode & GlyphRasterModes.RASTER_MODE_BITMAP) == GlyphRasterModes.RASTER_MODE_BITMAP) + Save_Bitmap_FontAsset(filePath); + else + Save_SDF_FontAsset(filePath); + } + } + if (GUILayout.Button("Save as...") && GUI.enabled) + { + if (m_SelectedFontAsset == null) + { + SaveNewFontAsset(m_SourceFontFile); + } + else + { + SaveNewFontAssetWithSameName(m_SelectedFontAsset); + } + } + + EditorGUILayout.EndHorizontal(); + + EditorGUILayout.Space(); + + EditorGUILayout.EndVertical(); + + GUI.enabled = true; // Re-enable GUI + + if (position.height > position.width || position.width < k_TwoColumnControlsWidth) + { + DrawPreview(); + GUILayout.Space(5); + } + + EditorGUILayout.EndScrollView(); + + if (m_IsFontAtlasInvalid) + ClearGeneratedData(); + } + + + /// + /// Clear the previously generated data. + /// + void ClearGeneratedData() + { + m_IsFontAtlasInvalid = false; + + if (m_FontAtlasTexture != null && !EditorUtility.IsPersistent(m_FontAtlasTexture)) + { + DestroyImmediate(m_FontAtlasTexture); + m_FontAtlasTexture = null; + } + + m_AtlasGenerationProgressLabel = string.Empty; + m_AtlasGenerationProgress = 0; + m_SavedFontAtlas = null; + + m_OutputFeedback = string.Empty; + m_WarningMessage = string.Empty; + } + + + /// + /// Function to update the feedback window showing the results of the latest generation. + /// + void UpdateRenderFeedbackWindow() + { + m_PointSize = m_FaceInfo.pointSize; + + string missingGlyphReport = string.Empty; + + //string colorTag = m_FontCharacterTable.Count == m_CharacterCount ? "" : ""; + string colorTag2 = ""; + + missingGlyphReport = "Font: " + colorTag2 + m_FaceInfo.familyName + " Style: " + colorTag2 + m_FaceInfo.styleName + ""; + + missingGlyphReport += "\nPoint Size: " + colorTag2 + m_FaceInfo.pointSize + " SP/PD Ratio: " + colorTag2 + ((float)m_Padding / m_FaceInfo.pointSize).ToString("0.0%" + ""); + + missingGlyphReport += "\n\nCharacters included: " + m_FontCharacterTable.Count + "/" + m_CharacterCount + ""; + missingGlyphReport += "\nMissing characters: " + m_MissingCharacters.Count + ""; + missingGlyphReport += "\nExcluded characters: " + m_ExcludedCharacters.Count + ""; + + // Report characters missing from font file + missingGlyphReport += "\n\nCharacters missing from font file:"; + missingGlyphReport += "\n----------------------------------------"; + + m_OutputFeedback = missingGlyphReport; + + for (int i = 0; i < m_MissingCharacters.Count; i++) + { + missingGlyphReport += "\nID: " + m_MissingCharacters[i] + "\tHex: " + m_MissingCharacters[i].ToString("X") + "\tChar [" + (char)m_MissingCharacters[i] + "]"; + + if (missingGlyphReport.Length < 16300) + m_OutputFeedback = missingGlyphReport; + } + + // Report characters that did not fit in the atlas texture + missingGlyphReport += "\n\nCharacters excluded from packing:"; + missingGlyphReport += "\n----------------------------------------"; + + for (int i = 0; i < m_ExcludedCharacters.Count; i++) + { + missingGlyphReport += "\nID: " + m_ExcludedCharacters[i] + "\tHex: " + m_ExcludedCharacters[i].ToString("X") + "\tChar [" + (char)m_ExcludedCharacters[i] + "]"; + + if (missingGlyphReport.Length < 16300) + m_OutputFeedback = missingGlyphReport; + } + + if (missingGlyphReport.Length > 16300) + m_OutputFeedback += "\n\nReport truncated.\nSee \"TextMesh Pro\\Glyph Report.txt\""; + + // Save Missing Glyph Report file + if (Directory.Exists("Assets/TextMesh Pro")) + { + missingGlyphReport = System.Text.RegularExpressions.Regex.Replace(missingGlyphReport, @"<[^>]*>", string.Empty); + File.WriteAllText("Assets/TextMesh Pro/Glyph Report.txt", missingGlyphReport); + AssetDatabase.Refresh(); + } + } + + + void CreateFontAtlasTexture() + { + if (m_FontAtlasTexture != null) + DestroyImmediate(m_FontAtlasTexture); + + m_FontAtlasTexture = new Texture2D(m_AtlasWidth, m_AtlasHeight, TextureFormat.Alpha8, false, true); + + Color32[] colors = new Color32[m_AtlasWidth * m_AtlasHeight]; + + for (int i = 0; i < colors.Length; i++) + { + byte c = m_AtlasTextureBuffer[i]; + colors[i] = new Color32(c, c, c, c); + } + + // Clear allocation of + m_AtlasTextureBuffer = null; + + if ((m_GlyphRenderMode & GlyphRenderMode.RASTER) == GlyphRenderMode.RASTER || (m_GlyphRenderMode & GlyphRenderMode.RASTER_HINTED) == GlyphRenderMode.RASTER_HINTED) + m_FontAtlasTexture.filterMode = FilterMode.Point; + + m_FontAtlasTexture.SetPixels32(colors, 0); + m_FontAtlasTexture.Apply(false, false); + + // Saving File for Debug + //var pngData = m_FontAtlasTexture.EncodeToPNG(); + //File.WriteAllBytes("Assets/Textures/Debug Font Texture.png", pngData); + } + + + /// + /// Open Save Dialog to provide the option save the font asset using the name of the source font file. This also appends SDF to the name if using any of the SDF Font Asset creation modes. + /// + /// + void SaveNewFontAsset(Object sourceObject) + { + string filePath; + + // Save new Font Asset and open save file requester at Source Font File location. + string saveDirectory = new FileInfo(AssetDatabase.GetAssetPath(sourceObject)).DirectoryName; + + if (((GlyphRasterModes)m_GlyphRenderMode & GlyphRasterModes.RASTER_MODE_BITMAP) == GlyphRasterModes.RASTER_MODE_BITMAP) + { + filePath = EditorUtility.SaveFilePanel("Save TextMesh Pro! Font Asset File", saveDirectory, sourceObject.name, "asset"); + + if (filePath.Length == 0) + return; + + Save_Bitmap_FontAsset(filePath); + } + else + { + filePath = EditorUtility.SaveFilePanel("Save TextMesh Pro! Font Asset File", saveDirectory, sourceObject.name + " SDF", "asset"); + + if (filePath.Length == 0) + return; + + Save_SDF_FontAsset(filePath); + } + } + + + /// + /// Open Save Dialog to provide the option to save the font asset under the same name. + /// + /// + void SaveNewFontAssetWithSameName(Object sourceObject) + { + string filePath; + + // Save new Font Asset and open save file requester at Source Font File location. + string saveDirectory = new FileInfo(AssetDatabase.GetAssetPath(sourceObject)).DirectoryName; + + filePath = EditorUtility.SaveFilePanel("Save TextMesh Pro! Font Asset File", saveDirectory, sourceObject.name, "asset"); + + if (filePath.Length == 0) + return; + + if (((GlyphRasterModes)m_GlyphRenderMode & GlyphRasterModes.RASTER_MODE_BITMAP) == GlyphRasterModes.RASTER_MODE_BITMAP) + { + Save_Bitmap_FontAsset(filePath); + } + else + { + Save_SDF_FontAsset(filePath); + } + } + + + void Save_Bitmap_FontAsset(string filePath) + { + filePath = filePath.Substring(0, filePath.Length - 6); // Trim file extension from filePath. + + string dataPath = Application.dataPath; + + if (filePath.IndexOf(dataPath, System.StringComparison.InvariantCultureIgnoreCase) == -1) + { + Debug.LogError("You're saving the font asset in a directory outside of this project folder. This is not supported. Please select a directory under \"" + dataPath + "\""); + return; + } + + string relativeAssetPath = filePath.Substring(dataPath.Length - 6); + string tex_DirName = Path.GetDirectoryName(relativeAssetPath); + string tex_FileName = Path.GetFileNameWithoutExtension(relativeAssetPath); + string tex_Path_NoExt = tex_DirName + "/" + tex_FileName; + + // Check if TextMeshPro font asset already exists. If not, create a new one. Otherwise update the existing one. + TMP_FontAsset fontAsset = AssetDatabase.LoadAssetAtPath(tex_Path_NoExt + ".asset", typeof(TMP_FontAsset)) as TMP_FontAsset; + if (fontAsset == null) + { + //Debug.Log("Creating TextMeshPro font asset!"); + fontAsset = ScriptableObject.CreateInstance(); // Create new TextMeshPro Font Asset. + AssetDatabase.CreateAsset(fontAsset, tex_Path_NoExt + ".asset"); + + // Set version number of font asset + fontAsset.version = "1.1.0"; + + //Set Font Asset Type + fontAsset.atlasRenderMode = m_GlyphRenderMode; + + // Reference to the source font file GUID. + fontAsset.m_SourceFontFileGUID = AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(m_SourceFontFile)); + + // Add FaceInfo to Font Asset + fontAsset.faceInfo = m_FaceInfo; + + // Add GlyphInfo[] to Font Asset + fontAsset.glyphTable = m_FontGlyphTable; + + // Add CharacterTable[] to font asset. + fontAsset.characterTable = m_FontCharacterTable; + + // Sort glyph and character tables. + fontAsset.SortGlyphAndCharacterTables(); + + // Get and Add Kerning Pairs to Font Asset + if (m_IncludeFontFeatures) + fontAsset.fontFeatureTable = GetKerningTable(); + + + // Add Font Atlas as Sub-Asset + fontAsset.atlasTextures = new Texture2D[] { m_FontAtlasTexture }; + m_FontAtlasTexture.name = tex_FileName + " Atlas"; + fontAsset.atlasWidth = m_AtlasWidth; + fontAsset.atlasHeight = m_AtlasHeight; + fontAsset.atlasPadding = m_Padding; + + AssetDatabase.AddObjectToAsset(m_FontAtlasTexture, fontAsset); + + // Create new Material and Add it as Sub-Asset + Shader default_Shader = Shader.Find("TextMeshPro/Bitmap"); // m_shaderSelection; + Material tmp_material = new Material(default_Shader); + tmp_material.name = tex_FileName + " Material"; + tmp_material.SetTexture(ShaderUtilities.ID_MainTex, m_FontAtlasTexture); + fontAsset.material = tmp_material; + + AssetDatabase.AddObjectToAsset(tmp_material, fontAsset); + + } + else + { + // Find all Materials referencing this font atlas. + Material[] material_references = TMP_EditorUtility.FindMaterialReferences(fontAsset); + + // Set version number of font asset + fontAsset.version = "1.1.0"; + + // Special handling to remove legacy font asset data + if (fontAsset.m_glyphInfoList != null && fontAsset.m_glyphInfoList.Count > 0) + fontAsset.m_glyphInfoList = null; + + // Destroy Assets that will be replaced. + if (fontAsset.atlasTextures != null && fontAsset.atlasTextures.Length > 0) + DestroyImmediate(fontAsset.atlasTextures[0], true); + + //Set Font Asset Type + fontAsset.atlasRenderMode = m_GlyphRenderMode; + + // Add FaceInfo to Font Asset + fontAsset.faceInfo = m_FaceInfo; + + // Add GlyphInfo[] to Font Asset + fontAsset.glyphTable = m_FontGlyphTable; + + // Add CharacterTable[] to font asset. + fontAsset.characterTable = m_FontCharacterTable; + + // Sort glyph and character tables. + fontAsset.SortGlyphAndCharacterTables(); + + // Get and Add Kerning Pairs to Font Asset + if (m_IncludeFontFeatures) + fontAsset.fontFeatureTable = GetKerningTable(); + + // Add Font Atlas as Sub-Asset + fontAsset.atlasTextures = new Texture2D[] { m_FontAtlasTexture }; + m_FontAtlasTexture.name = tex_FileName + " Atlas"; + fontAsset.atlasWidth = m_AtlasWidth; + fontAsset.atlasHeight = m_AtlasHeight; + fontAsset.atlasPadding = m_Padding; + + // Special handling due to a bug in earlier versions of Unity. + m_FontAtlasTexture.hideFlags = HideFlags.None; + fontAsset.material.hideFlags = HideFlags.None; + + AssetDatabase.AddObjectToAsset(m_FontAtlasTexture, fontAsset); + + // Assign new font atlas texture to the existing material. + fontAsset.material.SetTexture(ShaderUtilities.ID_MainTex, fontAsset.atlasTextures[0]); + + // Update the Texture reference on the Material + for (int i = 0; i < material_references.Length; i++) + { + material_references[i].SetTexture(ShaderUtilities.ID_MainTex, m_FontAtlasTexture); + } + } + + // Add list of GlyphRects to font asset. + fontAsset.freeGlyphRects = m_FreeGlyphRects; + fontAsset.usedGlyphRects = m_UsedGlyphRects; + + // Save Font Asset creation settings + m_SelectedFontAsset = fontAsset; + m_LegacyFontAsset = null; + fontAsset.creationSettings = SaveFontCreationSettings(); + + AssetDatabase.SaveAssets(); + + AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(fontAsset)); // Re-import font asset to get the new updated version. + + //EditorUtility.SetDirty(font_asset); + fontAsset.ReadFontAssetDefinition(); + + AssetDatabase.Refresh(); + + m_FontAtlasTexture = null; + + // NEED TO GENERATE AN EVENT TO FORCE A REDRAW OF ANY TEXTMESHPRO INSTANCES THAT MIGHT BE USING THIS FONT ASSET + TMPro_EventManager.ON_FONT_PROPERTY_CHANGED(true, fontAsset); + } + + + void Save_SDF_FontAsset(string filePath) + { + filePath = filePath.Substring(0, filePath.Length - 6); // Trim file extension from filePath. + + string dataPath = Application.dataPath; + + if (filePath.IndexOf(dataPath, System.StringComparison.InvariantCultureIgnoreCase) == -1) + { + Debug.LogError("You're saving the font asset in a directory outside of this project folder. This is not supported. Please select a directory under \"" + dataPath + "\""); + return; + } + + string relativeAssetPath = filePath.Substring(dataPath.Length - 6); + string tex_DirName = Path.GetDirectoryName(relativeAssetPath); + string tex_FileName = Path.GetFileNameWithoutExtension(relativeAssetPath); + string tex_Path_NoExt = tex_DirName + "/" + tex_FileName; + + + // Check if TextMeshPro font asset already exists. If not, create a new one. Otherwise update the existing one. + TMP_FontAsset fontAsset = AssetDatabase.LoadAssetAtPath(tex_Path_NoExt + ".asset"); + if (fontAsset == null) + { + //Debug.Log("Creating TextMeshPro font asset!"); + fontAsset = ScriptableObject.CreateInstance(); // Create new TextMeshPro Font Asset. + AssetDatabase.CreateAsset(fontAsset, tex_Path_NoExt + ".asset"); + + // Set version number of font asset + fontAsset.version = "1.1.0"; + + // Reference to source font file GUID. + fontAsset.m_SourceFontFileGUID = AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(m_SourceFontFile)); + + //Set Font Asset Type + fontAsset.atlasRenderMode = m_GlyphRenderMode; + + // Add FaceInfo to Font Asset + fontAsset.faceInfo = m_FaceInfo; + + // Add GlyphInfo[] to Font Asset + fontAsset.glyphTable = m_FontGlyphTable; + + // Add CharacterTable[] to font asset. + fontAsset.characterTable = m_FontCharacterTable; + + // Sort glyph and character tables. + fontAsset.SortGlyphAndCharacterTables(); + + // Get and Add Kerning Pairs to Font Asset + if (m_IncludeFontFeatures) + fontAsset.fontFeatureTable = GetKerningTable(); + + // Add Font Atlas as Sub-Asset + fontAsset.atlasTextures = new Texture2D[] { m_FontAtlasTexture }; + m_FontAtlasTexture.name = tex_FileName + " Atlas"; + fontAsset.atlasWidth = m_AtlasWidth; + fontAsset.atlasHeight = m_AtlasHeight; + fontAsset.atlasPadding = m_Padding; + + AssetDatabase.AddObjectToAsset(m_FontAtlasTexture, fontAsset); + + // Create new Material and Add it as Sub-Asset + Shader default_Shader = Shader.Find("TextMeshPro/Distance Field"); + Material tmp_material = new Material(default_Shader); + + tmp_material.name = tex_FileName + " Material"; + tmp_material.SetTexture(ShaderUtilities.ID_MainTex, m_FontAtlasTexture); + tmp_material.SetFloat(ShaderUtilities.ID_TextureWidth, m_FontAtlasTexture.width); + tmp_material.SetFloat(ShaderUtilities.ID_TextureHeight, m_FontAtlasTexture.height); + + int spread = m_Padding + 1; + tmp_material.SetFloat(ShaderUtilities.ID_GradientScale, spread); // Spread = Padding for Brute Force SDF. + + tmp_material.SetFloat(ShaderUtilities.ID_WeightNormal, fontAsset.normalStyle); + tmp_material.SetFloat(ShaderUtilities.ID_WeightBold, fontAsset.boldStyle); + + fontAsset.material = tmp_material; + + AssetDatabase.AddObjectToAsset(tmp_material, fontAsset); + + } + else + { + // Find all Materials referencing this font atlas. + Material[] material_references = TMP_EditorUtility.FindMaterialReferences(fontAsset); + + // Destroy Assets that will be replaced. + if (fontAsset.atlasTextures != null && fontAsset.atlasTextures.Length > 0) + DestroyImmediate(fontAsset.atlasTextures[0], true); + + // Set version number of font asset + fontAsset.version = "1.1.0"; + + // Special handling to remove legacy font asset data + if (fontAsset.m_glyphInfoList != null && fontAsset.m_glyphInfoList.Count > 0) + fontAsset.m_glyphInfoList = null; + + //Set Font Asset Type + fontAsset.atlasRenderMode = m_GlyphRenderMode; + + // Add FaceInfo to Font Asset + fontAsset.faceInfo = m_FaceInfo; + + // Add GlyphInfo[] to Font Asset + fontAsset.glyphTable = m_FontGlyphTable; + + // Add CharacterTable[] to font asset. + fontAsset.characterTable = m_FontCharacterTable; + + // Sort glyph and character tables. + fontAsset.SortGlyphAndCharacterTables(); + + // Get and Add Kerning Pairs to Font Asset + // TODO: Check and preserve existing adjustment pairs. + if (m_IncludeFontFeatures) + fontAsset.fontFeatureTable = GetKerningTable(); + + // Add Font Atlas as Sub-Asset + fontAsset.atlasTextures = new Texture2D[] { m_FontAtlasTexture }; + m_FontAtlasTexture.name = tex_FileName + " Atlas"; + fontAsset.atlasWidth = m_AtlasWidth; + fontAsset.atlasHeight = m_AtlasHeight; + fontAsset.atlasPadding = m_Padding; + + // Special handling due to a bug in earlier versions of Unity. + m_FontAtlasTexture.hideFlags = HideFlags.None; + fontAsset.material.hideFlags = HideFlags.None; + + AssetDatabase.AddObjectToAsset(m_FontAtlasTexture, fontAsset); + + // Assign new font atlas texture to the existing material. + fontAsset.material.SetTexture(ShaderUtilities.ID_MainTex, fontAsset.atlasTextures[0]); + + // Update the Texture reference on the Material + for (int i = 0; i < material_references.Length; i++) + { + material_references[i].SetTexture(ShaderUtilities.ID_MainTex, m_FontAtlasTexture); + material_references[i].SetFloat(ShaderUtilities.ID_TextureWidth, m_FontAtlasTexture.width); + material_references[i].SetFloat(ShaderUtilities.ID_TextureHeight, m_FontAtlasTexture.height); + + int spread = m_Padding + 1; + material_references[i].SetFloat(ShaderUtilities.ID_GradientScale, spread); // Spread = Padding for Brute Force SDF. + + material_references[i].SetFloat(ShaderUtilities.ID_WeightNormal, fontAsset.normalStyle); + material_references[i].SetFloat(ShaderUtilities.ID_WeightBold, fontAsset.boldStyle); + } + } + + // Saving File for Debug + //var pngData = destination_Atlas.EncodeToPNG(); + //File.WriteAllBytes("Assets/Textures/Debug Distance Field.png", pngData); + + // Add list of GlyphRects to font asset. + fontAsset.freeGlyphRects = m_FreeGlyphRects; + fontAsset.usedGlyphRects = m_UsedGlyphRects; + + // Save Font Asset creation settings + m_SelectedFontAsset = fontAsset; + m_LegacyFontAsset = null; + fontAsset.creationSettings = SaveFontCreationSettings(); + + AssetDatabase.SaveAssets(); + + AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(fontAsset)); // Re-import font asset to get the new updated version. + + fontAsset.ReadFontAssetDefinition(); + + AssetDatabase.Refresh(); + + m_FontAtlasTexture = null; + + // NEED TO GENERATE AN EVENT TO FORCE A REDRAW OF ANY TEXTMESHPRO INSTANCES THAT MIGHT BE USING THIS FONT ASSET + TMPro_EventManager.ON_FONT_PROPERTY_CHANGED(true, fontAsset); + } + + + /// + /// Internal method to save the Font Asset Creation Settings + /// + /// + FontAssetCreationSettings SaveFontCreationSettings() + { + FontAssetCreationSettings settings = new FontAssetCreationSettings(); + + //settings.sourceFontFileName = m_SourceFontFile.name; + settings.sourceFontFileGUID = AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(m_SourceFontFile)); + settings.pointSizeSamplingMode = m_PointSizeSamplingMode; + settings.pointSize = m_PointSize; + settings.padding = m_Padding; + settings.packingMode = (int)m_PackingMode; + settings.atlasWidth = m_AtlasWidth; + settings.atlasHeight = m_AtlasHeight; + settings.characterSetSelectionMode = m_CharacterSetSelectionMode; + settings.characterSequence = m_CharacterSequence; + settings.referencedFontAssetGUID = AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(m_ReferencedFontAsset)); + settings.referencedTextAssetGUID = AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(m_CharactersFromFile)); + //settings.fontStyle = (int)m_FontStyle; + //settings.fontStyleModifier = m_FontStyleValue; + settings.renderMode = (int)m_GlyphRenderMode; + settings.includeFontFeatures = m_IncludeFontFeatures; + + return settings; + } + + + /// + /// Internal method to load the Font Asset Creation Settings + /// + /// + void LoadFontCreationSettings(FontAssetCreationSettings settings) + { + m_SourceFontFile = AssetDatabase.LoadAssetAtPath(AssetDatabase.GUIDToAssetPath(settings.sourceFontFileGUID)); + m_PointSizeSamplingMode = settings.pointSizeSamplingMode; + m_PointSize = settings.pointSize; + m_Padding = settings.padding; + m_PackingMode = (FontPackingModes)settings.packingMode; + m_AtlasWidth = settings.atlasWidth; + m_AtlasHeight = settings.atlasHeight; + m_CharacterSetSelectionMode = settings.characterSetSelectionMode; + m_CharacterSequence = settings.characterSequence; + m_ReferencedFontAsset = AssetDatabase.LoadAssetAtPath(AssetDatabase.GUIDToAssetPath(settings.referencedFontAssetGUID)); + m_CharactersFromFile = AssetDatabase.LoadAssetAtPath(AssetDatabase.GUIDToAssetPath(settings.referencedTextAssetGUID)); + //m_FontStyle = (FaceStyles)settings.fontStyle; + //m_FontStyleValue = settings.fontStyleModifier; + m_GlyphRenderMode = (GlyphRenderMode)settings.renderMode; + m_IncludeFontFeatures = settings.includeFontFeatures; + } + + + /// + /// Save the latest font asset creation settings to EditorPrefs. + /// + /// + void SaveCreationSettingsToEditorPrefs(FontAssetCreationSettings settings) + { + // Create new list if one does not already exist + if (m_FontAssetCreationSettingsContainer == null) + { + m_FontAssetCreationSettingsContainer = new FontAssetCreationSettingsContainer(); + m_FontAssetCreationSettingsContainer.fontAssetCreationSettings = new List(); + } + + // Add new creation settings to the list + m_FontAssetCreationSettingsContainer.fontAssetCreationSettings.Add(settings); + + // Since list should only contain the most 4 recent settings, we remove the first element if list exceeds 4 elements. + if (m_FontAssetCreationSettingsContainer.fontAssetCreationSettings.Count > 4) + m_FontAssetCreationSettingsContainer.fontAssetCreationSettings.RemoveAt(0); + + m_FontAssetCreationSettingsCurrentIndex = m_FontAssetCreationSettingsContainer.fontAssetCreationSettings.Count - 1; + + // Serialize list to JSON + string serializedSettings = JsonUtility.ToJson(m_FontAssetCreationSettingsContainer, true); + + EditorPrefs.SetString(k_FontAssetCreationSettingsContainerKey, serializedSettings); + } + + void DrawPreview() + { + Rect pixelRect; + if (position.width > position.height && position.width > k_TwoColumnControlsWidth) + { + float minSide = Mathf.Min(position.height - 15f, position.width - k_TwoColumnControlsWidth); + + EditorGUILayout.BeginVertical(EditorStyles.helpBox, GUILayout.MaxWidth(minSide)); + + pixelRect = GUILayoutUtility.GetRect(minSide, minSide, GUILayout.ExpandHeight(false), GUILayout.ExpandWidth(false)); + } + else + { + EditorGUILayout.BeginVertical(EditorStyles.helpBox); + + pixelRect = GUILayoutUtility.GetAspectRect(1f); + } + + if (m_FontAtlasTexture != null) + { + EditorGUI.DrawTextureAlpha(pixelRect, m_FontAtlasTexture, ScaleMode.StretchToFill); + } + else if (m_SavedFontAtlas != null) + { + EditorGUI.DrawTextureAlpha(pixelRect, m_SavedFontAtlas, ScaleMode.StretchToFill); + } + + EditorGUILayout.EndVertical(); + } + + + void CheckForLegacyGlyphRenderMode() + { + // Special handling for legacy glyph render mode + if ((int)m_GlyphRenderMode < 0x100) + { + switch ((int)m_GlyphRenderMode) + { + case 0: + m_GlyphRenderMode = GlyphRenderMode.SMOOTH_HINTED; + break; + case 1: + m_GlyphRenderMode = GlyphRenderMode.SMOOTH; + break; + case 2: + m_GlyphRenderMode = GlyphRenderMode.RASTER_HINTED; + break; + case 3: + m_GlyphRenderMode = GlyphRenderMode.RASTER; + break; + case 6: + case 7: + m_GlyphRenderMode = GlyphRenderMode.SDFAA; + break; + } + } + } + + + // Get Kerning Pairs + public TMP_FontFeatureTable GetKerningTable() + { + GlyphPairAdjustmentRecord[] adjustmentRecords = FontEngine.GetGlyphPairAdjustmentTable(m_AvailableGlyphsToAdd.ToArray()); + + if (adjustmentRecords == null) + return null; + + TMP_FontFeatureTable fontFeatureTable = new TMP_FontFeatureTable(); + + for (int i = 0; i < adjustmentRecords.Length; i++) + { + fontFeatureTable.glyphPairAdjustmentRecords.Add(new TMP_GlyphPairAdjustmentRecord(adjustmentRecords[i])); + } + + fontFeatureTable.SortGlyphPairAdjustmentRecords(); + + return fontFeatureTable; + } + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_FontAssetCreatorWindow.cs.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_FontAssetCreatorWindow.cs.meta new file mode 100644 index 0000000..aa7176f --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_FontAssetCreatorWindow.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 383966e89d344865a36addd5d378ffd3 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_FontPlugin.cs b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_FontPlugin.cs new file mode 100644 index 0000000..4ff58ad --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_FontPlugin.cs @@ -0,0 +1,115 @@ +using UnityEngine; +using UnityEditor; +using System.Collections; +using System; +using System.Runtime.InteropServices; + + +namespace TMPro.EditorUtilities +{ + /* + public class TMPro_FontPlugin + { + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + private delegate void DebugLog(string log); + private static readonly DebugLog debugLog = DebugWrapper; + private static readonly IntPtr functionPointer = Marshal.GetFunctionPointerForDelegate(debugLog); + + private static void DebugWrapper(string log) + { + Debug.Log(log); + } + + public static void LinkDebugLog() + { + LinkDebug(functionPointer); + } + + [DllImport("TMPro_Plugin")] + private static extern void LinkDebug([MarshalAs(UnmanagedType.FunctionPtr)]IntPtr debugCall); + + [DllImport("TMPro_Plugin")] + public static extern + int Initialize_FontEngine(); + + [DllImport("TMPro_Plugin")] + public static extern + int Destroy_FontEngine(); + + [DllImport("TMPro_Plugin")] + public static extern + int Load_TrueType_Font(string fontPath); + + [DllImport("TMPro_Plugin")] + public static extern + int FT_Size_Font(int fontSize); + + [DllImport("TMPro_Plugin")] + public static extern + int Render_Character(byte[] buffer_fill, byte[] buffer_edge, int buffer_width, int buffer_height, int offset, int asc, FaceStyles style, float thickness, RenderModes rasterMode, ref FT_GlyphInfo glyphInfo); + + [DllImport("TMPro_Plugin")] + public static extern + int Render_Characters(byte[] buffer, int buffer_width, int buffer_height, int character_padding, int[] asc_set, int char_count, FaceStyles style, float style_mod, bool autoSize, RenderModes renderMode, int method, ref FT_FaceInfo fontData, FT_GlyphInfo[] Output); + + [DllImport("TMPro_Plugin")] + public static extern + int FT_GetKerningPairs(string fontPath, int[] characterSet, int setCount, FT_KerningPair[] kerningPairs); + + [DllImport("TMPro_Plugin")] + public static extern + float Check_RenderProgress(); + + [DllImport("TMPro_Plugin")] + internal static extern + void SendCancellationRequest(CancellationRequestType request); + } + + public enum FaceStyles { Normal, Bold, Italic, Bold_Italic, Outline, Bold_Sim }; + public enum RenderModes { HintedSmooth = 0, Smooth = 1, RasterHinted = 2, Raster = 3, DistanceField16 = 6, DistanceField32 = 7 }; // SignedDistanceField64 = 8 + + internal enum CancellationRequestType : byte { None = 0x0, CancelInProgess = 0x1, WindowClosed = 0x2 }; + + [StructLayout(LayoutKind.Sequential)] + public struct FT_KerningPair + { + public int ascII_Left; + public int ascII_Right; + public float xAdvanceOffset; + } + + + [StructLayout(LayoutKind.Sequential)] + public struct FT_GlyphInfo + { + public int id; + public float x; + public float y; + public float width; + public float height; + public float xOffset; + public float yOffset; + public float xAdvance; + } + + + [StructLayout(LayoutKind.Sequential)] + public struct FT_FaceInfo + { + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)] + public string name; + public int pointSize; + public int padding; + public float lineHeight; + public float baseline; + public float ascender; + public float descender; + public float centerLine; + public float underline; + public float underlineThickness; + public int characterCount; + public int atlasWidth; + public int atlasHeight; + } + */ +} diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_FontPlugin.cs.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_FontPlugin.cs.meta new file mode 100644 index 0000000..a6afabd --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_FontPlugin.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 9edc9283e7d6409fab242fe8fb6a822c +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_SortingLayerHelper.cs b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_SortingLayerHelper.cs new file mode 100644 index 0000000..ca0ba18 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_SortingLayerHelper.cs @@ -0,0 +1,105 @@ +/* + * Copyright (c) 2014, Nick Gravelyn. + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. + */ + +using UnityEngine; +using UnityEditor; +using System; +using System.Reflection; + +namespace TMPro +{ + // Helpers used by the different sorting layer classes. + public static class SortingLayerHelper + { + private static Type _utilityType; + private static PropertyInfo _sortingLayerNamesProperty; + private static MethodInfo _getSortingLayerUserIdMethod; + + static SortingLayerHelper() + { + _utilityType = Type.GetType("UnityEditorInternal.InternalEditorUtility, UnityEditor"); + _sortingLayerNamesProperty = _utilityType.GetProperty("sortingLayerNames", BindingFlags.Static | BindingFlags.NonPublic); + _getSortingLayerUserIdMethod = _utilityType.GetMethod("GetSortingLayerUniqueID", BindingFlags.Static | BindingFlags.NonPublic); + } + + // Gets an array of sorting layer names. + // Since this uses reflection, callers should check for 'null' which will be returned if the reflection fails. + public static string[] sortingLayerNames + { + get + { + if (_sortingLayerNamesProperty == null) + { + return null; + } + + return _sortingLayerNamesProperty.GetValue(null, null) as string[]; + } + } + + // Given the ID of a sorting layer, returns the sorting layer's name + public static string GetSortingLayerNameFromID(int id) + { + string[] names = sortingLayerNames; + if (names == null) + { + return null; + } + + for (int i = 0; i < names.Length; i++) + { + if (GetSortingLayerIDForIndex(i) == id) + { + return names[i]; + } + } + + return null; + } + + // Given the name of a sorting layer, returns the ID. + public static int GetSortingLayerIDForName(string name) + { + string[] names = sortingLayerNames; + if (names == null) + { + return 0; + } + + return GetSortingLayerIDForIndex(Array.IndexOf(names, name)); + } + + // Helper to convert from a sorting layer INDEX to a sorting layer ID. These are not the same thing. + // IDs are based on the order in which layers were created and do not change when reordering the layers. + // Thankfully there is a private helper we can call to get the ID for a layer given its index. + public static int GetSortingLayerIDForIndex(int index) + { + if (_getSortingLayerUserIdMethod == null) + { + return 0; + } + + return (int)_getSortingLayerUserIdMethod.Invoke(null, new object[] { index }); + } + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_SortingLayerHelper.cs.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_SortingLayerHelper.cs.meta new file mode 100644 index 0000000..e959de6 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_SortingLayerHelper.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 88ed537c17c34f339121fe9a7d6d7a0e +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_TextContainerEditor.cs b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_TextContainerEditor.cs new file mode 100644 index 0000000..cdeb623 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_TextContainerEditor.cs @@ -0,0 +1,235 @@ +using UnityEngine; +using UnityEditor; +using System.Collections; + + +namespace TMPro.EditorUtilities +{ + [CustomEditor(typeof(TextContainer)), CanEditMultipleObjects] + public class TMPro_TextContainerEditor : Editor + { + + // Serialized Properties + private SerializedProperty anchorPosition_prop; + private SerializedProperty pivot_prop; + private SerializedProperty rectangle_prop; + private SerializedProperty margins_prop; + + + private TextContainer m_textContainer; + //private Transform m_transform; + //private Vector3[] m_Rect_handlePoints = new Vector3[4]; + //private Vector3[] m_Margin_handlePoints = new Vector3[4]; + + //private Vector2 m_anchorPosition; + + //private Vector3 m_mousePreviousPOS; + //private Vector2 m_previousStartPOS; + //private int m_mouseDragFlag = 0; + + //private static Transform m_visualHelper; + + + void OnEnable() + { + + // Serialized Properties + anchorPosition_prop = serializedObject.FindProperty("m_anchorPosition"); + pivot_prop = serializedObject.FindProperty("m_pivot"); + rectangle_prop = serializedObject.FindProperty("m_rect"); + margins_prop = serializedObject.FindProperty("m_margins"); + + m_textContainer = (TextContainer)target; + //m_transform = m_textContainer.transform; + + + /* + if (m_visualHelper == null) + { + m_visualHelper = GameObject.CreatePrimitive(PrimitiveType.Sphere).transform; + m_visualHelper.localScale = new Vector3(0.25f, 0.25f, 0.25f); + } + */ + } + + void OnDisable() + { + /* + if (m_visualHelper != null) + DestroyImmediate (m_visualHelper.gameObject); + */ + } + + + + + public override void OnInspectorGUI() + { + serializedObject.Update(); + + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(anchorPosition_prop); + if (anchorPosition_prop.enumValueIndex == 9) + { + EditorGUI.indentLevel += 1; + EditorGUILayout.PropertyField(pivot_prop, new GUIContent("Pivot Position")); + EditorGUI.indentLevel -= 1; + } + + + DrawDimensionProperty(rectangle_prop, "Dimensions"); + DrawMaginProperty(margins_prop, "Margins"); + if (EditorGUI.EndChangeCheck()) + { + // Re-compute pivot position when changes are made. + if (anchorPosition_prop.enumValueIndex != 9) + pivot_prop.vector2Value = GetAnchorPosition(anchorPosition_prop.enumValueIndex); + + m_textContainer.hasChanged = true; + } + + serializedObject.ApplyModifiedProperties(); + + EditorGUILayout.Space(); + } + + + private void DrawDimensionProperty(SerializedProperty property, string label) + { + float old_LabelWidth = EditorGUIUtility.labelWidth; + float old_FieldWidth = EditorGUIUtility.fieldWidth; + + Rect rect = EditorGUILayout.GetControlRect(false, 18); + Rect pos0 = new Rect(rect.x, rect.y + 2, rect.width, 18); + + float width = rect.width + 3; + pos0.width = old_LabelWidth; + GUI.Label(pos0, label); + + Rect rectangle = property.rectValue; + + float width_B = width - old_LabelWidth; + float fieldWidth = width_B / 4; + pos0.width = fieldWidth - 5; + + pos0.x = old_LabelWidth + 15; + GUI.Label(pos0, "Width"); + + pos0.x += fieldWidth; + rectangle.width = EditorGUI.FloatField(pos0, GUIContent.none, rectangle.width); + + pos0.x += fieldWidth; + GUI.Label(pos0, "Height"); + + pos0.x += fieldWidth; + rectangle.height = EditorGUI.FloatField(pos0, GUIContent.none, rectangle.height); + + property.rectValue = rectangle; + EditorGUIUtility.labelWidth = old_LabelWidth; + EditorGUIUtility.fieldWidth = old_FieldWidth; + } + + + private void DrawMaginProperty(SerializedProperty property, string label) + { + float old_LabelWidth = EditorGUIUtility.labelWidth; + float old_FieldWidth = EditorGUIUtility.fieldWidth; + + Rect rect = EditorGUILayout.GetControlRect(false, 2 * 18); + Rect pos0 = new Rect(rect.x, rect.y + 2, rect.width, 18); + + float width = rect.width + 3; + pos0.width = old_LabelWidth; + GUI.Label(pos0, label); + + //Vector4 vec = property.vector4Value; + Vector4 vec = Vector4.zero; + vec.x = property.FindPropertyRelative("x").floatValue; + vec.y = property.FindPropertyRelative("y").floatValue; + vec.z = property.FindPropertyRelative("z").floatValue; + vec.w = property.FindPropertyRelative("w").floatValue; + + + float widthB = width - old_LabelWidth; + float fieldWidth = widthB / 4; + pos0.width = fieldWidth - 5; + + // Labels + pos0.x = old_LabelWidth + 15; + GUI.Label(pos0, "Left"); + + pos0.x += fieldWidth; + GUI.Label(pos0, "Top"); + + pos0.x += fieldWidth; + GUI.Label(pos0, "Right"); + + pos0.x += fieldWidth; + GUI.Label(pos0, "Bottom"); + + pos0.y += 18; + + pos0.x = old_LabelWidth + 15; + vec.x = EditorGUI.FloatField(pos0, GUIContent.none, vec.x); + + pos0.x += fieldWidth; + vec.y = EditorGUI.FloatField(pos0, GUIContent.none, vec.y); + + pos0.x += fieldWidth; + vec.z = EditorGUI.FloatField(pos0, GUIContent.none, vec.z); + + pos0.x += fieldWidth; + vec.w = EditorGUI.FloatField(pos0, GUIContent.none, vec.w); + + //property.vector4Value = vec; + property.FindPropertyRelative("x").floatValue = vec.x; + property.FindPropertyRelative("y").floatValue = vec.y; + property.FindPropertyRelative("z").floatValue = vec.z; + property.FindPropertyRelative("w").floatValue = vec.w; + + EditorGUIUtility.labelWidth = old_LabelWidth; + EditorGUIUtility.fieldWidth = old_FieldWidth; + } + + + Vector2 GetAnchorPosition(int index) + { + Vector2 anchorPosition = Vector2.zero; + + switch (index) + { + case 0: // TOP LEFT + anchorPosition = new Vector2(0, 1); + break; + case 1: // TOP + anchorPosition = new Vector2(0.5f, 1); + break; + case 2: // TOP RIGHT + anchorPosition = new Vector2(1, 1); + break; + case 3: // LEFT + anchorPosition = new Vector2(0, 0.5f); + break; + case 4: // MIDDLE + anchorPosition = new Vector2(0.5f, 0.5f); + break; + case 5: // RIGHT + anchorPosition = new Vector2(1, 0.5f); + break; + case 6: // BOTTOM LEFT + anchorPosition = new Vector2(0, 0); + break; + case 7: // BOTTOM + anchorPosition = new Vector2(0.5f, 0); + break; + case 8: // BOTTOM RIGHT + anchorPosition = new Vector2(1, 0); + break; + } + + return anchorPosition; + } + + + } +} diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_TextContainerEditor.cs.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_TextContainerEditor.cs.meta new file mode 100644 index 0000000..03c0dee --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_TextContainerEditor.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 02893ffb522b490a9fa28eedd2584309 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_TexturePostProcessor.cs b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_TexturePostProcessor.cs new file mode 100644 index 0000000..adbaecf --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_TexturePostProcessor.cs @@ -0,0 +1,75 @@ +using UnityEngine; +using UnityEditor; +using System.Collections; + + +namespace TMPro.EditorUtilities +{ + + public class TMPro_TexturePostProcessor : AssetPostprocessor + { + + void OnPostprocessTexture(Texture2D texture) + { + //var importer = assetImporter as TextureImporter; + + Texture2D tex = AssetDatabase.LoadAssetAtPath(assetPath, typeof(Texture2D)) as Texture2D; + + // Send Event Sub Objects + if (tex != null) + TMPro_EventManager.ON_SPRITE_ASSET_PROPERTY_CHANGED(true, tex); + } + + } + + + //public class TMPro_PackageImportPostProcessor : AssetPostprocessor + //{ + // static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths) + // { + // for (int i = 0; i < importedAssets.Length; i++) + // { + // if (importedAssets[i].Contains("TextMesh Pro/Resources/TMP Settings.asset")) + // { + // Debug.Log("New TMP Settings file was just imported."); + + // // TMP Settings file was just re-imported. + // // Check if project already contains + // } + + + // if (importedAssets[i].Contains("com.unity.TextMeshPro/Examples")) + // { + // //Debug.Log("New TMP Examples folder was just imported."); + // } + + // //Debug.Log("[" + importedAssets[i] + "] was just imported."); + // } + + + + // //for (int i = 0; i < deletedAssets.Length; i++) + // //{ + // // if (deletedAssets[i] == "Assets/TextMesh Pro") + // // { + // // //Debug.Log("Asset [" + deletedAssets[i] + "] has been deleted."); + // // string currentBuildSettings = PlayerSettings.GetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup); + + // // //Check for and inject TMP_PRESENT + // // if (currentBuildSettings.Contains("TMP_PRESENT;")) + // // { + // // currentBuildSettings = currentBuildSettings.Replace("TMP_PRESENT;", ""); + + // // PlayerSettings.SetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup, currentBuildSettings); + // // } + // // else if (currentBuildSettings.Contains("TMP_PRESENT")) + // // { + // // currentBuildSettings = currentBuildSettings.Replace("TMP_PRESENT", ""); + + // // PlayerSettings.SetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup, currentBuildSettings); + // // } + // // } + // //} + // } + //} +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_TexturePostProcessor.cs.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_TexturePostProcessor.cs.meta new file mode 100644 index 0000000..c10f584 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMPro_TexturePostProcessor.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: f4935fb862d54980b1bcbca942962642 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/Unity.TextMeshPro.Editor.asmdef b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/Unity.TextMeshPro.Editor.asmdef new file mode 100644 index 0000000..d0af0f6 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/Unity.TextMeshPro.Editor.asmdef @@ -0,0 +1,13 @@ +{ + "name": "Unity.TextMeshPro.Editor", + "references": [ + "Unity.TextMeshPro", + "Unity.ugui", + "Unity.ugui.Editor" + ], + "optionalUnityReferences": [], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [] +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/Unity.TextMeshPro.Editor.asmdef.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/Unity.TextMeshPro.Editor.asmdef.meta new file mode 100644 index 0000000..3ff293e --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/Unity.TextMeshPro.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 6546d7765b4165b40850b3667f981c26 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime.meta new file mode 100644 index 0000000..9e5e207 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5fc988a1d5b04aee9a5222502b201a45 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/AssemblyInfo.cs.cs b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/AssemblyInfo.cs.cs new file mode 100644 index 0000000..472129d --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/AssemblyInfo.cs.cs @@ -0,0 +1,11 @@ +using System.Runtime.CompilerServices; + +// Allow internal visibility for testing purposes. +[assembly: InternalsVisibleTo("Unity.TextCore")] + +[assembly: InternalsVisibleTo("Unity.FontEngine.Tests")] + +#if UNITY_EDITOR +[assembly: InternalsVisibleTo("Unity.TextCore.Editor")] +[assembly: InternalsVisibleTo("Unity.TextMeshPro.Editor")] +#endif diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/AssemblyInfo.cs.cs.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/AssemblyInfo.cs.cs.meta new file mode 100644 index 0000000..b8b0156 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/AssemblyInfo.cs.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1c147d10db452eb4b854a35f84472017 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/FastAction.cs b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/FastAction.cs new file mode 100644 index 0000000..15012e3 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/FastAction.cs @@ -0,0 +1,146 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; + + +namespace TMPro +{ + public class FastAction + { + + LinkedList delegates = new LinkedList(); + + Dictionary> lookup = new Dictionary>(); + + public void Add(System.Action rhs) + { + if (lookup.ContainsKey(rhs)) return; + + lookup[rhs] = delegates.AddLast(rhs); + } + + public void Remove(System.Action rhs) + { + if (lookup.TryGetValue(rhs, out LinkedListNode node)) + { + lookup.Remove(rhs); + delegates.Remove(node); + } + } + + public void Call() + { + var node = delegates.First; + while (node != null) + { + node.Value(); + node = node.Next; + } + } + } + + + public class FastAction + { + + LinkedList> delegates = new LinkedList>(); + + Dictionary, LinkedListNode>> lookup = new Dictionary, LinkedListNode>>(); + + public void Add(System.Action rhs) + { + if (lookup.ContainsKey(rhs)) return; + + lookup[rhs] = delegates.AddLast(rhs); + } + + public void Remove(System.Action rhs) + { + if (lookup.TryGetValue(rhs, out LinkedListNode> node)) + { + lookup.Remove(rhs); + delegates.Remove(node); + } + } + + public void Call(A a) + { + var node = delegates.First; + while (node != null) + { + node.Value(a); + node = node.Next; + } + } + } + + + public class FastAction + { + + LinkedList> delegates = new LinkedList>(); + + Dictionary, LinkedListNode>> lookup = new Dictionary, LinkedListNode>>(); + + public void Add(System.Action rhs) + { + if (lookup.ContainsKey(rhs)) return; + + lookup[rhs] = delegates.AddLast(rhs); + } + + public void Remove(System.Action rhs) + { + if (lookup.TryGetValue(rhs, out LinkedListNode> node)) + { + lookup.Remove(rhs); + delegates.Remove(node); + } + } + + public void Call(A a, B b) + { + var node = delegates.First; + while (node != null) + { + node.Value(a, b); + node = node.Next; + } + } + } + + + public class FastAction + { + + LinkedList> delegates = new LinkedList>(); + + Dictionary, LinkedListNode>> lookup = new Dictionary, LinkedListNode>>(); + + public void Add(System.Action rhs) + { + if (lookup.ContainsKey(rhs)) return; + + lookup[rhs] = delegates.AddLast(rhs); + } + + public void Remove(System.Action rhs) + { + if (lookup.TryGetValue(rhs, out LinkedListNode> node)) + { + lookup.Remove(rhs); + delegates.Remove(node); + } + } + + public void Call(A a, B b, C c) + { + var node = delegates.First; + while (node != null) + { + node.Value(a, b, c); + node = node.Next; + } + } + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/FastAction.cs.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/FastAction.cs.meta new file mode 100644 index 0000000..cfbd1a6 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/FastAction.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 871f8edd56e84b8fb295b10cc3c78f36 +timeCreated: 1435956061 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/MaterialReferenceManager.cs b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/MaterialReferenceManager.cs new file mode 100644 index 0000000..dc1ec2f --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/MaterialReferenceManager.cs @@ -0,0 +1,644 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; + + +namespace TMPro +{ + + public class MaterialReferenceManager + { + private static MaterialReferenceManager s_Instance; + + // Dictionaries used to track Asset references. + private Dictionary m_FontMaterialReferenceLookup = new Dictionary(); + private Dictionary m_FontAssetReferenceLookup = new Dictionary(); + private Dictionary m_SpriteAssetReferenceLookup = new Dictionary(); + private Dictionary m_ColorGradientReferenceLookup = new Dictionary(); + + + /// + /// Get a singleton instance of the registry + /// + public static MaterialReferenceManager instance + { + get + { + if (MaterialReferenceManager.s_Instance == null) + MaterialReferenceManager.s_Instance = new MaterialReferenceManager(); + return MaterialReferenceManager.s_Instance; + } + } + + + + /// + /// Add new font asset reference to dictionary. + /// + /// + public static void AddFontAsset(TMP_FontAsset fontAsset) + { + MaterialReferenceManager.instance.AddFontAssetInternal(fontAsset); + } + + /// + /// Add new Font Asset reference to dictionary. + /// + /// + private void AddFontAssetInternal(TMP_FontAsset fontAsset) + { + if (m_FontAssetReferenceLookup.ContainsKey(fontAsset.hashCode)) return; + + // Add reference to the font asset. + m_FontAssetReferenceLookup.Add(fontAsset.hashCode, fontAsset); + + // Add reference to the font material. + m_FontMaterialReferenceLookup.Add(fontAsset.materialHashCode, fontAsset.material); + } + + + + /// + /// Add new Sprite Asset to dictionary. + /// + /// + /// + public static void AddSpriteAsset(TMP_SpriteAsset spriteAsset) + { + MaterialReferenceManager.instance.AddSpriteAssetInternal(spriteAsset); + } + + /// + /// Internal method to add a new sprite asset to the dictionary. + /// + /// + /// + private void AddSpriteAssetInternal(TMP_SpriteAsset spriteAsset) + { + if (m_SpriteAssetReferenceLookup.ContainsKey(spriteAsset.hashCode)) return; + + // Add reference to sprite asset. + m_SpriteAssetReferenceLookup.Add(spriteAsset.hashCode, spriteAsset); + + // Adding reference to the sprite asset material as well + m_FontMaterialReferenceLookup.Add(spriteAsset.hashCode, spriteAsset.material); + } + + /// + /// Add new Sprite Asset to dictionary. + /// + /// + /// + public static void AddSpriteAsset(int hashCode, TMP_SpriteAsset spriteAsset) + { + MaterialReferenceManager.instance.AddSpriteAssetInternal(hashCode, spriteAsset); + } + + /// + /// Internal method to add a new sprite asset to the dictionary. + /// + /// + /// + private void AddSpriteAssetInternal(int hashCode, TMP_SpriteAsset spriteAsset) + { + if (m_SpriteAssetReferenceLookup.ContainsKey(hashCode)) return; + + // Add reference to Sprite Asset. + m_SpriteAssetReferenceLookup.Add(hashCode, spriteAsset); + + // Add reference to Sprite Asset using the asset hashcode. + m_FontMaterialReferenceLookup.Add(hashCode, spriteAsset.material); + + // Compatibility check + if (spriteAsset.hashCode == 0) spriteAsset.hashCode = hashCode; + } + + + /// + /// Add new Material reference to dictionary. + /// + /// + /// + public static void AddFontMaterial(int hashCode, Material material) + { + MaterialReferenceManager.instance.AddFontMaterialInternal(hashCode, material); + } + + /// + /// Add new material reference to dictionary. + /// + /// + /// + private void AddFontMaterialInternal(int hashCode, Material material) + { + // Since this function is called after checking if the material is + // contained in the dictionary, there is no need to check again. + m_FontMaterialReferenceLookup.Add(hashCode, material); + } + + + /// + /// Add new Color Gradient Preset to dictionary. + /// + /// + /// + public static void AddColorGradientPreset(int hashCode, TMP_ColorGradient spriteAsset) + { + MaterialReferenceManager.instance.AddColorGradientPreset_Internal(hashCode, spriteAsset); + } + + /// + /// Internal method to add a new Color Gradient Preset to the dictionary. + /// + /// + /// + private void AddColorGradientPreset_Internal(int hashCode, TMP_ColorGradient spriteAsset) + { + if (m_ColorGradientReferenceLookup.ContainsKey(hashCode)) return; + + // Add reference to Color Gradient Preset Asset. + m_ColorGradientReferenceLookup.Add(hashCode, spriteAsset); + } + + + + /// + /// Add new material reference and return the index of this new reference in the materialReferences array. + /// + /// + /// + /// + //public int AddMaterial(Material material, int materialHashCode, TMP_FontAsset fontAsset) + //{ + // if (!m_MaterialReferenceLookup.ContainsKey(materialHashCode)) + // { + // int index = m_MaterialReferenceLookup.Count; + + // materialReferences[index].fontAsset = fontAsset; + // materialReferences[index].material = material; + // materialReferences[index].isDefaultMaterial = material.GetInstanceID() == fontAsset.material.GetInstanceID() ? true : false; + // materialReferences[index].index = index; + // materialReferences[index].referenceCount = 0; + + // m_MaterialReferenceLookup[materialHashCode] = index; + + // // Compute Padding value and store it + // // TODO + + // int fontAssetHashCode = fontAsset.hashCode; + + // if (!m_FontAssetReferenceLookup.ContainsKey(fontAssetHashCode)) + // m_FontAssetReferenceLookup.Add(fontAssetHashCode, fontAsset); + + // m_countInternal += 1; + + // return index; + // } + // else + // { + // return m_MaterialReferenceLookup[materialHashCode]; + // } + //} + + + /// + /// Add new material reference and return the index of this new reference in the materialReferences array. + /// + /// + /// + /// + /// + //public int AddMaterial(Material material, int materialHashCode, TMP_SpriteAsset spriteAsset) + //{ + // if (!m_MaterialReferenceLookup.ContainsKey(materialHashCode)) + // { + // int index = m_MaterialReferenceLookup.Count; + + // materialReferences[index].fontAsset = materialReferences[0].fontAsset; + // materialReferences[index].spriteAsset = spriteAsset; + // materialReferences[index].material = material; + // materialReferences[index].isDefaultMaterial = true; + // materialReferences[index].index = index; + // materialReferences[index].referenceCount = 0; + + // m_MaterialReferenceLookup[materialHashCode] = index; + + // int spriteAssetHashCode = spriteAsset.hashCode; + + // if (!m_SpriteAssetReferenceLookup.ContainsKey(spriteAssetHashCode)) + // m_SpriteAssetReferenceLookup.Add(spriteAssetHashCode, spriteAsset); + + // m_countInternal += 1; + + // return index; + // } + // else + // { + // return m_MaterialReferenceLookup[materialHashCode]; + // } + //} + + + /// + /// Function to check if the font asset is already referenced. + /// + /// + /// + public bool Contains(TMP_FontAsset font) + { + if (m_FontAssetReferenceLookup.ContainsKey(font.hashCode)) + return true; + + return false; + } + + + /// + /// Function to check if the sprite asset is already referenced. + /// + /// + /// + public bool Contains(TMP_SpriteAsset sprite) + { + if (m_FontAssetReferenceLookup.ContainsKey(sprite.hashCode)) + return true; + + return false; + } + + + + /// + /// Function returning the Font Asset corresponding to the provided hash code. + /// + /// + /// + /// + public static bool TryGetFontAsset(int hashCode, out TMP_FontAsset fontAsset) + { + return MaterialReferenceManager.instance.TryGetFontAssetInternal(hashCode, out fontAsset); + } + + /// + /// Internal Function returning the Font Asset corresponding to the provided hash code. + /// + /// + /// + /// + private bool TryGetFontAssetInternal(int hashCode, out TMP_FontAsset fontAsset) + { + fontAsset = null; + + if (m_FontAssetReferenceLookup.TryGetValue(hashCode, out fontAsset)) + { + return true; + } + + return false; + } + + + + /// + /// Function returning the Sprite Asset corresponding to the provided hash code. + /// + /// + /// + /// + public static bool TryGetSpriteAsset(int hashCode, out TMP_SpriteAsset spriteAsset) + { + return MaterialReferenceManager.instance.TryGetSpriteAssetInternal(hashCode, out spriteAsset); + } + + /// + /// Internal function returning the Sprite Asset corresponding to the provided hash code. + /// + /// + /// + /// + private bool TryGetSpriteAssetInternal(int hashCode, out TMP_SpriteAsset spriteAsset) + { + spriteAsset = null; + + if (m_SpriteAssetReferenceLookup.TryGetValue(hashCode, out spriteAsset)) + { + return true; + } + + return false; + } + + + /// + /// Function returning the Color Gradient Preset corresponding to the provided hash code. + /// + /// + /// + /// + public static bool TryGetColorGradientPreset(int hashCode, out TMP_ColorGradient gradientPreset) + { + return MaterialReferenceManager.instance.TryGetColorGradientPresetInternal(hashCode, out gradientPreset); + } + + /// + /// Internal function returning the Color Gradient Preset corresponding to the provided hash code. + /// + /// + /// + /// + private bool TryGetColorGradientPresetInternal(int hashCode, out TMP_ColorGradient gradientPreset) + { + gradientPreset = null; + + if (m_ColorGradientReferenceLookup.TryGetValue(hashCode, out gradientPreset)) + { + return true; + } + + return false; + } + + + /// + /// Function returning the Font Material corresponding to the provided hash code. + /// + /// + /// + /// + public static bool TryGetMaterial(int hashCode, out Material material) + { + return MaterialReferenceManager.instance.TryGetMaterialInternal(hashCode, out material); + } + + /// + /// Internal function returning the Font Material corresponding to the provided hash code. + /// + /// + /// + /// + private bool TryGetMaterialInternal(int hashCode, out Material material) + { + material = null; + + if (m_FontMaterialReferenceLookup.TryGetValue(hashCode, out material)) + { + return true; + } + + return false; + } + + + /// + /// Function to lookup a material based on hash code and returning the MaterialReference containing this material. + /// + /// + /// + /// + //public bool TryGetMaterial(int hashCode, out MaterialReference materialReference) + //{ + // int materialIndex = -1; + + // if (m_MaterialReferenceLookup.TryGetValue(hashCode, out materialIndex)) + // { + // materialReference = materialReferences[materialIndex]; + + // return true; + // } + + // materialReference = new MaterialReference(); + + // return false; + //} + + + + /// + /// + /// + /// + /// + //public int GetMaterialIndex(TMP_FontAsset fontAsset) + //{ + // if (m_MaterialReferenceLookup.ContainsKey(fontAsset.materialHashCode)) + // return m_MaterialReferenceLookup[fontAsset.materialHashCode]; + + // return -1; + //} + + + /// + /// + /// + /// + /// + //public TMP_FontAsset GetFontAsset(int index) + //{ + // if (index >= 0 && index < materialReferences.Length) + // return materialReferences[index].fontAsset; + + // return null; + //} + + + /// + /// + /// + /// + /// + /// + //public void SetDefaultMaterial(Material material, int materialHashCode, TMP_FontAsset fontAsset) + //{ + // if (!m_MaterialReferenceLookup.ContainsKey(materialHashCode)) + // { + // materialReferences[0].fontAsset = fontAsset; + // materialReferences[0].material = material; + // materialReferences[0].index = 0; + // materialReferences[0].isDefaultMaterial = material.GetInstanceID() == fontAsset.material.GetInstanceID() ? true : false; + // materialReferences[0].referenceCount = 0; + // m_MaterialReferenceLookup[materialHashCode] = 0; + + // // Compute Padding value and store it + // // TODO + + // int fontHashCode = fontAsset.hashCode; + + // if (!m_FontAssetReferenceLookup.ContainsKey(fontHashCode)) + // m_FontAssetReferenceLookup.Add(fontHashCode, fontAsset); + // } + // else + // { + // materialReferences[0].fontAsset = fontAsset; + // materialReferences[0].material = material; + // materialReferences[0].index = 0; + // materialReferences[0].referenceCount = 0; + // m_MaterialReferenceLookup[materialHashCode] = 0; + // } + // // Compute padding + // // TODO + + // m_countInternal = 1; + //} + + + + /// + /// + /// + //public void Clear() + //{ + // //m_currentIndex = 0; + // m_MaterialReferenceLookup.Clear(); + // m_SpriteAssetReferenceLookup.Clear(); + // m_FontAssetReferenceLookup.Clear(); + //} + + + /// + /// Function to clear the reference count for each of the material references. + /// + //public void ClearReferenceCount() + //{ + // m_countInternal = 0; + + // for (int i = 0; i < materialReferences.Length; i++) + // { + // if (materialReferences[i].fontAsset == null) + // return; + + // materialReferences[i].referenceCount = 0; + // } + //} + + } + + + + public struct MaterialReference + { + + public int index; + public TMP_FontAsset fontAsset; + public TMP_SpriteAsset spriteAsset; + public Material material; + public bool isDefaultMaterial; + public bool isFallbackMaterial; + public Material fallbackMaterial; + public float padding; + public int referenceCount; + + + /// + /// Constructor for new Material Reference. + /// + /// + /// + /// + /// + /// + public MaterialReference(int index, TMP_FontAsset fontAsset, TMP_SpriteAsset spriteAsset, Material material, float padding) + { + this.index = index; + this.fontAsset = fontAsset; + this.spriteAsset = spriteAsset; + this.material = material; + this.isDefaultMaterial = material.GetInstanceID() == fontAsset.material.GetInstanceID() ? true : false; + this.isFallbackMaterial = false; + this.fallbackMaterial = null; + this.padding = padding; + this.referenceCount = 0; + } + + + /// + /// Function to check if a certain font asset is contained in the material reference array. + /// + /// + /// + /// + public static bool Contains(MaterialReference[] materialReferences, TMP_FontAsset fontAsset) + { + int id = fontAsset.GetInstanceID(); + + for (int i = 0; i < materialReferences.Length && materialReferences[i].fontAsset != null; i++) + { + if (materialReferences[i].fontAsset.GetInstanceID() == id) + return true; + } + + return false; + } + + + /// + /// Function to add a new material reference and returning its index in the material reference array. + /// + /// + /// + /// + /// + /// + public static int AddMaterialReference(Material material, TMP_FontAsset fontAsset, MaterialReference[] materialReferences, Dictionary materialReferenceIndexLookup) + { + int materialID = material.GetInstanceID(); + + if (materialReferenceIndexLookup.TryGetValue(materialID, out int index)) + { + return index; + } + else + { + index = materialReferenceIndexLookup.Count; + + // Add new reference index + materialReferenceIndexLookup[materialID] = index; + + materialReferences[index].index = index; + materialReferences[index].fontAsset = fontAsset; + materialReferences[index].spriteAsset = null; + materialReferences[index].material = material; + materialReferences[index].isDefaultMaterial = materialID == fontAsset.material.GetInstanceID() ? true : false; + //materialReferences[index].padding = 0; + materialReferences[index].referenceCount = 0; + + return index; + } + } + + + /// + /// + /// + /// + /// + /// + /// + /// + public static int AddMaterialReference(Material material, TMP_SpriteAsset spriteAsset, MaterialReference[] materialReferences, Dictionary materialReferenceIndexLookup) + { + int materialID = material.GetInstanceID(); + + if (materialReferenceIndexLookup.TryGetValue(materialID, out int index)) + { + return index; + } + else + { + index = materialReferenceIndexLookup.Count; + + // Add new reference index + materialReferenceIndexLookup[materialID] = index; + + materialReferences[index].index = index; + materialReferences[index].fontAsset = materialReferences[0].fontAsset; + materialReferences[index].spriteAsset = spriteAsset; + materialReferences[index].material = material; + materialReferences[index].isDefaultMaterial = true; + //materialReferences[index].padding = 0; + materialReferences[index].referenceCount = 0; + + return index; + } + } + } +} diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/MaterialReferenceManager.cs.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/MaterialReferenceManager.cs.meta new file mode 100644 index 0000000..31dbeee --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/MaterialReferenceManager.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 11a6a034ab84493cbed6af5ae7aae78b +timeCreated: 1449743129 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_Asset.cs b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_Asset.cs new file mode 100644 index 0000000..d84ee7f --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_Asset.cs @@ -0,0 +1,26 @@ +using UnityEngine; + +namespace TMPro +{ + + // Base class inherited by the various TextMeshPro Assets. + [System.Serializable] + public class TMP_Asset : ScriptableObject + { + /// + /// HashCode based on the name of the asset. + /// + public int hashCode; + + /// + /// The material used by this asset. + /// + public Material material; + + /// + /// HashCode based on the name of the material assigned to this asset. + /// + public int materialHashCode; + + } +} diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_Asset.cs.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_Asset.cs.meta new file mode 100644 index 0000000..44fe8a4 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_Asset.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 3bda1886f58f4e0ab1139400b160c3ee +timeCreated: 1459318952 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_Character.cs b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_Character.cs new file mode 100644 index 0000000..0c29264 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_Character.cs @@ -0,0 +1,51 @@ +using System; +using UnityEngine.TextCore; + +namespace TMPro +{ + /// + /// A basic element of text. + /// + [Serializable] + public class TMP_Character : TMP_TextElement + { + /// + /// Default constructor. + /// + public TMP_Character() + { + m_ElementType = TextElementType.Character; + this.scale = 1.0f; + } + + /// + /// Constructor for new character + /// + /// Unicode value. + /// Glyph + public TMP_Character(uint unicode, Glyph glyph) + { + m_ElementType = TextElementType.Character; + + this.unicode = unicode; + this.glyph = glyph; + this.glyphIndex = glyph.index; + this.scale = 1.0f; + } + + /// + /// Constructor for new character + /// + /// Unicode value. + /// Glyph index. + internal TMP_Character(uint unicode, uint glyphIndex) + { + m_ElementType = TextElementType.Character; + + this.unicode = unicode; + this.glyph = null; + this.glyphIndex = glyphIndex; + this.scale = 1.0f; + } + } +} diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_Character.cs.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_Character.cs.meta new file mode 100644 index 0000000..11a7d3a --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_Character.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4ac5b6a65aaeb59478e3b78660e9f134 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_CharacterInfo.cs b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_CharacterInfo.cs new file mode 100644 index 0000000..14e2361 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_CharacterInfo.cs @@ -0,0 +1,73 @@ +using UnityEngine; +using UnityEngine.TextCore; + +namespace TMPro +{ + public struct TMP_Vertex + { + public Vector3 position; + public Vector2 uv; + public Vector2 uv2; + public Vector2 uv4; + public Color32 color; + + //public Vector3 normal; + //public Vector4 tangent; + } + + /// + /// Structure containing information about individual text elements (character or sprites). + /// + public struct TMP_CharacterInfo + { + public char character; // Should be changed to an int to handle UTF 32 + /// + /// Index of the character in the raw string. + /// + public int index; // Index of the character in the input string. + public int stringLength; + public TMP_TextElementType elementType; + + public TMP_TextElement textElement; + public TMP_FontAsset fontAsset; + public TMP_SpriteAsset spriteAsset; + public int spriteIndex; + public Material material; + public int materialReferenceIndex; + public bool isUsingAlternateTypeface; + + public float pointSize; + + //public short wordNumber; + public int lineNumber; + //public short charNumber; + public int pageNumber; + + + public int vertexIndex; + public TMP_Vertex vertex_BL; + public TMP_Vertex vertex_TL; + public TMP_Vertex vertex_TR; + public TMP_Vertex vertex_BR; + + public Vector3 topLeft; + public Vector3 bottomLeft; + public Vector3 topRight; + public Vector3 bottomRight; + public float origin; + public float ascender; + public float baseLine; + public float descender; + + public float xAdvance; + public float aspectRatio; + public float scale; + public Color32 color; + public Color32 underlineColor; + public Color32 strikethroughColor; + public Color32 highlightColor; + public FontStyles style; + public bool isVisible; + //public bool isIgnoringAlignment; + } +} diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_CharacterInfo.cs.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_CharacterInfo.cs.meta new file mode 100644 index 0000000..8280ad9 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_CharacterInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 90fe1c65e6bb3bc4e90862df7297719e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_ColorGradient.cs b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_ColorGradient.cs new file mode 100644 index 0000000..e1d0907 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_ColorGradient.cs @@ -0,0 +1,68 @@ +using UnityEngine; +using System.Collections; + +namespace TMPro +{ + public enum ColorMode + { + Single, + HorizontalGradient, + VerticalGradient, + FourCornersGradient + } + + [System.Serializable] + public class TMP_ColorGradient : ScriptableObject + { + public ColorMode colorMode = ColorMode.FourCornersGradient; + + public Color topLeft; + public Color topRight; + public Color bottomLeft; + public Color bottomRight; + + const ColorMode k_DefaultColorMode = ColorMode.FourCornersGradient; + static readonly Color k_DefaultColor = Color.white; + + /// + /// Default Constructor which sets each of the colors as white. + /// + public TMP_ColorGradient() + { + colorMode = k_DefaultColorMode; + topLeft = k_DefaultColor; + topRight = k_DefaultColor; + bottomLeft = k_DefaultColor; + bottomRight = k_DefaultColor; + } + + /// + /// Constructor allowing to set the default color of the Color Gradient. + /// + /// + public TMP_ColorGradient(Color color) + { + colorMode = k_DefaultColorMode; + topLeft = color; + topRight = color; + bottomLeft = color; + bottomRight = color; + } + + /// + /// The vertex colors at the corners of the characters. + /// + /// Top left color. + /// Top right color. + /// Bottom left color. + /// Bottom right color. + public TMP_ColorGradient(Color color0, Color color1, Color color2, Color color3) + { + colorMode = k_DefaultColorMode; + this.topLeft = color0; + this.topRight = color1; + this.bottomLeft = color2; + this.bottomRight = color3; + } + } +} diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_ColorGradient.cs.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_ColorGradient.cs.meta new file mode 100644 index 0000000..28414b6 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_ColorGradient.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 54d21f6ece3b46479f0c328f8c6007e0 +timeCreated: 1468187202 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_CoroutineTween.cs b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_CoroutineTween.cs new file mode 100644 index 0000000..6d72340 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_CoroutineTween.cs @@ -0,0 +1,246 @@ +using UnityEngine; +using UnityEngine.Events; +using System.Collections; + + +namespace TMPro +{ + // Base interface for tweeners, + // using an interface instead of + // an abstract class as we want the + // tweens to be structs. + internal interface ITweenValue + { + void TweenValue(float floatPercentage); + bool ignoreTimeScale { get; } + float duration { get; } + bool ValidTarget(); + } + + // Color tween class, receives the + // TweenValue callback and then sets + // the value on the target. + internal struct ColorTween : ITweenValue + { + public enum ColorTweenMode + { + All, + RGB, + Alpha + } + + public class ColorTweenCallback : UnityEvent { } + + private ColorTweenCallback m_Target; + private Color m_StartColor; + private Color m_TargetColor; + private ColorTweenMode m_TweenMode; + + private float m_Duration; + private bool m_IgnoreTimeScale; + + public Color startColor + { + get { return m_StartColor; } + set { m_StartColor = value; } + } + + public Color targetColor + { + get { return m_TargetColor; } + set { m_TargetColor = value; } + } + + public ColorTweenMode tweenMode + { + get { return m_TweenMode; } + set { m_TweenMode = value; } + } + + public float duration + { + get { return m_Duration; } + set { m_Duration = value; } + } + + public bool ignoreTimeScale + { + get { return m_IgnoreTimeScale; } + set { m_IgnoreTimeScale = value; } + } + + public void TweenValue(float floatPercentage) + { + if (!ValidTarget()) + return; + + var newColor = Color.Lerp(m_StartColor, m_TargetColor, floatPercentage); + + if (m_TweenMode == ColorTweenMode.Alpha) + { + newColor.r = m_StartColor.r; + newColor.g = m_StartColor.g; + newColor.b = m_StartColor.b; + } + else if (m_TweenMode == ColorTweenMode.RGB) + { + newColor.a = m_StartColor.a; + } + m_Target.Invoke(newColor); + } + + public void AddOnChangedCallback(UnityAction callback) + { + if (m_Target == null) + m_Target = new ColorTweenCallback(); + + m_Target.AddListener(callback); + } + + public bool GetIgnoreTimescale() + { + return m_IgnoreTimeScale; + } + + public float GetDuration() + { + return m_Duration; + } + + public bool ValidTarget() + { + return m_Target != null; + } + } + + // Float tween class, receives the + // TweenValue callback and then sets + // the value on the target. + internal struct FloatTween : ITweenValue + { + public class FloatTweenCallback : UnityEvent { } + + private FloatTweenCallback m_Target; + private float m_StartValue; + private float m_TargetValue; + + private float m_Duration; + private bool m_IgnoreTimeScale; + + public float startValue + { + get { return m_StartValue; } + set { m_StartValue = value; } + } + + public float targetValue + { + get { return m_TargetValue; } + set { m_TargetValue = value; } + } + + public float duration + { + get { return m_Duration; } + set { m_Duration = value; } + } + + public bool ignoreTimeScale + { + get { return m_IgnoreTimeScale; } + set { m_IgnoreTimeScale = value; } + } + + public void TweenValue(float floatPercentage) + { + if (!ValidTarget()) + return; + + var newValue = Mathf.Lerp(m_StartValue, m_TargetValue, floatPercentage); + m_Target.Invoke(newValue); + } + + public void AddOnChangedCallback(UnityAction callback) + { + if (m_Target == null) + m_Target = new FloatTweenCallback(); + + m_Target.AddListener(callback); + } + + public bool GetIgnoreTimescale() + { + return m_IgnoreTimeScale; + } + + public float GetDuration() + { + return m_Duration; + } + + public bool ValidTarget() + { + return m_Target != null; + } + } + + // Tween runner, executes the given tween. + // The coroutine will live within the given + // behaviour container. + internal class TweenRunner where T : struct, ITweenValue + { + protected MonoBehaviour m_CoroutineContainer; + protected IEnumerator m_Tween; + + // utility function for starting the tween + private static IEnumerator Start(T tweenInfo) + { + if (!tweenInfo.ValidTarget()) + yield break; + + var elapsedTime = 0.0f; + while (elapsedTime < tweenInfo.duration) + { + elapsedTime += tweenInfo.ignoreTimeScale ? Time.unscaledDeltaTime : Time.deltaTime; + var percentage = Mathf.Clamp01(elapsedTime / tweenInfo.duration); + tweenInfo.TweenValue(percentage); + yield return null; + } + tweenInfo.TweenValue(1.0f); + } + + public void Init(MonoBehaviour coroutineContainer) + { + m_CoroutineContainer = coroutineContainer; + } + + public void StartTween(T info) + { + if (m_CoroutineContainer == null) + { + Debug.LogWarning("Coroutine container not configured... did you forget to call Init?"); + return; + } + + StopTween(); + + if (!m_CoroutineContainer.gameObject.activeInHierarchy) + { + info.TweenValue(1.0f); + return; + } + + m_Tween = Start(info); + m_CoroutineContainer.StartCoroutine(m_Tween); + } + + public void StopTween() + { + if (m_Tween != null) + { + m_CoroutineContainer.StopCoroutine(m_Tween); + m_Tween = null; + } + } + } +} \ No newline at end of file diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_CoroutineTween.cs.meta b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_CoroutineTween.cs.meta new file mode 100644 index 0000000..6c35b49 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_CoroutineTween.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 658c1fb149e7498aa072b0c0f3bf13f0 +timeCreated: 1464850953 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_DefaultControls.cs b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_DefaultControls.cs new file mode 100644 index 0000000..abf3d9a --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_DefaultControls.cs @@ -0,0 +1,385 @@ +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + + +namespace TMPro +{ + + public static class TMP_DefaultControls + { + public struct Resources + { + public Sprite standard; + public Sprite background; + public Sprite inputField; + public Sprite knob; + public Sprite checkmark; + public Sprite dropdown; + public Sprite mask; + } + + private const float kWidth = 160f; + private const float kThickHeight = 30f; + private const float kThinHeight = 20f; + private static Vector2 s_ThickElementSize = new Vector2(kWidth, kThickHeight); + private static Vector2 s_ThinElementSize = new Vector2(kWidth, kThinHeight); + //private static Vector2 s_ImageElementSize = new Vector2(100f, 100f); + private static Color s_DefaultSelectableColor = new Color(1f, 1f, 1f, 1f); + //private static Color s_PanelColor = new Color(1f, 1f, 1f, 0.392f); + private static Color s_TextColor = new Color(50f / 255f, 50f / 255f, 50f / 255f, 1f); + + + private static GameObject CreateUIElementRoot(string name, Vector2 size) + { + GameObject child = new GameObject(name); + RectTransform rectTransform = child.AddComponent(); + rectTransform.sizeDelta = size; + return child; + } + + static GameObject CreateUIObject(string name, GameObject parent) + { + GameObject go = new GameObject(name); + go.AddComponent(); + SetParentAndAlign(go, parent); + return go; + } + + private static void SetDefaultTextValues(TMP_Text lbl) + { + // Set text values we want across UI elements in default controls. + // Don't set values which are the same as the default values for the Text component, + // since there's no point in that, and it's good to keep them as consistent as possible. + lbl.color = s_TextColor; + lbl.fontSize = 14; + } + + private static void SetDefaultColorTransitionValues(Selectable slider) + { + ColorBlock colors = slider.colors; + colors.highlightedColor = new Color(0.882f, 0.882f, 0.882f); + colors.pressedColor = new Color(0.698f, 0.698f, 0.698f); + colors.disabledColor = new Color(0.521f, 0.521f, 0.521f); + } + + private static void SetParentAndAlign(GameObject child, GameObject parent) + { + if (parent == null) + return; + + child.transform.SetParent(parent.transform, false); + SetLayerRecursively(child, parent.layer); + } + + private static void SetLayerRecursively(GameObject go, int layer) + { + go.layer = layer; + Transform t = go.transform; + for (int i = 0; i < t.childCount; i++) + SetLayerRecursively(t.GetChild(i).gameObject, layer); + } + + // Actual controls + + public static GameObject CreateScrollbar(Resources resources) + { + // Create GOs Hierarchy + GameObject scrollbarRoot = CreateUIElementRoot("Scrollbar", s_ThinElementSize); + + GameObject sliderArea = CreateUIObject("Sliding Area", scrollbarRoot); + GameObject handle = CreateUIObject("Handle", sliderArea); + + Image bgImage = scrollbarRoot.AddComponent(); + bgImage.sprite = resources.background; + bgImage.type = Image.Type.Sliced; + bgImage.color = s_DefaultSelectableColor; + + Image handleImage = handle.AddComponent(); + handleImage.sprite = resources.standard; + handleImage.type = Image.Type.Sliced; + handleImage.color = s_DefaultSelectableColor; + + RectTransform sliderAreaRect = sliderArea.GetComponent(); + sliderAreaRect.sizeDelta = new Vector2(-20, -20); + sliderAreaRect.anchorMin = Vector2.zero; + sliderAreaRect.anchorMax = Vector2.one; + + RectTransform handleRect = handle.GetComponent(); + handleRect.sizeDelta = new Vector2(20, 20); + + Scrollbar scrollbar = scrollbarRoot.AddComponent(); + scrollbar.handleRect = handleRect; + scrollbar.targetGraphic = handleImage; + SetDefaultColorTransitionValues(scrollbar); + + return scrollbarRoot; + } + + public static GameObject CreateButton(Resources resources) + { + GameObject buttonRoot = CreateUIElementRoot("Button", s_ThickElementSize); + + GameObject childText = new GameObject("Text (TMP)"); + childText.AddComponent(); + SetParentAndAlign(childText, buttonRoot); + + Image image = buttonRoot.AddComponent(); + image.sprite = resources.standard; + image.type = Image.Type.Sliced; + image.color = s_DefaultSelectableColor; + + Button bt = buttonRoot.AddComponent