├── .babelrc ├── .buckconfig ├── .codeclimate.yml ├── .editorconfig ├── .eslintignore ├── .eslintrc ├── .flowconfig ├── .gitattributes ├── .gitignore ├── .gitmodules ├── .ruby-version ├── .travis.yml ├── .watchmanconfig ├── Gemfile ├── Gemfile.lock ├── LICENSE ├── README.md ├── __tests__ ├── .eslintrc ├── __snapshots__ │ └── index.test.js.snap ├── components │ ├── __snapshots__ │ │ ├── customWebView.test.js.snap │ │ ├── dialog.test.js.snap │ │ ├── htmlView.test.js.snap │ │ └── superCardView.test.js.snap │ ├── customWebView.test.js │ ├── dialog.test.js │ ├── discover │ │ ├── exam-detail │ │ │ └── view │ │ │ │ ├── __snapshots__ │ │ │ │ ├── examDetailBack.test.js.snap │ │ │ │ ├── examDetailContent.test.js.snap │ │ │ │ └── examDetailIndicator.test.js.snap │ │ │ │ ├── examDetailBack.test.js │ │ │ │ ├── examDetailContent.test.js │ │ │ │ └── examDetailIndicator.test.js │ │ ├── home │ │ │ ├── __snapshots__ │ │ │ │ ├── growthImageCard.test.js.snap │ │ │ │ └── growthSlider.test.js.snap │ │ │ ├── growthImageCard.test.js │ │ │ └── growthSlider.test.js │ │ ├── recommend-articles │ │ │ └── view │ │ │ │ ├── __snapshots__ │ │ │ │ └── recommendArticlesItem.test.js.snap │ │ │ │ └── recommendArticlesItem.test.js │ │ ├── roadmap-detail │ │ │ └── view │ │ │ │ ├── __snapshots__ │ │ │ │ └── timeLineView.test.js.snap │ │ │ │ └── timeLineView.test.js │ │ ├── solution │ │ │ └── view │ │ │ │ ├── __snapshots__ │ │ │ │ └── solutionContentItem.test.js.snap │ │ │ │ └── solutionContentItem.test.js │ │ ├── thought-works-books │ │ │ └── view │ │ │ │ ├── __snapshots__ │ │ │ │ └── domainDetailPageItem.test.js.snap │ │ │ │ └── domainDetailPageItem.test.js │ │ ├── todo-list │ │ │ └── view │ │ │ │ ├── __snapshots__ │ │ │ │ ├── doneListTitle.test.js.snap │ │ │ │ └── todoListItem.test.js.snap │ │ │ │ ├── doneListTitle.test.js │ │ │ │ └── todoListItem.test.js │ │ └── view │ │ │ ├── __snapshots__ │ │ │ ├── discoverGridItem.test.js.snap │ │ │ ├── discoverMoreItem.test.js.snap │ │ │ ├── discoverOnlineReadItem.test.js.snap │ │ │ └── simpleListItem.test.js.snap │ │ │ ├── discoverGridItem.test.js │ │ │ ├── discoverMoreItem.test.js │ │ │ ├── discoverOnlineReadItem.test.js │ │ │ └── simpleListItem.test.js │ ├── htmlView.test.js │ └── superCardView.test.js ├── containers │ ├── __snapshots__ │ │ └── comingSoon.test.js.snap │ ├── comingSoon.test.js │ ├── community │ │ ├── __snapshots__ │ │ │ └── community.test.js.snap │ │ ├── community.test.js │ │ └── forum │ │ │ ├── __snapshots__ │ │ │ ├── forumContainers.test.js.snap │ │ │ ├── forumDetail.test.js.snap │ │ │ ├── forumUserCenter.test.js.snap │ │ │ └── forumView.test.js.snap │ │ │ ├── forumContainers.test.js │ │ │ ├── forumDetail.test.js │ │ │ ├── forumUserCenter.test.js │ │ │ ├── forumView.test.js │ │ │ └── mockdata.json │ ├── discover │ │ ├── __snapshots__ │ │ │ └── discover.test.js.snap │ │ ├── article-detail │ │ │ ├── __snapshots__ │ │ │ │ └── articleDetail.test.js.snap │ │ │ └── articleDetail.test.js │ │ ├── article-list │ │ │ ├── __snapshots__ │ │ │ │ └── articleList.test.js.snap │ │ │ └── articleList.test.js │ │ ├── chapter-list │ │ │ ├── __snapshots__ │ │ │ │ └── chapterList.test.js.snap │ │ │ ├── article │ │ │ │ ├── __snapshots__ │ │ │ │ │ └── Articles.test.js.snap │ │ │ │ └── articles.test.js │ │ │ └── chapterList.test.js │ │ ├── discover.test.js │ │ ├── exam-detail │ │ │ ├── __snapshots__ │ │ │ │ └── examDetail.test.js.snap │ │ │ └── examDetail.test.js │ │ ├── exam-list │ │ │ ├── __snapshots__ │ │ │ │ └── examLIst.test.js.snap │ │ │ └── examLIst.test.js │ │ ├── project-detail │ │ │ ├── __snapshots__ │ │ │ │ └── projectDetail.test.js.snap │ │ │ └── projectDetail.test.js │ │ ├── project-list │ │ │ ├── __snapshots__ │ │ │ │ └── projectList.test.js.snap │ │ │ └── projectList.test.js │ │ ├── recommend-articles │ │ │ ├── __snapshots__ │ │ │ │ └── recommendArticles.test.js.snap │ │ │ ├── article │ │ │ │ └── localArticleView.test.js │ │ │ └── recommendArticles.test.js │ │ ├── roadmap-detail │ │ │ ├── __snapshots__ │ │ │ │ └── roadmapDetail.test.js.snap │ │ │ └── roadmapDetail.test.js │ │ ├── roadmap-list │ │ │ ├── __snapshots__ │ │ │ │ └── roadmapList.test.js.snap │ │ │ └── roadmapList.test.js │ │ ├── solution-detail │ │ │ ├── __snapshots__ │ │ │ │ └── solutionDetail.test.js.snap │ │ │ └── solutionDetail.test.js │ │ ├── solution │ │ │ ├── __snapshots__ │ │ │ │ └── solution.test.js.snap │ │ │ └── solution.test.js │ │ ├── thought-works-books │ │ │ ├── __snapshots__ │ │ │ │ └── thoughtWorksBooks.test.js.snap │ │ │ ├── domain-detial-page │ │ │ │ ├── __snapshots__ │ │ │ │ │ └── domainDetailPage.test.js.snap │ │ │ │ └── domainDetailPage.test.js │ │ │ └── thoughtWorksBooks.test.js │ │ ├── todo-list │ │ │ ├── __snapshots__ │ │ │ │ └── todoList.test.js.snap │ │ │ └── todoList.test.js │ │ ├── todo-lists │ │ │ ├── __snapshots__ │ │ │ │ └── todoLists.test.js.snap │ │ │ └── todoLists.test.js │ │ ├── toolbox-detail │ │ │ ├── __snapshots__ │ │ │ │ └── toolBoxDetail.test.js.snap │ │ │ └── toolBoxDetail.test.js │ │ └── toolbox-list │ │ │ ├── __snapshots__ │ │ │ └── toolBoxList.test.js.snap │ │ │ └── toolBoxList.test.js │ ├── home │ │ ├── __snapshots__ │ │ │ ├── home.test.js.snap │ │ │ ├── paperIntroView.test.js.snap │ │ │ ├── sectionArticleTab.test.js.snap │ │ │ ├── sectionGrowthTab.test.js.snap │ │ │ └── sectionPage.test.js.snap │ │ ├── home.test.js │ │ ├── paperIntroView.test.js │ │ ├── sectionArticleTab.test.js │ │ ├── sectionGrowthTab.test.js │ │ └── sectionPage.test.js │ ├── practise │ │ ├── __snapshots__ │ │ │ └── practise.test.js.snap │ │ ├── algorithm │ │ │ └── algorithmView.test.js │ │ ├── leetcode │ │ │ ├── __snapshots__ │ │ │ │ └── leetCodeView.test.js.snap │ │ │ └── leetCodeView.test.js │ │ └── practise.test.js │ ├── skill-tree │ │ ├── __snapshots__ │ │ │ ├── skillTree.test.js.snap │ │ │ └── skillTreeDetail.test.js.snap │ │ ├── skillTree.test.js │ │ └── skillTreeDetail.test.js │ └── user-center │ │ ├── __snapshots__ │ │ └── userCenter.test.js.snap │ │ ├── about-us │ │ ├── __snapshots__ │ │ │ ├── aboutUs.test.js.snap │ │ │ ├── contributorProfile.test.js.snap │ │ │ └── label.test.js.snap │ │ ├── aboutUs.test.js │ │ ├── contributorProfile.test.js │ │ └── label.test.js │ │ └── userCenter.test.js ├── helpers │ └── html-transform.js ├── icon │ ├── __snapshots__ │ │ └── growthFont.test.js.snap │ └── growthFont.test.js ├── index.test.js ├── navigation │ └── navigation.test.js └── utils │ ├── __snapshots__ │ └── dialog.test.js.snap │ ├── dialog.test.js │ └── helper.test.js ├── android ├── app │ ├── BUCK │ ├── build.gradle │ ├── my-release-key.ks │ ├── proguard-rules.pro │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── assets │ │ └── fonts │ │ │ ├── Entypo.ttf │ │ │ ├── EvilIcons.ttf │ │ │ ├── FontAwesome.ttf │ │ │ ├── Foundation.ttf │ │ │ ├── Ionicons.ttf │ │ │ ├── MaterialCommunityIcons.ttf │ │ │ ├── MaterialIcons.ttf │ │ │ ├── Octicons.ttf │ │ │ ├── SimpleLineIcons.ttf │ │ │ └── Zocial.ttf │ │ ├── java │ │ └── ren │ │ │ └── growth │ │ │ ├── MainActivity.java │ │ │ ├── MainApplication.java │ │ │ └── util │ │ │ ├── AppUtil.java │ │ │ └── FileUtils.java │ │ └── res │ │ ├── drawable-land-hdpi │ │ └── launch_screen.png │ │ ├── drawable-land-ldpi │ │ └── launch_screen.png │ │ ├── drawable-land-mdpi │ │ └── launch_screen.png │ │ ├── drawable-land-xhdpi │ │ └── launch_screen.png │ │ ├── drawable-land-xxhdpi │ │ └── launch_screen.png │ │ ├── drawable-land-xxxhdpi │ │ └── launch_screen.png │ │ ├── drawable-port-hdpi │ │ └── launch_screen.png │ │ ├── drawable-port-ldpi │ │ └── launch_screen.png │ │ ├── drawable-port-mdpi │ │ └── launch_screen.png │ │ ├── drawable-port-xhdpi │ │ └── launch_screen.png │ │ ├── drawable-port-xxhdpi │ │ └── launch_screen.png │ │ ├── drawable-port-xxxhdpi │ │ └── launch_screen.png │ │ ├── drawable │ │ └── launch_screen_bitmap.xml │ │ ├── layout │ │ └── launch_screen.xml │ │ ├── mipmap-hdpi │ │ └── ic_launcher.png │ │ ├── mipmap-ldpi │ │ └── ic_launcher.png │ │ ├── mipmap-mdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxxhdpi │ │ └── ic_launcher.png │ │ └── values │ │ ├── colors.xml │ │ ├── strings.xml │ │ └── styles.xml ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── keystores │ ├── BUCK │ └── debug.keystore.properties └── settings.gradle ├── app.json ├── assets ├── fonts │ └── growth.ttf ├── glyphmaps │ └── growth.json └── growth-ui │ ├── circle.svg │ ├── explore-1-1.svg │ ├── explore-1-2.svg │ ├── explore-1-3.svg │ ├── explore-1-4.svg │ ├── explore-2-1.svg │ ├── explore-2-2.svg │ ├── explore-2-3.svg │ ├── explore-2-4.svg │ ├── explore-2-5.svg │ ├── explore-2-6.svg │ ├── home-1.svg │ ├── home-2.svg │ ├── home-3.svg │ ├── home-4.svg │ ├── home-5.svg │ ├── home-6.svg │ ├── home-7.svg │ ├── home-8.svg │ ├── icon-arrow-left.svg │ ├── icon-arrow-right.svg │ ├── icon-bookmark.svg │ ├── icon-compass.svg │ ├── icon-get.svg │ ├── icon-graowth.svg │ ├── icon-graphic.svg │ ├── icon-list.svg │ ├── icon-more.svg │ ├── icon-social.svg │ ├── img │ ├── expore-1.jpg │ ├── expore-1.thumbnail.jpg │ ├── expore-2.jpg │ ├── expore-2.thumbnail.jpg │ ├── expore-3.jpg │ ├── expore-3.thumbnail.jpg │ ├── expore-4.jpg │ ├── expore-4.thumbnail.jpg │ ├── expore-5.jpg │ ├── expore-5.thumbnail.jpg │ ├── expore-6.jpg │ ├── expore-6.thumbnail.jpg │ ├── expore-7.jpg │ ├── expore-7.thumbnail.jpg │ ├── expore-8.jpg │ ├── expore-8.thumbnail.jpg │ ├── home-1.jpg │ ├── home-2.jpg │ ├── home-3.jpg │ ├── home-4.jpg │ ├── home-5.jpg │ ├── home-6.jpg │ ├── home-7.jpg │ └── home-8.jpg │ ├── logo.ai │ ├── md-compass.svg │ ├── md-egg.svg │ ├── md-home.svg │ ├── md-people.svg │ ├── md-person.svg │ └── splash.ai ├── ci └── .travis-android-license-bugfix.sh ├── docs └── apple.png ├── e2e ├── android-package.sh ├── android │ └── navigation.py ├── ios-package.sh ├── ios │ └── navigation.py └── prepare.sh ├── fastlane ├── Appfile ├── Fastfile ├── Pluginfile ├── README.md └── metadata │ └── android │ ├── en-GB │ ├── full_description.txt │ ├── short_description.txt │ ├── title.txt │ └── video.txt │ ├── en-US │ ├── full_description.txt │ ├── short_description.txt │ ├── title.txt │ └── video.txt │ └── zh-CN │ ├── changelogs │ ├── 100008.txt │ ├── 100028.txt │ ├── 100048.txt │ ├── 101008.txt │ ├── 102018.txt │ ├── 102028.txt │ ├── 104018.txt │ ├── 200008.txt │ ├── 2002.txt │ ├── 2018.txt │ ├── 2028.txt │ ├── 2058.txt │ ├── 2068.txt │ ├── 250000.txt │ ├── 3008.txt │ ├── 3018.txt │ ├── 3028.txt │ ├── 3038.txt │ ├── 3058.txt │ ├── 3068.txt │ ├── 3078.txt │ ├── 4018.txt │ ├── 4028.txt │ ├── 5028.txt │ ├── 5048.txt │ ├── 5058.txt │ ├── 6008.txt │ ├── 6028.txt │ ├── 6038.txt │ ├── 6058.txt │ ├── 6068.txt │ ├── 7008.txt │ ├── 7018.txt │ ├── 7028.txt │ ├── 8008.txt │ ├── 8028.txt │ ├── 8058.txt │ ├── 8068.txt │ ├── 8098.txt │ ├── 8118.txt │ ├── 9008.txt │ ├── 9018.txt │ ├── 9028.txt │ ├── 9038.txt │ ├── 9058.txt │ └── 9088.txt │ ├── full_description.txt │ ├── images │ └── icon.png │ ├── short_description.txt │ ├── title.txt │ └── video.txt ├── fonts.gradle ├── growth-content.gradle ├── index.android.js ├── index.ios.js ├── ios ├── fastlane │ ├── Appfile │ ├── Deliverfile │ ├── Fastfile │ ├── metadata │ │ ├── app_icon.jpg │ │ ├── copyright.txt │ │ ├── primary_category.txt │ │ ├── primary_first_sub_category.txt │ │ ├── primary_second_sub_category.txt │ │ ├── review_information │ │ │ ├── demo_password.txt │ │ │ ├── demo_user.txt │ │ │ ├── email_address.txt │ │ │ ├── first_name.txt │ │ │ ├── last_name.txt │ │ │ ├── notes.txt │ │ │ └── phone_number.txt │ │ ├── secondary_category.txt │ │ ├── secondary_first_sub_category.txt │ │ ├── secondary_second_sub_category.txt │ │ ├── trade_representative_contact_information │ │ │ ├── address_line1.txt │ │ │ ├── city_name.txt │ │ │ ├── country.txt │ │ │ ├── email_address.txt │ │ │ ├── first_name.txt │ │ │ ├── is_displayed_on_app_store.txt │ │ │ ├── last_name.txt │ │ │ ├── phone_number.txt │ │ │ ├── postal_code.txt │ │ │ ├── state.txt │ │ │ └── trade_name.txt │ │ └── zh-Hans │ │ │ ├── description.txt │ │ │ ├── keywords.txt │ │ │ ├── marketing_url.txt │ │ │ ├── name.txt │ │ │ ├── privacy_url.txt │ │ │ ├── release_notes.txt │ │ │ └── support_url.txt │ └── screenshots │ │ ├── README.txt │ │ └── zh-Hans │ │ ├── 1_ipadPro_1.11.png │ │ ├── 1_iphone6Plus_1.1.png │ │ ├── 2_ipadPro_2.12.png │ │ ├── 2_iphone6Plus_2.2.png │ │ ├── 3_ipadPro_3.13.png │ │ ├── 3_iphone6Plus_3.3.png │ │ ├── 4_ipadPro_4.14.png │ │ ├── 4_iphone6Plus_4.4.png │ │ ├── 5_ipadPro_5.15.png │ │ └── 5_iphone6Plus_5.5.png ├── growth.xcodeproj │ ├── project.pbxproj │ └── xcshareddata │ │ └── xcschemes │ │ ├── growth-tvOS.xcscheme │ │ └── growth.xcscheme ├── growth │ ├── AppDelegate.h │ ├── AppDelegate.m │ ├── Base.lproj │ │ └── LaunchScreen.xib │ ├── Images.xcassets │ │ ├── AppIcon.appiconset │ │ │ ├── Contents.json │ │ │ ├── icon-20@1x.png │ │ │ ├── icon-20@2x.png │ │ │ ├── icon-20@3x.png │ │ │ ├── icon-29@1x.png │ │ │ ├── icon-29@2x.png │ │ │ ├── icon-29@3x.png │ │ │ ├── icon-40@1x.png │ │ │ ├── icon-40@2x.png │ │ │ ├── icon-40@3x.png │ │ │ ├── icon-50@1x.png │ │ │ ├── icon-50@2x.png │ │ │ ├── icon-57@1x.png │ │ │ ├── icon-57@2x.png │ │ │ ├── icon-60@2x.png │ │ │ ├── icon-60@3x.png │ │ │ ├── icon-72@1x.png │ │ │ ├── icon-72@2x.png │ │ │ ├── icon-76@1x.png │ │ │ ├── icon-76@2x.png │ │ │ └── icon-83.5@2x.png │ │ └── LaunchImage.launchimage │ │ │ ├── Contents.json │ │ │ ├── Default-568h@2x.png │ │ │ ├── Default-667h@2x.png │ │ │ ├── Default-Landscape-736h@3x.png │ │ │ ├── Default-Landscape.png │ │ │ ├── Default-Landscape@2x.png │ │ │ ├── Default-Portrait-736h@3x.png │ │ │ ├── Default-Portrait.png │ │ │ ├── Default-Portrait@2x.png │ │ │ └── Default@2x.png │ ├── Info.plist │ ├── Resources │ │ ├── Entypo.ttf │ │ ├── EvilIcons.ttf │ │ ├── FontAwesome.ttf │ │ ├── Foundation.ttf │ │ ├── Ionicons.ttf │ │ ├── MaterialCommunityIcons.ttf │ │ ├── MaterialIcons.ttf │ │ ├── Octicons.ttf │ │ ├── SimpleLineIcons.ttf │ │ └── Zocial.ttf │ └── main.m └── growthTests │ ├── Info.plist │ └── growthTests.m ├── jest.setup.js ├── package-lock.json ├── package.json ├── requirements.txt ├── resources ├── icon.png └── splash.png ├── src ├── components │ ├── CustomWebView.js │ ├── GrEditor.js │ ├── HtmlView.js │ ├── Label.js │ ├── Line.js │ ├── LocalArticleView.js │ ├── SuperCardView.js │ ├── TabIcon.js │ ├── dialog.js │ ├── discover │ │ ├── Launch.js │ │ ├── exam-detail │ │ │ └── view │ │ │ │ ├── ExamDetailBack.js │ │ │ │ ├── ExamDetailContent.js │ │ │ │ └── ExamDetailIndicator.js │ │ ├── project-list │ │ │ └── view │ │ │ │ └── ProjectListItem.js │ │ ├── recommend-articles │ │ │ └── view │ │ │ │ └── RecommendSimpleItem.js │ │ ├── roadmap-detail │ │ │ └── view │ │ │ │ └── TimeLineView.js │ │ ├── solution │ │ │ └── view │ │ │ │ └── SolutionContentItem.js │ │ ├── thought-works-books │ │ │ └── view │ │ │ │ └── DomainDetailPageItem.js │ │ ├── todo-list │ │ │ └── view │ │ │ │ ├── DoneListTitle.js │ │ │ │ └── TodoListItem.js │ │ └── view │ │ │ ├── DiscoverGridItem.js │ │ │ ├── DiscoverMoreItem.js │ │ │ ├── DiscoverOnlineReadItem.js │ │ │ └── SimpleListItem.js │ └── home │ │ ├── GrowthCard.js │ │ ├── GrowthImageCard.js │ │ └── GrowthSlider.js ├── constants │ ├── BOOKS.js │ ├── CONTRIBUTORS.js │ ├── DOMAIN_NAME.js │ ├── EXAM_LIST.js │ ├── HELPER_ARTICLES.js │ ├── QUIZS.js │ ├── QUIZS_ICON.js │ ├── RECOMMEND_ARTICLES_LIST.js │ ├── RECOMMEND_BOOKS_LIST.js │ ├── SECTIONS.js │ ├── SOLUTIONS.js │ ├── TIPS.js │ ├── TODO_LISTS.js │ ├── TODO_LISTS_ITEM.js │ ├── TWBOOKS.js │ ├── config.js │ ├── quiz │ │ ├── CLEAN_CODE.js │ │ ├── CSS.js │ │ ├── FE.js │ │ ├── HTML.js │ │ ├── JAVASCRIPT.js │ │ └── NODEJS.js │ └── sections │ │ ├── section-0.js │ │ ├── section-1.js │ │ ├── section-2.js │ │ ├── section-3.js │ │ ├── section-4.js │ │ ├── section-5.js │ │ ├── section-6.js │ │ └── section-7.js ├── containers │ ├── ComingSoonView.js │ ├── community │ │ ├── Community.js │ │ └── forum │ │ │ ├── ForumContainers.js │ │ │ ├── ForumDetail.js │ │ │ ├── ForumUserCenter.js │ │ │ └── ForumView.js │ ├── discover │ │ ├── Discover.js │ │ ├── article-detail │ │ │ └── ArticleDetail.js │ │ ├── article-list │ │ │ └── ArticleList.js │ │ ├── awesomes │ │ │ ├── AwesomeLists.js │ │ │ └── AwesomesDetail.js │ │ ├── chapter-list │ │ │ ├── ChapterList.js │ │ │ └── article │ │ │ │ └── Article.js │ │ ├── exam-detail │ │ │ └── ExamDetail.js │ │ ├── exam-list │ │ │ └── ExamList.js │ │ ├── free-book-list │ │ │ └── FreeBookList.js │ │ ├── project-detail │ │ │ └── ProjectDetail.js │ │ ├── project-list │ │ │ └── ProjectList.js │ │ ├── recommend-articles │ │ │ └── RecommendArticles.js │ │ ├── recommend-books │ │ │ ├── RecommendBooks.js │ │ │ └── article │ │ │ │ └── Article.js │ │ ├── roadmap-detail │ │ │ └── RoadmapDetail.js │ │ ├── roadmap-list │ │ │ └── RoadmapList.js │ │ ├── solution-detail │ │ │ └── SolutionDetail.js │ │ ├── solution │ │ │ └── Solution.js │ │ ├── thoughtworks-books │ │ │ ├── ThoughtworksBooks.js │ │ │ └── domain-detail-page │ │ │ │ └── DomainDetailPage.js │ │ ├── todo-list │ │ │ └── TodoList.js │ │ ├── todo-lists │ │ │ └── TodoLists.js │ │ ├── toolbox-detail │ │ │ └── ToolBoxDetail.js │ │ └── toolbox-list │ │ │ └── ToolBoxList.js │ ├── home │ │ ├── GrowthView.js │ │ ├── HelpUs.js │ │ ├── Home.js │ │ ├── paper │ │ │ └── PaperIntroView.js │ │ └── sections │ │ │ ├── SectionArticleTab.js │ │ │ ├── SectionGrowthTab.js │ │ │ ├── SectionIntro.js │ │ │ └── SectionPage.js │ ├── practises │ │ ├── Practises.js │ │ ├── algorithm │ │ │ ├── ALGORITHMS.js │ │ │ ├── ALGORITHMS_CATEGORY.js │ │ │ ├── AlgorithmDetailView.js │ │ │ └── AlgorithmListView.js │ │ ├── leetcode │ │ │ └── LeetCodeView.js │ │ ├── moregex │ │ │ ├── MoRegexInfoView.js │ │ │ ├── MoRegexView.js │ │ │ ├── REGEX_HUB_PATTERNS.js │ │ │ └── RegexListView.js │ │ └── patterns │ │ │ ├── PatternDetailView.js │ │ │ └── PatternsView.js │ ├── skill-tree │ │ ├── SKILL_TREE_DATA.js │ │ ├── SkillDetailView.js │ │ ├── SkillTree.js │ │ └── www │ │ │ ├── .editorconfig │ │ │ ├── .gitignore │ │ │ ├── README.md │ │ │ ├── css │ │ │ └── style.css │ │ │ ├── index.html │ │ │ ├── js │ │ │ └── controllers.js │ │ │ └── lib │ │ │ └── angular.min.js │ └── user-center │ │ ├── CopyrightView.js │ │ ├── UserCenter.js │ │ └── about-us │ │ ├── AboutUs.js │ │ └── ContributorProfile.js ├── icon │ └── GrowthFont.js ├── images │ └── .gitkeep ├── index.js ├── lib │ ├── .gitkeep │ ├── analytics.js │ └── htmlParse.js ├── navigation │ ├── DiscoverScene.js │ └── index.js ├── redux │ ├── .gitkeep │ ├── article │ │ ├── actions.js │ │ └── reducer.js │ ├── index.js │ ├── regex │ │ ├── actions.js │ │ └── reducer.js │ ├── routes │ │ └── reducer.js │ ├── section │ │ ├── actions.js │ │ └── reducer.js │ └── store │ │ └── configureStore.js ├── theme │ ├── colors.js │ ├── fonts.js │ ├── sizes.js │ └── styles.js └── utils │ ├── AsyncStorageHelper.js │ ├── BookmarkHelper.js │ ├── EditorWebViewServices.js │ ├── HtmlHelper.js │ ├── MarkdownHelper.js │ ├── MoregexWebViewServices.js │ ├── SectionPageHelper.js │ ├── TodoListHelper.js │ ├── api.js │ └── helper.js ├── test └── helpers │ └── html-transform.js └── yarn.lock /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["react-native"] 3 | } 4 | -------------------------------------------------------------------------------- /.buckconfig: -------------------------------------------------------------------------------- 1 | 2 | [android] 3 | target = Google Inc.:Google APIs:23 4 | 5 | [maven_repositories] 6 | central = https://repo1.maven.org/maven2 7 | -------------------------------------------------------------------------------- /.codeclimate.yml: -------------------------------------------------------------------------------- 1 | engines: 2 | eslint: 3 | enabled: true 4 | config: 5 | config: "./.eslintrc" 6 | checks: 7 | import/extensions: 8 | enabled: false 9 | ratings: 10 | paths: 11 | - "src/*/**.js" 12 | exclude_paths: 13 | - "__test__" 14 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig is awesome: http://EditorConfig.org 2 | 3 | # top-most EditorConfig file 4 | root = true 5 | 6 | # Unix-style newlines with a newline ending every file 7 | [*] 8 | end_of_line = lf 9 | insert_final_newline = true 10 | indent_style = space 11 | indent_size = 2 12 | 13 | [*.gradle] 14 | indent_size = 4 15 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | src/containers/skill-tree/www/**/*.js 2 | src/lib/*.js 3 | src/components/GrEditor 4 | src/containers/practises/moregex/www/**/*.js 5 | src/containers/practises/algorithm/growth-algorithm-api 6 | src/containers/practises/algorithm/algorithm-webview 7 | -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "extends": "airbnb", 4 | "parser": "babel-eslint", 5 | "rules": { 6 | "react/jsx-filename-extension": [ 7 | 1, 8 | { 9 | "extensions": [ 10 | ".js", 11 | ".jsx" 12 | ] 13 | } 14 | ] 15 | }, 16 | "env": { 17 | "jest": true 18 | }, 19 | "globals": { 20 | "__DEV__": true 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | *.pbxproj -text 2 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "src/components/GrEditor"] 2 | path = src/components/GrEditor 3 | url = https://github.com/phodal/GrEditor 4 | [submodule "assets/growth-content"] 5 | path = assets/growth-content 6 | url = https://github.com/GrowthStudio/growth-content.git 7 | [submodule "src/containers/practises/moregex/www"] 8 | path = src/containers/practises/moregex/www 9 | url = https://github.com/phodal/moregex 10 | [submodule "src/containers/practises/algorithm/growth-algorithm-api"] 11 | path = src/containers/practises/algorithm/growth-algorithm-api 12 | url = https://github.com/phodal/growth-algorithm-api.git 13 | [submodule "src/containers/practises/algorithm/algorithm-webview"] 14 | path = src/containers/practises/algorithm/algorithm-webview 15 | url = https://github.com/GrowthStudio/AlgorithmVisualizer 16 | -------------------------------------------------------------------------------- /.ruby-version: -------------------------------------------------------------------------------- 1 | 2.2.3 2 | -------------------------------------------------------------------------------- /.watchmanconfig: -------------------------------------------------------------------------------- 1 | {} -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | # Autogenerated by fastlane 2 | # 3 | # Ensure this file is checked in to source control! 4 | 5 | source "https://rubygems.org" 6 | 7 | gem 'fastlane' 8 | 9 | plugins_path = File.join(File.dirname(__FILE__), 'fastlane', 'Pluginfile') 10 | eval_gemfile(plugins_path) if File.exist?(plugins_path) 11 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016~2017 Phodal Huang 4 | 5 | [AlgorithmVisualizer](https://github.com/parkjs814/AlgorithmVisualizer) Copyright (c) 2016 Jason Park 6 | [Regexper](https://github.com/javallone/regexper-static) Copyright (c) 2014 Jeffrey Avallone 7 | [Design Patterns for Humans](https://github.com/kamranahmedse/design-patterns-for-humans) Copyright 2017 Kamran Ahmed 8 | 9 | Permission is hereby granted, free of charge, to any person obtaining a copy 10 | of this software and associated documentation files (the "Software"), to deal 11 | in the Software without restriction, including without limitation the rights 12 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | copies of the Software, and to permit persons to whom the Software is 14 | furnished to do so, subject to the following conditions: 15 | 16 | The above copyright notice and this permission notice shall be included in all 17 | copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 25 | SOFTWARE. 26 | 27 | -------------------------------------------------------------------------------- /__tests__/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "jest": true 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /__tests__/components/__snapshots__/customWebView.test.js.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`renders correctly 1`] = ` 4 | 21 | `; 22 | -------------------------------------------------------------------------------- /__tests__/components/__snapshots__/htmlView.test.js.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`renders correctly 1`] = ` 4 | 17 | 34 | 35 | `; 36 | -------------------------------------------------------------------------------- /__tests__/components/customWebView.test.js: -------------------------------------------------------------------------------- 1 | import 'react-native'; 2 | import React from 'react'; 3 | 4 | import renderer from 'react-test-renderer'; 5 | import CustomWebView from '../../src/components/CustomWebView'; 6 | 7 | it('renders correctly', () => { 8 | // eslint-disable-next-line no-unused-vars 9 | const customWebView = renderer.create( 10 | 233333'} />, 11 | ); 12 | 13 | const customWebViewJson = customWebView.toJSON(); 14 | expect(customWebViewJson).toMatchSnapshot(); 15 | }); 16 | -------------------------------------------------------------------------------- /__tests__/components/dialog.test.js: -------------------------------------------------------------------------------- 1 | import 'react-native'; 2 | import React from 'react'; 3 | 4 | // Note: test renderer must be required after react-native. 5 | import renderer from 'react-test-renderer'; 6 | 7 | import Dialog from '../../src/components/dialog'; 8 | import TIPS from '../../src/constants/TIPS'; 9 | 10 | it('renders correctly', () => { 11 | // eslint-disable-next-line no-unused-vars 12 | const dialog = renderer.create( 13 | , 14 | ); 15 | const dialogJson = dialog.toJSON(); 16 | expect(dialogJson).toMatchSnapshot(); 17 | }); 18 | -------------------------------------------------------------------------------- /__tests__/components/discover/exam-detail/view/examDetailBack.test.js: -------------------------------------------------------------------------------- 1 | import 'react-native'; 2 | import React, {} from 'react'; 3 | import renderer from 'react-test-renderer'; 4 | import ExamDetailBack from '../../../../../src/components/discover/exam-detail/view/ExamDetailBack'; 5 | 6 | it('renders correctly', () => { 7 | const examDetailBack = renderer.create( 8 | , 9 | ); 10 | const examDetailBackJson = examDetailBack.toJSON(); 11 | expect(examDetailBackJson).toMatchSnapshot(); 12 | }); 13 | -------------------------------------------------------------------------------- /__tests__/components/discover/exam-detail/view/examDetailContent.test.js: -------------------------------------------------------------------------------- 1 | import 'react-native'; 2 | import React, {} from 'react'; 3 | import renderer from 'react-test-renderer'; 4 | import ExamDetailContent from '../../../../../src/components/discover/exam-detail/view/ExamDetailContent'; 5 | import QUIZS from '../../../../../src/constants/QUIZS'; 6 | 7 | it('renders correctly', () => { 8 | const examDetailContent = renderer.create( 9 | , 10 | ); 11 | const examDetailContentJson = examDetailContent.toJSON(); 12 | expect(examDetailContentJson).toMatchSnapshot(); 13 | }); 14 | -------------------------------------------------------------------------------- /__tests__/components/discover/exam-detail/view/examDetailIndicator.test.js: -------------------------------------------------------------------------------- 1 | import 'react-native'; 2 | import React, {} from 'react'; 3 | import renderer from 'react-test-renderer'; 4 | import ExamDetailIndicator from '../../../../../src/components/discover/exam-detail/view/ExamDetailIndicator'; 5 | 6 | it('renders correctly', () => { 7 | const examDetailIndicator = renderer.create( 8 | , 9 | ); 10 | const examDetailIndicatorJson = examDetailIndicator.toJSON(); 11 | expect(examDetailIndicatorJson).toMatchSnapshot(); 12 | }); 13 | -------------------------------------------------------------------------------- /__tests__/components/discover/home/__snapshots__/growthSlider.test.js.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`renders correctly 1`] = `null`; 4 | -------------------------------------------------------------------------------- /__tests__/components/discover/home/growthImageCard.test.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable global-require */ 2 | import 'react-native'; 3 | import React from 'react'; 4 | import renderer from 'react-test-renderer'; 5 | import GrowthImageCard from '../../../../src/components/home/GrowthImageCard'; 6 | 7 | 8 | it('renders correctly', () => { 9 | // eslint-disable-next-line no-unused-vars 10 | const dialog = renderer.create( 11 | , 16 | ); 17 | const dialogJson = dialog.toJSON(); 18 | expect(dialogJson).toMatchSnapshot(); 19 | }); 20 | -------------------------------------------------------------------------------- /__tests__/components/discover/home/growthSlider.test.js: -------------------------------------------------------------------------------- 1 | import 'react-native'; 2 | import React from 'react'; 3 | import renderer from 'react-test-renderer'; 4 | import GrowthSlider from '../../../../src/components/home/GrowthSlider'; 5 | 6 | 7 | it('renders correctly', () => { 8 | // eslint-disable-next-line no-unused-vars 9 | const dialog = renderer.create( 10 | , 11 | ); 12 | const dialogJson = dialog.toJSON(); 13 | expect(dialogJson).toMatchSnapshot(); 14 | }); 15 | -------------------------------------------------------------------------------- /__tests__/components/discover/recommend-articles/view/recommendArticlesItem.test.js: -------------------------------------------------------------------------------- 1 | import 'react-native'; 2 | import React, {} from 'react'; 3 | import renderer from 'react-test-renderer'; 4 | import RecommendSimpleItem from '../../../../../src/components/discover/recommend-articles/view/RecommendSimpleItem'; 5 | import RECOMMEND_ARTICLES_LIST from '../../../../../src/constants/RECOMMEND_ARTICLES_LIST'; 6 | 7 | it('renders correctly', () => { 8 | const recommendSimpleItem = renderer.create( 9 | , 10 | ); 11 | const recommendSimpleItemJson = recommendSimpleItem.toJSON(); 12 | expect(recommendSimpleItemJson).toMatchSnapshot(); 13 | }); 14 | -------------------------------------------------------------------------------- /__tests__/components/discover/roadmap-detail/view/timeLineView.test.js: -------------------------------------------------------------------------------- 1 | import 'react-native'; 2 | import React, {} from 'react'; 3 | import renderer from 'react-test-renderer'; 4 | import TimeLineView from '../../../../../src/components/discover/roadmap-detail/view/TimeLineView'; 5 | 6 | 7 | it('renders correctly', () => { 8 | const timeLine = renderer.create( 9 | , 15 | ); 16 | const timeLineJson = timeLine.toJSON(); 17 | expect(timeLineJson).toMatchSnapshot(); 18 | }); 19 | -------------------------------------------------------------------------------- /__tests__/components/discover/solution/view/solutionContentItem.test.js: -------------------------------------------------------------------------------- 1 | import 'react-native'; 2 | import React, {} from 'react'; 3 | import renderer from 'react-test-renderer'; 4 | import SolutionContentItem from '../../../../../src/components/discover/solution/view/SolutionContentItem'; 5 | import SOLUTIONS from '../../../../../src/constants/SOLUTIONS'; 6 | 7 | it('renders correctly', () => { 8 | const data = SOLUTIONS[0]; 9 | const solutionContentItem = renderer.create( 10 | , 15 | ); 16 | const solutionContentItemJson = solutionContentItem.toJSON(); 17 | expect(solutionContentItemJson).toMatchSnapshot(); 18 | }); 19 | -------------------------------------------------------------------------------- /__tests__/components/discover/thought-works-books/view/domainDetailPageItem.test.js: -------------------------------------------------------------------------------- 1 | import 'react-native'; 2 | import React, {} from 'react'; 3 | import renderer from 'react-test-renderer'; 4 | import DomainDetailPageItem from '../../../../../src/components/discover/thought-works-books/view/DomainDetailPageItem'; 5 | import TWBOOKS from '../../../../../src/constants/TWBOOKS'; 6 | 7 | it('renders correctly', () => { 8 | const domainDetailPageItem = renderer.create( 9 | , 12 | ); 13 | const domainDetailPageItemJson = domainDetailPageItem.toJSON(); 14 | expect(domainDetailPageItemJson).toMatchSnapshot(); 15 | }); 16 | -------------------------------------------------------------------------------- /__tests__/components/discover/todo-list/view/__snapshots__/doneListTitle.test.js.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`renders correctly 1`] = ` 4 | 14 | 24 | 已完成 25 | 26 | 27 | `; 28 | -------------------------------------------------------------------------------- /__tests__/components/discover/todo-list/view/doneListTitle.test.js: -------------------------------------------------------------------------------- 1 | import 'react-native'; 2 | import React, {} from 'react'; 3 | import renderer from 'react-test-renderer'; 4 | import DoneListTitle from '../../../../../src/components/discover/todo-list/view/DoneListTitle'; 5 | 6 | it('renders correctly', () => { 7 | const doneListTitle = renderer.create( 8 | , 9 | ); 10 | const doneListTitleJson = doneListTitle.toJSON(); 11 | expect(doneListTitleJson).toMatchSnapshot(); 12 | }); 13 | -------------------------------------------------------------------------------- /__tests__/components/discover/todo-list/view/todoListItem.test.js: -------------------------------------------------------------------------------- 1 | import 'react-native'; 2 | import React, {} from 'react'; 3 | import renderer from 'react-test-renderer'; 4 | import TodoListItem from '../../../../../src/components/discover/todo-list/view/TodoListItem'; 5 | import TODO_LISTS_ITEM from '../../../../../src/constants/TODO_LISTS_ITEM'; 6 | 7 | it('renders correctly', () => { 8 | const data = TODO_LISTS_ITEM[0].basic[0]; 9 | const todoListItem = renderer.create( 10 | {}} 13 | checked 14 | />, 15 | ); 16 | const todoListItemJson = todoListItem.toJSON(); 17 | expect(todoListItemJson).toMatchSnapshot(); 18 | }); 19 | -------------------------------------------------------------------------------- /__tests__/components/discover/view/discoverGridItem.test.js: -------------------------------------------------------------------------------- 1 | import 'react-native'; 2 | import React, {} from 'react'; 3 | import renderer from 'react-test-renderer'; 4 | import DiscoverGridItem from '../../../../src/components/discover/view/DiscoverGridItem'; 5 | 6 | it('renders correctly', () => { 7 | const gridItem = renderer.create( 8 | {}} />, 9 | ); 10 | const gridItemJson = gridItem.toJSON(); 11 | expect(gridItemJson).toMatchSnapshot(); 12 | }); 13 | -------------------------------------------------------------------------------- /__tests__/components/discover/view/discoverMoreItem.test.js: -------------------------------------------------------------------------------- 1 | import 'react-native'; 2 | import React, {} from 'react'; 3 | import renderer from 'react-test-renderer'; 4 | import DiscoverMoreItem from '../../../../src/components/discover/view/DiscoverMoreItem'; 5 | 6 | const home3 = require('../../../../assets/growth-ui/img/home-3.jpg'); 7 | 8 | it('renders correctly', () => { 9 | const moreItem = renderer.create( 10 | {}} 15 | />, 16 | ); 17 | const moreItemJson = moreItem.toJSON(); 18 | expect(moreItemJson).toMatchSnapshot(); 19 | }); 20 | -------------------------------------------------------------------------------- /__tests__/components/discover/view/discoverOnlineReadItem.test.js: -------------------------------------------------------------------------------- 1 | import 'react-native'; 2 | import React, {} from 'react'; 3 | import renderer from 'react-test-renderer'; 4 | import DiscoverOnlineReadItem from '../../../../src/components/discover/view/DiscoverOnlineReadItem'; 5 | 6 | const home1 = require('../../../../assets/growth-ui/img/home-1.jpg'); 7 | 8 | it('renders correctly', () => { 9 | const onlinereadItem = renderer.create( 10 | {}} 14 | />, 15 | ); 16 | const onlinereadItemJson = onlinereadItem.toJSON(); 17 | expect(onlinereadItemJson).toMatchSnapshot(); 18 | }); 19 | -------------------------------------------------------------------------------- /__tests__/components/discover/view/simpleListItem.test.js: -------------------------------------------------------------------------------- 1 | import 'react-native'; 2 | import React, {} from 'react'; 3 | import renderer from 'react-test-renderer'; 4 | import SimpleListItem from '../../../../src/components/discover/view/SimpleListItem'; 5 | 6 | 7 | it('renders correctly', () => { 8 | const simplelist = renderer.create( 9 | {}} 13 | />, 14 | ); 15 | const simplelistJson = simplelist.toJSON(); 16 | expect(simplelistJson).toMatchSnapshot(); 17 | }); 18 | -------------------------------------------------------------------------------- /__tests__/components/htmlView.test.js: -------------------------------------------------------------------------------- 1 | import 'react-native'; 2 | import React from 'react'; 3 | 4 | import renderer from 'react-test-renderer'; 5 | import HtmlView from '../../src/components/HtmlView'; 6 | import HELPER_ARTICLES from '../../src/constants/HELPER_ARTICLES'; 7 | 8 | it('renders correctly', () => { 9 | // eslint-disable-next-line no-unused-vars 10 | const htmlView = renderer.create( 11 | , 12 | ); 13 | 14 | const htmlViewJson = htmlView.toJSON(); 15 | expect(htmlViewJson).toMatchSnapshot(); 16 | }); 17 | -------------------------------------------------------------------------------- /__tests__/components/superCardView.test.js: -------------------------------------------------------------------------------- 1 | import 'react-native'; 2 | import React from 'react'; 3 | 4 | import renderer from 'react-test-renderer'; 5 | import SuperCardView from '../../src/components/SuperCardView'; 6 | 7 | it('renders correctly', () => { 8 | // eslint-disable-next-line no-unused-vars 9 | const tree = renderer.create( 10 | , 11 | ); 12 | 13 | const treeJson = tree.toJSON(); 14 | expect(treeJson).toMatchSnapshot(); 15 | }); 16 | -------------------------------------------------------------------------------- /__tests__/containers/comingSoon.test.js: -------------------------------------------------------------------------------- 1 | import 'react-native'; 2 | import React from 'react'; 3 | 4 | // Note: test renderer must be required after react-native. 5 | import renderer from 'react-test-renderer'; 6 | import ComingSoonView from '../../src/containers/ComingSoonView'; 7 | 8 | it('renders correctly', () => { 9 | // eslint-disable-next-line no-unused-vars 10 | const tree = renderer.create( 11 | , 12 | ); 13 | 14 | const treeJson = tree.toJSON(); 15 | expect(treeJson).toMatchSnapshot(); 16 | }); 17 | -------------------------------------------------------------------------------- /__tests__/containers/community/__snapshots__/community.test.js.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`test user center renders correctly 1`] = ` 4 | 11 | 17 | 18 | `; 19 | -------------------------------------------------------------------------------- /__tests__/containers/community/community.test.js: -------------------------------------------------------------------------------- 1 | import 'react-native'; 2 | import React from 'react'; 3 | import renderer from 'react-test-renderer'; 4 | import Community from '../../../src/containers/community/Community'; 5 | 6 | describe('test user center', () => { 7 | it('renders correctly', () => { 8 | const tree = renderer.create( 9 | , 10 | ); 11 | 12 | const treeJson = tree.toJSON(); 13 | expect(treeJson).toMatchSnapshot(); 14 | }); 15 | }); 16 | -------------------------------------------------------------------------------- /__tests__/containers/community/forum/__snapshots__/forumContainers.test.js.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`test user center renders correctly 1`] = ` 4 | 11 | 17 | 18 | `; 19 | -------------------------------------------------------------------------------- /__tests__/containers/community/forum/__snapshots__/forumDetail.test.js.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`test user center renders correctly 1`] = ` 4 | 11 | 17 | 18 | `; 19 | -------------------------------------------------------------------------------- /__tests__/containers/community/forum/__snapshots__/forumView.test.js.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`test forum render renders correctly 1`] = ``; 4 | -------------------------------------------------------------------------------- /__tests__/containers/community/forum/forumContainers.test.js: -------------------------------------------------------------------------------- 1 | import { Text } from 'react-native'; 2 | import React from 'react'; 3 | import renderer from 'react-test-renderer'; 4 | import ForumContainer from '../../../../src/containers/community/forum/ForumContainers'; 5 | 6 | describe('test user center', () => { 7 | it('renders correctly', () => { 8 | const tree = renderer.create( 9 | { data }} />, 10 | ); 11 | 12 | const treeJson = tree.toJSON(); 13 | expect(treeJson).toMatchSnapshot(); 14 | }); 15 | }); 16 | -------------------------------------------------------------------------------- /__tests__/containers/community/forum/forumDetail.test.js: -------------------------------------------------------------------------------- 1 | import 'react-native'; 2 | import React from 'react'; 3 | import renderer from 'react-test-renderer'; 4 | import ForumDetail from '../../../../src/containers/community/forum/ForumDetail'; 5 | 6 | describe('test user center', () => { 7 | it('renders correctly', () => { 8 | const tree = renderer.create( 9 | , 10 | ); 11 | 12 | const treeJson = tree.toJSON(); 13 | expect(treeJson).toMatchSnapshot(); 14 | }); 15 | }); 16 | -------------------------------------------------------------------------------- /__tests__/containers/community/forum/forumUserCenter.test.js: -------------------------------------------------------------------------------- 1 | import 'react-native'; 2 | import React from 'react'; 3 | import renderer from 'react-test-renderer'; 4 | import ForumUserCenter from '../../../../src/containers/community/forum/ForumUserCenter'; 5 | 6 | describe('test user center', () => { 7 | it('renders correctly', () => { 8 | const tree = renderer.create( 9 | , 10 | ); 11 | 12 | const treeJson = tree.toJSON(); 13 | expect(treeJson).toMatchSnapshot(); 14 | }); 15 | }); 16 | -------------------------------------------------------------------------------- /__tests__/containers/discover/__snapshots__/discover.test.js.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`test user center renders correctly 1`] = `null`; 4 | -------------------------------------------------------------------------------- /__tests__/containers/discover/article-detail/articleDetail.test.js: -------------------------------------------------------------------------------- 1 | import 'react-native'; 2 | import React, {} from 'react'; 3 | import renderer from 'react-test-renderer'; 4 | import ArticleDetail from '../../../../src/containers/discover/article-detail/ArticleDetail'; 5 | import TIPS from '../../../../src/constants/TIPS'; 6 | 7 | jest.mock('react-native-fs', () => ({ 8 | writeFile: jest.fn(() => Promise.resolve()), 9 | ExternalStorageDirectoryPath: 'package-path', 10 | })); 11 | 12 | it('renders correclty', () => { 13 | const articleDetail = renderer.create( 14 | , 15 | ); 16 | const articleDetailJson = articleDetail.toJSON(); 17 | expect(articleDetailJson).toMatchSnapshot(); 18 | }); 19 | -------------------------------------------------------------------------------- /__tests__/containers/discover/article-list/__snapshots__/articleList.test.js.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`renders correclty 1`] = `null`; 4 | -------------------------------------------------------------------------------- /__tests__/containers/discover/article-list/articleList.test.js: -------------------------------------------------------------------------------- 1 | import 'react-native'; 2 | import React, {} from 'react'; 3 | import renderer from 'react-test-renderer'; 4 | import ArticleList from '../../../../src/containers/discover/article-list/ArticleList'; 5 | 6 | it('renders correclty', () => { 7 | const articleList = renderer.create( 8 | , 9 | ); 10 | const articleListJson = articleList.toJSON(); 11 | expect(articleListJson).toMatchSnapshot(); 12 | }); 13 | -------------------------------------------------------------------------------- /__tests__/containers/discover/chapter-list/__snapshots__/chapterList.test.js.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`renders correctly 1`] = `null`; 4 | -------------------------------------------------------------------------------- /__tests__/containers/discover/chapter-list/article/articles.test.js: -------------------------------------------------------------------------------- 1 | import 'react-native'; 2 | import React, {} from 'react'; 3 | import renderer from 'react-test-renderer'; 4 | import Article from '../../../../../src/containers/discover/chapter-list/article/Article'; 5 | import TIPS from '../.././../../../src/constants/TIPS'; 6 | 7 | jest.mock('react-native-fs', () => ({ 8 | writeFile: jest.fn(() => Promise.resolve()), 9 | ExternalStorageDirectoryPath: 'package-path', 10 | })); 11 | 12 | xit('renders correctly', () => { 13 | const article = renderer.create( 14 |
, 18 | ); 19 | const articleJson = article.toJSON(); 20 | expect(articleJson).toMatchSnapshot(); 21 | }); 22 | -------------------------------------------------------------------------------- /__tests__/containers/discover/chapter-list/chapterList.test.js: -------------------------------------------------------------------------------- 1 | import 'react-native'; 2 | import React, {} from 'react'; 3 | import renderer from 'react-test-renderer'; 4 | import ChapterList from '../../../../src/containers/discover/chapter-list/ChapterList'; 5 | import Api from '../../../../src/utils/api'; 6 | import TIPS from '../.././../../src/constants/TIPS'; 7 | 8 | it('renders correctly', () => { 9 | const chapterList = renderer.create( 10 | , 11 | ); 12 | const chapterListJson = chapterList.toJSON(); 13 | expect(chapterListJson).toMatchSnapshot(); 14 | }); 15 | -------------------------------------------------------------------------------- /__tests__/containers/discover/discover.test.js: -------------------------------------------------------------------------------- 1 | import 'react-native'; 2 | import React from 'react'; 3 | import renderer from 'react-test-renderer'; 4 | import Discover from '../../../src/containers/discover/Discover'; 5 | 6 | describe('test user center', () => { 7 | it('renders correctly', () => { 8 | const tree = renderer.create( 9 | , 10 | ); 11 | 12 | const treeJson = tree.toJSON(); 13 | expect(treeJson).toMatchSnapshot(); 14 | }); 15 | }); 16 | -------------------------------------------------------------------------------- /__tests__/containers/discover/exam-detail/examDetail.test.js: -------------------------------------------------------------------------------- 1 | import 'react-native'; 2 | import React, {} from 'react'; 3 | import renderer from 'react-test-renderer'; 4 | import ExamDetail from '../../../../src/containers/discover/exam-detail/ExamDetail'; 5 | import QUIZS from '../../../../src/constants/QUIZS'; 6 | 7 | it('renders correctly', () => { 8 | const examDetail = renderer.create( 9 | , 10 | ); 11 | const examDetailJson = examDetail.toJSON(); 12 | expect(examDetailJson).toMatchSnapshot(); 13 | }); 14 | -------------------------------------------------------------------------------- /__tests__/containers/discover/exam-list/__snapshots__/examLIst.test.js.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`renders correctly 1`] = `null`; 4 | -------------------------------------------------------------------------------- /__tests__/containers/discover/exam-list/examLIst.test.js: -------------------------------------------------------------------------------- 1 | import 'react-native'; 2 | import React, {} from 'react'; 3 | import renderer from 'react-test-renderer'; 4 | import ExamList from '../../../../src/containers/discover/exam-list/ExamList'; 5 | 6 | it('renders correctly', () => { 7 | const examList = renderer.create( 8 | , 9 | ); 10 | const examListJson = examList.toJSON(); 11 | expect(examListJson).toMatchSnapshot(); 12 | }); 13 | -------------------------------------------------------------------------------- /__tests__/containers/discover/project-detail/__snapshots__/projectDetail.test.js.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`renders correctly 1`] = `null`; 4 | -------------------------------------------------------------------------------- /__tests__/containers/discover/project-detail/projectDetail.test.js: -------------------------------------------------------------------------------- 1 | import 'react-native'; 2 | import React, {} from 'react'; 3 | import renderer from 'react-test-renderer'; 4 | import ProjectDetail from '../../../../src/containers/discover/project-detail/ProjectDetail'; 5 | 6 | it('renders correctly', () => { 7 | const projectDetail = renderer.create( 8 | , 9 | ); 10 | const projectDetailJson = projectDetail.toJSON(); 11 | expect(projectDetailJson).toMatchSnapshot(); 12 | }); 13 | -------------------------------------------------------------------------------- /__tests__/containers/discover/project-list/__snapshots__/projectList.test.js.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`renders correctly 1`] = `null`; 4 | -------------------------------------------------------------------------------- /__tests__/containers/discover/project-list/projectList.test.js: -------------------------------------------------------------------------------- 1 | import 'react-native'; 2 | import React, {} from 'react'; 3 | import renderer from 'react-test-renderer'; 4 | import ProjectList from '../../../../src/containers/discover/project-list/ProjectList'; 5 | import TIPS from '../../../../src/constants/TIPS'; 6 | 7 | it('renders correctly', () => { 8 | const projectList = renderer.create( 9 | , 10 | ); 11 | const projectListJson = projectList.toJSON(); 12 | expect(projectListJson).toMatchSnapshot(); 13 | }); 14 | -------------------------------------------------------------------------------- /__tests__/containers/discover/recommend-articles/__snapshots__/recommendArticles.test.js.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`renders correctly 1`] = `null`; 4 | -------------------------------------------------------------------------------- /__tests__/containers/discover/recommend-articles/article/localArticleView.test.js: -------------------------------------------------------------------------------- 1 | import 'react-native'; 2 | import React from 'react'; 3 | import renderer from 'react-test-renderer'; 4 | import LocalArticleView from '../../../../../src/components/LocalArticleView'; 5 | import HELPER_ARTICLES from '../../../../../src/constants/HELPER_ARTICLES'; 6 | 7 | jest.mock('react-native-fs', () => ({ 8 | writeFile: jest.fn(() => Promise.resolve()), 9 | ExternalStorageDirectoryPath: 'package-path', 10 | })); 11 | 12 | xit('renders correctly', () => { 13 | const article = renderer.create( 14 | {}} 16 | slug={HELPER_ARTICLES['zh-cn'].hello[0].slug} />, 17 | ); 18 | const articleJson = article.toJSON(); 19 | expect(articleJson).toMatchSnapshot(); 20 | }); 21 | -------------------------------------------------------------------------------- /__tests__/containers/discover/recommend-articles/recommendArticles.test.js: -------------------------------------------------------------------------------- 1 | import 'react-native'; 2 | import React, {} from 'react'; 3 | import renderer from 'react-test-renderer'; 4 | import RecommendArticles from '../../../../src/containers/discover/recommend-articles/RecommendArticles'; 5 | 6 | it('renders correctly', () => { 7 | const recommendArticles = renderer.create( 8 | , 9 | ); 10 | const recommendArticlesJson = recommendArticles.toJSON(); 11 | expect(recommendArticlesJson).toMatchSnapshot(); 12 | }); 13 | -------------------------------------------------------------------------------- /__tests__/containers/discover/roadmap-detail/__snapshots__/roadmapDetail.test.js.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`renders correctly 1`] = `null`; 4 | -------------------------------------------------------------------------------- /__tests__/containers/discover/roadmap-detail/roadmapDetail.test.js: -------------------------------------------------------------------------------- 1 | import 'react-native'; 2 | import React, {} from 'react'; 3 | import renderer from 'react-test-renderer'; 4 | import RoadmapDetail from '../../../../src/containers/discover/roadmap-detail/RoadmapDetail'; 5 | 6 | it('renders correctly', () => { 7 | const roadmapDetail = renderer.create( 8 | , 9 | ); 10 | const roadmapDetailJson = roadmapDetail.toJSON(); 11 | expect(roadmapDetailJson).toMatchSnapshot(); 12 | }); 13 | -------------------------------------------------------------------------------- /__tests__/containers/discover/roadmap-list/__snapshots__/roadmapList.test.js.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`renders correctly 1`] = `null`; 4 | -------------------------------------------------------------------------------- /__tests__/containers/discover/roadmap-list/roadmapList.test.js: -------------------------------------------------------------------------------- 1 | import 'react-native'; 2 | import React, {} from 'react'; 3 | import renderer from 'react-test-renderer'; 4 | import RoadmapList from '../../../../src/containers/discover/roadmap-list/RoadmapList'; 5 | import TIPS from '../../../../src/constants/TIPS'; 6 | 7 | it('renders correctly', () => { 8 | const roadmapList = renderer.create( 9 | , 10 | ); 11 | const roadmapListJson = roadmapList.toJSON(); 12 | expect(roadmapListJson).toMatchSnapshot(); 13 | }); 14 | -------------------------------------------------------------------------------- /__tests__/containers/discover/solution-detail/__snapshots__/solutionDetail.test.js.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`renders correctly 1`] = ` 4 | 17 | 34 | 35 | `; 36 | -------------------------------------------------------------------------------- /__tests__/containers/discover/solution-detail/solutionDetail.test.js: -------------------------------------------------------------------------------- 1 | import 'react-native'; 2 | import React, {} from 'react'; 3 | import renderer from 'react-test-renderer'; 4 | import SolutionDetail from '../../../../src/containers/discover/solution-detail/SolutionDetail'; 5 | 6 | jest.mock('react-native-fs', () => ({ 7 | writeFile: jest.fn(() => Promise.resolve()), 8 | ExternalStorageDirectoryPath: 'package-path', 9 | })); 10 | 11 | it('renders correctly', () => { 12 | const solutionDetail = renderer.create( 13 | , 14 | ); 15 | const solutionDetailJson = solutionDetail.toJSON(); 16 | expect(solutionDetailJson).toMatchSnapshot(); 17 | }); 18 | -------------------------------------------------------------------------------- /__tests__/containers/discover/solution/__snapshots__/solution.test.js.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`renders correctly 1`] = `null`; 4 | -------------------------------------------------------------------------------- /__tests__/containers/discover/solution/solution.test.js: -------------------------------------------------------------------------------- 1 | import 'react-native'; 2 | import React, {} from 'react'; 3 | import renderer from 'react-test-renderer'; 4 | import Solution from '../../../../src/containers/discover/solution/Solution'; 5 | 6 | it('renders correctly', () => { 7 | const solution = renderer.create( 8 | , 9 | ); 10 | const solutionJson = solution.toJSON(); 11 | expect(solutionJson).toMatchSnapshot(); 12 | }); 13 | -------------------------------------------------------------------------------- /__tests__/containers/discover/thought-works-books/__snapshots__/thoughtWorksBooks.test.js.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`renders correctly 1`] = `null`; 4 | -------------------------------------------------------------------------------- /__tests__/containers/discover/thought-works-books/domain-detial-page/__snapshots__/domainDetailPage.test.js.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`renders correctly 1`] = `null`; 4 | -------------------------------------------------------------------------------- /__tests__/containers/discover/thought-works-books/domain-detial-page/domainDetailPage.test.js: -------------------------------------------------------------------------------- 1 | import 'react-native'; 2 | import React, {} from 'react'; 3 | import renderer from 'react-test-renderer'; 4 | import DomainDetailPage from '../../../../../src/containers/discover/thoughtworks-books/domain-detail-page/DomainDetailPage'; 5 | 6 | it('renders correctly', () => { 7 | const domainDetailPage = renderer.create( 8 | , 9 | ); 10 | const domainDetailPageJson = domainDetailPage.toJSON(); 11 | expect(domainDetailPageJson).toMatchSnapshot(); 12 | }); 13 | -------------------------------------------------------------------------------- /__tests__/containers/discover/thought-works-books/thoughtWorksBooks.test.js: -------------------------------------------------------------------------------- 1 | import 'react-native'; 2 | import React, {} from 'react'; 3 | import renderer from 'react-test-renderer'; 4 | import ThoughtworksBooks from '../../../../src/containers/discover/thoughtworks-books/ThoughtworksBooks'; 5 | 6 | it('renders correctly', () => { 7 | const thoughtworksBooks = renderer.create( 8 | , 9 | ); 10 | const thoughtworksBooksJson = thoughtworksBooks.toJSON(); 11 | expect(thoughtworksBooksJson).toMatchSnapshot(); 12 | }); 13 | -------------------------------------------------------------------------------- /__tests__/containers/discover/todo-list/__snapshots__/todoList.test.js.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`renders correctly 1`] = `null`; 4 | -------------------------------------------------------------------------------- /__tests__/containers/discover/todo-list/todoList.test.js: -------------------------------------------------------------------------------- 1 | import 'react-native'; 2 | import React, {} from 'react'; 3 | import renderer from 'react-test-renderer'; 4 | import TodoList from '../../../../src/containers/discover/todo-list/TodoList'; 5 | import TODO_LISTS from '../../../../src/constants/TODO_LISTS'; 6 | 7 | it('renders correctly', () => { 8 | const todoList = renderer.create( 9 | , 10 | ); 11 | const todoListJson = todoList.toJSON(); 12 | expect(todoListJson).toMatchSnapshot(); 13 | }); 14 | -------------------------------------------------------------------------------- /__tests__/containers/discover/todo-lists/__snapshots__/todoLists.test.js.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`renders correctly 1`] = `null`; 4 | -------------------------------------------------------------------------------- /__tests__/containers/discover/todo-lists/todoLists.test.js: -------------------------------------------------------------------------------- 1 | import 'react-native'; 2 | import React, {} from 'react'; 3 | import renderer from 'react-test-renderer'; 4 | import TodoLists from '../../../../src/containers/discover/todo-lists/TodoLists'; 5 | 6 | it('renders correctly', () => { 7 | const todoLists = renderer.create( 8 | , 9 | ); 10 | const todoListsJson = todoLists.toJSON(); 11 | expect(todoListsJson).toMatchSnapshot(); 12 | }); 13 | -------------------------------------------------------------------------------- /__tests__/containers/discover/toolbox-detail/toolBoxDetail.test.js: -------------------------------------------------------------------------------- 1 | import 'react-native'; 2 | import React, {} from 'react'; 3 | import renderer from 'react-test-renderer'; 4 | import ToolBoxDetail from '../../../../src/containers/discover/toolbox-detail/ToolBoxDetail'; 5 | import TIPS from '../../../../src/constants/TIPS'; 6 | 7 | jest.mock('react-native-fs', () => ({ 8 | writeFile: jest.fn(() => Promise.resolve()), 9 | ExternalStorageDirectoryPath: 'package-path', 10 | })); 11 | 12 | it('renders correctly', () => { 13 | const toolBoxDetail = renderer.create( 14 | , 15 | ); 16 | const toolBoxDetailJson = toolBoxDetail.toJSON(); 17 | expect(toolBoxDetailJson).toMatchSnapshot(); 18 | }); 19 | -------------------------------------------------------------------------------- /__tests__/containers/discover/toolbox-list/__snapshots__/toolBoxList.test.js.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`renders correctly 1`] = `null`; 4 | -------------------------------------------------------------------------------- /__tests__/containers/discover/toolbox-list/toolBoxList.test.js: -------------------------------------------------------------------------------- 1 | import 'react-native'; 2 | import React, {} from 'react'; 3 | import renderer from 'react-test-renderer'; 4 | import ToolBoxList from '../../../../src/containers/discover/toolbox-list/ToolBoxList'; 5 | import TIPS from '../../../../src/constants/TIPS'; 6 | 7 | it('renders correctly', () => { 8 | const toolBoxList = renderer.create( 9 | , 10 | ); 11 | const toolBoxListJson = toolBoxList.toJSON(); 12 | expect(toolBoxListJson).toMatchSnapshot(); 13 | }); 14 | -------------------------------------------------------------------------------- /__tests__/containers/home/__snapshots__/home.test.js.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`renders correctly 1`] = `null`; 4 | -------------------------------------------------------------------------------- /__tests__/containers/home/__snapshots__/paperIntroView.test.js.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`renders correctly 1`] = `null`; 4 | -------------------------------------------------------------------------------- /__tests__/containers/home/home.test.js: -------------------------------------------------------------------------------- 1 | import 'react-native'; 2 | import React from 'react'; 3 | 4 | import renderer from 'react-test-renderer'; 5 | import Home from '../../../src/containers/home/Home'; 6 | 7 | it('renders correctly', () => { 8 | // eslint-disable-next-line no-unused-vars 9 | const tree = renderer.create( 10 | , 11 | ); 12 | 13 | const treeJson = tree.toJSON(); 14 | expect(treeJson).toMatchSnapshot(); 15 | }); 16 | -------------------------------------------------------------------------------- /__tests__/containers/home/paperIntroView.test.js: -------------------------------------------------------------------------------- 1 | import 'react-native'; 2 | import React from 'react'; 3 | import renderer from 'react-test-renderer'; 4 | 5 | import PaperIntroView from '../../../src/containers/home/paper/PaperIntroView'; 6 | 7 | it('renders correctly', () => { 8 | const tree = renderer.create( 9 | , 10 | ); 11 | 12 | const treeJson = tree.toJSON(); 13 | expect(treeJson).toMatchSnapshot(); 14 | }); 15 | -------------------------------------------------------------------------------- /__tests__/containers/home/sectionArticleTab.test.js: -------------------------------------------------------------------------------- 1 | import 'react-native'; 2 | import React from 'react'; 3 | import renderer from 'react-test-renderer'; 4 | 5 | import SectionArticleTab from '../../../src/containers/home/sections/SectionArticleTab'; 6 | import HELPER_ARTICLES from '../../../src/constants/HELPER_ARTICLES'; 7 | 8 | it('renders correctly', () => { 9 | const sectionInfo = { 10 | title: '构建系统', 11 | intros: [ 12 | { 13 | info: { slug: 'build', type: 'desc' }, 14 | }, 15 | ], 16 | articlesView: [ 17 | { 18 | title: '构建系统', 19 | articles: HELPER_ARTICLES['zh-cn'].build, 20 | }, 21 | ], 22 | skills: ['build'], 23 | todoView: [ 24 | ], 25 | }; 26 | 27 | const tree = renderer.create( 28 | , 29 | ); 30 | 31 | const treeJson = tree.toJSON(); 32 | expect(treeJson).toMatchSnapshot(); 33 | }); 34 | -------------------------------------------------------------------------------- /__tests__/containers/home/sectionPage.test.js: -------------------------------------------------------------------------------- 1 | import 'react-native'; 2 | import React from 'react'; 3 | import renderer from 'react-test-renderer'; 4 | import configureStore from 'redux-mock-store'; 5 | 6 | import SectionPage from '../../../src/containers/home/sections/SectionPage'; 7 | 8 | const mockStore = configureStore(); 9 | const dispatch = () => {}; 10 | 11 | it('renders correctly', () => { 12 | const tree = renderer.create( 13 | , 18 | ); 19 | 20 | const treeJson = tree.toJSON(); 21 | expect(treeJson).toMatchSnapshot(); 22 | }); 23 | -------------------------------------------------------------------------------- /__tests__/containers/practise/__snapshots__/practise.test.js.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`test practise renders correctly 1`] = `null`; 4 | -------------------------------------------------------------------------------- /__tests__/containers/practise/algorithm/algorithmView.test.js: -------------------------------------------------------------------------------- 1 | import 'react-native'; 2 | import React from 'react'; 3 | 4 | import renderer from 'react-test-renderer'; 5 | import AlgorithmListView from '../../../../src/containers/practises/algorithm/AlgorithmListView'; 6 | 7 | xit('renders correctly', () => { 8 | const tree = renderer.create( 9 | , 10 | ); 11 | 12 | const treeJson = tree.toJSON(); 13 | expect(treeJson).toMatchSnapshot(); 14 | }); 15 | -------------------------------------------------------------------------------- /__tests__/containers/practise/leetcode/__snapshots__/leetCodeView.test.js.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`renders correctly 1`] = ``; 4 | -------------------------------------------------------------------------------- /__tests__/containers/practise/leetcode/leetCodeView.test.js: -------------------------------------------------------------------------------- 1 | import 'react-native'; 2 | import React from 'react'; 3 | 4 | import renderer from 'react-test-renderer'; 5 | import LeetCodeView from '../../../../src/containers/practises/leetcode/LeetCodeView'; 6 | import AsyncStorageHelper from '../../../../src/utils/AsyncStorageHelper'; 7 | 8 | it('renders correctly', () => { 9 | const spy = jest.spyOn(AsyncStorageHelper, 'get'); 10 | const tree = renderer.create( 11 | , 12 | ); 13 | 14 | const treeJson = tree.toJSON(); 15 | expect(spy).toHaveBeenCalled(); 16 | expect(treeJson).toMatchSnapshot(); 17 | }); 18 | -------------------------------------------------------------------------------- /__tests__/containers/practise/practise.test.js: -------------------------------------------------------------------------------- 1 | import 'react-native'; 2 | import React from 'react'; 3 | 4 | import renderer from 'react-test-renderer'; 5 | import Practises from '../../../src/containers/practises/Practises'; 6 | 7 | describe('test practise', () => { 8 | it('renders correctly', () => { 9 | const tree = renderer.create( 10 | , 11 | ); 12 | 13 | const treeJson = tree.toJSON(); 14 | expect(treeJson).toMatchSnapshot(); 15 | }); 16 | }); 17 | -------------------------------------------------------------------------------- /__tests__/containers/skill-tree/__snapshots__/skillTree.test.js.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`test skill tree test render 1`] = ` 4 | 26 | `; 27 | -------------------------------------------------------------------------------- /__tests__/containers/skill-tree/__snapshots__/skillTreeDetail.test.js.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`renders correctly 1`] = `null`; 4 | -------------------------------------------------------------------------------- /__tests__/containers/skill-tree/skillTree.test.js: -------------------------------------------------------------------------------- 1 | import 'react-native'; 2 | import { Actions, Scene } from 'react-native-router-flux'; 3 | import React from 'react'; 4 | import renderer from 'react-test-renderer'; 5 | 6 | import SkillTree from '../../../src/containers/skill-tree/SkillTree'; 7 | import SkillDetailView from '../../../src/containers/skill-tree/SkillDetailView'; 8 | 9 | describe('test skill tree ', () => { 10 | it('test render', () => { 11 | // eslint-disable-next-line no-unused-vars 12 | const tree = renderer.create( 13 | , 14 | ); 15 | 16 | const treeJson = tree.toJSON(); 17 | expect(treeJson).toMatchSnapshot(); 18 | }); 19 | 20 | it('should goto detail view', () => { 21 | const scenesData = ( 22 | 25 | 30 | 31 | ); 32 | Actions.create(scenesData); 33 | Actions.callback = () => { }; 34 | 35 | const spy = jest.spyOn(Actions, 'skillDetail'); 36 | const view = new SkillTree(); 37 | 38 | view.handleMessage({ 39 | nativeEvent: { 40 | data: JSON.stringify({ 41 | id: '1', 42 | }), 43 | }, 44 | }); 45 | expect(spy).toBeCalledWith({ skillId: 1, title: 'HTML' }); 46 | }); 47 | }); 48 | -------------------------------------------------------------------------------- /__tests__/containers/user-center/__snapshots__/userCenter.test.js.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`test user center renders correctly 1`] = `null`; 4 | -------------------------------------------------------------------------------- /__tests__/containers/user-center/about-us/__snapshots__/aboutUs.test.js.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`test user center / about us renders correctly 1`] = `null`; 4 | -------------------------------------------------------------------------------- /__tests__/containers/user-center/about-us/__snapshots__/contributorProfile.test.js.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`test user center / about us / contributor profile renders correctly 1`] = `null`; 4 | -------------------------------------------------------------------------------- /__tests__/containers/user-center/about-us/__snapshots__/label.test.js.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`test user center / about us / label renders correctly 1`] = ` 4 | 13 | 23 | LabelText 24 | 25 | 26 | `; 27 | -------------------------------------------------------------------------------- /__tests__/containers/user-center/about-us/contributorProfile.test.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | // import { Linking } from 'react-native'; 3 | import renderer from 'react-test-renderer'; 4 | // import { shallow } from 'enzyme'; 5 | 6 | import ContributorProfile from '../../../../src/containers/user-center/about-us/ContributorProfile'; 7 | 8 | const contributor = { 9 | nickname: 'nickname', 10 | duty: 'duty', 11 | bio: 'bio', 12 | profile: { 13 | github: 'github', 14 | weibo: 'weibo', 15 | zhihu: 'zhihu', 16 | blog: 'http://blog.io', 17 | }, 18 | }; 19 | 20 | describe('test user center / about us / contributor profile', () => { 21 | it('renders correctly', () => { 22 | const tree = renderer.create( 23 | , 24 | ); 25 | 26 | const treeJson = tree.toJSON(); 27 | expect(treeJson).toMatchSnapshot(); 28 | }); 29 | // 30 | // it('test for pressing links', () => { 31 | // const spy = jest.spyOn(Linking, 'openURL'); 32 | // 33 | // const wrapper = shallow( 34 | // , 35 | // ); 36 | // 37 | // wrapper.find({ title: `GitHub: @${contributor.profile.github}` }).props().onPress(); 38 | // wrapper.find({ title: `博客: ${contributor.profile.blog}` }).props().onPress(); 39 | // 40 | // expect(spy).toHaveBeenCalledTimes(2); 41 | // }); 42 | }); 43 | -------------------------------------------------------------------------------- /__tests__/containers/user-center/about-us/label.test.js: -------------------------------------------------------------------------------- 1 | import 'react-native'; 2 | import React from 'react'; 3 | import renderer from 'react-test-renderer'; 4 | import Label from '../../../../src/components/Label'; 5 | 6 | describe('test user center / about us / label', () => { 7 | it('renders correctly', () => { 8 | const tree = renderer.create( 9 |