Giter Club home page Giter Club logo

easyb's People

easyb's Issues

Make easyb maven repo browse-able

What steps will reproduce the problem?
1. Access http://www.easyb.org/repo/ from a browser

What is the expected output? What do you see instead?

I expect to see a listing of all of the directories immediately below this path 
but instead receive an 
access denied error.  Directly accessing resources (i.e. 
http://www.easyb.org/repo/org/easyb/easyb/0.7/easyb-0.7.pom) works fine however.

Original issue reported on code.google.com by rfciii on 21 Feb 2008 at 2:10

Behavior tests included in printed story count

What steps will reproduce the problem?
1. Run easyb with a story and a behavior and generate a story report
2. Look in the story report and you will see something like this:

21 behavior steps executed successfully  
  Story: empty stack
    scenario null is pushed onto empty stack
      given an empty stack
      when null is pushed
      then an exception should be thrown
      then the stack should still be empty
    scenario pop is called on empty stack
      given an empty stack
      when pop is called
      then an exception should be thrown
      then the stack should still be empty
  Story: single value stack
    scenario pop is called
      given a stack containing an item
      when peek is called
      then it should provide the value of the most recent pushed value
      then the stack should not be empty
      then calling pop should also return the peeked value
      then the stack should be empty

The problem here is that the behavior test was included in the step count
but not included in the generated story which is confusing.

What is the expected output? What do you see instead?

19 behavior steps executed successfully  
  Story: empty stack
    scenario null is pushed onto empty stack
      given an empty stack
      when null is pushed
      then an exception should be thrown
      then the stack should still be empty
    scenario pop is called on empty stack
      given an empty stack
      when pop is called
      then an exception should be thrown
      then the stack should still be empty
  Story: single value stack
    scenario pop is called
      given a stack containing an item
      when peek is called
      then it should provide the value of the most recent pushed value
      then the stack should not be empty
      then calling pop should also return the peeked value
      then the stack should be empty

Please use labels and text to provide additional information.


Original issue reported on code.google.com by rfciii on 9 Feb 2008 at 6:00

maven plugin reports should include more info about failures

When I have an easyb scenario that fails, the maven plugin reports that a
failure occurred but only the xml report includes the details of the failure. 
The html report shows the scenario in red, but no other indication of what
went wrong.  The txt report says that there was one failure, but doesn't
even say exactly which scenario failed.  It would be really helpful to
include specific failure details in the text and html reports.


Original issue reported on code.google.com by [email protected] on 22 Apr 2008 at 5:52

getters should be provided for BehaviorStep's result, name, and description

I wasn't satisfied with the reports provided by easyb (see#41), so I wrote
my own scenario runner in java (I'm a groovy newbie).  One of the bumps I
ran into was that several of BehaviorStep's important fields (result, name,
description) are private and have no getters.  After discovering
getMetaClass().getAttribute(), I was able to get around this with a few
lines of code, but these fields should have getters.

Original issue reported on code.google.com by [email protected] on 23 Apr 2008 at 5:11

Test and document customizable story directory and file names

By convention the easyb Maven plugin will look for specs in the 
'src/test/easyb' directory of your 
project.  It also assumes that story tests have the suffix 'Story' while 
behaviors have the suffix 
'Behavior'.  This is customizable but while writing the documentation for 
overriding this behavior I 
discovered that I hadn't written tests for this.  This issue is to write the 
tests to verify this behavior 
and then document how to customize these attributes in the easyb documentation.

Original issue reported on code.google.com by rfciii on 18 Feb 2008 at 3:46

reporting granularity

easyb reports steps for stories and scenarios (which may not be intuitive
for users)-- so if you define a given, then, and a when, easyb will say 5
(or 4?) steps executed successfully-- would we want to say 3? Do we care?

Thoughts? 


Original issue reported on code.google.com by [email protected] on 9 Feb 2008 at 5:03

make given and when blocks safe too

in the common BDD flow, 
1 - the story is written,
2 - then the story code is written, calling methods and classes that may
not exist yet.
3 - then the code needed for the story to pass is written

if you try to run the tests between the steps two and three easyb aborts
all tests, because of a NoMethodError or ClassNotFoundException.

but if the same safe block used for the then is used for given and when, it
works fine, just stores one more error.

I have attached a patch for it.

Original issue reported on code.google.com by [email protected] on 24 Mar 2008 at 3:23

Attachments:

Extra spaces following behavior steps success message in printed stories

What steps will reproduce the problem?
1. Use easyb to create a story report
2. The top line in the report will read something like

"5 behavior steps executed successfully  "

What is the expected output? What do you see instead?

"5 behavior steps executed successfully"

Original issue reported on code.google.com by rfciii on 9 Feb 2008 at 4:52

IntelliJ easyb run configuration

Should be able to create a run configuration for easyb specs in IntelliJ and 
launch them through the 
run menu.

Original issue reported on code.google.com by rfciii on 9 Mar 2008 at 6:23

Abstract stroies -- state of pending?

Idea from Venkat also voiced by Alex and others

Cold run of stories. I just cooked up some stories say like this
scenario "whatever", {
  given "something", {
  }
  when "something else", {
  }
  then "thenwhat", {
  }
}

This is pure story not connected to implementation at this point. If I
run it, it will pass.
I like to get a message that it is pending (instead of pass). I don't
mind marking
pending tasks as such until implemented. This will allows me to get
stories list
(using txtstory) right away and then come back and implement later.
Or better still, BA can write this and someone else can link to system
later.

Original issue reported on code.google.com by [email protected] on 23 Feb 2008 at 6:43

Maven plugin release process

Setup the maven plugin to support an automated release using Maven's
release plugin.

Original issue reported on code.google.com by rfciii on 9 Feb 2008 at 2:47

VerificationException should include more diagnostics for string differences

To give easyb a try, I rewrote an existing junit test.  One of the things I
like about junit is how it provides helpful details when a string
comparison fails:

org.junit.ComparisonFailure: expected:<prefix single[ ]suffix> but
was:<prefix single[]suffix>

Here's the easyb VerificationException:

expected prefix single suffix but was prefix singlesuffix

Not quite as nice.  I tried getting the expected and actual fields out of
the VerificationException to compare in my own way, but these fields are null.

Original issue reported on code.google.com by [email protected] on 23 Apr 2008 at 4:44

make it compilable with groovy 1.5.5 and enable to add a description on stories or specifications (PATCH)

Hi,
I wanted to be able to describe one story or behavior (where the name of
the file was not enough )
So I wrote it
I needed to compile easyb with groovy 1.5.5, and it was not working because
of a change in the groovyc task, I fixed it too.

the patch attached was created with GIT (I use GIT for version control)
I have cloned your repository in this public git repository:
http://github.com/urubatan/easyb/tree

if you can not use the attached patch, let me know, I'll try to create it
with a different tool.
usually git-svn takes care of the git/svn integration for me, but for it
work only if I have commit access to the repository :D

PS.: thanks for the great piece of software.

Original issue reported on code.google.com by [email protected] on 18 Mar 2008 at 8:04

Attachments:

Better error messages in intellij plugin

When an error occurs within the forked easyb process then this triggers the 
following message 
within the intellij plugin:

java.net.SocketException: Broken pipe 
        at java.net.SocketOutputStream.socketWrite0(Native Method) 
        at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java: 

Instead a better error message should be marshalled between the processes and 
displayed in the 
plugin.

Original issue reported on code.google.com by rfciii on 9 May 2008 at 4:28

maven plugin doesn't handle an easyb failure

I have a scenario which fails.  When I use the maven plugin to execute the
test goal, it doesn't handle the failure well (see below).

I'm using maven-easyb-plugin 0.8, easyb 0.8, groovy-all-minimal 1.5.5 on
Windows XP.

[INFO] [easyb:test {execution: default}]
     [java] Running text convert story (TextConvertStory.groovy)
     [java] FAILURE Scenarios run: 3, Failures: 1, Pending: 1, Time
Elapsed: 0.516 sec
     [java] 3 total behaviors run with 1 failure
     [java] Java Result: -6
[INFO] ------------------------------------------------------------------------
[ERROR] FATAL ERROR
[INFO] ------------------------------------------------------------------------
[INFO] No signature of method: org.easyb.maven.EasybExecutor.fail() is
applicable for argument types: (org.codehaus.groovy.runtime.GStringImpl)
values: {1 behaviors failed}
[INFO] ------------------------------------------------------------------------
[INFO] Trace
groovy.lang.MissingMethodException: No signature of method:
org.easyb.maven.EasybExecutor.fail() is applicable for argument types:
(org.codehaus.groovy.runtime.GStringImpl) values: {1 behaviors failed}
        at
org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.j
ava:54)
        at
org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.j
ava:59)
        at
org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodN(ScriptBytecodeAd
apter.java:169)
        at org.easyb.maven.EasybExecutor.invokeMethod(EasybExecutor.groovy)
        at
org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodOnCurrentN(ScriptB
ytecodeAdapter.java:82)
        at org.easyb.maven.EasybExecutor.execute(EasybExecutor.groovy:46)
        at org.easyb.maven.EasybMojo.execute(EasybMojo.java:88)
        at
org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.ja
va:447)
        at
org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycl
eExecutor.java:539)
        at
org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle(Def
aultLifecycleExecutor.java:480)
        at
org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycle
Executor.java:459)
        at
org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures
(DefaultLifecycleExecutor.java:311)
        at
org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultL
ifecycleExecutor.java:278)
        at
org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExec
utor.java:143)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:333)
        at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:126)
        at org.apache.maven.cli.MavenCli.main(MavenCli.java:282)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.jav
a:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
        at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
        at
org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
        at org.codehaus.classworlds.Launcher.main(Launcher.java:375)

Original issue reported on code.google.com by [email protected] on 22 Apr 2008 at 2:08

Negative collection assertions

I'd like to see negative collection assertions in easyb:

cachedResult.shouldNotHave("CachedQATest2")

...or...

ensure (cachedResult) {
 doesNotContain("CachedQATest2")
}

My current solution is:

ensure (!cachedResult.contains("CachedQATest2"))

...which is fine, but I'd like to have the syntactic sugar :-)

Original issue reported on code.google.com by [email protected] on 21 Mar 2008 at 4:30

Filter passing behaviors in IntelliJ plugin

Add an option to the plugin allowing passing behaviors to be hidden in order to 
reduce clutter

Original issue reported on code.google.com by rfciii on 11 May 2008 at 12:48

Better tests for Maven plugin

The maven plugin should have better tests around it.  Specifically, tests
should be created for:

- Basic story usage
- Basic behavior usage
- Story printing (text and xml as applicable)
- Behavior printing (text and xml as applicable)
- Database backed stories

Original issue reported on code.google.com by rfciii on 9 Feb 2008 at 2:46

Story files not displayed in IntelliJ

What steps will reproduce the problem?
1. Install the easyb plugin for intellij
2. Create a story file ending in the .story extension

What is the expected output? What do you see instead?  Moving the *.story (and 
*.specification) 
associations to groovy scripts in intellij is a workaround to this.

I would expect the file to be associated with easyb but instead becomes 
invisible.


Original issue reported on code.google.com by rfciii on 17 Apr 2008 at 12:45

ensureThrows doesn't fail when exception not thrown

This spec doesn't fail but it doesn't:

it "should fail if an exception is not thrown", {
    ensureThrows(Exception.class) {
        // If we don't throw an exception the spec should fail
    }
}

Original issue reported on code.google.com by rfciii on 29 Feb 2008 at 2:56

Graphical presentation of run results in intellij

Currently running a specification in intellij simply prints the runner's output 
to the console view.  
Instead, present the results more graphically in an easyb view.

Original issue reported on code.google.com by rfciii on 6 Apr 2008 at 1:44

Error when running specifications in intellij plugin

What steps will reproduce the problem?
1. Create a simple specification file
2. Run it with the intellij plugin

What is the expected output? What do you see instead?

The specification should run and produce the correct output.  Instead the easyb 
tree view 
collapses, the output tab prints the following error:

Remote runner
Port: 2032
Running sample specification (Sample.specification)
java.net.SocketException: Software caused connection abort: socket write error

And the following error is logged in intellij:

-1
java.lang.ArrayIndexOutOfBoundsException: -1
    at java.util.ArrayList.get(ArrayList.java:324)
    at org.easyb.plugin.ui.swing.EasybTreeNodeStack.peek(EasybTreeNodeStack.java:15)
    at org.easyb.plugin.ui.EasybPresenter.startStep(EasybPresenter.java:33)

Please use labels and text to provide additional information.


Original issue reported on code.google.com by rfciii on 9 May 2008 at 4:25

Tighter exception reporting

On failure of a shouldBe or ensure, don't show stack trace - I see
no value in the stack trace
shown now. Instead show line number in story file or behavior file
where the message is.

Original issue reported on code.google.com by [email protected] on 23 Feb 2008 at 6:43

Document Maven plugin

The maven plugin needs to be accompanied by documentation describing its
use.  It would be nice to produce both a Maven site and to integrate basic
usage instructions into the easyb project documentation.

Original issue reported on code.google.com by rfciii on 9 Feb 2008 at 2:40

Make project when running easyb spec with intellij

Right now code being tested by easyb specifications needs to be triggered to be 
compiled by the 
user when running the spec.  Instead running the spec should (optionally?) 
trigger the project to be 
made first.

Original issue reported on code.google.com by rfciii on 6 Apr 2008 at 1:42

Handle when intellij plugin run on a project without easyb

Right now if the intellij easyb plugin is used to run a specification on a 
project which doesn't have 
easyb and its dependencies setup then a class not found exception is thrown.  
This should be 
handled better, preferably by offering to add easyb to the project's dependency 
list.

Original issue reported on code.google.com by rfciii on 6 Apr 2008 at 1:41

Run all behaviors in intellij plugin

It would be nice to be able to run multiple behaviors, an entire package, or 
all the behaviors from a 
project at once with the intellij plugin.

Original issue reported on code.google.com by rfciii on 11 May 2008 at 12:50

Easyb pom

Create a Maven project object model (pom) file for the easyb library.  This
will make it easier for Maven users to use easyb.

Original issue reported on code.google.com by rfciii on 9 Feb 2008 at 2:48

easyb html report file hard coded in maven plugin

What steps will reproduce the problem?
1. Use configuration on website suggested for version 0.8
2. run `mvn easyb:storyReport`
3.

What is the expected output? What do you see instead?

[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Unable to read easyb report

Embedded error: /Users/bweber/IdeaProjects/easyb/target/easyb/report.xml
(No such file or directory)


What version of the product are you using? On what operating system?

0.8 on mac os x

Please provide any additional information below.

Here is the line from my pom file (from doc on website):

<xmlReport>${project.build.directory}/easyb-report.xml</xmlReport>

Here is the modified line that works:

<xmlReport>${project.build.directory}/easyb/report.xml</xmlReport>

The maven plugin should read the value for where to generate the report
from the pom, not be hard coded.  Changing the value is an acceptable work
around for the time being.

Original issue reported on code.google.com by [email protected] on 29 Apr 2008 at 3:19

Missing documentation in 'easyb syntax specification'

The 'easyb syntax specification' is an awesome tool for learning what 
constructs are supported by 
easyb.  It seems that easyb actually supports several constructs (such as fail 
and ensureThrows) that 
aren't documented in the spec.  It would be great to update the spec to reflect 
the full capabilities 
of easyb.

Original issue reported on code.google.com by rfciii on 29 Feb 2008 at 3:10

Invalid argument generates stack trace

What steps will reproduce the problem?
1. Pass an invalid argument to easyb
2.
3.

What is the expected output? What do you see instead?

I expected to see a helpful error message providing a list of valid options.

But instead I received this output:

There was an error running the script
org.apache.commons.cli.UnrecognizedOptionException: Unrecognized option:
--xmlbehavir
    at org.apache.commons.cli.Parser.processOption(Parser.java:379)
    at org.apache.commons.cli.Parser.parse(Parser.java:193)
    at org.apache.commons.cli.Parser.parse(Parser.java:71)
    at
org.disco.easyb.SpecificationRunner.getCommandLineForMain(SpecificationRunner.ja
va:201)
    at org.disco.easyb.SpecificationRunner.main(SpecificationRunner.java:112)

Please use labels and text to provide additional information.


Original issue reported on code.google.com by rfciii on 7 Feb 2008 at 1:42

Test and document customizable story directory and file names

By convention the easyb Maven plugin will look for specs in the 
'src/test/easyb' directory of your 
project.  It also assumes that story tests have the suffix 'Story' while 
behaviors have the suffix 
'Behavior'.  This is customizable but while writing the documentation for 
overriding this behavior I 
discovered that I hadn't written tests for this.  This issue is to write the 
tests to verify this behavior 
and then document how to customize these attributes in the easyb documentation.

Original issue reported on code.google.com by rfciii on 18 Feb 2008 at 3:46

easyb output

Venkat: 
message says "run successfully" must say "ran successfully" (sorry
I am being picky)

Original issue reported on code.google.com by [email protected] on 23 Feb 2008 at 6:44

Sync easyb maven repo with maven central

Maven users are accustomed to being able to access their dependencies via the 
central maven 
repository and its mirrors.  It's a good thing that easyb is available now 
through the easyb.org 
repository, but we should consider additionally syncing easyb to maven central 
so its 'easier' for 
maven users.

See this guide for more info on what's involved:
http://maven.apache.org/guides/mini/guide-central-repository-upload.html

Original issue reported on code.google.com by rfciii on 18 Feb 2008 at 2:57

Override easyb version when running with intellij plugin

What steps will reproduce the problem?
1. Create an intellij project that includes an older version of easyb then 
packaged in the plugin
2. Run a story via the easyb intellij plugin

What is the expected output? What do you see instead?

Story should run fine, instead get this error:

Caused by: java.io.InvalidClassException: org.disco.easyb.BehaviorStep; local 
class incompatible: 
stream classdesc serialVersionUID = -5851588926335364547, local class 
serialVersionUID = 
7803104390655420064

Please use labels and text to provide additional information.


Original issue reported on code.google.com by rfciii on 24 Apr 2008 at 8:31

debugging capability

Is there a possibility to debug variables in a behavior story via
print/println. For me it didn't print anything and changes the number
of behaviour steps to a strange number (like -39)  in the output
console.

[easyb] -39 behavior steps run successfully.

Original issue reported on code.google.com by [email protected] on 23 Feb 2008 at 6:45

permit flexible naming of stories and behaviors

"I am not happy with file name being groovy. It is DSL, so it must
be treated as such.
I like to name, for example, blahStory.groovy as blah.story. Similarly
for Behavior,
I like to call it blah.behavior." 

Feed back from Venkat Subramaniam

Original issue reported on code.google.com by [email protected] on 23 Feb 2008 at 6:42

Negative numbers not working?

Hi,

I was trying to set up a scenario that checks for a negative number
using a shouldBeEqualTo and isEqualTo expression. The behaviour I want
to test is adding to integers in a class named Calculator. This is my
scenario:

scenario "add two negative numbers in calculator", {
       given "a new calculator",{
               calculator = new Calculator()
       }

       when "two valid values are inserted", {
               result = calculator.add(-1, -2)
       }

       then "the result should be a negative number", {
               ensure(result) {
                       isEqualTo(-3)
               }
       }
}

Using the expression isEqualTo(-3) works perfectly fine. However,
using result.shouldBeEqualTo -3 instead results in this exception:

 [easyb]     groovy.lang.MissingPropertyException: No such property:
shouldBeEqualTo for class: java.lang.Integer

Using this expression

ensure(result) {
        isEqualTo-3
     }

results in this exception

[easyb]     java.lang.NullPointerException: Cannot invoke method
getAt() on null object

Didn't I used the expression correctly? I hope you can shed some light
on this.

Thanks,

Ben

Original issue reported on code.google.com by [email protected] on 23 Feb 2008 at 6:47

Exceptions are wrapped by Groovy

Rather than catching RuntimeException, I tried catching a more
specific exception:

          when "null is pushed", {
            pushnull = {
              stack.push(null)
            }
          }

          then "an exception should be thrown", {
            ensureThrows(IllegalArgumentException.class){
              pushnull()
            }
          }

The stack push method looks like this:

        public void push(E item) {
                if (item == null) {
                        throw new IllegalArgumentException("Bad!");
                }
        }

The result:

Checking Class: class java.lang.IllegalArgumentException
Exception Class:
org.codehaus.groovy.runtime.InvokerInvocationException:
java.lang.IllegalArgumentException: Bad!
Is assignable? false
11 behavior steps run , but status is failure! Total failures: 1
        Failure -> then an exception should be thrown in
EmptyStackStory.groovy
        VerificationException: the exception caught wasn't of type class
java.lang.IllegalArgumentException:

The InvokerInvocationException wraps and thereby obscures the original
exception.

******
See the forums for the message related to this issue

Original issue reported on code.google.com by [email protected] on 20 Feb 2008 at 8:19

add Google code upload logic to Gant

apparently there is an ant tag that facilitates uploading binaries to
google code projects. Let's add it to easyb and any gant-type plug-in
projects. 

Original issue reported on code.google.com by [email protected] on 23 Feb 2008 at 9:52

Run stories via JUnit

Create a junit runner that executes stories-- that way users can leverage
existing infrastructure for running stories and reporting on them. 

Original issue reported on code.google.com by [email protected] on 23 Feb 2008 at 9:50

groovy 1.5.4 compatible

looks to be an issue with jointcompiler under groovy > 1.5.1

move to 1.5.4 and make changes to allow easyb to compile.

suggestion made my Chris Mayes on easyb-users said this:

-  Ant.groovyc(destdir:destination, jointCompilationOptions:"-j
-Jsource=1.5 -Jtarget=1.5"){
+  Ant.groovyc(destdir:destination){
+       javac(source:"1.5", target:"1.5", debug:"on")

Original issue reported on code.google.com by [email protected] on 23 Mar 2008 at 4:40

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.