qunitjs / node-qunit Goto Github PK
View Code? Open in Web Editor NEWQUnit runner for Node.js.
License: MIT License
QUnit runner for Node.js.
License: MIT License
I'm trying to use node-qunit to test itself to validate my install, as I'm not having much luck getting it to run on my own code.
I'm using node 0.4.2 on Cygwin - are there known issues with node-qunit on Cygwin or should it work just fine?
After doing a git clone --recursive
to grab the code, I ran npm install
on my clone, then tried to run the tests (well, I had to add a node-flavoured hashbang to /usr/local/bin/qunit
first to make the qunit
command execute as expected):
stderr:
node.js:116
throw e; // process.nextTick error, or 'error' event on first tick
^
stderr: TypeError: Cannot set property console of #<Object> which has only a getter
at /usr/local/lib/node/.npm/qunit/0.1.3/package/lib/api.js:121:29
at Array.forEach (native)
at extend (/usr/local/lib/node/.npm/qunit/0.1.3/package/lib/api.js:116:63)
at Object.<anonymous> (/usr/local/lib/node/.npm/qunit/0.1.3/package/lib/api.js:589:1)
at Module._compile (module.js:383:26)
at Object..js (module.js:389:10)
at Module.load (module.js:315:31)
at Function._load (module.js:276:12)
at require (module.js:327:19)
at Object.<anonymous> (/usr/local/lib/node/.npm/qunit/0.1.3/package/lib/bootstrap.js:1:75)
Files: 1
Tests: 0
Assertions: 0
Successes: 0
Errors: 0
Time: 466 ms
I have an existing QUnit suite with 1310 tests which I'd dearly love not to have to rewrite for the node port of my library :)
this is a feature request, i read several time the doc and still im not sure how to use it.
so i have to do trial/errors to figure out what i miss.
i think a simple tests in a /examples directory would solve the issue. something simple... this will cost you 1h top i think
regards
I have several modules that add to a global namespace, however the global namespace seems to be reset between each test. Here is my test runner:
var program = require('commander');
program
.version('0.1.0')
.option('-s, --source <path>', 'Specify one or more comma delimited script paths')
.parse(process.argv);
// List of unit tests
var units = [
'test-core',
'test-error'
];
for (var i = 0; i < units.length; ++i)
units[ i ] = __dirname + '/unit/' + units[ i ] + '.js';
// Prepare for unit testing
var qunit = require('qunit');
qunit.options.coverage = false;
// Load source scripts
var sources = [];
program.source.split(/\s*[,]\s*/).forEach(function(src) {
// Skip incompatible sources
if (src.indexOf('/browser/') !== -1)
return;
sources.push({ code: src, tests: units });
});
qunit.run(sources);
The strange thing is, I am sure that this was working previously.
I am running this test script using the following command line:
node test -s ./src/core,./src/node/environment
I am in the process of updating the test cases for our "Capri" project: https://github.com/rotorz/capri
Many thanks
Code using assert.throws
is currently failing.
The json that is returned on completion of the test suite is extremely limited, I would like to be able to receive the detailed summaries as json instead of of printed to stdio
find out why there are sometimes different tests amount in report
Thanks
Something is causing a failure when I try to run qunit -c ./dist/all.js -t ./test.js
I stripped down my "all.js" to this:
var fabric = { };
fabric.document = require("jsdom").jsdom("<!DOCTYPE html><html><head></head><body></body></html>");
fabric.window = fabric.document.createWindow();
fabric.foo = function() { fabric };
and "test.js" only has this:
QUnit.module('test');
test('foo', function() {
equal('foo', 'foo2');
});
This is what I get when running the above command (note that there's no output):
> qunit -c ./dist/all.js -t ./test.js
Testing /Users/kangax/dev/fabric.js/dist/all.js ... %
Any idea what's happening? It's interesting how this last line fabric.foo = function() { fabric }
makes it "choke", but for example, fabric.foo = function() { }
or var foo = function() { fabric }
are just fine.
FWIW:
> npm -v
1.1.23
> node -v
0.6.18
> qunit -v
0.5.7
Perhaps I'm missing something but should bunker be a non-optional dependency?
Console log:
$ npm install -g qunit
/usr/local/bin/qunit -> /usr/local/lib/node_modules/qunit/bin/cli.js
[email protected] /usr/local/lib/node_modules/qunit
├── [email protected]
├── [email protected]
├── [email protected]
└── [email protected]
$ qunit -h
node.js:201
throw e; // process.nextTick error, or 'error' event on first tick
^
Error: Cannot find module 'bunker'
at Function._resolveFilename (module.js:334:11)
at Function._load (module.js:279:25)
at Module.require (module.js:357:17)
at require (module.js:368:17)
at Object.<anonymous> (/usr/local/lib/node_modules/qunit/lib/coverage.js:1:76)
at Module._compile (module.js:432:26)
at Object..js (module.js:450:10)
at Module.load (module.js:351:31)
at Function._load (module.js:310:12)
at Module.require (module.js:357:17)
$ npm install -g bunker
[email protected] /usr/local/lib/node_modules/bunker
└── [email protected]
$ qunit -h
Usage: cli [options] value (boolean value can be used)
Options:
-c, --code path to code you want to test
-t, --tests path to tests (space separated)
-d, --deps dependency paths - files required before code (space separated)
-l, --log logging options, json have to be used
--cov create tests coverage report
-h, --help show this help
-v, --version show module version
Would be nice to alias QUnit.module to suite.
Maybe I'm missing something, but I can't see how to view the expected value and the actual value passed to an assertion in the test results. This is very useful in the browser-based version of QUnit, and I think it should be implemented. I understand that console space is an issue, but surely there should be an option for it?
hi,
I have node 0.7.6-pre,
installing qunit via npm adds an old version 0.2.5pre, which doesn't work for me.
Trying to install 0.2.9 ends with:
npm ERR! Required: {"node":"0.6.x"}
npm ERR! Actual: {"npm":"1.1.2","node":"0.7.6-pre"}
npm ERR!
any chance to relax the constraints or is there really some incompatibility?
I've recently started using Travis CI and noticed uses the exit code to determine whether or not a build/test succeeded. Deliberately breaking one of my tests showed that node-qunit was continuing to return an exit code of 0 with failed tests present.
This gist shows one way to tweak the exit code when failures are detected: https://gist.github.com/1492339
This is an issue with a patch, rather than a pull request, as I'm not sure if calling process.exit() again from within a process' exit event is a recommended thing to do, but it does seem to work.
It'd be neat if there was a way to specify qunit addons to be loaded as part of the testrunner options.
Maybe this is already possible and i missed the documentation in which case I'd love to hear how it can be done.
Hi, I find this library very useful for running javascript unit tests. However, I had to do some ugly stuff to get it working for my situation:
https://github.com/frontlinesms/frontlinesms2/blob/master/plugins/frontlinesms-core/do/js_unit_test
One thing that would make life easier in my situation would be to be able to set the equivalent of QUnit.module("some-module-name")
as a commandline arg, e.g.
qunit -t mytest.js -m mytest
where -m <somename>
sets the module name
Anyway, thanks for a great lib and let me know if I'm missing anything obvious.
if i set the coverage option to true, the assertions count will plus one more.
The following error occurs for equal(global, global, 'test global');
{ first_line: 'TypeError: Converting circular structure to JSON',
frames:
[ undefined,
{ named_location: 'EventEmitter.send',
filename: 'child_process.js',
line: 125,
character: 30,
_filedata: null },
{ named_location: '<anonymous>',
filename: 'F.<anonymous> (/Github Projects/capri/master/node_modules/qunit/lib/child.js',
line: 83,
character: 13,
_filedata: null },
{ named_location: '<anonymous>',
filename: 'Object.runLoggingCallbacks (/Github Projects/capri/master/node_modules/qunit/deps/qunit/qunit/qunit.js',
line: 1043,
character: 17,
_filedata: null },
{ named_location: '<anonymous>',
filename: 'F.push (/Github Projects/capri/master/node_modules/qunit/deps/qunit/qunit/qunit.js',
line: 664,
character: 3,
_filedata: null },
{ named_location: '<anonymous>',
filename: '/Github Projects/capri/master/node_modules/qunit/deps/qunit/qunit/qunit.js',
line: 357,
character: 9,
_filedata: null },
{ named_location: '<anonymous>',
which goes on....
However the following works fine ok(global === global, 'test global');
I looked through the issue tracker on the jQuery version of qunit, perhaps this is a regression issue?
when i do console.log in the tested code i get an error
node_modules/qunit/bin/cli.js --cov false -c score.js -t scoreQunit.js
node.js:134
throw e; // process.nextTick error, or 'error' event on first tick
^
SyntaxError: Unexpected token ILLEGAL
at Object.parse (native)
at ChildProcess. (/home/jerome/webwork/tapmaster/node_modules/qunit/lib/qunit.js:96:14)
at ChildProcess.emit (events.js:67:17)
at Socket. (child_process.js:172:12)
at Socket.emit (events.js:64:17)
at Array. (net.js:831:12)
at EventEmitter._tickCallback (node.js:126:26)
Sorry for asking but I did not really get it how to let everything run.
I created a runtests.js with
var testrunner = require("qunit");
testrunner.run({
code: "../User.class.js",
tests: "test/TestUser.class.js"
}, function(err, report){ console.log(report); });
and the test file is:
test("a basic test example", function (assert) {
ok(true, "this test is fine");
});
on calling "node runtests.js" i get
Error: ok() assertion outside test context, was at process. (C:\Users\XXXX\Desktop\qunit\node_modules\qunit\lib
at process.EventEmitter.emit (events.js:115:20)
at F.QUnit.assert.ok (C:\Users\XXXX\Desktop\qunit\node_modules\qunit\support\qunit\qunit\qunit.js:414:10)
at process. (C:\Users\XXXX\Desktop\qunit\node_modules\qunit\lib\child.js:17:11)
at process.EventEmitter.emit (events.js:115:20)
Using Windows 7, node v0.8.2
It appears that >= 0.6.x <= 0.8.x
doesn't allow npm to install qunit on, say, 0.8.7.
> node -v
v0.8.7
> npm install [email protected]
npm http GET https://registry.npmjs.org/qunit/0.5.7
npm http 304 https://registry.npmjs.org/qunit/0.5.7
npm ERR! Unsupported
npm ERR! Not compatible with your version of node/npm: [email protected]
npm ERR! Required: {"node":">= 0.6.x <= 0.8.x"}
npm ERR! Actual: {"npm":"1.1.23","node":"0.8.7"}
npm ERR!
npm ERR! System Darwin 11.4.0
npm ERR! command "node" "/usr/local/bin/npm" "install" "[email protected]"
npm ERR! cwd /Users/kangax
npm ERR! node -v v0.8.7
npm ERR! npm -v 1.1.23
npm ERR! code ENOTSUP
npm ERR! message Unsupported
npm ERR! errno {}
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR! /Users/kangax/npm-debug.log
npm not ok
I am using ubuntu 10.04 and I could not install using npm install qunit. Therefore I installed manually. There is still something wrong with the dependencies.
fs.js is part of node.js??? Anyways I am not a Node.js expert so I have to give up but I think you might want to know what I found out.
mark@Sakai:~/Desktop/node.js/node-qunit/node-qunit$ make runtests
./bin/runtests
The 'sys' module is now called 'util'. It should have a similar interface.
node.js:50
throw e; // process.nextTick error, or 'error' event on first tick
^
Error: ENOENT, No such file or directory
at Object.symlinkSync (fs.js:356:18)
at ChildProcess. (/home/mark/Desktop/node.js/node-qunit/node-qunit/lib/coverage.js:192:12)
at ChildProcess.emit (events.js:27:15)
at Stream. (child_process.js:132:12)
at Stream.emit (events.js:27:15)
at Array. (net.js:1003:12)
at EventEmitter._tickCallback (node.js:42:22)
at node.js:604:9
make: *** [runtests] Error 1
if using jscoverage and the new npm, dependecies will not be correctly resolved.
I see you just merged 0ead1ce, which catches uncaught exceptions and adds them to the test output. This is awesome—except for the case where the exception happens while evaluating the code you are testing.
This is pretty simple to reproduce. Simply introduce a syntax error to the code you're testing. Instead of getting a helpful error message, like this:
kamino.js » qunit -c ./lib/kamino.js -t ./tests/simple.js ~/Code/kamino.js
Testing /Users/tomdale/Code/kamino.js/lib/kamino.js ...
/Users/tomdale/Code/kamino.js/lib/kamino.js:24
a;sfjk;sdfa89u;+asdf;j
^
ReferenceError: a is not defined
at Object.<anonymous> (/Users/tomdale/Code/kamino.js/lib/kamino.js:24:1)
at Module._compile (module.js:449:26)
at Object.Module._extensions..js (module.js:467:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.require (module.js:362:17)
at require (module.js:378:17)
at _require (/usr/local/lib/node_modules/qunit/lib/child.js:35:19)
at Object.<anonymous> (/usr/local/lib/node_modules/qunit/lib/child.js:126:1)
at Module._compile (module.js:449:26)
You get an error message like this:
kamino.js » qunit -c ./lib/kamino.js -t ./tests/simple.js ~/Code/kamino.js
Testing /Users/tomdale/Code/kamino.js/lib/kamino.js ...
/usr/local/lib/node_modules/qunit/support/qunit/qunit/qunit.js:414
throw new Error( "ok() assertion outside test context, was " + sourceFromSt
^
Error: ok() assertion outside test context, was at process.<anonymous> (/usr/local/lib/node_modules/qunit/lib/child.js:17:11)
at process.EventEmitter.emit (events.js:126:20)
at F.QUnit.assert.ok (/usr/local/lib/node_modules/qunit/support/qunit/qunit/qunit.js:414:10)
at process.<anonymous> (/usr/local/lib/node_modules/qunit/lib/child.js:17:11)
at process.EventEmitter.emit (events.js:126:20)
Hi. I would like to use asynchronous code in my setup/teardown functions. I'm not sure if this code should work:
http://pastebin.com/wRyiZWs6
It throws the following error:
http://pastebin.com/8jTakXui
I'm using node-qunit 0.1.5
If I'm doing something wrong, please treat this issue as an enhancement request for the documentation.
Thanks,
Igor
Right now only the members of QUnit are exposed (src):
// make qunit api global, like it is in the browser
_.extend(global, QUnit);
But code using QUnit
itself (e.g. QUnit.module( .. );
) is broken in node-qunit.
https://github.com/kof/node-qunit/blob/master/lib/testrunner.js#L153
Coverage is completely busted by this. Cheers :)
the default encoding is ISO-8859-1, nowhere to change it.
Hello,
I have downloaded the latest unstable version of node-js via GIT and installed. This appears to be working fine.
I have then downloaded the latest version of node-qunit using: npm install qunit
which displayed the following output:
|--- [email protected]
|--- [email protected]
|--- [email protected]
|--- [email protected] ([email protected])
|--- [email protected]
I then created the following three files in my documents directory:
// test-script.js
function foo() {
return 123;
}
// test-unit.js
QUnit.module('my/test');
QUnit.test('first test', function() {
QUnit.expects(1);
QUnit.strictEqual(foo(), 123, 'strict assertion test');
});
// test-runner.js
console.log('Running my tests...');
var qunit = require('qunit');
qunit.run({
code: '/Users/macuser/Documents/test-script.js',
tests: '/Users/macuser/Documents/test-unit.js'
});
console.log('Tests completed');
All that appears within the console is:
Running my tests...
Tests completed.
When disabling all forms of logging:
qunit.log.summary = qunit.log.stats = qunit.log.reset = qunit.log.print = qunit.log.assertion = function () {};
qunit.options = {
assertions: false,
errors: false,
tests: false,
summary: false,
globalSummary: false,
coverage: false,
deps: null,
namespace: null
};
Test failures are still logged out, including their objects:
Test <test name> died, exception and test follows
{ first_line: '<testFailure>',
frames:
[ { named_location: 'Object.<anonymous>',
filename: '<filename>',
line: 6,
character: 18,
_filedata: null },
....
This may be my inability to find the right documentation, but currently qunit is simply stalling for me when the code I am testing encounters a crash
I would expect qunit to capture that, fail the test and carry on
output is below :
gcc -std=gnu99 -Ijs -Ijs/obj -DXP_UNIX -g -O2 -o generate-resources generate-resources.o
./generate-resources jscoverage-help.txt jscoverage-server-help.txt jscoverage.jsm jscoverage.manifest jscoverage.xul jscoverage-overlay.js jscoverage.html jscoverage.css jscoverage-ie.css jscoverage-highlight.css jscoverage.js report.js jscoverage-throbber.gif > resources.c
make all-recursive
Making all in js
make -f Makefile.ref DISABLE_JIT=1 OBJROOT=obj BUILD_OPT=1
Makefile.ref:61: disabling JIT per build specification
cd editline; make -f Makefile.ref all
make[5]: Nothing to be done for all'. make -f Makefile.ref ./obj/libjs.a ./obj/libjs.dylib ./obj/js Makefile.ref:61: disabling JIT per build specification make[5]:
obj/libjs.a' is up to date.
make[5]: obj/libjs.dylib' is up to date. make[5]:
obj/js' is up to date.
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -Ijs -Ijs/obj -DXP_UNIX -g -O2 -MT encoding.o -MD -MP -MF .deps/encoding.Tpo -c -o encoding.o encoding.c
mv -f .deps/encoding.Tpo .deps/encoding.Po
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -Ijs -Ijs/obj -DXP_UNIX -g -O2 -MT highlight.o -MD -MP -MF .deps/highlight.Tpo -c -o highlight.o highlight.c
In file included from js/jscntxt.h:49,
from highlight.h:23,
from highlight.c:22:
js/jsatom.h:69: error: size of array ‘arg’ is negative
In file included from js/jsgc.h:48,
from js/jscntxt.h:52,
from highlight.h:23,
from highlight.c:22:
js/jsbit.h:210: error: size of array ‘arg’ is negative
make[3]: *** [highlight.o] Error 1
make[2]: *** [all-recursive] Error 1
make[1]: *** [all] Error 2
make: *** [jscoverage] Error 2
npm info [email protected] Failed to exec install script
npm ERR! install failed Error: [email protected] install: make install
npm ERR! install failed sh
failed with 2
npm ERR! install failed at ChildProcess. (/usr/local/lib/node/.npm/npm/0.2.3-6/package/lib/utils/exec.js:24:18)
npm ERR! install failed at ChildProcess.emit (events:27:15)
npm ERR! install failed at ChildProcess.onexit (child_process:151:12)
npm ERR! install failed at node.js:768:9
npm info install failed rollback
npm info not installed qunit,0.0.4
npm info install failed rolled back
npm ERR! Error: [email protected] install: make install
npm ERR! sh
failed with 2
npm ERR! at ChildProcess. (/usr/local/lib/node/.npm/npm/0.2.3-6/package/lib/utils/exec.js:24:18)
npm ERR! at ChildProcess.emit (events:27:15)
npm ERR! at ChildProcess.onexit (child_process:151:12)
npm ERR! at node.js:768:9
npm ERR!
npm ERR! Failed at the [email protected] install script.
npm ERR! This is most likely a problem with the qunit package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR! make install
npm ERR! You can get their info via:
npm ERR! npm owner ls qunit
npm ERR! There may be additional logging output above.
npm not ok
First of all, Nice work
1st. issue
A programmatic approach via the read me does not work as it (eg. setup does not exist anymore)
2nd. issue
testrunner.js - line 153
3rd. issue
I am running windows, but I want to debug a problem. The script reports only done event, I would like to debug it but I don't know how to proceed with node-inspector. When forked I can't break or I can't catchup the debugger. Any idea ?
I tried to install with sudo npm install qunit
and it appears to work fine. Here are the fist couple of lines of the output:
[email protected] ./node_modules/qunit/node_modules/argsparser
[email protected] ./node_modules/qunit/node_modules/sharedjs/node_modules/argsparser
[email protected] ./node_modules/qunit/node_modules/sharedjs/node_modules/uglify-js
[email protected] ./node_modules/qunit/node_modules/sharedjs
> [email protected] install /root/node_modules/qunit
> make install
cd deps/jscoverage && ./configure && make
But there's no qunit
executable installed. I can't even find it anywhere in /usr/local (where all other stuff such as nodeunit is installed)
Do I need to share the install log with you or is it easy to fix?
When you try to install the package using npm install qunit --dev
it fails. This is a problem if you add node-qunit as a devDependency
in your package.json
, since the --dev
options recursively installs development dependencies.
Quickfix: Instead of installing development dependencies automatically using --dev
, just install qunit where needed.
I use this software, and there's no stated license for it. Add a LICENSE file to the repo, so that I can link to your software license.
http://opensource.org/licenses/MIT MIT is my favorite.
http://opensource.org/licenses/BSD-2-Clause BSD is also nice.
Your readme docs: stop(timeout)
should be stop(semaphore)
When installing on node 0.4.12 it fails because qunit needs a 0.5.0 or higher version, but when installing on node 0.5.7 fails because [email protected] requires node 0.4.X
it should work now in commonjs, so I can drop my implementation now and use the original one.
After a clean install of qunit I get this error
stderr:
stderr: node.js:134
stderr: throw e; // process.nextTick error, or 'error' event on first tick
stderr: stderr: ^
stderr: Error: Cannot find module 'sharedjs'
at Function._resolveFilename (module.js:320:11)
at Function._load (module.js:266:25)
at require (module.js:348:19)
at Object.<anonymous> (/usr/local/lib/node/.npm/qunit/0.1.5/package/lib/api.js:3:9)
at Module._compile (module.js:404:26)
at Object..js (module.js:410:10)
at Module.load (module.js:336:31)
at Function._load (module.js:297:12)
at require (module.js:348:19)
at Object.<anonymous> (/usr/local/lib/node/.npm/qunit/0.1.5/package/lib/bootstrap.js:1:75)
i defiantly have [email protected] installed, as it was installed by npm as a dependancy.
npm: 0.2.3
node: 0.4.7 (also tried with 0.4.5)
OS X 10.7 (lion GM)
The version of color.js used in node-qunit is 0.6.0. This version however has an issue where if a different version of colors is used by another module in the project, throws an error.
More details - https://gist.github.com/1451296
This issue is fixed in version 0.6.0-1 Marak/colors.js@3c2eb9d
Solution - upgrade package.json to include the newer version of color dependency.
testrunner.run({
code: "Renderer", // only one script possible
tests: ["test"]
});
Several code scripts its a bad thing, but sometimes they are needed to include some global things like test database confing.
Hi,
Just installed node-qunit via npm
When doing "node testrunner.js" with this testrunner file :
var testrunner = require( "qunit" ),
sys = require("sys"),
path = require( "path" ).normalize( __dirname + "/.." );
sys.puts(path + "/lib/apricot.js");
testrunner.run([
{
code: path + "/lib/apricot.js",
tests: [ path + "/test/selector.js"]
}
]);
I get
/usr/local/lib/node/.npm/qunit/0.0.6/package/lib/coverage.js:234
throw new Error( buf );
^
Error: execvp(): No such file or directory
at Stream.<anonymous> (/usr/local/lib/node/.npm/qunit/0.0.6/package/lib/coverage.js:234:23)
at Stream.emit (events:27:15)
at IOWatcher.callback (net:489:16)
at node.js:772:9
Which I fixed by changing this line in lib/coverage.js :
var jscoveragePath = require( "path" ).normalize( __dirname+"/../deps/jscoverage/jscoverage");
Hope this helps & you can merge that change
cheers
node-qunit dies when running tests under node 0.6 (although specified to work with "engines": {"node": ">= 0.5.0"}
), error as follows:
Error: customFds not allowed for fork()
at Object.fork (child_process.js:158:11)
at runOne (/some/path/node_modules/qunit/lib/testrunner.js:24:16)
at /some/path/node_modules/qunit/lib/testrunner.js:143:13
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.