亚洲成人一区在线观看_天堂网www_国产精品久久9_中文在线播放_伊人天天_久久精品久久久精品美女

當前位置:首頁 > 網站舊欄目 > 學習園地 > 設計軟件教程 > 基于 D 2.0 編譯時反射的單元測試框架

基于 D 2.0 編譯時反射的單元測試框架
2010-01-13 22:49:47  作者:  來源:
一個模仿 Ruby Test::Unit 的 Quick & Dirty 單元測試框架,托 __traits 的福,看起來已經有那么點意思了。提取行號在目前還沒法實現,估計等 macro 出來就能解決這個問題。

SVN里的最新版在下面的鏈接處:
dotmars.googlecode.com/svn/trunk/sandbox/2.0/test.d

D2.0 代碼

 

 
  1. /**
  2. A D 2.0 unit test framework inspired by Ruby's Unit::Test
  3.  
  4. // Written in the D programming language 2.0
  5.  
  6. Authors: Wei Li (oldrev@gmail.com)
  7. License: BSD
  8. Copyright: Copyright (C) 2007 by Wei Li.
  9. */
  10.  
  11. import std.stdio;
  12.  
  13. ////////////////////////////////////////////////////////////////////////////////
  14.  
  15. struct Failure
  16. {
  17. string location;
  18. string message;
  19. string testName;
  20. }
  21.  
  22. ////////////////////////////////////////////////////////////////////////////////
  23.  
  24. struct Error
  25. {
  26. Exception exception;
  27. string testName;
  28. }
  29.  
  30. ////////////////////////////////////////////////////////////////////////////////
  31.  
  32. class TestResult
  33. {
  34. private Error[] m_errors;
  35. private Failure[] m_fails;
  36. private int m_runCount;
  37. private int m_assertionCount;
  38. private int m_testCount;
  39.  
  40. const(Error)[] errors() {
  41. return m_errors;
  42. }
  43.  
  44. const(Failure)[] failures() {
  45. return m_fails;
  46. }
  47.  
  48. void addFailure(const string loc, const string msg, const string name)
  49. {
  50. Failure f;
  51. with(f) {
  52. location = loc;
  53. message = msg;
  54. testName = name;
  55. }
  56. m_fails ~= f;
  57. }
  58.  
  59. void addError(Exception ex, const string name)
  60. {
  61. Error e;
  62. with(e) {
  63. exception = ex;
  64. testName = name;
  65. }
  66. m_errors ~= e;
  67. }
  68.  
  69. void addAssertion() {
  70. m_assertionCount++;
  71. }
  72.  
  73. void addTest() {
  74. m_testCount++;
  75. }
  76.  
  77. void addRun() {
  78. m_runCount++;
  79. }
  80.  
  81. bool hasPassed() {
  82. return m_errors.length == 0 && m_fails.length == 0;
  83. }
  84.  
  85. int errorCount() {
  86. return cast(int)m_errors.length;
  87. }
  88.  
  89. int failureCount() {
  90. return cast(int)m_fails.length;
  91. }
  92.  
  93. int runCount() {
  94. return m_runCount;
  95. }
  96.  
  97. int testCount() {
  98. return m_testCount;
  99. }
  100.  
  101. int assertionCount() {
  102. return m_assertionCount;
  103. }
  104. }
  105.  
  106.  
  107. ////////////////////////////////////////////////////////////////////////////////
  108.  
  109.  
  110. abstract class TestBase
  111. {
  112. protected this() {
  113. }
  114.  
  115. abstract void run(TestResult result);
  116.  
  117. abstract const bool isRunning();
  118. }
  119.  
  120.  
  121. ////////////////////////////////////////////////////////////////////////////////
  122.  
  123.  
  124. abstract class TestCase(Subclass) : TestBase
  125. {
  126. alias typeof(this) SelfType;
  127.  
  128. struct TestMethod
  129. {
  130. string name;
  131. void delegate() method;
  132. }
  133.  
  134. public const string name = Subclass.classinfo.name;
  135.  
  136. private TestResult m_result;
  137. private TestMethod[] m_methods;
  138. private size_t m_currentMethod;
  139. private bool m_isFailed;
  140. private bool m_running = false;
  141.  
  142. this() {
  143. }
  144.  
  145. private static const(string) ctfMakeString(T)()
  146. {
  147. string ret;
  148. foreach(str; __traits(allMembers, T)) {
  149. if(str[0..4] == "test")
  150. ret ~= `addTestMethod(TestMethod("` ~ str ~ `", &sc.` ~ str ~ `)); ` ~ "\n";
  151. }
  152. return ret;
  153. }
  154.  
  155. private void initial(const Subclass sc) {
  156. mixin(ctfMakeString!(Subclass)());
  157. }
  158.  
  159. void addTestMethod(TestMethod tm) {
  160. m_methods ~= tm;
  161. }
  162.  
  163. static Subclass createChild() {
  164. auto o = new Subclass;
  165. o.initial(o);
  166. return o;
  167. }
  168.  
  169. void setup() {}
  170.  
  171. void teardown() {}
  172.  
  173. override const bool isRunning() {
  174. return m_running;
  175. }
  176.  
  177. override void run(TestResult result)
  178. {
  179. m_result = result;
  180. m_result.addRun();
  181.  
  182. foreach(size_t i, TestMethod tm; m_methods)
  183. {
  184. m_isFailed = false;
  185. m_currentMethod = i;
  186. m_result.addTest();
  187. setup();
  188. m_running = true;
  189.  
  190. try {
  191. tm.method();
  192. }
  193. catch(Exception ex) {
  194. m_result.addError(ex, currentMethodName);
  195. }
  196. finally {
  197. m_running = false;
  198. }
  199.  
  200. teardown();
  201. }
  202. }
  203.  
  204. const string currentMethodName() {
  205. return name ~ "." ~ m_methods[m_currentMethod].name;
  206. }
  207.  
  208. private void addFailure(const string message = null)
  209. {
  210. if(!m_isFailed)
  211. {
  212. m_isFailed = true;
  213. m_result.addFailure(name, message, currentMethodName);
  214. }
  215. }
  216.  
  217. //////////////////////////// Assertion Functions ///////////////////////////
  218.  
  219. void assertTrue(bool x, const string message = null)
  220. {
  221. m_result.addAssertion();
  222. if(!x) {
  223. addFailure(message);
  224. }
  225. }
  226.  
  227. void assertNull(T)(const T value, const string message = null)
  228. {
  229. m_result.addAssertion();
  230. if(value !is null) {
  231. addFailure(message);
  232. }
  233. }
  234.  
  235. void assertNotNull(T)(const T value, const string message = null)
  236. {
  237. m_result.addAssertion();
  238. if(value is null) {
  239. addFailure(message);
  240. }
  241. }
  242.  
  243. void assertEqual(T)(const T expected, const T actual, const string message = null)
  244. {
  245. m_result.addAssertion();
  246. if(expected != actual) {
  247. addFailure(message);
  248. }
  249. }
  250.  
  251. void assertNotEqual(T)(const T expected, const T actual, const T delta, const string message = null)
  252. {
  253. m_result.addAssertion();
  254. if(expected == actual) {
  255. addFailure(message);
  256. }
  257. }
  258.  
  259. void flunk(const string message = "Flunked")
  260. {
  261. m_result.addAssertion();
  262. addFailure(message);
  263. }
  264.  
  265. }
  266.  
  267.  
  268. ////////////////////////////////////////////////////////////////////////////////
  269.  
  270. class TestSuit(Subclass, Tests...) : TestBase
  271. {
  272. alias typeof(this) SelfType;
  273.  
  274. public const string name = Subclass.classinfo.name;
  275. private TestBase[] m_tests;
  276. private bool m_running = false;
  277.  
  278. this()
  279. {
  280. m_running = false;
  281.  
  282. foreach(T; Tests)
  283. {
  284. T test = T.createChild();
  285. addTest(test);
  286. }
  287. }
  288.  
  289. static Subclass createChild() {
  290. return new Subclass;
  291. }
  292.  
  293. const(TestBase)[] tests() {
  294. return m_tests;
  295. }
  296.  
  297. void addTest(TestBase tb)
  298. in {
  299. assert(tb !is null);
  300. }
  301. body {
  302. m_tests ~= tb;
  303. }
  304.  
  305. const bool empty() {
  306. return Tests.length == 0;
  307. }
  308.  
  309. override const bool isRunning() {
  310. return m_running;
  311. }
  312.  
  313. override void run(TestResult result) {
  314. m_running = true;
  315. foreach(test; m_tests) {
  316. test.run(result);
  317. }
  318. m_running = false;
  319. }
  320. }
  321.  
  322.  
  323. static class ConsoleRunner
  324. {
  325. static void showFailures(TestResult tr)
  326. {
  327. foreach(fail; tr.failures)
  328. {
  329. writefln("Failure: %s [%s]", fail.testName, fail.location);
  330. writefln("%s", fail.message);
  331. writefln();
  332. }
  333. }
  334.  
  335. static void showErrors(TestResult tr)
  336. {
  337. foreach(err; tr.errors)
  338. {
  339. writefln("Error: s", err.testName);
  340. writefln("%s", err.exception.msg);
  341. writefln();
  342. }
  343. }
  344.  
  345. static void run(TestBase tb)
  346. {
  347. auto result = new TestResult;
  348. writefln("Started...");
  349. tb.run(result);
  350. writefln("Finished\n");
  351. showErrors(result);
  352. showFailures(result);
  353. writefln();
  354. writefln("%d tests, %d assertions, %d failures, %d errors",
  355. result.testCount, result.assertionCount, result.failureCount, result.errorCount);
  356. if(result.hasPassed)
  357. writefln("Everything is OK.");
  358. }
  359. }
  360.  
  361. ////////////////////////////////////////////////////////////////////////////////
  362.  
  363.  
  364. class MyTestCase : TestCase!(MyTestCase)
  365. {
  366. void testOne() {
  367. assertTrue(false, "A stupid assertion");
  368. assertTrue(true);
  369. assertTrue(true);
  370. throw new Exception("Exception raised");
  371. }
  372.  
  373. void testTwo() {
  374. assertTrue(true);
  375. }
  376.  
  377. void testThree() {
  378. assertTrue(true);
  379. }
  380. }
  381.  
  382. class MyTestCase2 : TestCase!(MyTestCase2)
  383. {
  384. void testOne() {
  385. assertTrue(true);
  386. }
  387.  
  388. void testTwo() {
  389. assertTrue(true);
  390. }
  391.  
  392. void testThree() {
  393. assertTrue(false, "Yet another stupid assertion");
  394. }
  395. }
  396.  
  397. class MyTestCase3 : TestCase!(MyTestCase3)
  398. {
  399. void testMethod() {
  400. assertTrue(true);
  401. }
  402. }
  403.  
  404.  
  405. class MyTestSuit1: TestSuit!(MyTestSuit1, MyTestCase)
  406. {
  407. }
  408.  
  409. class MyTestSuit2: TestSuit!(MyTestSuit2, MyTestCase2)
  410. {
  411. }
  412.  
  413. class MyTestSuit3: TestSuit!(MyTestSuit3, MyTestSuit1, MyTestSuit2, MyTestCase3)
  414. {
  415. }
  416.  
  417. void main()
  418. {
  419. auto ts = new MyTestSuit3;
  420.  
  421. ConsoleRunner.run(ts);
  422. }

 



運行結果
 
oldrev@ubuntu:~/work/dotmars/sandbox/2.0$ dmd2 -run test.d
Started...
Finished

Error: stest.MyTestCase.testOne
Exception raised

Failure: test.MyTestCase.testOne [test.MyTestCase]
A stupid assertion

Failure: test.MyTestCase2.testThree [test.MyTestCase2]
Yet another stupid assertion


7 tests, 9 assertions, 2 failures, 1 errors


 

安徽新華電腦學校專業職業規劃師為你提供更多幫助【在線咨詢
主站蜘蛛池模板: 日韩成人在线视频 | 91se在线 | 久草福利在线视频 | 欧美日韩一区二区电影 | 午夜精品久久久久久久久 | 美女逼网站 | 亚洲欧美一级 | 精品乱子伦一区二区三区 | 韩国精品一区 | 精品国产不卡一区二区三区 | 亚洲国产精品一区二区www | 国产欧美在线播放 | 在线一区二区三区 | 国产一区二区精品丝袜 | 成人影| 色www精品视频在线观看 | 国产一极片 | 日韩在线不卡 | 密室大逃脱第六季大神版在线观看 | 91高清视频在线观看 | 黄色国产一级视频 | 特级理论片 | 欧美国产日韩另类 | 青青久久av北条麻妃海外网 | 成人激情视频在线观看 | 欧美一区二区在线观看 | 久久福利电影 | 欧美激情 在线 | 国产婷婷色一区二区三区 | 久久全国免费视频 | 久草视频播放 | 在线观看国产高清视频 | 亚洲美女在线视频 | 日韩福利 | h网站在线观看 | 久久国产婷婷国产香蕉 | 一区二区三区视频 | 成人av视 | 成人精品国产 | 一区二区三区国产视频 | 欧美日韩一区二区三区在线观看 | 久久综合狠狠综合久久综合88 | av一区二区三区 | www.久久| 午夜视频网站 | 亚洲乱码一区二区三区在线观看 | 国产精品亚洲天堂 | 国产在线播 | 九九热在线视频 | 精精国产| 天天天天天天天天干 | 91性高湖久久久久久久久_久久99 | 日一区二区| 91视频在线免费观看 | 欧美日韩国产高清 | 91传媒在线播放 | 欧美日韩精品一区二区三区四区 | 999精品视频 | 中文字幕在线观看一区二区三区 | 亚洲精品一区国语对白 | 亚洲伦理一区 | 黄网站色大毛片 | japan23xxxxhd乱| 日韩中文字幕在线视频 | 韩日一区| 亚洲国产成人在线 | 在线国产欧美 | 久久中文视频 | 欧美日本三级 | 国产欧美日韩精品一区 | 亚洲福利一区 | 插插射啊爱视频日a级 | 久草.com | 亚洲欧洲一区二区 | 一区二区三区在线免费 | 91精品国产综合久久久久久软件 | 日韩欧美在线一区二区 | 国产高潮失禁喷水爽网站 | 亚洲a网 | 色婷婷国产精品久久包臀 | 播放毛片 | 国产中文字幕在线播放 | 国产精品18久久久久久久久 | 精品96久久久久久中文字幕无 | 成人精品视频99在线观看免费 | 高清国产午夜精品久久久久久 | 亚洲一区精品在线 | 欧美一区二区三区xxxx监狱 | 午夜寂寞福利视频 | 日韩欧美三区 | 日韩久草 | 久久少妇免费看 | 视频一区二区国产 | 久久小视频 | 97久久精品 | 在线看欧美 | 欧美精品在线一区 | 天天干天天曰天天操 | 国产成人涩涩涩视频在线观看 | 欧美日韩亚洲综合 | 欧美日韩国产综合视频 | 国产激情精品视频 | www久久精品 | 黄色电影在线免费观看 | 99re在线视频 | 亚洲成人一区二区三区 | 国产伊人一区 | 日日骑夜夜操 | 三级黄色在线视频 | 欧美精品理论片大全 | 中文字幕一区二区在线观看 | 国产成人精品免费视频大全最热 | 亚洲视频在线免费观看 | 三区影院 | 国产中文字幕在线 | 黄片毛片 | 亚洲激情视频在线观看 | 成人激情视频免费观看 | 99久久久99久久国产片鸭王 | 国产九九九 | 亚洲成人自拍 | 欧美成人免费 | 免费看一区二区三区 | 99日韩| 欧美日韩一区精品 | 国产精品成人一区二区三区 | 国产成人jvid在线播放 | 国产精品美女久久久久久久久久久 | 精品久久久久久久久福利 | 免费成人av | 国产人久久人人人人爽 | 久久mm| 亚洲免费在线视频 | 国产精品1区2区3区 欧美 中文字幕 | 日韩视频一区二区三区 | 久久成人国产精品 | 久久亚洲一区 | 精品亚洲视频在线观看 | 日韩在线视频一区 | 日韩在线成人 | 二区影院 | 国产成人网 | 国产av毛片 | av一级毛片| 久草在线青青草 | 综合久久色 | 久在线观看 | 伊人一区 | 精品亚洲精品 | 国产精品毛片一区视频播 | 欧美成人一区二区三区片免费 | 精品一区二区三区中文字幕 | 国产精一区二区 | 91在线免费观看 | 国产精品jizz在线观看麻豆 | 国产欧美日韩中文字幕 | 久久精品国产99久久久 | 99精品国产热久久91蜜凸 | 黄色片毛片 | 亚洲国产一区二区三区四区 | 欧美第一视频 | 五月天婷婷在线视频 | 精品视频一区二区三区 | 亚洲av毛片一区二二区三三区 | igao视频 | 日韩城人网站 | 精品国产第一国产综合精品 | 欧美亚洲综合久久 | 免费黄色片在线观看 | www.国产精品 | 极品久久 | 国产毛片毛片 | 成人午夜毛片 | 日韩中文字幕在线视频 | 日韩精品中文字幕在线播放 | 亚洲精品一二三区 | 久久久久久久久久毛片 | a视频在线 | 国产精品久久久久久婷婷天堂 | 精品久久久久久久 | 日韩av片在线免费观看 | 国产www在线 | 国产毛片一区二区 | 国产精品久久国产精品 | 国产精品女教师av久久 | 精品国产一区二区三区在线观看 | 成年视频在线观看福利资源 | 中文字幕在线欧美 | 成人a级片在线观看 | 欧美精品区 | 国产成人精品一区二区视频免费 | 中文字幕在线免费播放 | 国产精品久久久久久久久久新婚 | 91性高湖久久久久久久久_久久99 | 亚洲精品乱码久久久久久蜜桃图片 | 久久精品色欧美aⅴ一区二区 | 国产中文字幕一区二区三区 | 精品视频在线观看一区二区三区 | 久久久久久久 | 欧美亚洲| 亚洲国产精品一区二区久久 | 国产91网 | 色综合一区二区三区 | 国产精品亚洲精品久久 | 中国大陆高清aⅴ毛片 | 精品免费国产一区二区三区四区 | 久久久久国产精品 | 成人a视频 | 欧美日韩黄色一级片 | 日韩a∨| 91精品国产欧美一区二区成人 | 日本综合色 | 亚洲午夜av | www.成人在线视频 | 久久久久久久国产精品 | 精品国产一区二区三区性色av | 美女在线一区 | 香蕉三级 | 亚洲 欧美日韩 国产 中文 | 在线免费视频一区二区 | 国产精品美女久久久久久久久久久 | 日本成人黄色网址 | 日韩免费网站 | 亚洲视频a| 免费国产一区二区 | 欧美成人综合在线 | 一级黄色片日本 | 精品视频一区二区三区 | 免费成人在线观看视频 | 久久国产一区视频 | 亚洲 中文 欧美 日韩在线观看 | 欧美激情 在线 | 欧美久久a | 国产精品亲子伦av一区二区三区 | 看黄色.com| 亚洲国产精品久久久久 | 国产黄色在线观看 | 91久久久久久 | 国产免费无遮挡 | 男人的天堂亚洲 | 91精品国产91久久综合桃花 | 我要看免费黄色片 | 欧美中文在线 | 欧美日韩视频 | 国产精品com | 日韩一区二区三区在线观看 | 欧美中文字幕一区 | 日韩午夜激情 | 欧美一区视频 | 久久99国产精一区二区三区 | 精品久久久久久久人人人人传媒 | 91麻豆产精品久久久久久 | 日韩超级毛片 | 韩日一区| 久久久久久网站 | av一区二区三区四区 | 国产一区二区高潮 | 激情久久av一区av二区av三区 | 午夜看片| 国产一区二区观看 | 精品一区视频 | 免费一区二区三区 | 免费v片在线观看 | 欧美亚洲高清 | 国产精品毛片久久久久久久 | 国产高清一级 | 日本黄色大片免费看 | 亚洲欧美日韩一区 | 午夜欧美| 久久精品视频网站 | www..99热 | 亚洲视频精品 | 国产成人综合一区二区三区 | 在线天堂视频 | 亚洲动漫在线观看 | 一级视频黄色 | 欧美一二三四成人免费视频 | 亚洲品质自拍视频网站 | 伊人艹 | 春色av| 手机亚洲第一页 | 欧美国产日韩一区 | 亚洲在线播放 | 福利网站在线观看 | 国产精品久久av | 久久91精品国产 | 欧美黑人一级毛片 | 亚洲精品中文字幕乱码无线 | 欧美午夜一区二区三区免费大片 | 91久久精品一区二区三区 | 99爱精品在线 | 奇米精品一区二区三区在线观看 | 久久噜噜噜精品国产亚洲综合 | 久久久久亚洲精品 | 国产精品久久久久久久 | 羞羞的视频在线观看 | 91尤物网站网红尤物福利 | 7777视频| 欧美电影一区 | 国产大学生援交视频在线观看 | 免费一区二区三区 | 欧美在线二区 | 欧美高清hd | 日日碰碰| 91亚洲国产精品 | 久久精品一区二区三区四区 | 国产综合久久久 | 91丁香 | 精品国产欧美一区二区三区成人 | 国产精品毛片一区二区三区 | 91精品一区二区三区久久久久久 | 在线免费观看av片 | 久久麻豆视频 | 久久精品播放 | www.伊人| av网址在线播放 | 99精品欧美一区二区蜜桃免费 | 红桃av一区二区 | 久久视频一区二区 | 成人av福利| 久久精品国产99国产精2020新增功能 | 爱草在线| 日韩av资源站 | 国产精品自产拍在线观看 | 久久久精品欧美 | 精品国产一区二区三区成人影院 | 亚洲色欲色欲www | 91精品国产一区二区三区免费 | 精品国产99 | 久草免费在线 | 69av片| 精久视频| 一区二区三区免费在线观看 | 91视频综合 | 91精品久久久久久久久久入口 | 蜜臀91精品国产高清在线观看 | 四虎久久精品 | 国产精品99久久免费观看 | 精品欧美一区二区三区久久久小说 | 久久精品一区二区三区四区 | 久久免费精品视频 | 亚洲欧美一区二区精品中文字幕 | 中文字幕不卡在线88 | 久久久国产精品视频 | 午夜国产精品视频 | 在线一区二区三区做爰视频网站 | 亚洲一二三区在线观看 | 超碰美女 | 精品1区| 国产香蕉97碰碰久久人人九色 | 99精品在线观看 | 国产精品久久久久久久久久免费看 | 天天看夜夜爽 | 欧美狠狠操 | 簧片av | 国产精品美女 | 精品日韩一区 | 久久爱综合网 | 日韩国产欧美一区 | 伊人99 | 欧美一区二区在线 | 亚洲不卡 | 天天天操| 超碰在线天天 | 亚洲视频 欧美视频 | 99草视频 | 中文字幕在线资源 | 夜夜草视频 | 欧美性猛交一区二区三区精品 | 久久精美视频 | 日本成人中文字幕 | 国产98色在线 | 日韩 | 国产精品久久久久久久久污网站 | 国产特级毛片 | 爱干视频| 国产日韩中文字幕 | 国产三级久久久久 | 91精品久久久久久久久久 | 午夜精品久久久久 | 国产成人高清视频 | 爱爱视频在线观看 | 欧美精品欧美极品欧美激情 | 一区二区三区免费视频网站 | 亚洲成人激情在线观看 | 91黄色免费看 | 国产日韩欧美一区二区 | www.亚洲| 中文字幕一区二区三区四区 | 欧美九九九 | 毛片com| 理论片一区 | 欧美一区二区三区四区视频 | 国产免费看 | 蜜桃色网| 精品日韩一区 | 亚洲视频一区二区在线 | 亚洲精品一区二区三区四区高清 | 久久久久久免费免费 | 精品国产91乱码一区二区三区 | 午夜精品一区二区三区在线播放 | 欧美一级片免费在线观看 | 视频一区二区中文字幕日韩 | 国产精品免费一区二区 | 91视频三区| 亚洲欧美日韩在线 | www.一区 | 国产精品成人在线 | 亚洲天堂一区二区 | 免费的一级黄色片 | 国产成人精品在线 | 久久精品亚洲精品国产欧美 | 在线成人一区 | 久久精品免费一区二区三区 | 亚洲欧美一区二区三区在线 | 亚洲一区二区精品在线观看 | 亚洲国产成人久久一区二区三区 | 亚洲精品一区二区三区四区高清 | 日韩高清在线一区 | 中文字幕免费视频观看 | 日韩有码一区 | 欧洲亚洲精品久久久久 | 黑人av | 中文字幕日韩一区 | 视频羞羞 | 欧美日韩在线观看中文字幕 | 国产片网站| 亚洲欧洲精品一区二区 | 无码日韩精品一区二区免费 | 特级黄一级播放 | 一级全黄少妇性色生活片毛片 | 国产久| 精品中文字幕一区二区 | 亚洲男人网 | 91久久综合 | 亚洲在线视频 | 日韩欧美中文字幕在线视频 | 一二三区视频 | 久久天天躁狠狠躁夜夜躁2014 | 欧美一区二区免费 | 羞羞视频免费观看 | www视频在线观看 | 精品黄网| 亚洲成人免费在线 | 精品久久久久久久久久久久久久久久久久 | 日韩精品专区在线影院重磅 | aaa大片免费观看 | 亚洲免费视频网 | 国产一区二 | 中文在线亚洲 | 国产精品成人在线观看 | 中文在线一区 | 国产激情在线观看 | 欧美黄色网 | 日韩在线视频精品 | 国外成人在线视频 | 欧美日韩中文字幕 | 99久久久国产精品 | 91在线精品一区二区三区 | 国产一区二区三区四区 | 综合一区二区三区 | 国产精品毛片一区二区在线看 | 91九色在线观看 | 久久久久久亚洲国产 | 亚洲成人免费电影 | 久久精品亚洲精品国产欧美kt∨ | 国产精品视频播放 | 国产精品一区二区在线看 | 国产亚洲欧美在线 | 久草福利 | 在线中文字幕av | 国产视频2021| 久久人人爽人人爽 | 色人人 | 欧美日本韩国一区二区三区 | 国内精品视频一区二区三区八戒 | 黄色大片视频 | 一级黄色录像视频 | 亚洲精品福利 | 91精品一区二区三区久久久久 | 日韩久久久久久久久久久 | 国产探花| 日本精a在线观看 | 欧美一区二区三区视频在线观看 | 国产欧美精品一区二区三区四区 | 一级一级一级一级毛片 | 天天操夜夜干 | 国产美女久久久 | 成人区一区二区三区 | 中文字幕成人在线 | 欧美日韩一级在线观看 | 一级电影免费在线观看 | 99久久婷婷国产综合精品电影 | 国产精品久久久久久吹潮 | 中文字幕一区二区三区乱码图片 | 91精品久久久久久久久中文字幕 | 精品成人免费一区二区在线播放 | 99久久精品国产一区二区三区 | 偷派自拍| 欧美一区久久 | 一区二区手机在线 | 羞羞av在线| 中文字幕一区二区三区在线视频 | 久久综合九色综合欧美狠狠 | 国产精品一区二区三区四区 | 91视频在线免费观看 | 久久久久久国产精品 | 一区二区影视 | jlzzjlzz亚洲日本少妇 | 久久久精品久久久久久 | 久久99精品久久久 | 日韩精品一区二区在线观看 | 欧洲一级毛片 | 国产精品网站在线观看 | 国产一级视频 | 日本一区二区高清不卡 | 一本久久a久久精品亚洲 | 久久av网址 | 日韩久久久久久久久久久 | xx视频在线观看 | 精品在线看 | 久久精品无码一区二区日韩av | 免费的黄色网 | 国产精品一二 | 伊人爱爱网 | 欧美成人免费在线视频 | 欧美白人做受xxxx视频 | 国产伦精品一区二区三区四区视频 | 欧美一级三级 | 欧美 日韩 国产 成人 在线 | 国产欧美精品一区二区三区 | 自拍小电影 | 成人在线观看一区 | 成人在线观看免费 | 精品久久久久久国产 | 国产精品久久久久久久久大全 | 成人午夜在线视频 | 日韩电影专区 | 无码少妇一区二区三区 | 欧美一区二区伦理片 | 欧美极品一区二区 | 成人日韩av | 欧美日韩视频在线 | 日韩在线看片 | 中文字幕亚洲一区二区三区 | 日本三级在线视频 | 99精品视频一区二区三区 | 国产一区二区 | 久久伊 | 久久精品国产99国产精品 | 99久久精品免费看国产一区二区三区 | 亚洲人人 | 色一级| 一区二区三区视频在线播放 | 狠久久| 欧美另类综合 | 中文字幕一区在线观看视频 | 国产一区二区三区四区在线观看 | 性色视频免费观看 | 亚洲国产精品自拍 | 99精品欧美一区二区三区综合在线 | 久草新免费| 久久久久久国产精品 | 成人爽a毛片一区二区免费 美女高潮久久久 | 国产精品国产精品国产专区不片 | 一级做a毛片 | 国产成人61精品免费看片 | 国产精品日韩在线 | 99久久精品国产毛片 | aaa在线免费观看 | 91午夜精品| 欧美一区二区三 | 成人精品一区二区三区 | 在线视频久久 | a久久久久久| 成人精品一区二区三区中文字幕 | 欧美国产伦久久久久久 | 精品日韩一区 | 亚洲精品成人网 | 91免费在线播放 | 激情网在线观看 | 久久免费视频3 | 91在线视频观看 | 国产一区二区三区视频在线观看 | 欧美黄色一区 | 亚洲美女网站 | 一级一片免费视频 | 97成人在线免费视频 | 久久精品一二三四 | 精品三级在线观看 | 日韩综合在线 | 久久99国产精品久久99大师 | 亚洲第一视频网站 | 91国内精品 | 中文字幕免费在线观看视频 | 亚洲毛片在线 | av在线毛片| 日韩国产欧美视频 | 五月婷婷激情网 | 欧美理论在线观看 | 美女午夜影院 | 国产欧美日韩成人 | 精品久久久久久亚洲综合网 | 香蕉三级 | 91观看| 久久亚洲精品中文字幕 | 欧美精品在线一区 | 欧美麻豆 | 亚洲国产精久久久久久久 | 成人国产精品久久久 | 国产乱码精品一区二区三区忘忧草 | 一区二区三区在线观看视频 | 成年人黄色免费视频 | 午夜精品久久久久 | 九九热这里只有精品在线观看 | 亚洲色图一区二区三区 |